Safari的解析和渲染引擎WebKit是开源的项目,并提供了很多脚本方便调试。在OSX下分析一个漏洞还是头一回,用到的技巧大都取自WebKit官方的一篇JS引擎漏洞分析。
准备环境
首先当然是要下载Webkit的源码,以前写过如何在Ubuntu环境里下载编译WebKit,当时只考虑了最新版本,所以直接从官网下载代码压缩包。
但如果是分析漏洞,一般要根据testcase的描述找到对应版本的WebKit,然后用svn和git下载指定版本的代码。
官方的建议的命令是
svn co -r 200796 http://svn.webkit.org/repository/webkit/trunk webkitDir
由于我查看的testcase信息来自于WebKit的Github镜像,所以用git下载的源码。
不过国内访问git的速度实在不怎么样,最后就用VPS从美国先git clone好整个源码树,然后压缩传回本地
根据testcases找到对应的branch编号以后,再切换过去
git reset --hard 6711d17
原理分析
为了尽快分析清楚漏洞的原理,当然要直接调用WebKit去解析testcase,先编译debug的程序:
./Tools/Scripts/set-webkit-configuration --asan ./Tools/Scripts/build-webkit --debug
然后就可以使用DumpRenderTree直接调用编译好的WebKit来解析引发问题的testcase了
VM=WebKitBuild/Debug/ && DYLD_FRAMEWORK_PATH=$VM lldb $VM/DumpRenderTree LayoutTests/js/regress-155776.html
真实环境下的调试
一旦问题分析清楚,必须回到Safari下才算是真正的利用过程起点。编译release版的程序:
./Tools/Scripts/build-webkit --release
然后使用提供的辅助脚本,就能自动将WebKit库注入到浏览器中,使Safari运行在刚刚编译好的WebKit之上:
./Tools/Scripts/run-safari