【网安入门】学习笔记(十一)

客户端脚本安全——浏览器安全

  随着互联网的发展,人们发现浏览器才是互联网最大的入口,浏览器安全越来越被重视。

1 同源策略

  同源策略(Same Origin Policy)是一种约定,是浏览器最核心也是最基本的安全功能,WEB是构建在同源策略上的基础之上的。
  所谓同源是指,域名,协议,端口相同。当一个浏览器的两个tab页中分别打开来 百度和谷歌的页面当浏览器的百度tab页执行一个脚本的时候会检查这个脚本是属于哪个页面的,即检查是否同源,只有和百度同源的脚本才会被执行。
  深入理解同源策略是客户端WEB安全的学习和研究的基础,很多时候浏览器的实现的同源策略是隐性、透明的,很多因为同源策略导致的问题并没有明显的出错提示。
  浏览器的同源策略,限制了来自不同源的“document”或脚本,对当前“document”读取或设置某些属性。同源策略是浏览器的行为,是为了保护本地数据不被JavaScript代码获取回来的数据污染,因此拦截的是客户端发出的请求回来的数据接收,即请求发送了,服务器响应了,但是无法被浏览器接收。
  对于JavaScript来说,以下情况被认为是同源与不同源的:

URL Outcome Reason
http://store.company.com/dir2/other.html Success
http://store.company.com/dir/inner/another.html Success
https://store.company.com/secure.html Failure Different protocol
http://store.company.com:81/dir/etc.html Failure Different port
http://news.company.com/dir/other.html Failure Different host

  从表中可以看出,影响“源”
的因素有:host(域名或IP地址,如果是IP地址则看做一个根域名)、子域名、端口、协议。
  注意,对于当前页面,页面内存放JavaScript文件的域并不重要,重要的是加载JavaScript页面所在的域是什么。例如,a.com通过以下代码:

<script src=http://b.com/b.js></script>

加载了 b.com 上的b.js,但是b.js 是运行在 a.com 页面中的,因此对于当前打来的页面(a.com 页面)来说,b.js 的 Origin 就应该是 a.com 而非 b.com
  在浏览器中,<script> <img> <iframe> <link>等带“src(源)”属性的标签都可以跨域加载资源,而不受同源策略的限制。实际上是由浏览器发起一次GET请求。通过src属性加载的资源,浏览器限制了JavaScript的权限,使其不能读、写返回的内容。
  而对于XMLHttpRequest来说,它可以访问来自同源对象的内容,但受到同源策略的约束,不能跨域访问资源,在AJAX应用的开发中尤其注意。若跨域访问则会导致一些敏感数据泄露。
  由于对跨域请求的需求愈加急迫,W3C( World Wide Web Consortium 万维网联盟)委员会指定了XMLHttpRequest跨域访问标准。它需要通过目标域返回HTTP头来是授权是否允许跨域访问,因为HTTP头对于JavaScript来说一般是无法控制的,基础是信任。
在这里插入图片描述
  对于浏览器,除了DOM、Cookie、XMLHttpRequest会受到同源策略的限制外,浏览器加载的一些如Flash、Java Applet、Silverlight、Google Gears 等第三方插件也有各自的同源策略。
  Flash:主要通过目标网站提供的crossdomain.xml文件判断是否允许当前“源”的Flash跨域访问目标资源。
  当浏览器加载Flash对www.qq.com发起访问请求,Flash会先检车www.qq.com上此策略文件是否存在。若存在,则检查发起请求的域是否在许可范围内。

<!-- www.qq.com/crossdomain.xml -->
<cross-domain-policy>
<allow-access-from domain="*.qq.com"/>
<allow-access-from-domain="*.gtimg.com"/>
</cross-domain-policy>

  此策略文件中,只有来自 *.qq.com 和 .gtimg.com 域的请求是被允许的。
  在Flash9及其之后的版本,还实现了MIME检查以确认crossdomain.xml是否合法和是否在根目录下,查看服务器返回HTTP头的Content-Type是否是text/
、application/xml、application/xhtml+xml。由于攻击者可以通过上传crossdmain.xml文件控制Flash的行为,绕过同源策略。

  【MIME】
   Multipurpose Internet Mail Extensions多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。它是一个互联网标准,扩展了电子邮件标准。

  然而浏览器的同源策略也并非坚IE8 的 CSS跨域漏洞
  www.a.com/test.html:

<body>
{}body{font-family:
aaaaaaaa
bbbbbbbbb
</body>

  www.b.com/test2.html:

<style>
@import url("http://www.a.com/test.html");
</style>

<script>
	setTimeout(function(){
	var t = document.body.currentStyle.fontFamily;
	alert(t);
	},2000};
</script>

  在 www.b.com/test2.html 中通过@import 加载了 http://www.a.com/test.html 为CSS文件,渲染进入当前页面DOM,同时通过document.body.currentStyle.fontFamily 访问此内容。但是在IE 的 CSS Parse的过程中,IE 将 fontFamily 后的内容当做了 value,并读取了内容。
在这里插入图片描述
  这个漏洞导致绕过了同源策略,跨域读取了页面内容。
  浏览器的安全策略是浏览器安全的基础。

2 浏览器沙箱

  在网页中插入一段恶意代码,利用浏览器漏洞执行任意代码的攻击方法,叫“挂马”。是浏览器需要面对的一个主要威胁。
  独立于杀毒软件之外,浏览器厂商根据挂马的特点研究出了一些对抗挂马的技术。比如Windows系统中,浏览器密切结合DEP、ASLR、SafeSEH等操作系统提供的保护技术,对抗内存攻击。

  【DEP】
  Data Execution Prevention数据执行保护,是一套软硬件技术,能够在内存上执行额外检查以帮助防止在系统上运行恶意代码。
  可帮助防止数据页当作代码执行,从而有效分离数据与代码。通常情况下,不执行默认堆和堆栈中的代码。硬件实施 DEP 检测从这些位置运行的代码,并在发现执行情况时引发异常。软件实施 DEP 可帮助阻止恶意代码利用 Windows 中的异常处理机制进行破坏。
  【SafeSEH】
  SafeSEH的基本原理很简单,即在调用异常处理函数之前,对要调用的异常处理函数进行一系列的有效性校验,如果发现异常处理函数不可靠(被覆盖了,被篡改了),立即终止异常处理函数的调用。不过SafeSEH需要编译器和系统双重支持,缺少一个则保护能力基本就丧失了。

  并且发展出了多进程架构,将浏览器的各个功能模块分开,各个浏览器实例分开,当一个进程崩溃时,不影响其他进程。
  Google Chrome 是第一个采取多进程架构的浏览器。主要进程分为:浏览器进程、渲染进程、插件进程、扩展进程如flash、java、pdf 等与浏览器进程严格隔离。
在这里插入图片描述

runtime:运行
exploit:利用;开发
barrier:障碍;屏障
kernel:核心
trust:信任
process:进程
channel:渠道
render:渲染
engine:引擎

渲染引擎由Sandbox 隔离,网页代码要与浏览器内核进程通信、与操作系统通信都需要通过IPC channel,其中会进行检查。
  Sandbox沙箱,现在泛指“资源隔离类模块”,一般是用来让不可信任的代码运行在一定的环境中,限制不可信任的代码访问隔离区之外的资源,若要跨越Sandbox边界产生数据交换,需通过指定的数据通道,如经过封装的API。
  对于浏览器,Sandbox保护本地桌面系统的安全。
  Google Chrome 的Sandbox 结构:
在这里插入图片描述

broker:代理
interception manager:拦截管理程序
policy engine:策略引擎
client:客户端

  IE8 也采用了多进程架构,每一个TAB页即是一个进程:
在这里插入图片描述
  虽然多进程架构的浏览器不会因为一个进程的崩溃导致崩溃整个浏览器进程,但是浏览器加载的一些第三方插件却往往不受Sandbox管辖,容易产生漏洞。

3 恶意网址拦截

  钓鱼网站、诈骗网站属于恶意网址,厂商为了保护用户安全,纷纷推出了拦截恶意网址的功能,目前是基于“黑名单”。
  原理是浏览器周期性的从服务器端获取一份最新的恶意网址黑名单,以此为标准在用户访问时弹出警告页面。
  常见恶意网址分为,挂马网站(恶意脚本JavaScript或Falsh);钓鱼网站(模仿知名网站)。
  为识别这两种网站,需要建立许多基于页面特征的模型,主要是与安全厂商展开合作,由安全厂商或机构提供恶意网址黑名单(模型放在客户端易被攻击,且收集用户历史记录侵犯隐私)。
  有实力的浏览器厂商,掌握了大量的用户数据,其使用的黑名单也是核心竞争力之一。
  Phish Tank 是互联网上免费提供恶意网址黑名单的组织之一。
  Google也公开了其内部使用的 SafeBrowsing API。
  除恶意网址黑名单拦截功能外,主流浏览器都开始支持EV SSl证书。

  【EV SSL】
  Extended Validation SSL Certificate,就是全球领先的数字证书颁发机构和主流的浏览器开发商共同制定的一个新的SSL证书严格身份验证标准。让新一代安全浏览器能识别出 EV SSL 而在地址栏显示为绿色,让普通消费者能确信正在访问的网站就是通过权威第三方严格身份验证的现实世界的真实实体,从而增强消费者信心,促成更多在线交易。
  增强型 SSL 证书(EVSSL)最大的特色便是激活网站浏览器的栏位使其变成绿色,利用鲜明的标示告诉网友:这个网站正受到最严密的信息安全防护。

4 高速发展的浏览器安全

  微软在IE8中推出的XSS Filter功能,用以对抗反射型XSS。当用户访问的URL中包含了XSS攻击的脚本时,IE就会修改其中的关键字符使得攻击无法完成,并对用户弹出提示框。
  Firefox 4 中推出了 Content Security Policy(CSP)。做法是由服务器端返回一个HTTP头,并在其中描述页面应该遵守的安全策略。
  由于XSS攻击在没有第三方插件帮助的情况下,无法控制HTTP头,所以措施可行。并且这种自定义的语法必须由浏览器支持并实现。
  使用CSP的方法,插入一个HTTP返回头:

X-Content-Security-Policy: policy

  其中 policy 描述灵活,

X-Content-Security-Policy: allow 'self' *.mydomain.com

  浏览器将信任来自 mydomain.com 及其子域下的内容。
  又如:

X-Content-Security-Policy: allow 'self' ; img-src *; media-src media1.com; script-src userscript.example.com

  浏览器除了信任自身的来源外,还可以加载任意域的图片、来自 media1.com 的媒体文件,以及 userscripts.example.com 的脚本,其他一律拒绝。
  虽然CSP设计出色,但是规则配置复杂,后期维护成本高,导致未能很好推广。
  随着标准定义之外的“友好”功能带来的越来越好的用户体验,也导致了一些安全隐患。
  例如,畸形URL处理:
IE和Chrome中,www.google.com\abc 被正常解析为 www.google.com/abc,但Firefox 将之认为是非法地址,无法打开。
  还有,Firefox、IE、Chorme 会将 www.google.com?abc 正常解析为 www.google.com/?abc
  Firefox 还认识如下URL

[http://www.cnn.com]
[http://]www.cnn.com
[http://www].cnn.com
......

  但这些“友好”的功能,会被黑客利用来绕过一些安全软件或者安全模块。
  浏览器的扩展和插件也存在着安全问题,插件可能存在漏洞,或插件本身就有恶意行为。扩展和插件的权限还都高于页面JavaScript的权限,进行跨域网络请求。
  恶意插件举例:Trojan.PWS.ChromeInject.A目的是盗取网银密码。它的两个文件:

"%ProgramFiles%\Mozilla Firefox\plugins\npbasic.dll"
"%ProgramFiles%\Mozilla Firefox\chrome\content\browser.js"

  

发布了32 篇原创文章 · 获赞 7 · 访问量 2706

猜你喜欢

转载自blog.csdn.net/qq_36756476/article/details/98450693