Trail of Bits Blog 中文 笔记

Trail of Bits Blog 中文

blog.trailofbits.com 是 Trail of Bits 的官方博客,这是一家提供渗透测试、安全编码和软件安全评估等服务的网络安全公司。博客似乎专注于分享与网络安全相关的知识和见解,文章和帖子涵盖了软件安全、威胁建模、漏洞分析和安全编码实践等多种主题。网站的设计简洁、整洁,布局直接,使用户可以轻松浏览和找到特定的文章或感兴趣的主题。网站上有一个搜索功能,允许用户快速找到特定的文章或主题。此外,文章还按主题分类,使用户可以轻松浏览相关内容。博客还特邀了网络安全领域的专家撰写客座博文,为网站提供了多样化的视角和见解。总之,Trail of Bits 博客似乎是一个有价值的资源,为那些想了解更多关于网络安全的人和想了解该领域最新发展和趋势的人。

笔记线程

多哈希(Multihashing)是将多个值组合为单个哈希值的过程,是一项关键但常被误解的密码学任务。不安全的多哈希实现可能导致漏洞,尤其是在零知识证明等领域。Trail of Bits 推出了 SequenceHash 和 SequenceMAC,这两种新构造旨在为广泛的密码学哈希函数提供安全的多哈希方案。与仅绑定于 Keccak 的 NIST TupleHash 不同,SequenceHash 和 SequenceMAC 是哈希无关的,可与 SHA256、BLAKE 和 RIPEMD 等函数协同工作。这些新构造提供了明确的输入编码,防止对拼接输入进行操纵。它们还提供了长度扩展防护,这是许多哈希函数的关键安全特性。此外,SequenceHash 和 SequenceMAC 集成了可选的自定义字符串,用于协议绑定以防止重放攻击。SequenceMAC 作为带密钥的变体,为消息认证码提供了类似的安全优势。SequenceHash 采用简化的固定长度 128 位整数编码来表示输入字节计数,其长度后缀编码支持流式 API。该方法旨在实现简单,并能处理实际输入规模,上限为 ${2}^{128}-1$ 字节。其双重哈希构造类似于 HMAC,可防止长度扩展攻击,并支持带密钥的 SequenceMAC 模式。SequenceMAC 通过纳入密钥元数据,解决了 HMAC 中潜在的关键伪碰撞问题。目前已有三种 SequenceHash 和 SequenceMAC 的初始实现,分别提供于 Rust、Go 和 Python,并附带全面的测试向量。这些工具旨在简化开发者的安全多哈希工作。最终目标是为此常见的密码学挑战提供一个标准化且易于使用的解决方案。
阈值签名方案(Threshold signature schemes)是一种多方计算(MPC)方法,允许多方联合签名而无需单一私钥,正越来越多地用于可信执行环境(TEEs)中以增强安全性。MPC 将信任分散于多方之间,而 TEEs 则将信任根植于硬件。然而,若在 TEE 中运行 MPC 时未考虑不可信主机,可能会引入漏洞,例如恶意主机回滚文件系统状态,从而导致私钥份额泄露。若将 TEEs 视为纵深防御的一层,而非协议的替代品,则该组合具有益处。这种方法凸显了 TEE 认证在 MPC 部署中的作用、常见的审计陷阱以及最佳实践,如将强认证与 MPC 身份进行绑定。MPC 的安全性依赖于参与者的行为,其安全模型包括半诚实(honest-but-curious)和恶意安全模型。若 TEE 认证全面且完善,可将半诚实协议提升至提供针对某些攻击的恶意安全保证。TEEs 提供机密性、完整性和认证。认证对于分布式系统至关重要,它允许远程验证在 TEE 中运行的代码。该过程涉及 TEE 对其状态密码学哈希值进行签名,形成“引用”(quote),由远程方进行验证。验证需要检查引用签名、证书链,并将测量值与已知良好的值进行比对,通常通过可复现构建和二进制透明度日志实现。一个关键挑战源于信任模型的冲突:MPC 将信任去中心化,而 TEEs 则将信任集中于硬件制造商。TEEs 还颠倒了传统的安全范式,即信任 guest 代码而将主机视为不可信,从而引入了新的攻击面,如回滚攻击。虽然 TEEs 可通过认证确保协议合规性,从而缓解诸如编码歧义、参与者行为不当、参数缺失和输入验证缺失等问题,但它们并不能保证绝对安全。现实世界中的 TEE 实现存在漏洞,且认证过程可能不完整或被错误验证。一个常见的陷阱是认证测量不完整,即排除了关键组件,导致修改无法被检测。另一个问题是缺少验证步骤,例如未检查引用签名或证书链,这会破坏安全模型。这些问题凸显了在将 TEEs 与 MPC 结合时,需要严格的实现和验证实践。
CdXz5zHNQW_OsiM9P6GDU.webp
安全公司越来越多地利用人工智能超越代理代码审查,增强安全审计,在实际代码审查前构建定制工具和正式模型。例如,在审查缺乏开发工具的Miden虚拟机时,代理花费六个月时间创建了LSP服务器、反编译器、静态分析引擎和虚拟机执行器的精益模型。这些工具发现了重大安全漏洞,例如未经验证的校验者输入,可能导致Falcon签名伪造和资金盗窃。精益模型还为Miden核心库的大量内容产生了95个机器校验的正确性证明。Miden虚拟机是一款新型零知识虚拟机,拥有自己的汇编语言(MASM),由于其堆栈机架构和缺乏开发工具,带来了独特的评审挑战。为此,团队优先构建关键工具,首先是LSP服务器和VS Code扩展,用于语法高亮、代码导航和指令文档。接着,开发了MASM过程的反编译器,尽管存在隐式栈操作和未声明签名等复杂性,仍能提供高层语义信息。该反编译器历时数月,带来了宝贵的内部分析框架和静态分析的中间表示。利用这一中间表示,团队构建了一个静态分析的抽象解释引擎,实现了验证验证者提供的值、强制类型约束并确保局部变量初始化的通行证。这导致发现了400多个潜在的类型验证改进和一个高严重性漏洞:mod_12289过程中一个受限不足的建议值。该漏洞使恶意校验者能够操控剩余值,可能伪造Falcon签名并耗尽Miden账户。除了发现漏洞外,代理还探索了利用精益进行形式验证,建模Miden虚拟机执行器,并自动将MASM过程转换为精益。这种由代理驱动的形式建模为二进制算术组件提供了95个正确性证明,揭示了现有单元测试遗漏的两个细微缺陷:64位右转(rotr)中的一个边缘案例和256位乘法(wrapping_mul)中的一个问题。这些先进的工具和形式建模工作,得益于近期人工智能代理的进步,显著提升了安全审查的深度和质量,这在时间和资源限制下是此前难以实现的准备工作水平。
CdXz5zHNQW_gM7zeoaym0.webp
1Password 近期关于 AI 补丁修复的报告存在缺陷,其宣称的 26% 完美修复率具有误导性。该数据因实验设计偏差而失真:部分实验刻意指示 AI 代理应用错误修复,另有部分试验中代理无法编译或测试其补丁。该报告的 methodology 选取了高难度的漏洞样本,22% 的提示词要求代理应用错误修复,三分之一试验禁止进行测试。此外,模型推理设置不一致,且在评分阶段对预期的行为变更进行了惩罚。我们对 1Password 数据进行了重新分析,排除了指令不当或未进行测试的试验,结果显示 86% 的补丁成功阻断了提供的漏洞利用代码,证明了其具备有效的补丁修复能力。这一结果与报告的标题相悖,表明在合理条件下 AI 具有显著的补丁修复能力。自动化评分同样存在问题,与人类评审者的意见一致性较低,且存在接受不完整修复或将有效修复标记为回归的情况。人类开发者即使在理想条件下(拥有详细报告和专业评审)也会犯错。在 Trail of Bits 的安全评估中,其首次修复中有 12.5% 未能完全解决问题。在真实世界项目中,我们与 OpenAI 及 Patch the Planet 合作的联合倡议显示,维护者合并了 67.7% 的 AI 辅助拉取请求,其中 72.2% 的合并无需进行与安全相关的修订。值得注意的是,在一例中,维护者和 AI 代理在修复 freenginx 内存安全漏洞时,独立引入了相同的崩溃,凸显了常见的陷阱。此后,我们审查了 Patch the Planet 项目中 33,500 个后续提交,发现我们的补丁引入了功能缺陷、构建/测试/发布自动化缺陷以及性能问题,但未发现可利用的安全漏洞。为改进 AI 补丁修复,我们发布了两种新的代理技能:"补丁后验证"(post-patch-validation)和"评审 walkthrough"(review-walkthrough)。"补丁后验证"技能指导代理重现原始漏洞、测试替代的失败路径并检查回归,旨在更早地捕获不完整的修复。
CdXz5zHNQW_Lgu2ORz1CG.webp
作者通过让 GPT 5.6-Cyber 尝试逃逸 QEMU/KVM 虚拟机,评估了其网络攻击能力。该 AI 代理成功三次逃逸虚拟机,展现出先进的自主黑客能力。最初,它利用了近期披露的主机内核漏洞;在更新主机后,它转而利用已披露但尚未归类为安全漏洞或未集成到包维护者更新中的漏洞;最后,即使从最新上游源码重新编译 QEMU 及其依赖项,该 AI 仍发现并利用了多个零日漏洞。该代理持续运行数小时,自主开展漏洞研究、开发利用代码,并从失败尝试中回溯。作者的主要工作仅在主机内核死锁时重启机器。这一经历表明,传统的虚拟机沙箱不足以遏制先进的 AI 代理,应将其视为高级持续性威胁。作者指出,虚拟机与主机之间共享的资源及通信路径构成了显著的攻击面。该 AI 的持久性以及将多个漏洞串联利用的能力尤为令人印象深刻。在成功逃逸之前,它探索了多种攻击向量,包括网络服务和硬件漏洞。这些利用涉及 QEMU、Linux KVM 和 libslirp 中的漏洞,其中包括若干零日漏洞以及作者 Debian 12 环境中未修补的安全问题。这些发现挑战了当前的软件安全假设,表明即使更新周期较慢的"oldstable"发行版也极易受到攻击。作者建议,快速更新的发行版现在是遏制此类 AI 代理的必要条件。采用像 Firecracker 这样的虚拟化技术,其设计以最小化攻击面和安全性为核心,可提供更稳健的解决方案,因为该 AI 仅能导致主机死锁而无法逃逸。最终,要有效遏制先进的 AI 代理,必须重新评估沙箱的质量,采纳更严格的安全基础原则,包括最小权限、增强的日志记录、主动监控、限制运行时间,并确保每次使用的环境纯净。
研究人员在 Provenance 区块链(一条公共权益证明链)中发现了一个关键漏洞,该漏洞允许未经授权的用户获取对标记账户的管理权限。此漏洞影响了主网上代表活跃金融资产的 82 个标记(Marker)。该漏洞存在于 1.28.0 版本之前的版本中,并于 2026 年 4 月 1 日报告给 Provenance。该漏洞在 1.28.0 版本中得到缓解,并在 1.29.0 版本中完全修复。标记是 Provenance 用于同质化代币的核心原语,每个标记控制一个面额、一个访问控制列表、一个供应量字段以及一个托管余额。该漏洞存在于修改标记访问控制列表的授权检查中。具体而言,旨在授予持有标记 100% 供应量用户的访问条件的实现存在缺陷。对于以零供应量激活且供应量未固定的标记,存储的供应量字段保持为零,导致授权检查对任何调用者都评估为平凡成立。这使得攻击者能够通过单笔交易为自己授予管理员、铸造和提现权限,而无需持有任何代币。随后,他们可以铸造新代币或从标记的托管余额中提取资产。影响十分严重,部分标记中的托管资金总额约为 50 万美元。初步缓解措施增加了一项检查,以防止在存储的供应量为零时授权通过。然而,完整修复涉及修改代码,直接从银行模块读取实时流通供应量,从而消除了状态不同步问题。根本原因被确定为标记结构与银行模块之间的状态不同步,以及授权谓词对零供应量状态存在漏洞。文章建议改进规范并采用基于属性的测试作为未来的预防措施。
Uniswap v4 引入了钩子(hooks),使开发者能够自定义池的行为,例如动态费用和外部集成。这将安全责任转移到了应用层和钩子代码上,正如 Cork 和 Bunni 漏洞所示,两者造成的损失合计超过 2000 万美元。这些漏洞源于应用层逻辑,而非 Uniswap v4 核心协议的缺陷。对审计报告的深入分析揭示了钩子代码中七种常见的失败模式。PoolManager 现在持有所有池的状态,而钩子作为独立合约在特定的生命周期点执行。池的身份包含其钩子地址,因此信任错误的 PoolKey 会影响所交互的池。基于会话的模型类似于闪电贷,确保在交易结束时货币差额结算为零。钩子开发者必须验证各项假设,包括调用者授权、合法池、自定义会计逻辑以及外部集成的安全性。一个关键的失败模式是未检查调用者,从而允许直接恶意调用钩子函数。使用 BaseHook、SafeCallback 以及 onlyPoolManager 有助于强制执行调用者检查。另一个问题是误将任何池视为合法;钩子必须绑定到规范池,或维护允许列表并重新检查 PoolIds。自定义会计错误可能导致价值静默泄露,因为结算仅检查总体差额,而不验证内部钩子会计的准确性。开发者必须将逻辑放置在针对预期状态的正确钩子中,因为 beforeSwap 使用换汇前的数据,而 afterSwap 使用换汇后的数据。钩子地址本身编码了权限;开发者必须保持这些位与已实现函数同步,以避免错误。最后,钩子故障可能阻塞池的操作;关键逻辑不应回滚并阻断用户流程,且必须谨慎处理外部依赖,以防止拒绝服务。
CdXz5zHNQW_VfsrNpCh6P.webp
Codex的目标特性通过让虫子狩猎独立朝着成功条件努力来增强,但要获得好结果,需要合适的提示、范围和每次结果数量。在“Patch the Planet”项目中,Codex指向了广泛使用的代码库,如Rust、curl和zlib,发现了所有提交的Rust漏洞,包括一个合理漏洞和一个编译错误。工程师们最终总结出三种使用目标功能的技巧,包括让Codex写目标、定义结果而非路径,以及为每个代理分配一个结果。让Codex来写目标之所以有效,是因为它比人类事先能指定更了解目标和自身倾向,并且能将威胁模型转化为具体、可测试的成功标准。定义结果,而非路径,意味着花费代币来定义结果,几乎没有告诉模型如何达到目标,一个好的目标能命名结果,精确定义它,并强制坚持。如果每个代理只分配一个结果,如果两个竞争结果放在一个提示词中,优化会不均衡,最好完全将覆盖范围从提示中移除,让Codex识别最有前景的攻击面。目标漏洞搜索最有效的资源是威胁模型文件,它精确定义了有效漏洞的样貌,但不解释如何找到它们。该功能目标是增强漏洞搜寻工作的强大工具,但其有效性仍依赖专家知道该去哪里查找、验证结果,以及维护者希望看到的有效漏洞披露。总体来看,该目标功能在发现漏洞方面取得了成功,包括Rust中的所有漏洞,并且有潜力打造一个定制的安全基础设施,使安全研究人员需要数周时间在一天内完成。
CdXz5zHNQW_28XGJVPJIa.webp
该公司发布了 Mewt,一个开源的变异测试引擎,用于识别测试套件中的漏洞,现已将其扩展以支持 DAML,即用于 Canton Network 应用程序的语言。Mewt 读取 DAML 代码,生成变异体,并将其通过现有测试套件运行,以统计存活变异体的数量。该数量反映了测试套件的检查程度,相较于传统的代码覆盖率报告,能提供更准确的测试有效性度量。代码覆盖率报告可能具有误导性,因为它仅表明代码是否被执行,而无法判断若代码未按预期工作,测试是否会失败。相反,变异测试通过破坏代码并检查测试是否失败来对测试进行评级,从而提供更全面的测试有效性度量。Mewt 对 DAML 的支持包括两种针对授权原语的新变异,而授权原语是 DAML 合约中常见的漏洞来源。该工具可轻松集成到现有工作流中,其输出能清晰指出缺失且需要编写的测试。通过使用 Mewt,开发人员可确保其测试全面且有效,降低代码中漏洞和错误的风险。公司计划继续改进 Mewt,包括增加更多变异类型,并提升其检测等价变异体的能力(即不影响代码行为的变更)。总体而言,Mewt 为开发人员提供了一个强大的工具,以提升测试的质量与有效性;其对 DAML 的支持是确保 Canton Network 应用程序可靠性与安全性的关键一步。使用 Mewt 有助于开发人员在开发早期识别并修复漏洞,从而降低交付高质量软件所需的总体成本和时间。
研究人员发现,某些 RSA 私钥的比特位严重偏向 0,这种特性可被检测并导致快速分解。与 badkeys 项目的 Hanno Böck 合作,他们发现了数百个具有此特性的唯一密钥,并分析历史数据以追踪该问题的演变。这些密钥中 0 比特的分布模式往往高度结构化,从而使得能够开发基于多项式的密码分析技术以利用该模式。研究人员识别出两类具有重复 0 比特块的 RSA 模数模式,其中一种模式尚未得到解释,另一种则归因于旧版 CompleteFTP 文件传输软件中大整数代码的类型不匹配。CompleteFTP 的漏洞还生成了易受攻击的短袖 DSA 密钥;研究人员通过互联网扫描恢复了 603 个唯一的 RSA 私钥和 74 个 DSA 密钥。badkeys 项目是一个开源服务,用于检查公钥是否存在已知漏洞;通过对真实世界密钥数据集的搜索,研究人员发现了大量在野外存在且具有上述模式的密钥。研究人员逆向工程了 CompleteFTP 的漏洞,发现其根源在于 limbs 的大小与随机数生成器(RNG)输出大小之间的不匹配。在 CompleteFTP 团队发布了一个自动检查易受攻击密钥并在需要时提示用户重新生成密钥的更新后,该漏洞已被遏制。研究人员还开发了一种通过将整数表示为多项式来进行整数分解的技术,该技术可用于分解一般的 RSA 模数。这些漏洞的发现凸显了实践研究的重要性,以及持续监控密码学实现以识别和解决潜在弱点的需求。
CdXz5zHNQW_iFKnuRveAb.webp
CdXz5zHNQW_sN7fPOqey7.webp
Trailmark 是一个新的开源库,能够将源代码转换为可查询的调用图。该图表示函数、类及其关系,并包含语义元数据。Claude 技能可以通过 Python API 直接与该图交互。传统的安全分析通常依赖发现列表,但攻击者以图的方式思考,这使得防御者处于劣势。Trailmark 旨在为 Claude 等 AI 模型提供基于图的推理能力。变异测试是一种通过引入微小代码变更来评估测试质量的方法,会产生大量存活的变异体。这些变异体的扁平列表无法区分等价变异体、死代码或真正具有意义的变异体。Trailmark 使 Claude 能够根据安全相关性对这些变异体进行分诊,例如从不可信输入的可到达性角度进行分析。该库分三个阶段处理代码:使用 tree-sitter 进行解析以生成抽象语法树(AST),索引到高性能图中,并查询调用者、被调用者和攻击面等信息。Trailmark 支持十七种编程语言,并提供八个预构建的 Claude Code 技能。这些技能可协助完成变异体分诊、测试向量生成和协议图绘制等任务。例如,"genotoxic"技能利用图分析对存活变异体进行分类;"vector-forge"技能则生成测试向量以填补已识别的覆盖率缺口。Trailmark 还集成了静态分析器和审计工具的发现结果,并将其映射到代码图上。在加密库的内部使用中,我们发现等价变异体在测试充分的代码中往往占多数,而扁平列表会遗漏这一细节。图分析还揭示了架构瓶颈,例如 libhydrogen 中单个置换原语影响了所有加密操作。对于缺乏标准化测试向量的新颖构造,变异测试通过识别测试未能约束代码行为的位置而证明其价值。在各种代码库中,出现了常见模式:算术模块具有较大的爆炸半径,编解码器解析器是模糊测试的理想目标,而基于属性的测试往往稀疏。最终,Trailmark 作为连接不同分析工具的纽带,使更针对性的安全评估成为可能。