我最近一直在模糊Adobe Reader。我发现了几个错误。

下面列出了我面临的主要问题之一。


如何确定问题的根本原因?我的意思是说,PoC进行了大量修改,更改每个模块和测试并不容易。因此,很难找到导致崩溃的字节。

我一直在研究Taint Analysis和符号执行驱动的Fuzzing和漏洞研究。

我使用IDA pro我的可再生能源工作。有没有做这个任务的好插件。我知道“ tree-cbass” https://code.google.com/p/tree-cbass/

,但是我无法高效使用它。我想从经验丰富的漏洞研究人员和开发人员那里获得建议和技巧。谢谢。

评论

哦,你很好。我也想模糊Adobe Reader。哪种模糊器最有效,我如何发现它?希望您的帮助。谢谢

#1 楼

您的问题在这里有很好的答案。但是,我想给你我的意见。总的来说,根本原因分析最好是半手工完成。原因之一是诸如动态污点分析,使用SMT求解器等之类的技术是解决小问题或特定问题的好工具,但由于所需的时间和精力,对于普通研究人员而言,对于整个项目+实际目标几乎是无法使用的。另外,值得考虑的时间是您需要使用这种技术开发的工具,而该技术可能需要与实际目标配合使用,例如Acrobat Reader。

为了向您推荐我的第一件事使您的任务少烦人的是编写最小化工具。根据创建突变样本的方式,您甚至可以使用我为Nightmare编写的一些工具,例如这种通用的崩溃最小化工具,该工具可用于某些二进制文件和仅文本文件(它可能适用于Acrobat Reader进行一些修改)。最小化PDF之后,您可能还需要执行以下操作:


使用MyNav,BinNavi或类似的能够进行差异调试的工具。
记录下第一次执行空白的PDF。确保记录尽可能多的GUI事件。
如果从模板PDF文件创建了变异文件,则还要记录该原始PDF文件的执行。它将删除用于该特定模板的所有功能和基本块。
完成上述步骤后,您记录了空白PDF文件的痕迹,GUI事件等...记录了崩溃的PDF的执行情况样品。使用差分调试时,最后一个跟踪中只会显示最后一个基本块和/或功能。

希望您只有几个基本块或功能需要分析,能够查看采取或不采取哪种条件跳转并确定其崩溃的原因。
顺便说一句,如果您使用的是Unix,还可以使用原始模板和崩溃的示例来比较valgrind执行的日志。

我的2美分...

评论


对于删除了这一部分的编辑器,“顺便说一句,如果您使用的是Unix,还可以使用原始模板和崩溃的示例来比较valgrind执行的日志。”可以使用Wine + Valgrind或Linux的旧Acrobat Reader版本。只是说。

– joxeankoret
16-2-16在23:27

#2 楼

首先,您应该编写脚本以减小变异的(模糊的)文件与原始文件之间的差异,以便了解导致程序崩溃的一个或多个主要字节。这将是逐字节比较,更改,检查以确保您具有使应用程序崩溃所需的最小差异。(很可能您是通过这种方式发现了新的崩溃。部分将是将代码与调试器混合在一起,调试器可以检查降低的文件是否仍然可以崩溃。 >
PS检查WinAppDbg,PyDbg,PyDbgEng等。

评论


大!感谢您的输入。我已经尝试将崩溃降到最低。原始文件约为200kb,变异文件为107kb。我累了要按照你的建议去做。但是未能识别出错误的字节。我已经阅读了有关动态污点分析的信息。我想使用Taint分析,我将能够在PDF文件中找到我控制的字节。但是我无法将动态污点分析和SMT求解器理论应用于实践。你能建议我这个吗。谢谢。

– john4tech
2014年5月21日13:23



我个人从来没有使用过污点分析,但是要检查根本原因,可能在链接的帮助下面。根本原因导致内存损坏和根本原因整数溢出

–user3119
2014年5月25日20:27



#3 楼

您可以做的最好的事情就是学习如何阅读汇编。从崩溃开始,查看正在使用的内存类型,寄存器中的值以及先前的说明。了解如何使用windbg。污点分析和smt解决方案旨在用于纯二进制数据,对于解释器或抽象状态机来说很糟糕。换句话说,当数据和代码之间的关系为1:1(如媒体播放器等)时,它非常有用。如果您想成为漏洞研究者,那么学习如何有效地进行逆向工程是您可以进行的最佳长期投资。它将缩短崩溃和根本原因分析之间的时间,并提高发现的错误的质量。 。而且,PDF格式包含许多非二进制数据。您必须研究Reader的工作原理,并且与PDF规范非常亲密。这是一项手动工作。

在https://www.corelan.be/index.php/category/security/exploit-writing-tutorials/

中查看教程。 >编辑-使用PIN可以轻松完成代码覆盖率以及许多其他工作,包括使用XED2进行污点跟踪。查看Dytan和Privacy Scope,它们都是开源的。如果应用程序很复杂,那么很可能您将不得不为其定制工具。您不想针对解压缩运行代码。还有静态污点跟踪功能,一个很好的例子是http://phrack.org/issues/67/10.html,它从崩溃中倒退了。规则很简单,因此制作这种工具很容易而不复杂。与系统API和第三方库进行接口时会遇到困难,这是自定义的来源。您还可以使用更高级的功能,查看影子内存以及我最喜欢的论文之一http://dynamorio.org/pubs/zhao -million-watchpoints-CC08.pdf

评论


是的,你是对的。逆向工程技能是最好的投资。但是,我对Taint Analysis非常着迷,因此我开始阅读它。启发我的有趣的黑帽会议之一是Blackhat 2010-更难,更好,更快,更强。请分享您的看法。谢谢。

– john4tech
2014年5月28日6:36