capec - 111: JSON劫持(又名JavaScript劫持) |
描述
攻击者的目标系统,使用JavaScript对象表示法(JSON)作为客户端和服务器之间的传输机制(共同使用AJAX在Web 2.0系统)可能窃取机密信息从服务器传送回客户机在JSON对象的漏洞利用浏览器的同源策略,并不禁止从一个网站包含JavaScript和执行上下文中的另一个网站。
扩展描述
攻击者得到受害者访问他们的恶意页面,该页面包含一个脚本标记的源点到脆弱的系统从服务器的URL请求响应包含一个JSON对象可能是机密信息。恶意页面还包含恶意代码捕获服务器返回的JSON对象在它可以发生其他任何处理之前,通常通过重写JavaScript函数用于创建新对象。这个钩子允许恶意代码获得每个对象的创建和传播可能敏感的捕捉到JSON对象的内容到攻击者的服务器。
没有什么在浏览器的安全模型,以防止攻击者的恶意JavaScript代码(来自攻击者的域)建立一个环境(如上所述)拦截一个JSON对象响应(来自脆弱的目标系统的域),阅读其内容和传输攻击者的控制。同源策略保护域对象模型(document object model, DOM),但不是JSON。
攻击的可能性
典型的严重性
执行流程
探索
了解如何从目标系统请求JSON响应:攻击者首先探讨了目标系统理解url需要为了提供检索JSON对象包含攻击者感兴趣的信息。
技术 |
攻击者与目标系统创建一个帐户和观察从服务器请求和相应的JSON响应。如何正确理解引起来自服务器的响应对攻击者的能力是至关重要的工艺开发。 |
实验
工艺一个恶意网站:
他们计划的攻击者工艺品恶意网站吸引受害人是谁使用脆弱的目标系统。恶意网站做两件事:
-
1。包含一个钩,拦截传入的JSON对象,读取其内容,并将内容转发到服务器被攻击者控制(通过一个新的XMLHttpRequest)。
-
2。使用脚本标记的URL请求一个JSON对象的来源从脆弱的目标系统。一旦JSON对象传递给受害者的浏览器,恶意代码(如步骤1所述)拦截,JSON对象,攻击者窃取其内容,转发。
这种攻击步骤利用浏览器的同源策略这一事实并不保护JavaScript源自一个域设置一个环境拦截和访问JSON对象从一个完全不同的领域。
利用
发射JSON劫持:攻击者诱使受害者恶意网站或利用其他手段让他们在受害者的浏览器中执行恶意代码。一旦发生这种情况,恶意代码使得受害人请求目标系统与敏感信息检索JSON对象。请求包括受害者的会话cookie,如果受害者是登录。
技术 |
攻击者拥有无数的标准技术让受害者访问恶意网站或通过其他方式得到攻击者的恶意代码执行在受害者的浏览器中。 |
先决条件
JSON是作为客户端和服务器之间的传输机制 |
目标服务器无法区分真正的请求伪造请求 |
从服务器返回的JSON对象可以被攻击者的访问恶意代码通过一个脚本标记 |
技能要求
(级别:中等) 一旦开发和理解这种攻击模式,创建一个利用不是很复杂。攻击者需要的知识需要访问的url请求的JSON对象在目标系统上。 |
所需资源
后果
这个表指定不同的个体与攻击模式相关的后果。范围确定违反了安全属性,而影响了负面的技术影响,如果敌人成功的攻击。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能有高可能性模式将被用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
缓解措施
确保服务器端代码可以区分合法的请求和伪造请求。解决方案是类似于防范跨站请求伪造(CSRF),这是使用一个很难猜随机nonce(即独特的受害者的会话与服务器),攻击者没有办法知道(至少在没有其他缺点)。从客户端到服务器的每个请求应包含此nonce和服务器应该拒绝所有请求,不包含现时标志。 |
在客户端,系统的设计可能很难获得JSON对象通过脚本标记内容。自JSON对象从来都不是本地分配给一个变量,它不能被容易被攻击者修改之前使用的脚本标记。例如,如果在(1)添加到服务器返回的JavaScript,试图用一个脚本访问它标记会导致无限循环。另一方面,合法的客户端代码可以去除while(1)声明之后,JavaScript可以被评估。周围类似的结果可以通过返回的JavaScript注释标记,或使用其他类似的技术(如包装JavaScript和HTML标记)。 |
使系统中的url用于检索JSON对象为每个用户会话不可预知的和独特的。 |
确保尽可能,没有敏感数据从服务器传递到客户端通过JSON对象。JavaScript从未打算扮演这一角色,因此,同源策略并不足够解决这个场景。 |
例子,实例
Gmail服务被发现受到一个JSON劫持攻击,使攻击者得到受害者的通讯录的内容。攻击者可以通过电子邮件发送给受害者的Gmail帐户(确保受害者是登录Gmail当他们收到)与攻击者的恶意链接的网站。如果受害者点击这个链接时,一个请求(包含受害者的经过身份验证的会话cookie)将被发送到Gmail服务器获取受害者的地址簿。通常使用这个功能的Gmail服务动态数据的获取,这样用户可以提供联系人列表可供选择的收件人的电子邮件。 当接触的JSON对象回来了,这是加载到JavaScript空间通过对攻击者的恶意脚本标签页。JSON对象以来从来没有分配到一个本地变量(这将阻止脚本不同的域访问它由于浏览器的同源策略),另一个机制是需要访问数据,它包含。机制是覆盖内部数组构造函数与攻击者自己的构造函数以获得JSON对象的内容。这些内容可以被转移到网站受攻击者的控制。 |
内容的历史
提交 |
提交日期 |
提交者 |
组织 |
2014-06-23
(版本2.6) |
CAPEC内容团队 |
manbetx客户端首页 |
|
修改 |
修改日期 |
修饰符 |
组织 |
2015-12-07
(版本2.8) |
CAPEC内容团队 |
manbetx客户端首页 |
更新Related_Attack_Patterns |
2017-08-04
(版本2.11) |
CAPEC内容团队 |
manbetx客户端首页 |
更新Attacker_Skills_or_Knowledge_Required Resources_Required |
2019-09-30
(版本3.2) |
CAPEC内容团队 |
manbetx客户端首页 |
更新@Abstraction |
2020-07-30
(版本3.3) |
CAPEC内容团队 |
manbetx客户端首页 |
更新描述、Example_Instances Execution_Flow Related_Attack_Patterns |
2022-02-22
(版本3.7) |
CAPEC内容团队 |
manbetx客户端首页 |
更新描述,Extended_Description |
2022-09-29
(版本3.8) |
CAPEC内容团队 |
manbetx客户端首页 |
更新Execution_Flow |
|