【图解HTTP】——Web的攻击技术

互联网上的攻击大都将Web站点作为目标
1 HTTP协议本身不存在安全性问题,应用HTTP协议的服务器和客户端,以及运行在服务器上的Web应用等资源才是攻击目标
HTTP不具备必要的安全功能,仅是一个通用的单纯协议机制,开发者需要自行设计并开发认证及会话管理功能来满足Web应用的安全
容易被攻击者滥用的安全漏洞的Bug:

  • 在客户端即可篡改请求
    Web应用可能会接收到与预期数据不相同的内容
    在HTTP请求报文内加载攻击代码,就可以发起对Web应用的攻击
    通过URL查询字段或表单、HTTP首部、Cookie等途径把攻击代码传入,若这时Web应用存在安全漏洞,那内部信息就会遭到窃取,或被攻击者拿到管理权限
对Web应用的攻击模式有以下两种
  • 主动攻击
  • 被动攻击
(以服务器为目标的主动攻击)主动攻击是指攻击者通过直接访问Web应用,把攻击代码传入的攻击模式。主动攻击模式里具有代表性的攻击是SQL注入攻击和OS命令注入
(以服务器为目标的被动攻击)被动攻击是指利用圈套执行攻击代码的攻击模式。在被动攻击过程过程中,攻击者不直接对目标Web应用访问发起攻击
被动攻击通常的攻击模式:
步骤1:攻击者诱导用户触发已设置好的陷阱,而陷阱会启动发送已嵌入攻击代码的HTTP请求
步骤2:当用户不知不觉中招之后,用户的浏览器或邮件客户端就会触发这个陷阱
步骤3:中招后的用户浏览器会把含有攻击代码的HTTP请求发送给作为攻击目标的Web应用,运行攻击代码
步骤4:执行完攻击代码,存在安全漏洞的Web应用会成为攻击者的跳板,可能导致用户所持的Cookie等个人信息被窃取,登录状态中的用户权限遭恶意滥用等后果
被动攻击模式中具有代表性的攻击是跨站脚本攻击和跨站点请求伪造
利用用户的身份攻击企业内部网络(窃取信息或夺取权限)
2 因输出值转义不完全引发的安全漏洞
  • 客户端的验证(客户端允许篡改数据或关闭JavaScript,不适合作为安全的防范对策,保留客户端验证只是为了尽早地辨识输入错误,起到提高UI体验的作用)
  • Web应用端(服务器端的验证)
    输入值验证(有可能被误认为是具有攻击性意义的代码。输入值验证通常是指检查是否是符合系统业务逻辑的数值或检查字符编码等预防对策)
    输出值转义(从数据库或文件系统、HTML、邮件等输出Web应用处理的数据之际,针对输出做值转义处理是一项至关重要的安全策略。当输出值转义不完全时,会因触发攻击者传入的攻击代码,而给输出对象带来损害)
跨站脚本攻击
跨站脚本攻击(XSS)是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。动态创建的HTML部分有可能隐藏着安全漏洞
跨站脚本攻击可能造成的影响:
  • 利用虚假输入表单骗取用户个人信息
  • 利用脚本窃取用户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求
  • 显示伪造的文章或图片
跨站脚本攻击案例:
  • 在动态生成HTML处发生
  • XSS是攻击者利用预先设置的陷阱触发的被动攻击
    表面上没有变化但脚本已运行(表单填写完毕后就直接把ID及密码发送到攻击者的网站)
  • 对用户Cookie的窃取攻击
SQL注入攻击
会执行非法SQL的SQL注入攻击
SQL注入是指针对Web应用使用的数据库,通过运行非法的SQL而产生的攻击。该安全隐患有可能引发极大的威胁,有时会直接导致个人信息及机密信息的泄漏
SQL注入产生的影响:
  • 非法查看或篡改数据库内的数据
  • 规避认证
  • 执行和数据库服务器业务关联的程序等
SQL是用来操作关系型数据库管理系统的数据库语言,可进行操作数据或定义数据等
使用数据库的Web应用,通过某种方法将SQL语句传给RDBMS,再把RDBMS返回的结果灵活地使用在Web应用中
SQL语句之后的–全视为注释
SQL注入是攻击者将SQL语句改变成开发者意想不到的形式以达到破坏结构的攻击
OS命令注入攻击
OS命令注入攻击是指通过Web应用,执行非法的操作系统命令达到攻击的目的。只要在能调用Shell函数的地方就有存在被攻击的风险
可以从Web应用中通过Shell来调用操作系统命令。倘若调用Shell时存在疏漏,就可以执行插入的非法OS命令
OS命令注入攻击可以向Shell发送命令,让Windows或Linux操作系统的命令行启动程序。也就是说,通过OS注入攻击可执行OS上安装着的各种程序
HTTP首部注入攻击
HTTP首部注入攻击指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击。属于被动攻击模式
向首部主体内添加内容的攻击称为HTTP响应截断攻击
HTTP首部注入可能通过在某些响应首部字段需要处理输出值的地方,插入换行发动攻击
HTTP首部注入攻击有可能造成的影响:
  • 设置任何Cookie信息
  • 重定向至任意URL
  • 显示任意的主体(HTTP响应截断攻击)
邮件首部注入攻击
指Web应用中的邮件发送功能,攻击者通过向邮件首部To或Subject内任意添加非法内容发起的攻击
利用存在安全漏洞的Web网站,可对任意邮件地址发送广告邮件或病毒邮件
目录遍历攻击
指对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击。这种攻击有时也称为路径遍历攻击
通过Web应用对文件处理操作时,在由外部指定文件名的处理存在疏漏的情况下,用户可使用…/等相对路径定位到/etc/passed等绝对路径上,因此服务器上任意的文件或文件目录皆有可能被访问到。这样一来,就有可能非法浏览、篡改或删除Web服务器上的文件
固然存在输出值转义的问题,但更应该关闭指定对任意文件名的访问权限
【【图解HTTP】——Web的攻击技术】远程文件包含漏洞
远程文件包含漏洞是指当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的URL充当依赖文件,让脚本读取之后,就可运行任意脚本的一种攻击
这主要是PHP存在的安全漏洞,对PHP的include或require来说,这是一种可通过设定,指定外部服务器的URL作为文件名的功能。
假设Web服务器的include可以引入外部服务器的URL,那就会读入攻击者在外部服务器上事先准备的URL。结果,通过system函数就能在Web服务器上执行查询字段的OS命令
3 因设置或设计上的缺陷引发的安全漏洞是指,错误设置Web服务器,或是由设计上的一些问题引起的安全漏洞
强制浏览
指从安置在Web服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件
  • 泄露顾客的个人信息等重要情报
  • 泄露原本需要具有访问权限的用户才可查阅的信息内容
  • 泄露未外连到外界的文件
对那些原本不愿公开的文件,为了保证安全会隐藏其URL。可一旦知道了那些URL,也就意味着可浏览URL对应的文件。直接显示容易推测的文件名或文件目录索引时,通过某些方法可能会使URL产生泄露
不正确的错误消息处理
指Web应用的错误信息内包含对攻击者有用的信息。
与Web应用有关的主要错误信息如下所示:
  • Web应用抛出的错误信息
  • 数据库等系统抛出的错误信息
Web应用不必在用户的浏览画面上展现详细的错误信息。对攻击者来说,详细的错误信息有可能给他们下一次攻击以提示
系统抛出的错误主要集中在以下几个方面:
  • PHP或ASP等脚本错误
  • 数据库或中间件的错误
  • Web服务器的错误
各系统应对详细的错误信息进行抑制设定,或使用自定义错误消息,以避免某些错误信息给攻击者以启发
开放重定向
是一种对指定的任意URL作重定向跳转的功能。而与此功能相关联的安全漏洞是指。假如指定的重定向URL到某个恶意的Web网站,那么用户就会被诱导至那个Web网站
4 因会话管理疏忽引发的安全漏洞
会话劫持
会话管理是用来管理用户状态的必备功能,但是如果在会话管理上有所疏忽,就会导致用户的认证状态被窃取等后果
会话劫持是指攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户,达到攻击的目的
具备认证功能的Web应用,使用会话ID的会话管理机制,作为管理认证状态的主流方式。会话ID中记录客户端的Cookie等信息,服务端将会话ID与认证状态进行一对一匹配管理
会话固定攻击
对以窃取目标会话ID为主动攻击手段的会话劫持而言,会话固定攻击会强制用户使用攻击者指定的会话ID,属于被动攻击
攻击者设置好强制用户使用该会话ID的陷阱,并等待用户拿着这个会话ID前去认证。一旦用户触发陷阱并完成认证,会话ID在服务器上的状态就会被记录下来
Session Adoption
指PHP或ASP.NET能够接收处理未知会话ID的功能
恶意使用该功能便可跳过会话固定攻击的准备阶段,从Web网站获得发行的会话ID的步骤。即,攻击者可私自创建会话ID构成陷阱,中间件却会误以为该会话ID是未知会话ID而接受
跨站点请求伪造
跨站点请求伪造(CSRF)攻击是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击
跨站点请求伪造有可能会造成以下等影响
  • 利用已通过认证的用户权限更新设定信息等
  • 利用已通过认证的用户权限购买商品
  • 利用已通过认证的用户权限在留言板上发表言论
5 其他安全漏洞
密码破解
  • 通过网络的密码试错(穷举法、字典攻击)
  • 对已加密密码的破解(指攻击者入侵系统,已获得加密或散列处理的密码数据的情况)
    Web应用在保存密码时,一般不会直接以明文的方式保存,通过散列函数做散列处理或加salt的手段对要保存的密码本身加密。那即使攻击者使用某些手段窃取密码数据,如果想要真正使用这些密码,则必须先通过解码等手段,把加密处理的密码还原成明文形式(通过穷举法、字典攻击进行类推;彩虹表;拿到密钥;加密算法的漏洞)
彩虹表是由明文密码及与之对应的散列值构成的一张数据库表
除去突破认证的攻击手段,还有SQL注入攻击逃避认证,跨站脚本攻击窃取密码信息等方法
点击劫持
指利用透明的按钮或链接做成陷阱,覆盖在Web页面之上。然后诱使用户在不知情的情况下,点击那个链接访问内容的一种攻击手段。这种行为又称为界面伪装
已设置陷阱的Web页面,表面上内容并无不妥,但早已埋入想让用户点击的链接。当用户点击到透明的按钮时,实际上是点击了已指定透明属性元素的iframe页面
DoS攻击
一种让运行中的服务呈停止状态的攻击。有时也叫做服务停止攻击或拒绝服务攻击。DoS攻击的对象不仅限于Web网站,还包括网站设备及服务器等
主要有以下两种Dos攻击方式
  • 集中利用访问请求(发送大量的请求)造成资源过载,资源用尽的同时,实际上服务也就呈停止状态
  • 通过攻击安全漏洞使服务停止(瞄准会导致服务停止的安全漏洞展开攻击)
多台计算机发起的DoS攻击称为DDoS攻击。DDoS攻击通常利用那些感染病毒的计算机作为攻击者的攻击跳板
后门程序
指开发设置的隐藏入口,可不按正常步骤使用受限功能。利用后门程序就能够使用原本受限制的功能
通常的后门程序分为以下3种类型:
  • 开发阶段作为Debug调用的后门程序
  • 开发者为了自身利益植入的后门程序
  • 攻击者通过某种方法设置的后门程序
可通过监视进程和通信的状态发现被植入的后门程序。但设定在Web应用中的后门程序,由于和正常使用时区别不大,通常很难发现

    推荐阅读