Emerging Talent: Winternship 2020 Highlights
Aaron Yoo—Anvill反编译器
加州大学洛杉矶分校
这个寒假,我为Anvill反编译器添加了一个工具,用于为LLVM位码函数生成"JSON规范"。这些从位码派生的规范告诉Anvill重要值(如函数参数和返回值)的物理位置(寄存器或内存)。Anvill依赖此位置信息智能地将机器代码提升为高质量、易于分析的LLVM位码。
典型规范如下所示:
|
|
总的来说,我在学习ABI和使用LLVM编译器基础设施方面收获了很多乐趣。我看到了我的工具在一些完整的"机器代码到C"反编译示例中的运行情况,并克服了棘手的障碍,比如一个高级参数或返回值如何跨多个机器级寄存器分割。我的最终评估:反编译器非常酷!
Paweł Płatek—DeepState和Python
AGH科技大学
我的冬季实习项目主要目标是查找并修复DeepState源代码中Python部分的错误。我发现的大多数错误几乎使得无法构建DeepState进行模糊测试或使用模糊测试器的执行器。现在,构建过程和执行器工作正常,并经过了测试和更好的文档记录。我还识别并描述了需要更多工作的地方(在GitHub问题中)。
以下是我的DeepState项目详情:
Cmake—修正了构建选项;添加了仅构建示例的选项;添加了编译器检查和对Honggfuzz和Angora的支持;改进了示例的cmake(以便自动找到示例)。
Docker—将docker构建分为两部分—deepstate-base和deepstate—以便更容易更新环境;添加了多阶段docker构建(以便可以单独更新模糊测试器,而无需从头重建所有内容);添加了–jobs支持和Angora。
CI—重写了构建并将docker镜像推送到使用支持缓存的GitHub action的工作;添加了模糊测试器测试。
模糊测试执行器(前端)—统一了参数和输入/输出目录处理,审查了每个模糊测试器文档,以便执行器设置适当的运行时标志,重新实现了执行前和执行后方法,添加了模糊测试器可执行文件发现的方法(基于FUZZERNAME_HOME环境变量和CLI标志),重新实现了日志记录,修复了编译函数,重写了与模糊测试器运行时统计相关的方法,重新实现了运行方法(以便定期调用检索统计信息和同步内容的管理例程,并正确处理异常;还添加了清理功能和重新启动进程的可能性),检查了每个模糊测试器目录结构和种子同步可能性,并基于此实现了模糊测试器恢复和修复了集成方法。
模糊测试器测试—创建了一个基本测试,检查执行器是否能正确编译以及模糊测试器是否能找到简单错误;创建了种子同步测试。
文档—将文档分成几个文件,并添加了关于模糊测试执行器使用和工具编写的章节。
Philip Zhengyuan Wang—Manticore
马里兰大学
在冬季实习期间,我帮助提高了Manticore的多功能性和功能性。具体来说,我将其与Ansible(自动化配置框架)和Protobuf(序列化库)结合,允许用户在云中运行Manticore并更好地了解Manticore运行期间发生的情况。
目前,Manticore非常占用CPU;在本地运行时,它会与其他用户进程争夺CPU时间。在远程配置的VM上运行作业,可以将更多资源分配给Manticore运行,从而大大减少这个问题。
为了解决这个问题,我创建了"mcorepv"(Manticore配置器的缩写),一个用于Manticore的CLI和Ansible/DigitalOcean的Python包装器,允许用户选择运行目的地(本地机器/远程droplet)并提供目标Manticore Python脚本或可执行文件以及所有必要的运行时标志。如果用户决定在本地运行作业,mcorepv会在用户当前工作目录中执行Manticore分析并记录结果。
如果用户决定远程运行作业,情况就更有趣了—在这种情况下,mcorepv将调用Ansible并执行一个playbook来配置一个新的DigitalOcean droplet,将用户当前工作目录复制到droplet,并对目标脚本/可执行文件执行Manticore分析。在分析运行时,mcorepv通过Ansible近乎实时地流式传输日志和Manticore的stdout,以便用户可以频繁检查分析进度。
Manticore还应通过socket上的protobuf协议同时将其内部状态列表及其状态(就绪、忙碌、杀死、终止)流式传输给用户,以更好地描述分析状态和资源消耗(这目前正在进行中)。为了实现这一点,我开发了一个protobuf协议来表示Manticore的内部状态对象并允许序列化,以及一个终端用户界面(TUI)。在droplet上启动后,Manticore启动一个TCP服务器,提供内部状态列表的实时视图。然后客户端可以在本地运行TUI,它将连接到Manticore服务器并显示状态列表。作业完成后,Manticore服务器终止,Manticore运行结果以及所有日志被复制回用户的本地机器,以便进一步检查。
为确保Manticore在云中无错误运行,还有一些工作要做。例如:
- 必须在droplet和本地机器上设置端口转发,以确保Manticore的服务器和客户端TUI可以通过SSH通信。
- TUI需要额外的优化和改进,以确保用户获得所需的信息量。
- Mcorepv及其Ansible后端需要更严格的测试,以确保它们正常工作。
我很高兴在Trail of Bits的短暂时间里,我能够帮助Manticore向随时随地运行迈进一步。
图1:概念验证—Manticore TUI向用户显示状态对象列表和日志消息。
Samuel Caccavale—Go
东北大学
在冬季实习期间,我开发了基于AST和SSA的扫描器,用于查找Go代码中先前被GoSec和errcheck等工具忽略的错误。一个针对的不安全代码模式是在检查类型断言是否ok之前使用类型断言值,在value, ok := foo.()
中。虽然errcheck会检测未绑定ok值的类型断言(因此如果类型断言失败会导致panic),但它无法彻底检查value的使用是否在ok为true的上下文中。示例重现了errcheck和SSA方法分歧的最简单例子;SSA方法将正确检测safe的使用为安全,unsafe的使用为不安全:
|
|
Taylor Pothast—Mishegos
范德比尔特大学
在冬季实习期间,我通过将队列收集和输出组件从原来的概念验证JSON格式切换到紧凑的二进制格式,提高了mishegos(Trail of Bits的x86_64解码器差分模糊测试器)的性能。
为此,我了解了mishegos的内部工作原理、其内存中的结果表示、二进制解析以及如何编写Kaitai Struct定义。我的工作在我实习的最后一天被合并,现在是mishegos运行的默认输出格式。
为了使我的工作与mishegos的现有分析工具兼容,我还添加了一个辅助工具mish2jsonl,用于将新的二进制输出转换为与原始输出格式大部分兼容的JSON形式。最后,我更新了分析工具以处理我在JSON化输出格式中所做的更改,包括每个模糊测试解码器状态的新符号字段。
Thomas Quig—Crytic和Slither
伊利诺伊大学厄巴纳-香槟分校
在Trail of Bits期间,我将Slither的智能合约可升级性检查集成到Crytic(Trail of Bits的以太坊安全CI服务)中。由于智能合约在上传后是不可变的,用户如果需要上传新合约,需要能够升级其合约。为了解决这个问题,用户可以拥有旧合约、新合约和代理合约。代理合约包含 essentially 函数指针,可以修改以指向新合约。如果上述过程做得不正确(例如,不正确的全局变量对齐),就会产生风险。使用Slither,用户可以检查以确保这些风险得到缓解。
集成过程比我想象的要复杂得多,但我仍然成功地实现了检查。学习代码库和同时使用多种所需语言非常困难,但可以管理。Crytic现在获取所有智能合约的列表并在设置中显示它们,以便可以选择。用户可以选择哪个合约是旧合约、新合约和代理合约。然后对这些合约运行可升级性检查,并将输出以易于分析的JSON格式显示到新的发现页面。
我在Trail of Bits的时光很愉快。我的导师帮助我学习基础设施,同时给我独立工作的机会。我在短时间内获得了重要经验,并学到了许多我没想到会喜欢的主题。
William Wang—OpenSSL和Anselm
加州大学洛杉矶分校
这个冬天,我致力于Anselm。OpenSSL是开发人员最流行的密码学库之一,但也非常容易被误用。尽管如此,许多不当使用实例都落入特定模式,这就是Anselm的用武之地。我的主要目标是原型化一个检测这些行为的系统。
我大部分时间都在编写一个LLVM pass来检测OpenSSL API调用并形成表示可能执行路径的简化节点图。在较大的代码库中,遍历每个单独的IR块可能很耗时。通过首先将图"压缩"到其相关节点(API调用),Anselm能够对其进行更复杂的分析。
我还探索并开始实现针对不同复杂度的不良行为的启发式方法。例如,要求密码上下文仅初始化涉及搜索创建节点的子节点。类似地,其他排序要求可以仅通过调用图强制执行。然而,像重复IVs/nonces这样的错误可能需要参数/返回值分析,我希望将来进一步研究。
虽然我对冬季实习期间所完成的工作感到满意,但还有很多工作要做。除了充实上述想法外,我还想完善最终界面,以便其他开发人员可以轻松编写自己的启发式方法。使用LLVM IR也意味着Anselm理论上可以操作使用OpenSSL绑定的其他语言。我期待将来应对这些和其他挑战!
秋天见?
我们已经选择了2020年夏季实习生,但如果您想申请(或推荐实习生)秋季实习,请联系我们!
如果您喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News
页面内容 Aaron Yoo—Anvill反编译器 Paweł Płatek—DeepState和Python Philip Zhengyuan Wang—Manticore Samuel Caccavale—Go Taylor Pothast—Mishegos Thomas Quig—Crytic和Slither William Wang—OpenSSL和Anselm 秋天见? 最近文章 非传统创新者奖学金 劫持您的PajaMAS中的多代理系统 我们构建了MCP一直需要的安全层 利用废弃硬件中的零日漏洞 Inside EthCC[8]:成为智能合约审计员 © 2025 Trail of Bits. 使用Hugo和Mainroad主题生成。