11.3 因设置或设计上的缺陷引发的安全漏洞
因设置或设计上的缺陷引发的安全漏洞是指,错误设置 Web 服务器,或是由设计上的一些问题引起的安全漏洞。
强制浏览:
强制浏览(Forced Browsing)安全漏洞是指,从安置在 Web 服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件。
图:强制浏览导致安全漏洞的案例
不正确的错误消息处理:
不正确的错误消息处理(Error Handling Vulnerability)的安全漏洞是
指,Web 应用的错误信息内包含对攻击者有用的信息。
图:不正确的错误消息处理导致安全漏洞的案例
开放重定向:
开放重定向(Open Redirect)是一种对指定的任意 URL作重定向跳转的功能。而于此功能相关联的安全漏洞是指,假如指定的重定向 URL到某个具有恶意的 Web 网站,那么用户就会被诱导至那个 Web 网站。
案例:
我们以下面的 URL做重定向为例,讲解开放重定向攻击案例。该功能就是向 URL指定参数后,使本来的 URL发生重定向跳转。1
http://example.com/?redirect=http://www.tricorder.jp
攻击者把重定向指定的参数改写成已设好陷阱的 Web 网站对应的 连接,如下所示。1
http://example.com/?redirect=http://hackr.jp
用户看到 URL后原以为访问 example.com,不料实际上被诱导至hackr.jp 这个指定的重定向目标。可信度高的 Web 网站如果开放重定向功能,则很有可能被攻击者选中并用来作为钓鱼攻击的跳板。
11.4 因会话管理疏忽引发的安全漏洞
会话管理是用来管理用户状态的必备功能,但是如果在会话管理上有所疏忽,就会导致用户的认证状态被窃取等后果。
会话劫持:
会话劫持(Session Hijack)是指攻击者通过某种手段拿到了用户的会话 ID,并非法使用此会话 ID 伪装成用户,达到攻击的目的。
图:会话劫持
具备认证功能的 Web 应用,使用会话 ID 的会话管理机制,作为管理认证状态的主流方式。会话 ID 中记录客户端的 Cookie 等信息,服务器端将会话 ID 与认证状态进行一对一匹配管理。
案例:
图:会话劫持攻击案例
攻击者在得知该 Web 网站存在可跨站攻击(XSS)的安全漏洞后,就设置好用 JavaScript 脚本调用 document.cookie 以窃取Cookie 信息的陷阱,一旦用户踏入陷阱(访问了该脚本),攻击者就能获取含有会话 ID 的 Cookie。
攻击者拿到用户的会话 ID 后,往自己的浏览器的 Cookie 中设置该会话 ID,即可伪装成会话 ID 遭窃的用户,访问 Web 网站了。
会话固定攻击:
对以窃取目标会话 ID 为主动攻击手段的会话劫持而言,会话固定攻击(Session Fixation)攻击会强制用户使用攻击者指定的会话 ID,属于被动攻击。
会话固定攻击案例:
我们以认证功能为例讲解会话固定攻击。这个 Web 网站的认证功能,会在认证前发布一个会话 ID,若认证成功,就会在服务器内改变认证状态。
图:会话固定攻击案例
跨站点请求伪造:
跨站点请求伪造(Cross-Site Request Forgeries,CSRF)攻击是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击。
跨站点请求伪造有可能会造成以下等影响:
- 利用已通过认证的用户权限更新设定信息等
- 利用已通过认证的用户权限购买商品
- 利用已通过认证的用户权限在留言板上发表言论
跨站点请求伪造的攻击案例:
下面以留言板功能为例,讲解跨站点请求伪造,该功能只允许已认证并登录的用户在留言板上发表内容。
图:跨站点请求伪造的攻击案例
11.5 其他安全漏洞
密码破解:
密码破解攻击(Password Cracking)即算出密码,突破认证。攻击不仅限于 Web 应用,还包括其他的系统(如 FTP 或 SSH 等),本节将会讲解对具备认证功能的 Web 应用进行的密码破解。
密码破解有以下两种手段:
- 通过网络的密码试错
- 对已加密密码的破解(指攻击者入侵系统,已获得加密或散列处理的密码数据的情况)
除去突破认证的攻击手段,还有 SQL注入攻击逃避认证,跨站脚本攻击窃取密码信息等方法。
通过网络进行密码试错
对 Web 应用提供的认证功能,通过网络尝试候选密码进行的一种攻击。主要有以下两种方式:
- 穷举法:指对所有密钥集合构成的密钥空间(Keyspace)进行穷举。即,用所有可行的候选密码对目标的密码系统试错,用以突破验证的一种攻击。
- 字典攻击:字典攻击是指利用事先收集好的候选密码(经过各种组合方式后存入字典),枚举字典中的密码,尝试通过认证的一种攻击手法。
图:穷举法和字典攻击
对已加密密码的破解
Web 应用在保存密码时,一般不会直接以明文的方式保存,通过散列函数做散列处理或加 salt 的手段对要保存的密码本身加密。那即使攻击者使用某些手段窃取密码数据,如果想要真正使用这些密码,则必须先通过解码等手段,把加密处理的密码还原成明文形式。
图:破解已加密的密码
从加密过的数据中导出明文通常有以下几种方法:
- 通过穷举法·字典攻击进行类推
- 彩虹表
- 拿到密钥
- 加密算法的漏洞
点击劫持:
点击劫持(Clickjacking)是指利用透明的按钮或链接做成陷阱,覆盖在 Web 页面之上。然后诱使用户在不知情的情况下,点击那个链接访问内容的一种攻击手段。这种行为又称为界面伪装(UIRedressing)。
图:点击劫持
DoS 攻击:
DoS 攻击(Denial of Service attack)是一种让运行中的服务呈停止状态的攻击。有时也叫做服务停止攻击或拒绝服务攻击。DoS 攻击的对象不仅限于 Web 网站,还包括网络设备及服务器等。
主要有以下两种 DoS 攻击方式:
- 集中利用访问请求造成资源过载,资源用尽的同时,实际上服务也就呈停止状态。
- 通过攻击安全漏洞使服务停止。
其中,集中利用访问请求的 DoS 攻击,单纯来讲就是发送大量的合法请求。服务器很难分辨何为正常请求,何为攻击请求,因此很难防止 DoS 攻击。
图:DoS 攻击
多台计算机发起的 DoS 攻击称为 DDoS 攻击(Distributed Denial ofService attack)。DDoS 攻击通常利用那些感染病毒的计算机作为攻击者的攻击跳板。
后门程序:
后门程序(Backdoor)是指开发设置的隐藏入口,可不按正常步骤使用受限功能。利用后门程序就能够使用原本受限制的功能。
通常的后门程序分为以下 3 种类型:
- 开发阶段作为 Debug 调用的后门程序
- 开发者为了自身利益植入的后门程序
- 攻击者通过某种方法设置的后门程序
可通过监视进程和通信的状态发现被植入的后门程序。但设定在 Web应用中的后门程序,由于和正常使用时区别不大,通常很难发现。
完~