区块链 区块链技术 比特币公众号手机端

审计通过了,你仍被洗劫一空:2026年审计无法捕获的漏洞利用模式

有一种特定类型的事后复盘,在 2026 年已经常见到令人沮丧。某个协议被卷走了数千万或数亿美元。社区问出了那个显而易见的问题:难道没有审计过吗?答案是:审计过了,而且往往不止一次,还是由知名机构执行的。审计通过了。协议照样被抽干了。

这不是一个关于糟糕审计机构的故事,而是一个关于错配的故事。审计检查的是代码。但今年最大的几起攻击并没有破坏代码。它们破坏的是代码之外的东西:一把被攻破的密钥、一个被操纵的运营者、一个被劫持的治理流程、一个被滥用的可信依赖。合约完全按照它被编写的方式执行了,只是下达指令的人不对。

如果你在链上构建,这就是你必须接受的那个令人不安的转变。一份干净的审计报告是必要的,但已经远不足以保障安全。以下要谈的是审计无法捕获的 2026 年攻击模式、为什么连优秀的审计也会把它漏掉,以及你真正需要防御什么。

什么样的攻击模式能通过审计?

这是对运营层的攻击,而不是对代码的攻击。攻击者不去寻找合约中的漏洞,而是攻破合约周围的人、密钥、流程和信任:被盗或被钓鱼的签名者密钥、被社会工程学欺骗的运营者、被劫持或仓促通过的治理投票,以及被滥用的特权访问。合约执行了一笔完全有效的交易,而这笔交易恰好是恶意的,因为它是由一个被攻破的一方授权的。审计验证代码是正确的,而代码确实正确。漏洞出在授权环节。

这种模式的决定性特征在于:代码中没有任何东西是坏的。

当签名者密钥被盗时,多签合约完全按设计运行。当运营者被骗批准一次恶意升级时,升级机制正常运行。当一项治理提案被强行推进时,治理合约准确统计了投票。每一行代码都按写好的方式运行。攻击的焦点在于谁能拉动操纵杆,而不在于操纵杆是如何建造的。

这正是审计会漏掉它的原因。审计回答的是“这段代码正确吗?”而运营层攻击让这个问题变成了一个错误的问题。代码是正确的,正确的问题应该是:“谁可以授权这个操作?要成为那个人又有多难?”

为什么审计会遗漏它?

因为审计有明确的边界,而运营层恰好在这条边界之外。审计人员是在某个时间点上,对照已知的漏洞类别,审查代码的既定写法。他们不控制你的密钥管理、你的运营者培训、你的治理时间锁、你的部署流程,以及你团队抵御社会工程学的能力。而这些正是 2026 年攻击落点所在。审计可能无懈可击,却依然覆盖不到攻击者实际利用的攻击面。

审计只是某一层的快照,而攻击者只是转移到了另一层。

代码审查看的是合约逻辑。它可以确认代码中没有重入漏洞、没有整数溢出、没有失效的访问控制检查。但它无法验证:控制管理员角色的私钥是否正躺在某个被钓鱼工程师的收件箱里;治理时间锁是否长到足以应对恶意提案;运营者又是否不会在压力下批准一个伪造的请求。

这些东西不在代码仓库里,而在你的运营、你的人和你的流程中。审计的范围从来就没有覆盖它们,所以一份完美的审计和一场灾难性的安全事件可以同时存在,而且毫不矛盾,因为它们衡量的是不同的东西。

2026 年最大的损失究竟有什么共同点?

它们是授权失败,而不是代码失败。今年最大的损失来自被攻破的密钥、社会工程学,以及治理或运营层面的劫持,而不是来自经过充分审查的合约中的巧妙漏洞。攻击者发现攻破一个人或一份凭证比击败代码更容易,所以他们就这样做了。这种模式在多个事件中反复出现:一笔由被攻破的权威签署的有效交易,恰好做了代码允许的事情。最薄弱的环节是访问权限,而不是逻辑。

纵览今年最严重的几起事件,共同线索不是某个共享的漏洞,而是一个共享的类别。

在一个又一个案例中,合约是健全的,入侵来自运营侧:一把本应安全的密钥变得不安全,一个本不该被骗的运营者被骗了,一条本应有抵御能力的治理路径被仓促推进或劫持了。攻击者选择了成本最低的路径,而在 2026 年,这条成本最低的路径越来越多的是一个人或一份凭证,而不是一行代码。

这是这一年要求我们做出的诚实认知转变。我们花了十年时间加固智能合约代码,而它已经足够有效,以至于攻击者绕开了它。逻辑变强了,所以他们转而攻击授权。如果你的安全模型仍然假设合约是战场,那你防守的是攻击者已经放弃的地盘。

那么你真正需要防御什么?

要用对待代码的同等严谨度来防御授权层。这意味着:密钥管理要经过加固,使用硬件支持的分布式签名,不能有单点故障;治理时间锁要足够长,足以检测并响应恶意提案;角色要遵循最小权限,让任何单个被攻破的密钥都无法造成灾难性后果;运营者流程要能抵御社会工程学;运行时监控要具备暂停能力。目标是让攻破一把密钥、一个运营者或一张选票,都不足以把你彻底掏空。

如果攻击针对的是授权,那么防御的关键就是让授权难以被颠覆、也难以被快速利用。

记住我以便更快登录

先从密钥开始,因为被盗的密钥是反复出现的反派角色。任何单个密钥都不应该能够转移大额资金或更改关键参数。签名要分散到多个参与方和硬件设备之间,这样即使有一个人被钓鱼,也不至于满盘皆输。

// 没有单个密钥是灾难性的:高阈值加上反应延迟
require(approvals >= QUORUM, "insufficient signers");          // 需要多个签名者,而不是一个
require(block.timestamp >= proposedAt + TIMELOCK, "still in delay window"); // 留出检测时间
_execute(action);

然后给自己留出时间。对特权操作设置时间锁,可以把瞬间的资金抽离变成一个窗口期,让恶意提案在这段时间内被发现并阻止。再配合监控来盯住异常的特权活动,并具备经过测试的暂停能力。

// 一个断路器,在授权被滥用时为你争取几分钟
function _guard(uint256 amount) internal {
    if (paused) revert("protocol paused");
    if (amount > LARGE_WITHDRAWAL && !timelockCleared(msg.sender)) revert("large action needs delay");
}

最小权限原则把这一切串联起来:任何单一角色拥有的权力越少,关键操作越需要多个独立参与方加上延迟,单点攻破所能达成的效果就越小。

如何防御人的层面?

把运营者和流程视为攻击面的一部分,并有意识地对它们加以加固。对团队进行社会工程学防御培训,因为密钥和审批正是这样失守的。任何高价值或特权操作都要求独立验证,这样就不会有人因为被骗而独自授权一次抽干资金的操作。对敏感操作使用清晰的带外确认,限制可发起这些操作的人员,并演练事件响应。这样,当真实攻击来临时,面对它的会是一个训练有素的团队,而不是惊慌失措的团队。大多数运营层面的入侵始于某个人,所以要防御的就是那个人。

这是工程师们最不爱听的部分:很多安全不是技术问题。

密钥被盗,是因为有人被钓鱼;恶意升级被批准,是因为运营者被操纵,轻信了一个伪造的请求;治理攻击得逞,是因为没人盯着提案队列。这些都是人和流程的失败,需要的自然也是人和流程层面的防御。

具体来说:高价值操作必须通过独立渠道进行独立确认,这样单个被骗的人无法独自完成这些操作。限制谁可以发起敏感操作。针对目前加密领域运营者正面临的社会工程学手段,对团队做专门培训,因为泛泛的安全意识教育覆盖不到这些。还要进行事件响应演练,这样当异常情况出现时,团队依靠的是练过的反应,而不是临场的惊慌。能在运营攻击中存活下来的协议,都是把它当作人的问题来准备的协议,而不仅仅是代码问题。

构建者本周应该做什么?

去审计你的代码审计所忽略的那一层。梳理每一个特权操作,问一问谁能授权它,以及要颠覆它有多难。把密钥分散保管并加固,让任何单一密钥都不具备灾难性影响。为关键操作添加时间锁,强制实施最小权限,并建立监控,确保具备经过测试的暂停能力。对团队进行社会工程学防御培训,并要求敏感操作必须使用带外确认。保留代码审计,并在此基础上增加一次运营安全审查,因为代码审查从来抓不到这类问题。

这是一份用来弥合缺口的小清单:

  • 你是否已梳理每一个特权操作,并明确识别出谁或什么能够授权每个操作?
  • 签名是否采用分布式方案并由硬件支持,让任何单个被攻破的密钥都无法转移大额资金或更改关键参数?
  • 关键操作是否都放在时间锁之后,且时间锁长到足以检测并阻止恶意提案?
  • 你是否强制执行最小权限,让任何单一角色都无法集中灾难性的权力?
  • 是否对特权活动有运行时监控,并具备经过测试的暂停能力?
  • 你的团队是否接受过专门针对运营者的社会工程学手段培训?敏感操作是否要求带外确认?
  • 你是否进行了运营安全审查和事件响应演练,而不仅仅是代码审计?

如果你能对这份清单逐项回答“是”,你就已经开始防御攻击者实际在使用的攻击面了。如果你的全部安全姿态只是一份代码审计,那你防御的是上一个时代的攻击,而不是这个时代的。

代码从来就不是完整的协议

2026 年最艰难的一课是:智能合约不是协议。它只是一个系统中的一部分,而这个系统还包括密钥、人、流程、治理和信任。攻击者攻击的是整个系统,而不是你审查过的那一个组件。

一份干净的审计是真正的成就,也确实是必要的。但它的回答,比大多数团队意识到的要窄得多:这段代码正确吗?而在这个最大损失来自“正确代码被一个已攻破的权威指示着去执行错误操作”的年份里,这个问题即使回答得完美,也依然让攻击者借以进入的那扇门敞开着。

那些不再被抽干的团队,不会是有最干净审计报告的那批,而是那些把用在代码上的纪律,延伸到控制代码的密钥、操作代码的人和改变代码的治理上的团队。审计代码,然后审计一切可以指示代码做什么的东西。第二份审计,才是挡在你和下一篇事后复盘之间的那道防线。

加固授权层——密钥、治理、运营者和监控,这些是代码审计永远覆盖不到的——是决定一份健全的合约能否始终是一个安全协议的关键验证工作。这就是我们所做的工作。

  • 原文链接: medium.com/@ancilartech/...
  • 鸿途知科网 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
版权声明

本文仅代表作者观点,不代表区块链技术网立场。
本文系作者授权本站发表,未经许可,不得转载。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门