欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[翻译]通过回溯调试分析脆弱性的根本原因

[翻译]通过回溯调试分析脆弱性的根本原因

https://darungrim.com/research/2019-10-10-vulnerability-root-cause-analysis-with-time-travel-debugging.html


找脆弱性有许多方法。最广泛使用的是fuzzing。本质上,fuzzing是一种暴力方法。多数例子中,先通过畸形输入造成程序崩溃。获得一次崩溃后,下一步是理解奔溃的根本原因。合适的RCA(根本原因分析)是理解bug本质的基础。这有助于决定bug是否可利用及付出更多努力开发该脆弱性的利用是否有意义。从安全工程师的视角,适当地对脆弱性进行归类并理解bug的本质对确定修复策略很有帮助。简单说,RCA是进行利用开发和制定防护策略的起始。

时间回溯调试

时间回溯调试是微软的一款记录程序执行过程并能够随时离线重现的工具。它用于从微软客户处搜集非可再现的软件bug。一旦bug在某个开启记录功能的客户环境中重现,客户可以提交记录内容到微软以便工程师分析、检查。

众所周知,理解脆弱性的本质是一个非常痛苦和乏味的过程。如果能访问源代码,可以通过重编译并调试来完全理解bug位置的上下文。如果不能,这就变成了一个试验、错误、猜测的重复游戏。

TTD(时间回溯调试)基于其记录、重现能力有助于RCA过程。TTD建立在Nirvana和iDNA技术基础上。Nirvana是一个二进制插装技术。程序执行过程由iDNA踪迹记录器记录并保存为踪迹文件。踪迹文件可以随后通过iDNA踪迹阅读器运行。这个和Pin很像,但TTD将保存执行日志和重现执行日志的功能都整合进了Windbg内,实用性更强。

一个Adobe Arcobat Reader脆弱性

有一个关于Adobe Acrobat Reader脆弱性的报告。和一段简短的描述一起,还包含一个POC。描述中说这是一个malformed JP2 stream record引起的double free问题。

下面是该POC引起奔溃的数据流和控制流的总览图。这个视图是通过TTD技术得到的。在接下来的内容中,我将解释如何通过一个有效的方法获得这个视图。

重现并记录崩溃

首先,需要搭建测试环境。我从官方发布页面获取了Adobe Acrobat Reader的老版本。启动Acrobat Reader后,可以在目标进程上附加一个TTD会话。演示进程是一个父进程为AcroRd32.exe的AcroRd32.exe进程。要使用TTD功能前需要先使用WinDbg

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功