漏洞挖掘实战:从模糊测试到Web安全的暑期实习之旅

本文详细记录了作者在Trail of Bits的暑期实习经历,涵盖模糊测试技术实践、VLC媒体播放器漏洞挖掘(CVE-2015-5949)、Web应用安全测试方法以及企业安全评估实战,展示了完整的安全研究流程与技术细节。

Summer @ Trail of Bits

开始模糊测试

今年夏天,我有幸作为高中实习生加入Trail of Bits工作。作为回报,我需要写一篇关于这次实习的博客文章。事不宜迟,下面就开始了。

夏季从模糊测试开始,这是我听说过但从未尝试过的技术。基本概念是向程序输入大量数据直到其崩溃,然后分析崩溃以发现漏洞。由于时间限制,自己编写模糊器并不现实,于是我开始在网上寻找现有的模糊器。

我找到的第一个工具是CERT的Failure Observation Engine(FOE),看起来很有前景。FOE有许多选项可以精确调整模糊器,使其能够针对特定目标进行优化。然而,我对FOE的体验并不稳定。对于某些目标,该工具运行一次就会停止,而不是持续运行(正如模糊器应该做的那样)。为了尽快开始,我决定转向其他工具。最终我选择了Linux的american fuzzy lop(AFL)和Windows的Microsoft MiniFuzz。

两者各有优缺点。AFL最适合处理源代码,这将其范围限制在开源软件(虽然对闭源二进制文件有实验性支持,但速度明显较慢)。使用AFL从源代码编译可以让模糊器确定代码覆盖率并在其界面中提供有用的反馈。MiniFuzz则相反:它在闭源Windows软件上运行,运行时提供的反馈很少。然而,崩溃数据非常有用,因为它提供了程序崩溃时所有寄存器的值——这是其他模糊器没有提供的功能。与AFL需要复杂编译设置相比,MiniFuzz非常即点即用。

分析崩溃

设置好模糊器并在目标上运行后(包括Video Lan的VLC、Wireshark和Image Magick等),是时候开始分析崩溃了。AFL在VLC中报告了几次崩溃。在验证这些崩溃是否可重现时,我注意到有几个是在尝试释放地址0x7d时出现的段错误。这让我感到奇怪,因为地址太小了,于是我凭直觉在十六进制编辑器中打开崩溃输入文件并搜索'7d’。果然,在文件深处找到了匹配项:0x0000007d。我将其改为容易识别的0x41414141,并再次运行文件。这次段错误发生在,你猜对了,0x41414141!

受到可以通过文件控制程序中地址的鼓舞,我开始寻找这个bug。这涉及一个漫长过程,让我不得不熟悉gdb和VLC源代码。该bug允许释放两个任意的、用户控制的指针。

漏洞详情

VLC将文件的不同部分作为box读取,并在标记联合中对其进行分类。该bug是由于文件中stsd box的大小被更改,增加其大小,使其将后续的stts box视为其子项而导致的类型混淆。VLC通过根据box类型及其父类型索引函数表来读取文件中的box。但由于父类型错误,它找不到匹配项,而是使用默认读取,将文件读取为vide类型box。后来,在释放box时,它仅通过检查自身类型来查找函数,因此触发了正确的函数。VLC尝试释放一个被读取为通用vide box的stts box,并直接从stts box释放两个地址。

QuickTime容器原子

CVE-2015-5949

控制两个释放的地址很可能被利用,所以是时候报告这个bug了。我通过oCERT进行报告,他们非常有助于与VLC开发者沟通修复问题并获得CVE编号(CVE-2015-5949)。经过一些来回沟通后,问题得到解决,是时候转向新事物了。

转向Web安全

夏季过半,还有另一半时间学习新东西,我开始探索Web安全。我从一些CTF和NYU Hack Night中对此有一些背景知识,但我希望获得更深入和实用的理解。与模糊测试容易上手不同,Web安全需要更多的事先知识。我花了一周时间尽可能从《Web应用程序黑客手册》和相应的MDSec实验室中学习。有了扎实的基础后,我将这些培训付诸实践。

漏洞赏金狩猎

HackerOne有一个包含漏洞赏金计划的公司的目录,这似乎是最好的起点。我按加入日期排序,选择了最新的公司——它们可能还没有被太多人查看过。使用不可或缺的工具BurpSuite,我仔细检查这些网站,寻找任何异常。通过查看ok.ru、marktplaats.nl和united.com等网站,我搜索易受攻击的功能和安全问题,并提交了一些报告。我有一些成功,但它们仍在披露过程中。

安全评估

为了结束实习,我对纽约市的一家科技初创公司进行了安全评估,应用了我所获得的技能。我发现了应用逻辑、访问控制和会话管理中的bug,其中最严重的是一个逻辑缺陷,给公司带来了重大的财务风险。然后我有机会在与公司的会议中展示这些bug。报告得到了很好的接受,公司正在实施修复。

结束语

在Trail of Bits的这次经历非常棒。我在应用和Web安全方面打下了坚实的基础,这是一个很棒的工作场所。我将休息一周查看大学,但在我高年级期间会继续兼职工作。

如果你喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计