medioxor/v8-forensics
GitHub: medioxor/v8-forensics
这是一个用于检测Chrome内存转储中V8引擎漏洞利用痕迹的取证工具。
Stars: 15 | Forks: 1
# v8 取证
检测 Chrome 进程内存转储中 V8 JavaScript 引擎的漏洞利用痕迹。
本工作基于论文《[Juicing V8: A Primary Account for the Memory Forensics of the V8 JavaScript Engine](https://www.sciencedirect.com/science/article/pii/S2666281722000816)》的研究,该研究首次实现了无符号的 V8 对象提取,因此在此特别感谢以下作者奠定的基础,使得此工具得以成为可能:
- Enoch Wang
- Smuel Zurowski
- Orion Duffy
- Tyler Thomas
- Ibrahim Baggili
## 功能
扫描 Chrome 渲染器的 minidump 文件,寻找表示存在活动或未遂漏洞利用的堆损坏模式:
- **损坏的数组长度** - `JSArray.length > elements.length`
- **元素类型不匹配** - Map 的 ElementsKind 与后备存储类型不匹配
- **嵌入的伪造对象** - 另一个数组的后备存储内的 JSArray 头
这些模式违反了 V8 的不变量,在正常的 JavaScript 执行过程中不会出现。
## 安装
```
git clone https://github.com/user/v8-forensics
cd v8-forensics
cargo build --release
```
## 使用
```
v8-forensics
--stats Show heap statistics
--json Output as JSON
--verbose Show detailed analysis
```
示例输出:
```
loading dump: "example.dmp"
loaded 818 regions (2564.8 MB)
arrays with corrupted length (array_length > elements_length):
corrupted array 1:
address: 0x3a0002ccd4c
map_address: 0x3a00010e449 (instance_type: 2119)
elements_kind: 4
array_length: 128 (CORRUPTED)
elements_length: 2
oob_elements: 126
fake arrays embedded in other arrays:
embedded array 1:
address: 0x3a0002ccd4c
map_address: 0x3a00010e449 (instance_type: 2119)
elements_kind: 4
array_length: 128
elements_length: 2
elements_address: 0x3a0002ccd45
elements_map_address: 0x3a0000008a1
container_address: 0x3a0002ccd28
container.array_length: 2
container.elements_length: 2
container.elements_address: 0x3a0002ccd45
offset: 8 bytes (element ~0)
elements map mismatches detected:
mismatch 1:
address: 0x3a0002ccdd8
map_address: 0x3a00010e449 (instance_type: 2119)
elements_kind: 4
array_length: 4
elements_length: 0
elements_address: 0x3a0002ccf71
elements_map_address: 0x1
```
## 复现
使用 `python3 -m http.server --bind 127.0.0.1 8080` 命令托管 `./repro` 目录中的文件,然后下载适用于 Windows 的 Chrome 稳定版 `134.0.6998.36`,进行安装,接着执行以下命令:
```
chrome.exe --renderer-process-limit=1 --disable-crash-reporter --enable-logging=stderr --no-sandbox --user-data-dir=data http://127.0.0.1:8080/index.html
```
## 工作原理
1. 定位 MetaMap(这是唯一一个满足 object.map == object 的 V8 对象)
2. 根据 MetaMap 的地址推导出 cage base
3. 找到所有 Map 对象(它们指向 MetaMap)
4. 通过扫描有效的 Map 指针找到所有 JSArray
5. 根据 V8 的结构不变量验证每个数组
标签:Artifact检测, Chrome浏览器安全, Chrome进程, DAST, JARM, JavaScript安全, minidump分析, Rust编程语言, SecList, V8 JavaScript引擎, V8引擎, 代码执行漏洞, 元素类型不匹配, 内存分析, 内存取证, 内存取证技术, 可视化界面, 堆损坏分析, 堆溢出, 堆破坏模式, 恶意软件分析, 数字取证, 数字取证工具, 数字犯罪调查, 浏览器漏洞, 漏洞利用痕迹, 网络安全, 自动化脚本, 进程内存转储, 通知系统, 隐私保护