跟黄正大神学浏览器漏洞挖掘笔记

黄正,百度安全实验室 X-Team 掌门人。2016年,他以一己之力挖掘无数浏览器漏洞,创下了微软MSRC2016年度黑客贡献榜排行中国区第一(世界第八)的壮举。

本文是阅读雷锋网硬创公开课时的思考和感想,记录下来让自己印象更深一些。

0x00 浏览器基础知识

浏览器是用来访问网页的,再说深一点,浏览器可以发送HTTP请求报文,接收HTTP响应报文,最后将报文解析成我们看到的样子。本想再写一下HTTP发送和响应的过程,但是这次主要是浏览器漏洞的挖掘,所以就不再继续深入,以后另开一篇文章吧。

接收到html后,浏览器进行了如下4个步骤:

1.将HTML页面解析成DOM树;

2.为DOM中的元素计算样式信息;

3.解释JS脚本,对页面进行操作;

4.利用绘图库将网页绘制出来。

DOM(Document Object Model)是文档对象模型,个人理解就是将一个文档转换成对象形式以供不同的编程语言访问。就像是一个接口,定义了操作该文档的不同方法。

如上图所示,左侧是一个文档,而右侧将文档转换成了对象集合(节点二叉树)的形式,每一个标签都是一个对象(节点)。通过这种方式可以将对文档的操作转换为对节点的操作,更方便快捷。这时就体会到数据结构的重要性了,对文档的操作完全可以转化为对二叉树节点的操作,而且DOM给JS封装的接口十分方便,就免去了从文档直接操作数据的麻烦。

下表是一些常见的DOM操作方法

方法 描述
getElementById() 返回带有指定 ID 的元素。
getElementsByTagName() 返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)。
getElementsByClassName() 返回包含带有指定类名的所有元素的节点列表。
appendChild() 把新的子节点添加到指定节点。
removeChild() 删除子节点。
replaceChild() 替换子节点。
insertBefore() 在指定的子节点前面插入新的子节点。
createAttribute() 创建属性节点。
createElement() 创建元素节点。
createTextNode() 创建文本节点。
getAttribute() 返回指定的属性值。
setAttribute() 把指定属性设置或修改为指定的值。

看到上表中有完备的crud功能,确实非常人性化。调用这些DOM方法,对DOM的修改,最终会显示在绘图上,网页就会产生变化。

需要补充的是,这一系列操作都是由浏览器本地进行的,而不是服务器进行的。是访问网址后,网址返回了JS代码调用,然后浏览器请求JS代码,并在该网页执行该代码的结果。

DOM标准的不断升级,我们可以操控的更多。

0x01 浏览器漏洞类型

1.信息泄露漏洞

a.老的IE浏览器可以用 JS 检测是否存在某文件,检测本地是否存在某些文件就能知道本地是否装有杀毒软件,装有何种杀毒软件,以便进行下一步的操作

b.有些信息泄漏漏洞会泄漏内存的信息,攻击者利用泄露的信息来绕过操作系统的保护机制,如ASLR、DEP等等

ASLR

ASLR(Address Space Layout Randomization)是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的。

DEP

DEP(Data Execution Protect)数据执行保护需要操作系统和硬件的共同支持才可以生效。DEP的原理就是在系统的内存页中设置了一个标志位,标志这个内存页是否可执行。

与防病毒程序不同,硬件和软件实施DEP技术的目的并不是防止在计算机上安装有害程序。 而是监控已安装程序是否正在安全地使用系统内存。硬件DEP将监视已指定为“不可执行”的内存区域,若某程序试图通过该内存执行代码,Windows将关闭该程序。

c.UXSS,通用跨域漏洞。这种跨越域隔离策略的漏洞,可以在后台打开其它域的网页,将用户在其它网站的数据偷走。

2.内存破坏漏洞

内存破坏漏洞又可以细分为释放后重用漏洞(Use After Free,UAF)(漏洞列表),越界读写漏洞类型混淆漏洞。越界读写漏洞比较神,他也能用来泄漏内存信息,所以越界读写漏洞非常好利用。

3.国产浏览器的一些神漏洞,特权域 XSS+特权域 API
比如搜狗浏览器浏览网页可下载任意文件到任意位置,重启之后,电脑可能被完全控制。百度浏览器可静默安装插件,且存在目录穿越漏洞。解压缩到启动目录,重启之后,电脑被完全控制。

浏览器漏洞挖掘方法

第一种方法,人工

像Chrome 和 Webkit 这些是开源的,通过理解代码逻辑来找 Bug。比如 marius.mlynski 读 Chrome 代码发现数十个 UXSS 漏洞,每个漏洞Google奖励 7500 美元。

国产浏览器的漏洞大多是人工测试出来的,用自己的经验,逆向分析,手工测试。
第二种方法,自动化 Fuzz

实在是写不下去了,这个更偏向于操作系统方面的安全,现在我还没有涉及到,等以后有能力再接着往下写吧,有兴趣的可以读原文。

点赞

发表评论

[2;3Rer>