$1 Web应用程序体系结构及其安全威胁
1.1 Web应用体系结构
传统C/S架构的计算——>B/S架构:
- “痩”客户端: Browser (Web客户端)
- “厚”服务器: 服务器端有这些类型的服务器:Web服务器、Web应用程序、数据库…
- 通讯机制: HTTP/HTTPS
一、HTML静态页面和动态页面
静态页面由HTML静态标记语言创建,内容在用户请求页面时不会变化;
而动态页面可以通过服务器端脚本语言和技术根据用户的请求、数据和条件生成不同内容,具有更强的交互能力和灵活性。
-
HTML: 是一种静态标记语言,用于创建静态页面
-
Tag标签: 表格等结构标签, 超链接, 内嵌链接, 图片, …
-
交互能力: 表单, 脚本——>支持动态生成页面
虽然 HTML 本身是静态的,但它可以通过一些元素(如表单和脚本)来支持简单的交互
- 例如,通过表单元素,用户可以输入数据并提交到服务器,而脚本可以用来在页面上动态生成内容
-
-
动态页面
-
CGI
动态页面的创建可以使用诸如 CGI(通用网关接口)这样的技术,它允许服务器执行脚本,并根据请求生成动态内容
-
脚本语言: 如ASP, JavaScript, PHP, …
-
交互能力进一步扩展
- ActiveX控件、Java Applet…
-
二、Web客户端——浏览器
浏览器技术的发展:
三、Web服务器与动态编程技术
-
Web服务器软件
-
HTTP守护进程
Web 服务器软件通常作为一个守护进程(daemon)在服务器上运行
-
支持各种Web动态编程语言
-
主流:MS+LAMP
MS: Microsoft,代表了一系列 Microsoft 的服务器软件
LAMP:代表了一种常见的开源 Web 服务器环境,包括:
- Linux(操作系统):作为服务器端的操作系统。
- Apache(Web 服务器软件):提供 HTTP 服务,是最常用的开源 Web 服务器软件之一。
- MySQL(数据库管理系统):用于存储和管理数据的关系型数据库系统。
- PHP/Perl/Python(动态编程语言):用于处理服务器端的动态页面生成和请求处理
-
四、Web应用程序
Web Application
- Web服务器端的业务逻辑
现代Web应用的核心 - Web应用程序的分层模型:最普遍应用:3层模型(3-tiers)
- 表示层:接受Web客户端输入并显示结果
- 业务逻辑层:完成Web应用业务处理,核心,实现技术-CGI、ASP、PHP等动态脚本
- 数据层:数据库/本地文件;数据库连接:ODBC/OLEDB/JDBC
五、传输协议: HTTP/HTTPS
1. HTTP
-
HTTP 1.0 (IETF RFC 1945), HTTP 1.1 (RFC 2616), 缺省TCP 80端口
-
是无状态、基于ASCII码明文传递的简单协议
无状态协议:每个请求都是相互独立的
明文传输数据,基于 ASCII 码:数据可以被轻松阅读和理解
-
请求/响应模式: 请求资源标识符(URI)
客户端通过请求资源标识符(URI)发送请求,服务器响应相应的资源
-
无状态性、明文性、简单性、流行性—>易受攻击
2. HTTPS
-
基于SSL/TLS: 提供对传输层认证(AH)和加密(ESP)
在 HTTP 的基础上加入了 SSL(安全套接层)或 TLS(传输层安全)协议
-
HTTPS: HTTP over TLS, 缺省TCP 443端口
3. 状态管理
Cookies 保持连接状态
- 使用cookie机制进行会话状态管理,使得HTTP协议运行起来像是一个有状态的协议
Cookies允许服务器在客户端存储有关用户的信息,并在后续请求中使用这些信息,以实现用户身份验证、会话管理等功能
4. 身份认证
基础认证等多种认证协议
5.1.2 Web应用安全威胁
$2 Web应用安全攻防技术概述
2.1 Web应用信息收集
一、针对目标Web应用服务信息收集
收集:
- 服务器域名、IP地址、内网虚拟IP地址
- Web服务器端口、其他开放服务
- Web站点类型与版本
- Web应用程序类型与版本
- Web服务器/Web应用程序中存在的安全漏洞
回顾
:网络信息收集技术
- Whois/DNS查询、Web搜索、端口扫描:发现目标Web站点
- 使用类型探查技术去识别Web站点OS、服务器类型版本
- 使用漏洞扫描技术去枚举Web站点与服务器软件已知漏洞
- 使用服务查点技术去获取Web服务器软件的“旗标”
二、针对Web应用程序的探测和漏洞发现
1. 手工审查Web应用程序结构与源代码
(1)静态和动态生成的页面
- 查看源代码
- 隐藏信息:表单隐藏字段、注释隐藏信息(用户标识、口令)
- 动态页面:脚本编程语言,页面命名规则,以及参数名称、类型与含义(
- 例如发现类似:usermenu.asp页面,那么可能存在adminmenu.asp,
- 例如发现一个页面链接为book.asp? book_id=100,那么可以猜想web应用后台数据库中可能有一个book数据表,且主键名可能就是book_id)
(2)目录结构
- 探查页面存储结构,管理员目录、备份目录、数据目录等
- 查看是否由于不安全配置可以进行目录文件枚举,从而可以从中搜索包含关键信息或可以被攻击的文件
(3)辅助性文件
- 如CSS级联样式表、XML样式表、Javascript文件、include文件
- 手动审查这些辅助性文件,可能获得数据库字段结构、目录路径、输入参数以及数据库连接字符串
(4)输入表单
- 提交数据方法:GET还是POST
- 表单处理行为:调用哪些脚本?使用何种脚本语言
- 输入字段名称、最大长度限制、隐藏字段、自动完成标记、口令字段,
- 了解上述信息后,攻击:自动口令探测、注入攻击,绕过表单处理。
(5)查询参数字符串
- 复用以假冒其他用户、获取受限的数据、运行任意的系统命令,或者执行其他应用程序开发者所不希望看到的动作
- 提供了Web应用程序内部工作的信息: 数据表字段名称,会话标识符、用户名或口令字段
2. 自动下载与镜像Web站点页面
逐个手工地审查分析web站点页面源代码往往很繁琐且低效,一些可自动下载与镜像Web站点页面的工具能提升这一工作的自动化程度
- 在线手工审查 -> 自动下载/镜像,离线审查
- Linux系统自动下载与镜像工具
- Lynx/wget/…
- Libcurl
- Windows系统
- Teleport/Offline Explorer
- 迅雷/Flashget
3. 使用Google Hacking技术审查与探测Web应用程序
- Google已经帮我们下载并分析了几乎所有公开页面
- Googlebot:是Google的网页爬虫程序
- Google Search Engine
- Google Hacking
- Google的高级搜索与挖掘技巧
- 在大范围内搜索存有漏洞的Web应用程序
- 符合特定条件的敏感信息内容
- 在被Google检索的目标站点中搜索特定信息
三、Web应用程序安全评估与漏洞探测
1. 深入的安全评估与漏洞探测
- 透彻理解目标应用程序的体系结构和设计思路
- 找出可能存在的薄弱环节
- 总结出针对这个Web应用程序的详细攻击步骤
2. Web应用程序的主要攻击点
- 身份验证
- 会话管理
- 数据库操作
- 输入数据合法/合理性检查
3. Web应用安全辅助分析工具
(1)浏览器插件(分析、调试、安全检查)
- 可以实时地查看和修改传递给Web服务器的数据
- TamperData(Firefox):
- 查看和修改 HTTP/HTTPS 的头部和 POST 参数;
- 可以用来跟踪 HTTP 请求和响应并记时;
- 可以对 WEB 站点进行某些安全测试.
- Live HTTP Header (google):监听谷歌浏览器当前会话中所有HTTP Header状态的Chrome插件
(2)免费工具集
- Web服务器与客户端之间的代理方式运行
- Fiddler,WebScarab,Burp Suite,Paros Proxy和SPIKE Proxy
- 结合爬虫的评估与漏洞探测工具(源码爬取、评估分析、漏洞探测)
- Whisker与Libwhisker /Nikto
- N-Stealth(3000多种HTTP安全问题)
- 黑客渗透测试工具:NBSI、HDSI、Domain
(3)商业Web应用安全评估系统和漏洞扫描器
- IBM-Appscan、HP WebInspect、WVS、极光、Jsky
2.2 攻击Web服务器软件
一、流行的Web服务器软件
- MS:Win200x Server/IIS/MS SQL/ASP/ASP.NET
- LAMP: Linux/Apache/MySQL/PHP
二、针对Web服务器网络服务的远程渗透攻击
- IIS/MS SQL:红色代码、尼姆达和SQL Slammer
- 已知漏洞渗透代码来源:
- Metasploit: 开源的安全漏洞检测工具;
- Exploit-db: 漏洞利用库,所有内置的漏洞利用程序集;
- Packetstorm: IP网络仿真的功能,它可以模拟对 IP数据包的损伤及对损伤的修正;
- SecurityFoucs :公布安全漏洞以及其解法的网站
三、Web服务器平台中的安全漏洞
1. 数据驱动的远程代码执行安全漏洞
- 缓冲区溢出、格式化字符串、不安全指针等;
- IIS 6.0以前版本, HTR数据块编码堆溢出漏洞攻击
- Microsoft IIS ASP远程代码执行漏洞(MS08-006)
2. 服务器功能扩展模块漏洞
- IIS软件中被红色代码所利用的IIS检索服务缓冲区溢出漏洞
- WebDAV模块Translate:f漏洞
- Apache扩展组件模块漏洞,如Tomcat、OpenSSL、mod_rewrite、mod_mylo、mod_gzip、mod_isapi、mod_jk (远程代码执行漏洞、渗透攻击)
3. 样本文件
- 为了让更多人接受和依赖他们的技术,web服务器软件厂商经常在他们的软件包中包含样本文件和示例代码来演示自己平台的一些新奇用法。
- 由于这些文件知识用来作为演示,往往写得仓促,但在默认的服务器软件安装实例中却一直保留着
- 若Web应用服务器包含的样板脚本和代码示例存在漏洞,可实施攻击:
- 案例: IIS4中的showcode.asp存在目录遍历漏洞
- 只要攻击者发出类似:http://SERVER/msadc/Samples/SELECTOR/showcode.asp?source=/…/…/…/…/boot.ini的URL请求,就允许攻击者任意查看web服务器上的任何文件内容
4. 源代码泄露
- 源代码泄露让渗透测试人员、攻击者能够查看到没有防护措施Web服务器上的应用程序源码
- 案例: IIS上的“+.htr”漏洞
- 通过http://SERVER/global.asa+.htr,查看global.asa的内容。
- global.asa是ASP的一个全局应用文件.主要是定义Session对象和Application对象,以及相应的事件.
5. 资源解析攻击
- 资源解析: 把同一资源的不同表示形式解析为它的标准化名称的过程.
- C:\text.txt = …\text.txt = \computer\C$\text.txt
- 案例: IIS中的“ASP::$DATA”漏洞
- http://SERVER/scripts/file.asp::$DATA: 查看源码
2.3 攻击Web应用程序
一、Web应用程序的不安全性
- Web应用程序编码质量和测试均有限:
- 造就了:安全最薄弱环节在于web应用程序
- Web应用的复杂性和灵活性进一步恶化了其安全性
二、Web应用程序安全威胁类型
- 针对认证机制的攻击:暴力枚举等;
- 针对授权机制的攻击:会话身份窃取;
- 客户端攻击:内容欺骗、跨站脚本攻击;
- 远程命令执行攻击:缓冲区溢出、注入攻击;
- (系统)信息暴露:目录枚举、信息泄露、路径遍历等;
- 逻辑攻击 :功能滥用、拒绝服务攻击等
2.4 攻击Web数据内容
一、安全敏感信息泄露
1. 敏感信息类型
- 企业信息:通信录、技术资料等;
- 教师学生个人隐私信息:身份证号码、联系方式、信任卡号;
- 国家秘密文档。
2. 通常的信息泄漏途径和方式
-
未关闭Web服务器的目录遍历,不经意泄漏
-
Upload、Incoming等目录中转文件时泄漏
- 网站通常允许用户上传文件,例如图片、文档、视频等。如果上传的文件存放在名为 Upload、Incoming 或类似的目录中
- 这些目录没有得到充分的安全保护或检查机制,那么攻击者可能会通过上传特制的恶意文件
-
缺乏安全意识,在公开的文档中包含个人隐私信息
-
在公开的个人简历、职称晋升材料、课题申请书等包含科研敏感信息
二、网站内容篡改
- 黑客入侵网站后,对网站页面内容进行篡改。
三、不良信息内容上传
- 网站被攻陷后可能成为不良信息的存储和中转仓库
- 提供用户交互的论坛/博客等网站可能涉及用户上传不良信息