023-Hacking Team Android Browser Exploit代码分析.md
6.08 KB / 2021-07-17 00:01:32
# Hacking Team Android Browser Exploit代码分析
0x00 前言
=======
* * *
Hacking Team 415G泄露资料的`vector-exploit-master\src\ht-webkit-Android4-src`目录中,包含一份Android Browser exploit代码。用户在浏览器中点击攻击者的链接,便会执行恶意代码。恶意代码利用漏洞获取root权限,并静默安装木马apk。影响Android4.0-4.3版本。
00x1 漏洞利用的艺术
============
* * *
Exploit代码利用了三个已知的libxslt漏洞,获得对内存地址的完整控制能力。
1. information leak ([CVE-2011-1202](https://code.google.com/p/chromium/issues/detail?id=73716))。
2. Arbitrary memory read ([CVE-2012-2825](https://code.google.com/p/chromium/issues/detail?id=127417))
3. Heap-buffer-overflow ([CVE-2012-2871](https://code.google.com/p/chromium/issues/detail?id=138673))
关键流程:
![enter image description here](http://drops.javaweb.org/uploads/images/2df4e3b60841ceeaf6f19a477868e23f8ff98e06.jpg)
00x2 利用分析
=========
* * *
1 申请330块1M大小的内存,并给每一块内存区域打上标记(0x70747468,‘HTTP’)。
![enter image description here](http://drops.javaweb.org/uploads/images/f11176717986dcbf306c4e05b93a3a83c833d89e.jpg)
2 进行内存搜索,利用CVE-2012-2825可以检查任意内存地址是否为0x70747468(’HTTP’)的能力,找出第一步的标记内存,得到标记内存所在的地址。这里查找内存的时候涉及一个技术细节。
```
When parsing a XSLT stylesheet containing a DTD, a structure of type xmlEntity is accessed as another type. The value of cur->ns->href is then compared with a string(“http://www.w3.org/1999/XSL/Transform"). If not equal, return null.
```
![enter image description here](http://drops.javaweb.org/uploads/images/294b7f481d18951ca696dc6200313ae16eb6c7a8.jpg)
将ns->href和ns->prefix的值改为addr,然后利用二分法在[0x7a703030, 0x79303030]这块内存空间遍历addr,如果找到"http://www.w3.org/1999/XSL/Transform",会返回一个正确的documentElement。
![enter image description here](http://drops.javaweb.org/uploads/images/686ad7982bbd5898c90d5d1a8770c808a3caa0e8.jpg)
由于这块地址在第一步中已经申请。这块内存我们知道地址并可以随意使用,这一步很关键。可控制的内存约4MB,称为ZoneX。
3 精心修改ZoneX,利用CVE-2011-1202泄漏堆对象的地址和CVE-2012-2871写特定内存地址为特定值的能力,把ZoneX标记为已释放,但JS仍然有读写的能力。
![enter image description here](http://drops.javaweb.org/uploads/images/2f2355cfc7a07a28b0cda522f19082c6f80925d6.jpg)
![enter image description here](http://drops.javaweb.org/uploads/images/96c86baa5dd07a1d4f731030d9b335901fc39454.jpg)
![enter image description here](http://drops.javaweb.org/uploads/images/081b743edf1c42047fb6c67ffd2d0892e9ba126c.jpg)
这一过程相当复杂,暂且跳过。
4 立即申请大量新的ArrayBuffer覆盖ZoneX,由于JS仍然有读写ZoneX的能力,可以马上修改一块符合条件的ArrayBuffer的起始地址为0x00000000,结束地址为0xFFFFFFFF,即整个内存区域。
![enter image description here](http://drops.javaweb.org/uploads/images/f1d8cd89d4709bf8ca3f10820c1b9e93dbaac437.jpg)
5 利用BufferMemoryObject对象,封装对内存地址的操作,至此JS已经得到整个RING3内存的完整读写能力。
![enter image description here](http://drops.javaweb.org/uploads/images/5cf87d31e4b575e0863082e8c1814c685d256fcf.jpg)
6 下载小马module.so
![enter image description here](http://drops.javaweb.org/uploads/images/a9c0f39b3fbce380450b439471627d1492d1c7b4.jpg)
7 结合CVE-2011-1202信息泄漏漏洞,获得libwebcore.so的基址进而获得libc.so的基址。
![enter image description here](http://drops.javaweb.org/uploads/images/4e28dac52ea659c8d383202d1e1da1d228e68b00.jpg)
然后在libc和libwebcore中搜索可用的gadget。
![enter image description here](http://drops.javaweb.org/uploads/images/93abe5f33bba57c44512028058870b1345984e8e.jpg)
8 操作内存,覆盖JS对象的虚表,构造假的vtable完成两个gadget的拼接。并使用ROP攻击手法,通过mprotect给堆上的shellcode代码执行的权限,并将执行流程跳转到真正的shellcode。
![enter image description here](http://drops.javaweb.org/uploads/images/3ccada3560a28163b4e3a7706787019e5aca1b9f.jpg)
![enter image description here](http://drops.javaweb.org/uploads/images/591635a44544874a326c4734f9db27794e3d8ac0.jpg)
9 shellcode中激活已经下载好的小马module.so;
![enter image description here](http://drops.javaweb.org/uploads/images/3fa9258dfc9d26f0530bc207cce0f4cc85cb7397.jpg)
10 接下来小马下载ROOT提权程序(exploit,ELF)获取ROOT权限;并留下一个shell /system/bin/rilcap,过程和rcs完全一致。
![enter image description here](http://drops.javaweb.org/uploads/images/ad15832b3cf8e33b3223a2c98423682fde761725.jpg)
用IDA打开小马,发现其使用了Obfuscator-clang对代码进行了混淆。
![enter image description here](http://drops.javaweb.org/uploads/images/6a5f4075c9dba5bf686209e0b0e78fc74750ab7c.jpg)
所涉及的两种root方法,第一种是put_user,另一种是towel。
11 随后,小马在ROOT权限下静默安装黑客指定的木马程序。ALL DONE。
00x4 总结
=======
* * *
从三个POC到一套完整的远程代码执行exploit,是一个复杂而艰难的过程。Hacking Team 的exploit演绎相当之精彩,不得不说是漏洞利用的艺术。从远程代码执行,到下载rcs远程控制客户端,Hacking Team构建了一条完整的黑色链条。看完之后,各位看官会不会和小编一样,背后吓出了一身冷汗。Android Browser Exploit仅仅是Hacking Team泄漏资料中的一个项目,其中的技术点便相当复杂。其所泄漏的项目,不仅包括源代码,还包括大量工程化的工具以及技术文档。仅需简单地配置和修改即可自动化生成黑客工具,很容易被不法分子利用。可想而知,这将大大降低黑产的技术门槛。黑产水平将在短时间内显著提升。守护用户安全之路将任重而道远。