Web 的攻击技术
1. 针对 Web 的攻击技术
简单的 HTTP 协议本身并不存在安全性问题。应用 HTTP 协议的服务器和客户端,以及运行在服务器上的 Web 应用等资源才是攻击目标。
1.1 HTTP 不具备必要的安全功能
与最初的设计相比,现今几乎所有的 Web 网站都会使用会话(session)管理、加密处理等安全性方面的功能,而 HTTP 协议并不具备这些功能。
整体上看,HTTP 就是一个通用的单纯协议机制,因此它具备较多优势,但是在安全性方面呈劣势。
开发者需自行设计并开发认证及会话管理功能来满足 Web 应用的安全,但是自行设计会出现各种形形色色的实现,安全等级并不完备。
1.2 在客户端即可篡改请求
在 Web 应用中,从浏览器那接收到的 HTTP 请求的全部内容,都可以在客户端自由的变更、篡改。所以 Web 应用可能会接收到与预期数据不相同的内容。
在 HTTP 请求报文内加载攻击代码,就能发起对 Web 应用的攻击。
1.3 针对 Web 应用的攻击模式
对 Web 应用的攻击模式有以下两种。
主动攻击
被动攻击
-
以服务器为目标的主动攻击
主动攻击(active attack)是指攻击者通过直接访问 Web 应用,把攻击代码传入的攻击模式。由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到那些资源。
主动攻击模式里具有代表性的攻击是 SQL 注入攻击和 OS 命令注入攻击。
主动攻击.png -
以服务器为目标的被动攻击
被动攻击(passive attack)是指利用圈套策略执行攻击代码的攻击模式。在被动攻击过程中,攻击者不直接对目标 Web 应用访问发起攻击。
被动攻击通常的攻击模式入如下:
攻击者诱使用户触发已设置好的陷阱,而陷阱会启动发送已嵌入攻击代码的 HTTP 请求。
当用户不知不觉中招后,用户的浏览器或邮件客户端就会触发这个请求。
中招后的用户更浏览器会把含有攻击代码的 HTTP 请求发送给作为攻击目标的 Web 应用,运行攻击代码。
执行完攻击代码,存在安全漏洞的 Web 应用会称为攻击者的跳板,可能导致用户所持有的 Cookie 等个人信息被窃取。
被动攻击模式中具有代表性的攻击是跨站脚本攻击和跨站点请求伪造。
利用被动攻击,可发起对原本从互联网上无法直接访问的企业内网等网络的攻击。
2. 因输出值转义不完全引发的安全漏洞
实施 Web 应用的安全对策可大致分为以下两部分:
客户端的验证
-
Web 应用端(服务器端)的验证
输入值验证
输出值转义
多数情况下采用 JavaScript 在客户端验证数据。保留客户端验证数据只是为了尽早的辨识输入错误,起到提供 UI 的作用。
输入值验证通常是指检查是否是符合系统业务逻辑的数值或检查字符编码等预防对策。
针对输出做值转义处理是一项至关重要的安全策略。当输出值转义不完全时,会因触发攻击者传入的攻击代码,而给输出对象带来损害。
2.1 跨站脚本攻击
跨站脚本攻击(Cross-Site Scripting,XSS)是指通过存在安全漏洞的 Web 网站注册用户的浏览器内运行非法的 HTML 标签或者 JavaScript 进行的一种攻击。
跨站脚本攻击有可能造成以下影响。
利用虚假输入表单骗取用户个人信息
利用脚本窃取用户的 Cookie 值,被害者在不知情的情况下,帮助攻击者发送恶意请求
显示伪造的文章或图片
XSS 是攻击者利用预先设置的陷阱触发的被动攻击。
跨站脚本攻击属于被动攻击模式,因此攻击者会事先布置 好用于攻击的陷阱。
2.2 SQL 注入攻击
会执行非法 SQL 的 SQL 注入攻击。
SQL 注入(SQL Injection) 是指针对 Web 应用使用的数据库,通过运行非法的 SQL 而产生的攻击。可能会导致个人信息及机密信息的泄漏。
SQL 注入攻击可能会造成以下等影响。
非法查看或篡改数据库内的数据
规避认证
执行和数据库服务器业务关联的程序
SQL 注入是攻击者将 SQL 语句改变成开发者意想不到的形式以达到破坏结构的攻击。
2.3 OS 命令注入攻击
OS 命令注入攻击(OS Command Injection)是指通过 Web 应用,执行非法的操作系统命令达到攻击的目的。只要在能调用 Shell 函数的地方就有存在被攻击的风险。
通过 OS 注入攻击可执行 OS 上安装着的各种程序。
2.4 HTTP 首部注入攻击
HTTP 首部注入攻击(HTTP Header Injection)是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击。属于被动攻击模式。
向首部主体内添加内容的攻击称为 HTTP 响应截断攻击(HTTP Response Splitting Attack)。
HTTP 首部注入攻击可能会造成以下一些影响。
设置任何 Cookie 信息
重定向至任意 URL
显示任意的主体(HTTP 响应截断攻击)
滥用 HTTP/1.1 中汇集多响应返回功能,会导致缓存服务器对任意内容进行缓存操作。这种攻击称为缓存污染。
2.5 邮件首部注入攻击
邮件首部注入(Mail Header Injection)是指 Web 应用中的邮件发送功能,攻击者通过向邮件首部 TO 或 Subject 内任意添加非法内容发起的攻击。利用存在安全漏洞的 Web 网站,可对任意邮件地址发送广告邮件或病毒邮件。
2.6 目录遍历攻击
目录遍历(Directory Traversal)攻击是指对本无意公开的文件目录,通过非法截断其目录路径后,达成访问的目的的一种攻击。这种攻击有时也称为路径遍历(Path Traversal)攻击。
2.7 远程文件包含漏洞
远程文件包含漏洞(Remote File Inclusion)是指当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的 URL 充当依赖文件,让脚本读取之后,就可运行任意脚本的一种攻击。
3. 因设置或设计上的缺陷引发的安全漏洞
因设置或设计上的缺陷引发的安全漏洞是指,错误设置 Web 服务器,或是由设计上的一些问题引起的安全漏洞。
3.1 强制浏览
强制浏览(Forced Browsing)安全漏洞是指,从安置在 Web 服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件。
强制浏览可能会造成以下一些影响。
泄漏顾客的个人信息等重要情报
泄漏原本需要具有访问权限的用户才可以查阅的内容
泄漏未连到外界的文件
3.2 不正确的错误消息处理
不正确的错误消息处理(Error Handling Vulnerability)的安全漏洞是指,Web 应用的错误信息包含对攻击者有用的信息。与 Web 应用有关的主要错误信息如下所示。
Web 应用抛出的错误信息
数据库等系统抛出的错误信息
系统抛出的错误主要集中在以下几个方面。
PHP 或 ASP 等脚本错误
数据库或中间件的错误
Web 服务器的错误
各系统应对详细的错误消息进行抑制设定,或使用自定义用户消息,以避免某些错误消息给攻击者以启发。
3.3 开放重定向
开放重定向(Open Redirect)是一种对指定的任意 URL 作重定向跳转的功能。
可信度高的 Web 网站如果开放重定向功能,则很有可能被攻击者选中并用来作为钓鱼攻击的跳板。
4. 因会话管理疏忽引发的安全漏洞
会话管理就是用来管理用户状态的必备功能,但是如果在会话管理上有所疏忽,就会导致用户的认证状态被窃取等后果。
4.1 会话劫持
会话劫持(Session Hijack)是指攻击者通过某种手段拿到了用户的会话 ID,并非法使用此会话 ID 伪装成用户,达到攻击的目的。
具备认证功能的 Web 应用,使用会话 ID 的会话管理机制,作为认证管理状态的主流方式。会话 ID 中记录客户端的 Cookie 等消息,服务器会将会话 ID 与认证状态进行一对一匹配管理。
攻击者可能会获得会话 ID 的几种途径如下所示。
通过非正规的生成方法推测会话 ID
通过窃听或 XSS 攻击盗取会话 ID
通过会话固定攻击(Session Fixation)强行获取会话 ID
4.2 会话固定攻击
对以窃取目标会话 ID 为主动攻击收到的会话劫持而言,会话固定攻击(Session Fixation)攻击会强制用户使用攻击者指定的会话 ID,属于被动攻击。
4.3 跨站点请求伪造
跨站点请求伪造(Cross-Site Request Forgeries,CSRF)攻击是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击。
跨站点请求伪造有可能会造成以下等影响。
- 利用已通过认证的用户权限更新设定信息等
- 利用已通过认证的用户权限购买商品
- 利用已通过认证的用户权限在留言板上发表评论
5. 其他安全漏洞
5.1 密码破解
密码破解(Password Cracking)即算出密码,突破认证。
密码破解有以下两种手段。
通过网络的密码试错
对已加密密码的破解(指攻击者入侵系统,已获得加密或散列处理的密码数据的情况)
除去突破认证的攻击手段,还有 SQL 注入攻击逃避认证,跨站脚本攻击窃取密码信息等方法。
通过网络进行密码试错
对 Web 应用提供的认证功能,通过网络尝试候选密码进行的一种攻击。主要有以下两种方式。
-
穷举法
穷举法(Brute-force Attack,又称暴力破解法)是指对所有密钥集合构成的密钥空间(Keyspace)进行穷举。用所有可行的候选密码对目标的密码系统试错,用以图片验证的一种攻击。
-
字典攻击
字典攻击是指利用事先收集好的候选密码(经过各种组合方式后存入字典),枚举字典中的密码,尝试通过认证的一种攻击手段。
对已加密密码的破解
从加密过的数据中导出明文通常有以下几种方法
-
通过穷举法·字典攻击进行类推
针对密码使用散列函数进行加密处理的情况,采用和穷举法或字典攻击相同的手法,尝试调用相同的散列函数加密候选密码,然后把计算出的散列值与目标散列值进行匹配,类推出密码。
通过穷举法·字典攻击进行类推.png
-
彩虹表
彩虹表(Rainbow Table)是由明文密码及与之对应的散列值构成的一张数据库表,是一种通过事先制作庞大的彩虹表,可在穷举法·字典攻击等实际破解过程中缩短消耗时间的技巧。从彩虹表内搜索散列值就可以推导出对应的明文密码。
彩虹表.png -
拿到密钥
使用共享密钥加密方式对密码数据进行加密处理的情况下,如果通过某种手段拿到加密使用的密钥,也就可以对密码数据解密了。
-
加密算法的漏洞
考虑到加密算法本身可能存在的漏洞,利用该漏洞尝试解密也是一种可行的方法。
5.2 点击劫持
点击劫持(Clickjacking)是指利用透明的按钮或链接做成陷阱,覆盖在 Web 页面之上。然后诱使用户在不知情的情况下,点击那个链接访问内容的一种攻击手段。这种行为又称界面伪装 (UI Redressing)。
5.3 Dos 攻击
DoS 攻击(Denial of Service attack)是一种让运行中的服务呈停止状态的攻击。有时也叫做服务停止攻击或拒绝服务攻击。DoS 攻击的对象不仅限于 Web 网站,还包括网络设备及服务器等。
主要有以下两种方式实现 DoS 攻击。
集中利用访问请求造成资源过载,资源用尽的同时,实际上服务也就呈现停止状态
通过攻击安全漏洞是服务停止
多台计算机发起的 DoS 攻击称为 DDoS 攻击(Distuibuted Denial of Service attack)。DDoS 攻击通常利用那些感染病毒的计算机作为攻击者的攻击跳板。
5.4 后门程序
后门程序(Backdoor)是指开发设置的隐藏入口,可不按正常步骤使用受限功能,利用后门程序就能够使用原本受限制的功能。
通常的后门程序可分为以下 3 种类型。
开发者为了自身利益植入的后门程序
攻击者通过某种方法设置的后门程序
完结。