整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

「网络安全」常见攻击篇(20)-点击劫持

「网络安全」常见攻击篇(20)-点击劫持

么是点击劫持?

点击劫持 (Clickjacking) 技术又称为界面伪装攻击 (UI redress attack ),是一种视觉上的欺骗手段。通常有两种方式:

  1. 攻击者使用一个透明的iframe,覆盖在一个网页上,然后诱使用户在该页面上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。
  2. 攻击者使用一张图片覆盖在网页,遮挡网页原有位置的含义; 简单的说,就是用户点击了一个按钮,但是触发的操作不是正常期待的事件,而是触发了别的非意愿操作。

点击劫持发生时,用户的操作已经被劫持到攻击者事先设计好的恶意按钮或链接上。攻击者既可以通过点击劫持设计一个独立的恶意网站,执行钓鱼攻击等;也可以与 XSS 和 CSRF 攻击相结合,突破传统的防御措施,提升漏洞的危害程度。

点击劫持原理

攻击者在点击劫持漏洞利用实现过程中使用 iframe 作为目标网页载体。iframe 是 HTML 标准中的一个标签,可以创建包含另外一个页面的内联框架,在点击劫持漏洞利用中主要用来载入目标网页。点击劫持典型的攻击原理如下图所示:

攻击者实施攻击的一般步骤是:

  1. 黑客创建一个网页利用iframe包含目标网站;
  2. 隐藏目标网站,使用户无法察觉到目标网站存在;
  3. 构造网页,诱骗用户点击特定按钮 (示意图中的Add按钮);
  4. 用户在不知情的情况下点击按钮,触发执行恶意网页的命令。

点击劫持技术栈

比较重要的点击劫持漏洞利用技术包括目标网页隐藏、点击操作劫持、拖拽技术。

  • 目标网页隐藏技术

目标网页隐藏技术原理是攻击者在恶意网站上通过 iframe 载入目标网页,然并隐藏目标网页,欺骗用户点击隐藏的恶意链接。目前主要的网页隐藏技术有两种:CSS隐藏技术和双iframe隐藏技术。

  1. CSS 隐藏技术的原理是利用 CSS 技术控制网页内容显示的效果。其中opacity参数表示元素的透明度,取值范围为0~1,默认值为1表示不透明, 取值为0时元素在网页中完全透明显示。当设置目标 iframe 的opacity 属性小于或等于0.1,用户就无法看到含恶意代码的目标网页。
  2. 双iframe隐藏技术使用内联框架和外联框架。内联框架的主要功能是载入目标网页,并将目标网页定位到特定按钮或者链接。外联框架的主要功能是筛选,只显示内联框架中特定的按钮。
  • 点击操作劫持

在成功隐藏目标网页后,攻击者下一个目标是欺骗用户点击特定的按钮。

  1. 最简单实用的方法是使用社会工程学。例如,将攻击按钮外观设计成类似QQ消息的提示按钮,诱使用户点击从而触发攻击行为。
  2. 另外一种思路是使用脚本代码以及其他技术增加用户点击特定按钮的概率。主要方法如JavaScript实现鼠标跟随技术、按键劫持 (Stroke jacking) 技术等。
  • 拖拽(Drag and Drop)技术

主流的浏览器都有drag-and-drop API 接口,供网站开发人员创建交互式网页。但是,这些 API 接口在设计时没有考虑很多的安全性问题,导致通过拖拽就可以实现跨域操作。

  1. 攻击者欺骗用户选择输入框的内容,完成拖拽操作。
  2. 通过浏览器的 API 接口将 iframe 中的内容拖拽到目标网页的 text area 中,攻击者就可以获得用户网页中存在的敏感信息。

点击劫持防御技术

  • 服务器端防御

服务器端防御点击劫持漏洞的思想是结合浏览器的安全机制进行防御,主要的防御方法介绍如下。

1、X-FRAME-OPTIONS 机制

在微软发布新一代的浏览器 Internet Explorer 8.0中首次提出全新的安全机制:

X-FRAME-OPTIONS。该机制有两个选项:DENY 和 SAMEORIGIN。DENY 表示任何网页都不能使用 iframe 载入该网页,SAMEORIGIN 表示符合同源策略的网页可以使用 iframe 载入该网页。

除了 Chrome 和 safari 以外,还支持第三个参数 Allow-From(白名单限制)。如果浏览器使用了这个安全机制,在网站发现可疑行为时,会提示用户正在浏览 网页存在安全隐患,并建议用户在新窗口中打开。这样攻击者就无法通过 iframe 隐藏目标的网页。

2、使用 FrameBusting 代码

点击劫持攻击需要首先将目标网站载入到恶意网站中,使用 iframe 载入网页是最有效的方法。Web 安全研究人员针对 iframe 特性提出 Frame Busting 代码,使用 JavaScript 脚本阻止恶意网站载入网页。如果检测到网页被非法网页载入,就执行自动跳转功能。Frame Busting 代码是一种有效防御网站被攻击者恶意载入的方法,网站开发人员使用 Frame Busting 代码阻止页面被非法载入。需要指出的情况是,如果用户浏览器禁用 JavaScript 脚本,那么 FrameBusting 代码也无法正常运行。所以,该类代码只能提供部分保障功能。

3、使用认证码认证用户

点击劫持漏洞通过伪造网站界面进行攻击,网站开发人员可以通过认证码识别用户,确定是用户发出的点击命令才执行相应操作。识别用户的方法中最有效的方法是认证码认证。例如,在网站上广泛存在的发帖认证码,要求用户输入图形中的字符,输入某些图形的特征等。

  • 客户端防御

由于点击劫持攻击的代码在客户端执行,因此客户端有很多机制可以防御此漏洞。

1、升级浏览器

最新版本的浏览器提供很多防御点击劫持漏洞的安全机制,对于普通的互联网用户,经常更新修复浏览器的安全漏洞,能够最有效的防止恶意攻击。

2、NoScript 扩展

对于 Firefox 的用户,使用 NoScript 扩展能够在一定程度上检测和阻止点击劫持攻击。利用 NoScript 中 ClearClick 组件能够检测和警告潜在的点击劫持攻击,自动检测页面中可能不安全的页面。


感谢您的阅读,喜欢的话就转发并关注小编吧。


上一篇:「网络安全」常见攻击篇(19)——MAC Flood攻击

下一篇:「网络安全」常见攻击篇(21)——路由协议攻击

期小编给大家分享有些实战很有必要的防范小常识,事情虽然比较小,但是往往被大家所忽视的问题,并分享给大家.

今天主要给大家聊聊网络劫持的那些事儿,网络劫持,搞网络安全的童鞋应该不陌生了,但前端的小伙伴就可要当心了哦!

大家常见的可能都是些专业级别的操作,如:运营商劫持,DNS劫持,HTTP劫持等,今天主要还是给大家讲一下前端劫持,点击劫持,很多童鞋对这个专业名词可能比较陌生,但实际中最常见.

我们先看一下概念吧,在百度上对于点击劫持有这么一段话来描述:”点击劫持被称为Clickjacking的安全威胁,原本要在OWASPNYCAppSec2008大会上公布,但包括Adobe在内的厂商请求暂时不要公开这个漏洞,直到他们开发出安全补丁。

发现这个漏洞的是两个安全研究专家,Robert Hansen 与 Jeremiah Grossman,他们已经略透露了一点相关信息以显示该安全威胁的严重性。”

简而言之,点击劫持,只是一种从视觉上欺骗使用者的手段,大致分为两种方式.

方式一: 使用透明的iframe来覆盖网页,让用户操作

方式二: 使用图像来伪装

简单的示例如下:

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Document</title>

<style>

html,body,iframe{

display: block;

position:absolute;

width: 100%;

height: 100%;

margin: 0;

padding:0;

left:0;

right:0;

top:0;

bottom:0;

}

iframe{

opacity:20;

filter:alpha(opacity=20); /* IE */

-moz-opacity:0.2; /* Moz + FF */

opacity: 0.2; /* 支持CSS3的浏览器(FF 1.5也支持)*/

position:absolute;

z-index:2;

}

button{

position: absolute;

left:50%;

top:50%;

z-index: 1;

}

</style>

</head>

<body>

这是一个美女,大家先到先得!

<button>点击查看详情</button>

<iframe src="http://www.baidu.com" frameborder="0"></iframe>

</body>

</html>

原版效果如下图:


以下为特定场景中的iframe框架效果,当前也可以使用其它标签来实现功能,想一想如果我再把图中的透明度设置为0,很多非法操作,是不是就很可能实现呢!?真是想一想都后怕.


总结: 当然以上内容本质上还只是一些大家没有太注意到的UI层覆盖问题,只是实现的手段不一样而己,类似的东西还有以下操作:

Flash点击劫持,操作本机摄像头等

图片覆盖攻击(XSIO)

拖拽劫持,主要是用于数据窃取

触屏劫持(TapJacking)

以上方式给上网用户带来了很多安全隐患,导致个人隐私泄露,各种帐号丢失,甚至还可以导致转帐问题,当然这些问题,也有对应的解决方案

防御方案:

X-FRAME-OPTIONS是目前最可靠的方法。X-FRAME-OPTIONS是微软提出的一个http头,专门用来防御利用iframe嵌套的点击劫持×××。并且在IE8、Firefox3.6、Chrome4以上的版本均能很好的支持。

这个头有三个值:

DENY // 拒绝任何域加载

SAMEORIGIN / / 允许同源域下加载

ALLOW-FROM // 可以定义允许frame加载的页面地址

PHP代码:

header('X-Frame-Options:Deny');

header('X-Frame-Options:SAMEORIGIN);

配置 Apache

配置 Apache 在所有页面上发送 X-Frame-Options 响应头,需要把下面这行添加到 'site' 的配置中:

Header always append X-Frame-Options SAMEORIGIN

配置 nginx

配置 nginx 发送 X-Frame-Options 响应头,把下面这行添加到 'http', 'server' 或者 'location' 的配置中:

add_header X-Frame-Options SAMEORIGIN;

配置 IIS

配置 IIS 发送 X-Frame-Options 响应头,添加下面的配置到 Web.config 文件中:

<system.webServer>

<httpProtocol>

<customHeaders>

<add name="X-Frame-Options" value="SAMEORIGIN" />

</customHeaders>

</httpProtocol>

</system.webServer>


以上为本期与大家分享的点击劫持内容,下期还会给大家分享更多《前端网络安全》干货,请关注我哦!

、HTTP劫持是什么

HTTP劫持(HTTP hijacking)是一种网络攻击技术,攻击者通过各种手段截取用户的HTTP请求或响应,篡改其内容或重定向到恶意服务器,从而实施恶意活动。这种攻击可能导致用户信息泄露、身份盗窃、篡改网页内容或植入恶意代码等安全问题。


二、HTTP劫持原理

在用户的浏览器连上被访问的网站服务器,发送了HTTP请求后,运营商的路由器会首先收到此次HTTP请求,之后运营商路由器的旁路设备标记此TCP连接为HTTP协议,之后可以抢在网站服务器返回数据之前发送HTTP协议的302代码进行下载软件的劫持,浏览器收到302代码后就会跳转到错误的软件下载地址下载软件了,随后网站服务器的真正数据到达后反而会被丢弃。或者,旁路设备在标记此TCP连接为HTTP协议后,直接返回修改后的HTML代码,导致浏览器中被插入了运营商的广告,随后网站服务器的真正数据到达后最终也是被丢弃。

三、HTTP被劫持了怎么办

如果确认遭遇了HTTP劫持,可以向ISP(互联网服务提供商,即向广大用户综合提供互联网接入业务、信息业务、和增值业务的电信运营商Internet Server Provider的英文缩写)客服强烈投诉,来达到免于被劫持的目的。先通过进入IIS7网站监控来进行检测,看看自己的网站是不是真的遇到了劫持,也许只是污染的问题,通过这个先查出来结果再看具体原因。因为劫持技术本身设计中包括类似黑名单的功能,如果收到宽带用户的强烈反对,ISP会将该用户放入"黑名单"过滤掉,于是用户在短期内就不会遇到劫持的情况了。

HTTPS的出现对利用网络劫持的企业来说,无疑是一个巨大的打击。HTTPS的出现,通过对数据的加密,使得第三方难以修改我们的数据内容。就像字条上的文字只有甲方跟丙方能够看懂,作为乙方根本不知道纸条上写的是什么内容,就不从下手对内容进行修改。同时,给字条加上信封,再加上一次性的印戳,使得乙方根本无法看到字条上的内容,因为一旦拆开信封,丙方就知道自己的信息被第三方看到了,从而对纸条内容产生怀疑。SSL证书就像信封,把我们的数据放在里面,只有指定的一方可以解读这个数据,一旦数据被第三方劫持,接受数据的用户就会产生不信任,从而丢弃数据。

四、如何防止网站被劫持

1、使用HTTPS协议:采用HTTPS协议可以通过加密通信和数字证书验证来确保数据传输的安全性和完整性。HTTPS使用TLS/SSL加密协议,可以防止攻击者窃听、篡改和劫持HTTP通信。

2、定期更新和维护软件:保持网站服务器和相关软件的更新是防止被劫持的重要步骤。定期升级操作系统、Web服务器、数据库和其他组件,以修复已知漏洞并增强安全性。

3、强化访问控制:确保使用强密码,并实施多因素身份验证来保护网站后台管理系统。限制登录尝试次数、启用账号锁定功能和登录日志记录等措施可以有效减少暴力破解和密码攻击。

4、防止DNS劫持:选择可靠的DNS服务提供商,并确保使用DNSSEC(Domain Name System Security Extensions)来验证DNS解析的完整性。DNSSEC提供数字签名和验证机制,防止DNS查询被篡改或重定向。

5、使用Web应用防火墙(WAF):WAF可以监测和阻止恶意请求和攻击,提供对常见攻击的防护,如SQL注入、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等。配置WAF规则以过滤和阻止潜在的恶意流量。

6、定期监控网站流量和日志:通过监控网站访问日志和流量模式,可以及时发现异常活动和潜在攻击。检查访问来源、请求类型、异常响应和错误日志等信息,以便快速识别和应对安全事件。

7、实施安全编程实践:在开发和部署网站时,遵循安全编程实践,对用户输入进行有效的验证和过滤,防止常见的安全漏洞,如XSS和SQL注入攻击。使用安全的编程语言和框架,编写健壮的代码,最小化安全漏洞的出现。

8、定期备份网站数据:定期备份网站数据是一种重要的防护措施。在遭受攻击或数据丢失时,可以快速恢复网站运行并减少数据损失。

9、增强网络安全意识:教育网站管理员和用户有关网络安全的最佳实践,如识别和避免钓鱼网站、不点击可疑链接、不下载未经验证的附件等。提高网络安全意识可以帮助减少被劫持的风险。

10、总结:总结起来,防止网站被HTTP劫持需要综合使用多种安全措施,包括使用HTTPS协议、定期更新和维护软件、强化访问控制、防止DNS劫持、使用WAF、监控网站流量和日志、实施安全编程实践、定期备份数据和增强网络安全意识。通过采取这些措施,可以提高网站的安全性,减少被劫持的风险。然而,由于网络安全威胁的不断演变,建议网站管理员保持关注最新的安全漏洞和攻击技术,并及时采取相应的防护措施。