【免费下载链接】publications
Publications from Trail of Bits
本文基于 Trail of Bits publications 仓库中 presentations/The Joy of Pwning/README.md 及其配套的 25 页幻灯片 joy_of_pwning.pdf(Securing Your Path 2017,演讲人 Sophia D'Antoine,2017-10-26)编写,完整继承演讲的三段式骨架:Hacker Training(Wargame 与 CTF)、Security Engineering & Tooling(符号/共条件执行与 Manticore、McSema 工具链)、Interdisciplinary Research(智能合约安全)。读完本文,你能理解演讲中给出的 pwnable.kr 逆向挑战、pintool 指令计数、符号执行 assert 触发与 Solidity 整数溢出检测等具体技术案例,并沿仓库内其他演讲目录追踪这些工具在 Trail of Bits 内部的后续演进。
演讲定位与资源结构
README 的 frontmatter 是该演讲的元数据入口:
- title: "The Joy of Pwning"
- date: 2017-10-26
- authors: Sophia D'Antoine
- conference: Securing Your Path 2017
- resources: Slides 指向本目录下的
joy_of_pwning.pdf;另列出 Manticore 与 McSema 两个工具仓库(README 中以外链形式给出,本文遵循仓库引用规范不再重复外链,读者可按工具名检索)
作者简介(引自 README):Sophia D'Antoine 是 Trail of Bits 位于纽约的安全工程师,Rensselaer Polytechnic Institute(RPI)毕业生,RECon、HITB、CanSecWest 等安全会议的常客;当时的研究重点是“利用程序分析技术做自动化软件利用(automated software exploitation)与软件混淆(software obfuscation)”。
演讲主线是她技术职业生涯成长的三个阶段,每个阶段说明为什么有趣、以及如何帮助她成长为领域专家:
- Hacker Training— The world of Wargames & CTFs(战壕游戏与夺旗赛的世界)
- Security Engineering & Tooling— Why do it if you can make a program do it(能写程序自动做就别手动做)
- Interdisciplinary Research— Turns out security research applies to everything(安全研究原来可以应用到一切领域)
README 末尾还给出两条资源线:[CTF Field Guide](Trail of Bits 团队编写的 CTF 实战指南)与 [pwnable.kr] 练习平台;以及智能合约方向的 [Not So Smart Contracts] 与 [Ethersplay] 两个项目——它们分别对应演讲的第三阶段,下文会结合幻灯片内容展开。
第一阶段:Hacker Training —— Wargames 与 CTF 的差异化训练
幻灯片第 7 页用一组对比把两类“黑客竞技”讲得很清楚,这是理解整个成长路径的起点:
| 维度 | Wargames | CTF |
|---|---|---|
| 时长 | 数周(Several weeks) | 24–36 小时(no sleep) |
| 形式 | 个人(Individual) | 团队运动(Team sport) |
| 代表性赛事 | FLARE Reversing Challenges(FireEye FLARE 团队) | CSAW CTF(NYU 主办)、CyberSeed(5 万美元奖金池) |
| 驱动力 | 互联网名声与黑客声望(“Internet points and hacker fame, also skillz”) | 同左 |
两者的训练价值差异在演讲中可归纳为:Wargame 时间充裕、独立作战,适合把一道逆向题(如 FLARE 的函数名/字符串恢复挑战)从原理层面彻底吃透,训练的是慢思考的深度;CTF 则是高压短兵,24–36 小时不眠的团队赛训练的是在信息不全时快速决策、分工与工具调度。幻灯片第 7 页还引用了她此前 CanSecWest 2016 的演讲“Automatic Exploit Generation, an Odyssey”,说明自动化漏洞利用正是从这类竞技中提炼出的工程能力。
pwnable.kr 关卡:从“3 checks”到“15 more functions”
幻灯片第 8 页展示了 pwnable.kr 一个关卡的流程图,节点依次为:fail ...→input argv[1]→3 checks→... 15 more functions ...→memcpy→fail ...。这张图传达的要点是:一个看似只有几个判断分支的关卡,背后挂着十余个待逆向的函数,memcpy处往往是溢出点。这类关卡要求选手在有限时间内建立从输入参数到内存破坏的完整数据流分析——而这正是后续“用程序替你分析”这一思想的直接动机。
CTF Field Guide:把个人经验沉淀为团队资产
幻灯片第 9 页说明 CTF Field Guide 的“当前状态”(Current Status):指南由 Trail of Bits 维护,覆盖 CTF 各题型的解法框架与工具链。README 的资源列表也把 CTF Field Guide 列为首要参考资料——从“打比赛的个人”到“维护公共知识库的团队”的转变,本身就是从 Hacker Training 迈向 Security Engineering 的标志性动作。
第二阶段:Security Engineering & Tooling —— 能自动化就绝不手动
从业方向的行业趋势
幻灯片第 11 页梳理了毕业后安全从业的方向版图:
- 岗位类型:渗透测试(Pentesting)、逆向工程(RE)、漏洞研究(VR)、数字取证(Forensics)、IT 安全等,且是持续增长(Growing Field)的行业,强调专业化(Specialization),横跨公共与私营部门;
- 私营部门趋势:安全工程与研究、开发工具以更好地辅助安全工作、自动发现并自动利用漏洞、用机器学习检测网络异常、静态/动态分析、以及基于 LLVM/Clang 编译器栈的研究(原文明确写道“LLVM/ Clang compiler based research <3”)。
这里的关键转折是:竞技阶段靠人脑和手工调试,工程阶段则要求把经验编码进工具——“Why do it if you can make a program do it”。
案例:Pintool 指令计数——“仍然是暴力,但让程序替你数”
幻灯片第 12 页给出一个用动态插桩 pintool 做的示例,要点有四:
- Binary Level:工作在二进制层,不依赖源码;
- 在每条指令之后注入一个递增器(inject incrementer code after each instruction);
- 本质仍是暴力(Brute Force):对模糊测试(fuzzed)输入统计总执行指令数;
- 局限:指令总数只对实际走到的那条路径成立——程序的控制流图(CFG)空间可能非常大,单条执行路径远不能代表整个 CFG 空间。
这个例子是典型的“旧方法”代表:动态跑 + 计数 + 对比,可以区分输入是否触发了不同分支,但路径覆盖永远是不完备的。它存在的意义是作为反例,引出下一节的符号执行。
符号/共条件执行:从“试遍输入”到“求解约束”
幻灯片第 15 页(Symbolic/Concolic Execution)给出了全场最核心的代码示例,一个混合了具体执行与符号变量的函数:
[SYMBOL] a, b, c [INT] x, y, z = 0; fun(int a, b, c) { if (a) { x = -2; } if (b < 5) { if (!a && c) { y = 1; } z = 2; } assert(x + y + z != 3) } ... fun(0, 3, 1);幻灯片标注的“Old Method: Try all inputs until assert / [WARNING] inputs unbounded!”点明了暴力法的死穴:输入空间无界,而 assert 只在满足特定约束的组合(如a为真、b < 5、!a && c同时成立使x + y + z == 3)上触发。符号执行的做法是把a, b, c当作符号变量,沿执行路径累积分支约束,交给约束求解器反解出能触发断言的具体输入——一次求解替代了天文数字级的枚举。共条件(Concolic)执行则进一步结合具体执行与符号约束迭代(每次用求解结果作为新种子再跑),从而系统地爬取 CFG 空间,正好补上了上一节 pintool 的例子做不到的“全路径覆盖”。
当前状态:Manticore 与 McSema
幻灯片第 16 页标注符号/共条件执行的 Current Status 是Manticore——Trail of Bits 的二进制符号执行工具,README 资源列表也将其列为核心外链之一;而把机器码“翻译”成可被标准编译器算法分析的中间表示,靠的是仓库内另有独立演讲的McSema:见 presentations/McSema - Static Translation of x86 instructions to LLVM IR/README.md,其摘要说明 McSema 将 x86 指令翻译为 LLVM bitcode,使标准编译器分析算法可以直接应用于机器码,演讲中演示了对现成 Windows DLL 加控制流完整性(CFI)。二者组合起来就是本阶段工具链的完整闭环:McSema 负责 lift(二进制 → LLVM IR),Manticore 负责符号执行与求解。
仓库中该工具线的后续演进可直接佐证:
- presentations/Binary Symbolic Execution With KLEE-Native/README.md:KLEE-Native 用 Remill 把二进制 lift 进 LLVM 后符号执行,扩展了 KLEE 的 syscall 实现、forking 模型与堆内存模型,使用 eager concretization 来复现 CVE、分类堆错误;
- presentations/Detecting transaction replacement attacks with Manticore/README.md:Manticore 在 2020 年已被用于构建“交易替换(displacement)攻击检测器”,检测抢占合法交易以窃取矿工奖励的恶意合约 API——这是第二阶段工具能力向第三阶段(智能合约)迁移的实例。
第三阶段:Interdisciplinary Research —— 安全研究适用一切
智能合约是“字面意义上的程序”
幻灯片第 19 页的标题是“Smart Contracts are Literal Programs!”,并配有一张由若干圆圈(选中/未选中)组成的网格图——它对应 Trail of Bits 的智能合约练习集 “Not So Smart Contracts”(README 资源列表中的同名字项):用符号化标记表示一批需要逐一攻破/分析的合约关卡,思路与 pwnable.kr 的关卡列表一脉相承,只是执行环境从 ELF 换成了 EVM。第 20 页“Room for New Security Research & Tooling”指出:智能合约生态当时(2017 年)在安全研究与工具层面仍有大量空白;第 21 页给出 Current Status:ethersplay——面向以太坊的智能合约符号执行/分析工具(README 资源列表同列)。
代码示例:Solidity 整数溢出与防御写法
幻灯片第 22 页(标注 [INT OVERFLOW] Solidity)给出完整的对照合约:
contract Overflow { uint private sellerBalance = 0; function add(uint value) returns (bool){ sellerBalance += value; // possible overflow // possible auditor assert // assert(sellerBalance >= value); } function safe_add(uint value) returns (bool){ require(value + sellerBalance >= sellerBalance); sellerBalance += value; } }这段代码的技术要点:
add中sellerBalance += value在 Solidity 0.8 之前不会自动回滚溢出,value取接近2^256的值即可让余额“绕回”小数值,攻击者可借此操纵余额;safe_add展示了经典防御:在求和前用require(value + sellerBalance >= sellerBalance)断言“加数 ≤ 和”,溢出时求和回绕反而使断言失败、交易回滚;- 注释里的
// possible auditor assert提示:审计时可以把该不变式(invariant)交给符号执行器作为检查点——这与第二阶段“给符号执行器喂断言”的范式完全同构。
这一步把“安全研究 applies to everything”落到实处:同一套符号执行方法论(约束累积 + 求解),从二进制 assert 触发平移到了合约余额不变式检查,工具载体从 Manticore 平移到了 ethersplay 一系。
演讲尾注:Trail of Bits 概览
幻灯片第 24 页附了当时的公司概览(引用时以 2017 年演讲时点为准):定位为“带真实攻击者心态的高端安全研究”公司,专注高保证软件开发、低层软件安全评估与应用安全研究;26 人团队,办公室位于纽约、芝加哥、奥斯汀与多伦多;10 人持美国政府安全许可(US government security clearances);2012 年由三位资深黑客创立,至今未接受外部投资。第 25 页给出联系方式(IRC: quend、email: sophia@trailofbits.com、website: www.sophia.re)。
仓库内的交叉佐证:同一作者与同一工具链的其他演讲
publications 仓库中多个演讲目录与本文形成证据闭环,可按主题继续深入:
- OOO 侧信道(同作者):presentations/Exploiting Out-of-Order Execution/README.md 说明这是 Sophia D'Antoine 关于利用 CPU 乱序执行流水线侧信道的工作(REcon 2015、Black Hat USA 2015、ROOTS 2017),目录内含
thesis.pdf与sender.py/receiver.py对抗演示脚本,是“Hacker Training → 深度研究”这一路径的硬件侧延伸; - 二进制符号执行线:KLEE-Native 演讲 与 McSema 演讲 覆盖“lift 到 LLVM IR → 符号执行”的上下游实现细节;
- 智能合约工具线:Detecting transaction replacement attacks with Manticore 展示 Manticore 检测交易替换攻击的具体工程化成果。
小结
这篇 2017 年的演讲用三级结构串起一条可复现的成长路径:
- Hacker Training:用 Wargames 练深度、用 CTF 练速度,pwnable.kr 式关卡(
3 checks背后15 more functions)逼出完整的逆向与数据流分析能力,并把经验沉淀为 CTF Field Guide; - Security Engineering & Tooling:承认 pintool 计数法“仍是暴力”的局限后,转向符号/共条件执行,用
assert(x+y+z!=3)一类的断言把“找输入”变成“解约束”,工程化为 Manticore + McSema 工具链; - Interdisciplinary Research:把同一方法论迁移到以太坊——智能合约是 literal programs,ethersplay 与
safe_add式的溢出不变式检查证明符号执行在 EVM 上同样成立。
对读者而言,这份材料的实战价值在于:它不是单点教程,而是一张“竞技 → 工具化 → 跨领域迁移”的方法论地图,且地图上的每个节点都能在 publications 仓库中找到对应的演讲、幻灯片与代码材料继续深挖。
【免费下载链接】publications
Publications from Trail of Bits
相关推荐
Building Secure Contracts 插件指南:Trail of Bits 智能合约安全技能套件
Building Secure Contracts 插件指南:Trail of Bits 智能合约安全技能套件 导读 本文介绍本仓库中 plugins/buil
AI 技能AI 插件应用安全网络安全AI 评测重返百亩森林:Trail of Bits 三年安全实践复盘(2016→2019)
重返百亩森林:Trail of Bits 三年安全实践复盘(2016→2019) 本篇文章以 Trail of Bits 技术分享《Return to the
低层安全实战指南:内存安全、符号执行与 Heartbleed 漏洞剖析(Trail of Bits HackNY 研讨会)
低层安全实战指南:内存安全、符号执行与 Heartbleed 漏洞剖析(Trail of Bits HackNY 研讨会) 本篇文章基于仓库中 Low leve
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考