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!
受到可以从文件中控制程序中地址的鼓舞,我开始寻找这个漏洞。这涉及一个漫长的过程,让我不得不熟悉gdb和VLC源代码。该漏洞允许释放两个任意的、用户控制的指针。
漏洞详情
VLC将文件的不同部分读取为盒子(boxes),并在标记联合(tagged union)中对它们进行分类。这个漏洞是由于文件中stsd盒子的大小被改变时产生的类型混淆,增加了其大小,使其认为随后的stts盒子是其子盒子。VLC通过根据盒子的类型和其父盒子的类型索引函数表来读取文件中的盒子。但由于父盒子错误,它找不到匹配项,而是使用默认读取方式,将文件读取为vide类型的盒子。后来,在释放盒子时,它仅通过检查自身类型来找到函数,因此触发了正确的函数。VLC尝试释放一个被读取为通用vide盒子的stts盒子,并直接从stts盒子中释放两个地址。
CVE-2015-5949
控制两个被释放的地址很可能被利用,因此是时候报告这个漏洞了。我通过oCERT进行了报告,他们非常帮助地与VLC开发者沟通修复问题,并获得了CVE编号(CVE-2015-5949)。经过一些来回沟通后,问题得到了解决,是时候转向新的内容了。
转向Web安全
夏天过半,还有另一半时间可以学习新东西,我开始探索Web安全。我从一些CTF比赛和NYU Hack Night中有一些背景知识,但我希望获得更深入和实用的理解。与模糊测试容易上手不同,Web安全需要更多的事先知识。我花了一周时间尽可能多地从《Web应用程序黑客手册》和相应的MDSec实验室中学习。有了扎实的基础后,我将这些训练付诸实践。
漏洞赏金狩猎
HackerOne有一个拥有漏洞赏金计划的公司的目录,这似乎是最好的起点。我按加入日期排序,选择了最新的公司——它们可能还没有被太多人查看过。使用不可或缺的工具BurpSuite,我仔细检查了这些网站,寻找任何异常。通过查看ok.ru、marktplaats.nl和united.com等网站,我搜索了易受攻击的功能和安全问题,并提交了一些报告。我有一些成功,但它们仍在披露过程中。
安全评估
为了结束实习,我对纽约的一家科技初创公司进行了安全评估,应用了我所获得的技能。我发现了应用程序逻辑、访问控制和会话管理中的漏洞,其中最严重的是一个逻辑缺陷,给公司带来了重大的财务风险。然后我有机会在与公司的会议中展示这些漏洞。报告受到了好评,公司正在实施修复。
结束语
在Trail of Bits的这段经历非常棒。我在应用程序和Web安全方面打下了坚实的基础,这是一个很好的工作地方。我将休息一周去看大学,但在我高年级期间会回来兼职工作。
如果你喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News