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引擎, 代码执行漏洞, 元素类型不匹配, 内存分析, 内存取证, 内存取证技术, 可视化界面, 堆损坏分析, 堆溢出, 堆破坏模式, 恶意软件分析, 数字取证, 数字取证工具, 数字犯罪调查, 浏览器漏洞, 漏洞利用痕迹, 网络安全, 自动化脚本, 进程内存转储, 通知系统, 隐私保护