《XSS跨站脚本攻击剖析与防御》—第6章6.2节 Flash安全模型

简介:

本节书摘来自异步社区《XSS跨站脚本攻击剖析与防御》一书中的第6章6.2节 Flash安全模型,作者邱永华,更多章节内容可以访问云栖社区“异步社区”公众号查看。

6.2 Flash安全模型
XSS跨站脚本攻击剖析与防御
Adobe的Flash技术已经变得越来越流行了,现在该软件不仅用于创建动画和广告,而且还用来开发复杂的应用程序。借助于ActionScript,Flash具备了与服务器的交互功能,当然,不可避免地成为漏洞和后门程序的主攻之地,越来越多的黑客开始着力发掘Flash安全漏洞,基于Flash的客户端攻击日渐密集,包括我们熟知的XSS、CSRF等。


e4d01f956b5e62efbdd3b480c9901dd68704c0be

自Flash7.0问世以来,Flash的安全模型(Security Model)就开始运行,主要提供以下几个方面的功能:

利用沙箱控制和阻止外部影片之间的交互和访问;
控制浏览器和Flash影片之间的交互和访问;
控制其他外部资源如音乐、文本文件的访问;
控制对其他服务器的通信等。
下面详细介绍Flash安全模型中几个比较重要的概念。

6.2.1 Flash安全沙箱
Flash Player中的一个主要安全性组件是基于沙箱(Sandbox)的,沙箱对于安全性尤其重要。一般来说,如果没有恰当的信任授权,位于两个不同沙箱内的内容是没有任何交互的,因此Flash Player的安全模型使用沙箱来定义各个Flash应用程序可以访问的数据以及操作的范围。

安全域是Flash中最顶级的沙箱,安全域链接到内容的来源域名,比如在a.com下的SWF文件包含一个链接到a.com的安全域,而在b.com下的SWF文件则有一个链接到b.com的安全域。不同的安全域使得SWF文件在Flash Player中播放时运行在自身的沙箱下,如图6-8所示。


cbf840e4c34d80332193133d574ab02338fc8f5b

如果两个SWF文件分别处于不同的安全域下,则任何一个SWF中的数据都不可以被另一个SWF获取。如图6-8所示,a.com下a1.swf文件只能与同域下的a2.swf文件进行通信;同样的,b.com域下的b1.swf文件只能和b2.swf文件通信,如果尝试获取其他域中SWF文件的数据将会产生安全错误。

如果想要让两个处于不同安全域内的SWF文件进行通信,可以通过信任授权来实现。通过信任授权后,某个安全域内的文件即可获取另一个域内的文件数据。

在ActionScript语言中,SWF文件的信任授权是通过Security.allowDomain()方法来设置的。

在下面的例子中,一个子SWF文件调用allowDomain()函数来允许父SWF文件的访问:

http://home.example.com/parent.swf:

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT, init);
var url:String = "http://away.example.com/child.swf";
loader.load(new URLRequest(url));
function init(event:Event):void {
  // (子文件执行了allowDomain)
  trace(loader.content); <em>// [object DocumentClass]</em>
}
http://away.example.com/child.swf

Security.allowDomain("home.example.com");
如果将通配符“*”传递给Security.allowDomain方法,它将允许从所有域进行访问:

Security.allowDomain("*");

由于这种方式会为所有域中的SWF文件授予访问、执行调用的SWF文件脚本的权限。也就是说,可以通过ActionScript来访问文件中的数据,这是很危险的一件事,所以请谨慎使用通配符“*”。

另外,由于非SWF格式的文件不能调用allowDomain代码,所以这类文件的信任机制在Flash中有不一样的处理方法——应用跨域策略(Cross Domain Policy)文件。

6.2.2 Cross Domain Policy
大家都知道,JavaScript的同源策略是Web应用安全的核心部分,其作用是防止某个文档或脚本从多个不同源进行装载,而Flash的跨域策略恰恰继承自JavaScript,因此它们非常相似。理论上来说,由于Flash的安全策略实现在Flash应用程序与网站的边界之间,所以更容易被绕过。

默认环境下,运行在Web浏览器下的Flash不允许访问其他域的数据,如下:

http://playsec.com/movie.swf ===> 访问:
http://playsec.com/dir/movie1.swf
http://playsec.com /dir2/movie2.swf
https://playsec.com /movie3.swf
http://playsec.com:8080/movie4.swf
http://www.playsec.com/movie5.swf
可见,Flash的访问策略无疑和JavaScript的同源政策如出一辙。然而为了更好的用户体验及全面的功能需求,经常需要跨域获取数据,而唯一可以让Flash执行跨域操作的方式是跨域策略文件。

跨域策略文件是一个放在网站根域名下的名为crossdomain.xml的XML文件,图6-9所示为位于http://v.youku.com下的策略文件。

和allowDomain类似,crossdomain.xml文件定义了一组可以被Flash Player加载的安全网站域名,并限制Flash是否可以跨域读写数据以及允许从什么地方跨域读写数据。比如,位于www.playsec.com域下的SWF文件要访问www.target.com的文件时,SWF首先会检查www.target.com服务器目录下是否有crossdomain.xml文件,如果没有,则访问不成功;若crossdomain.xml文件存在,且设置了允许www.playsec.com域的访问,那么通信正常。所以要使Flash可以跨域访问和传输数据,其关键在于crossdomain.xml文件。


11306e14d28565f5314edf2adfa468f4bfc1c3df

http://www.playsec.com/crossdomain.xml的跨域策略文件的示例代码如下:
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*.target.com" />
<allow-access-from domain="www.test.org" />
<allow-access-from domain="123.202.0.1" />
</cross-domain-policy>

以上示例表示,www.playsec.com允许来自“*.target.com”、“www.test.org”和“123.202.0.1”的跨域请求。

虽然crossdomain.xml文件的格式非常简单,但有一点要注意,该文件必须严格遵守XML语法。文件的根节点是cross-domain-policy,其下包含一个或多个allow-access-from节点。该节点的domain的属性值为允许访问的域名,域名可以是确切的 IP 地址,也可以是一个确切的域。

此外,可以使用通配符来设置允许访问来自任何域的文档,具体代码如下:

<?xml version="1.0"?>
<cross-domain-policy>
  <allow-access-from domain="*"/>
</cross-domain-policy>

使用通配符“*”允许所有域的访问等同于:用户可能接触到的所有处于该域下的数据都有可能被任意SWF文件获取,有可能会导致非常严重的后果。

除了allow-access-from节点,根节点下还包含另外3个子节点:site-control、allow-access-from -identity、allow-http-request-headers-from。

各自的作用分别如下:

site-control:通过检查该节点的属性值,确认是否可以允许加载其他策略文件
allow-access-from-identity:配置跨域访问策略为允许有特定证书的来源跨域访问本域上的资源
allow-http-request-headers-from:授权第三方域的Flash向本域发送用户定义的HTTP头
Flash可以加载其他的跨域策略文件,不过在此之前会先检查主目录的crossdomain.xml文件来判断是否接受自定义策略文件。默认情况下,Flash不加载除主策略文件之外的其他策略文件,但是设置了permitted-cross-domain-policies的by-content-type相关属性后,黑客就能通过上传文件来定义自己策略文件。

如果读者想获得更多详细的跨域策略文件格式信息,可以参考Adobe官方发布的说明书Adobe Cross Domain Policy File Specification,如图6-10所示。


2482de037c15b8579eda1d680513ee591dc030db

下载地址如下:

http://learn.adobe.com/wiki/download/attachments/64389123/CrossDomain_PolicyFile_Specification.pdf?version=1
6.2.3 设置管理器
在本地硬盘运行的SWF文件也有自己的安全域,可以通过Flash player 的设备管理器来设置。设置管理器允许用户为客户端计算机上执行的Flash应用程序指定各种安全性、隐私和资源使用设置。

例如,用户可以控制应用程序对网络摄像机等选定设备的访问权等。而且这些设置是持久的,并由用户自由控制,其中的设置适用于包含SWF或FLV内容的所有Web 站点。

图6-11和图6-12所示分别为设置管理器不同的功能操作界面。


9c38dce93836833dee371bbe73abf1e1f8bb7db9

通过Flash Player设置管理器,可以管理全局保密性设置、存储设置、安全设置和自动通知设置。

更多有关设备管理器的详细内容可以参考下面的网址:

http://www.macromedia.com/support/documentation/cn/flashplayer/help/settings_manager.html
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
27天前
|
JavaScript 安全 前端开发
js开发:请解释什么是XSS攻击和CSRF攻击,并说明如何防范这些攻击。
XSS和CSRF是两种常见的Web安全威胁。XSS攻击通过注入恶意脚本盗取用户信息或控制账户,防范措施包括输入验证、内容编码、HTTPOnly Cookie和CSP。CSRF攻击则诱使用户执行未经授权操作,防范手段有CSRF Tokens、双重验证、Referer检查和SameSite Cookie属性。开发者应采取这些防御措施并定期进行安全审计以增强应用安全性。
19 0
|
4天前
|
安全 JavaScript Go
跨站脚本攻击(XSS)防护在Django中的应用
【4月更文挑战第15天】本文介绍了Django如何防范XSS攻击。Django模板引擎自动转义HTML以防止恶意脚本,提供`mark_safe`函数和CSRF防护。此外,建议开发者验证清理用户输入、使用内容安全策略、更新库以及遵循安全编码实践来增强防护。通过这些措施,开发者能构建更安全的Web应用。
|
1月前
|
安全 JavaScript 前端开发
Low 级别反射型 XSS 演示(附链接)
Low 级别反射型 XSS 演示(附链接)
17 0
|
1月前
|
存储 JavaScript 前端开发
DOM 型 XSS 演示(附链接)
DOM 型 XSS 演示(附链接)
63 0
|
1月前
|
存储 前端开发 JavaScript
存储型 XSS 攻击演示(附链接)
存储型 XSS 攻击演示(附链接)
64 0
|
1月前
|
存储 前端开发 JavaScript
反射型 XSS 攻击演示(附链接)
反射型 XSS 攻击演示(附链接)
101 0
|
3月前
|
存储 JSON 前端开发
【面试题】XSS攻击是什么?
【面试题】XSS攻击是什么?
|
3月前
|
存储 开发框架 安全
如何处理预防XSS漏洞攻击问题
防止XSS攻击需要从多个方面入手,包括输入验证和过滤、输出编码、设置正确的HTTP头部、使用最新的安全框架和库、定期进行安全审计和漏洞扫描以及培训和意识提升等。只有综合运用这些措施,才能有效地防止XSS攻击,保护网站和用户的安全。
|
6月前
|
存储 安全 JavaScript
渗透攻击实例-xss跨站脚本攻击
渗透攻击实例-xss跨站脚本攻击
|
2月前
|
存储 安全 JavaScript
HW常见攻击方式 --XSS跨站脚本攻击
HW常见攻击方式 --XSS跨站脚本攻击
26 0