OceanAltOceanAlt
latest2026-07-207 分钟读完

攻防实验室 #4:我们能悄悄抹掉自己的攻击记录——审计日志不设防

上期我们污染了审计链的「源头」,这期去删「记录本身」。真实结果:一次被拦下的攻击,管理员两下就能从威胁库和审计日志里删干净、不留痕迹——我们自己的「删除」按钮就是证据。支柱5(可追溯/不可抵赖)形同虚设。我们把审计日志改成 hash 链:删或改任意一条都会断链、可被校验发现。

OOceanAlt 编辑部
分享:XLinkedInFacebookTelegramWhatsApp微博

攻防实验室 · 第 4 期。上期结尾我们说:要去打审计链——被拦下的攻击,日志能不能被伪造或抹掉? 答案是:能。两下就够。

前三期我们打身份、打限额、打归因。这一期打的是支柱 5:可追溯与不可抵赖——出了事,能不能查到、赖不掉。

结果:我们连"出过事"这件事本身都能抹掉。

攻击:让一次攻击从没发生过

网关拦下攻击后,会写两处记录:一条 ThreatEvent(威胁库),一条 AuditLog(审计日志)。听起来很完备。

问题是——这两张表就是普通的数据库行。谁有后台权限,谁就能删。而且我们自己就给了删除按钮:威胁库页面那颗"删除",清空演示数据那颗"清空"。

真实运行结果(线上后台):

1) 攻击者发起一笔越权支付
   → 被拦于 Firewall/Limit,写入 ThreatEvent #4021 + AuditLog

2) 管理员(或任何拿到后台的人)点"删除"
   → ThreatEvent #4021 消失
   → 审计日志里也没有"这条被删过"的任何痕迹

3) 事后审计
   → 查无此事。攻击像从没发生过。

第 2 步是致命的:记录攻击的表,和被攻击者能删的表,是同一张。 一个能被清空的日志,不是日志,是留言板。

更阴的一种玩法是不删、改:把一条威胁记录的对手方地址改成一个无辜地址,事后审计就指向错的人——和第 3 期"污染归因"殊途同归,只是这次改的是结果而不是源头

病根:追加 ≠ 删不掉

我们默认"写进数据库"就等于"留下了证据"。不是的。

普通数据库行天生可增、可删、可改。证据的价值不在于它被写下来,而在于它被改动时你能发现。 我们做到了前者,没做后者。这就是支柱 5 之前的真相:一个诚实的人删不掉、不诚实的人随手就删的日志。

补:hash 链式防篡改日志

改法不复杂,但它把"悄悄删一条"变成了"必须重写整条尾链":

每条审计记录现在都嵌入前一条记录的哈希,像账本那样首尾相扣:

记录N.hash = sha256( 序号 | 时间 | 操作者 | 动作 | 对象 | … | 记录N-1.hash )
  • 删掉中间任意一条 → 后一条的"前哈希"对不上,链断。校验会定位到断在第几条。
  • 改动任意一条的内容 → 这条重算出的哈希和存的不一样,当场暴露。
  • 想神不知鬼不觉,就得把这条之后的每一条全部重算重写;而链尾的最终哈希(我们把它作为"账本指纹"显示在审计页)会跟着变——只要指纹被外部记过一次,整条尾链的重写就藏不住。

而且我们把**"删威胁记录"这个动作本身也写进了这条链**。你依然能删掉一条威胁,但"你删了它"这件事,进了一个你改不动的账本。

补完之后,同样的攻击:

| 攻击 | 修复前 | 修复后 | |---|---|---| | 删掉一条威胁 / 审计记录 | 🔴 无痕消失 | ✅ 校验立即报"链断裂 @ 第 N 条" | | 篡改一条记录的内容 | 🔴 无痕改写 | ✅ 重算哈希不符,当场暴露 | | 正常追加新记录 | 写入 | ✅ 自动入链,不影响使用 |

这次修复没做到的(必须说清)

hash 链不让行"删不掉",它让"删和改"变得"藏不住"。 有数据库权限的人依然能物理删除整段记录——只是校验会告诉你"这里断了"。要做到连我们自己都无法抵赖,还差一步:把链尾的账本指纹,锚定到一个我们自己也控制不了的地方(定期公示,或写到外部链上)。那一步做完,"重写尾链"这条后路才算彻底堵死。我们没有假装已经做到——这正是下一期的活。

三个教训

1. 存证的表,不能是当事人能删的表。 我们把攻击记录,和被攻击者的操作权限,放进了同一层。裁判和选手不能是同一个人。

2. "写进了数据库"给人一种虚假的踏实。 这和第 3 期那个"会撒谎的 KYA"是同一类错误:看起来有记录,真要用时发现记录能被随手改。以为有证据的人,比知道没证据的人更危险。

3. 我们连续四期都打穿了自己。 挡住六发、漏了累计、地基是空的、日志能抹掉。这不丢人,不敢公开才丢人。 一个标准值不值得信,不看它宣称多完备,看它被自己人打穿时敢不敢把结果贴出来——包括这一条"我们本可以抹掉证据"。

下一期

我们会把账本指纹锚定到外部,让"重写尾链"这条后路也断掉;顺带看看:授权意图(mandate)能不能被重放——一张签过的授权,拿去付第二次会怎样?

亲手打一次:oceanalt.com/firewall · 用你自己的 agent 测:集成指南

(OceanAlt 攻防实验室 · 研究笔记)

分享:XLinkedInFacebookTelegramWhatsApp微博

这篇内容的出处与状态

署名
OceanAlt 编辑部
首次发布
2026-07-20
最后更新
2026-08-01
原始资料
未标注来源

引用这篇内容

OceanAlt 编辑部(2026)。《攻防实验室 #4:我们能悄悄抹掉自己的攻击记录——审计日志不设防》。OceanAlt。https://oceanalt.com/zh/articles/attack-lab-4-erasing-the-evidence(访问日期:2026-08-03)

本文遵循 编辑准则与事实核查标准。发现错误请告诉我们,核实后会在此处公开更正。