一次密钥泄露,教会我的四件事

前段时间,服务器上的一把云 API 密钥泄露了。

处置的过程不算复杂,但有几个瞬间让我印象很深。我把它们写下来,因为这几件事不只适用于服务器。

一、出事的地方,通常不是你最在意的地方

密钥不是被黑客攻破的,是我自己把它明文放在了不该放的地方——服务器的一个临时目录里,几个迁移时留下的 SQL 文件,里面躺着完整的密钥。

我为站点做了很多防护:WAF、回源白名单、后台密码。结果漏洞不在防线上,在一个我压根没想起来的地方。

人总是盯着自己在意的地方加固,却忽略那些”早就忘了但还留着”的东西。

二、你以为的冷门入口,其实天天有人扫

顺手看了一眼访问日志,最让我意外的是一条:

xmlrpc.php —— 被请求了 177,349 次,全部返回 200。

这个东西我装了 WordPress 之后就没管过。我以为没人会碰它。实际上,它是最经典的爆破加速器:一次请求可以试几百个密码,还能被别人当跳板去做攻击。

结论很反直觉:攻击者盯的从来不是你的重点,而是你的疏忽。而疏忽的共同特征是——你忘了它。

三、改密码比自己想的更值钱

后台的登录凭证曾经以明文形式落进过日志。发现这一点的时候,第一反应是”赶紧把日志删了”。

但没用。删日志治不了已经外泄的东西。

真正解决问题的是最土的一招:改密码 + 换签名密钥。而这一次有个意外收获——这套系统的登录凭证里绑了密码的哈希,所以改一次密码,所有已经发出去的旧凭证当场全部失效。

这给我一个教训:处置安全事件的时候,不要追求”聪明”的解法。最朴素的那些动作(换钥匙、断来源、堵入口),恰恰是唯一真正管用的。

四、事后复盘比事后补救重要

事情处理完,我花了比处置更长的时间去做一件事:把根因写清楚。不是写”我以后会注意”,而是写清楚三件事——

漏洞从哪来、为什么之前没发现、下一次靠什么机制自动发现。

写不清楚,下一次还会栽在同一个地方。

最后

安全这件事最容易犯的错,是把它当成一次性的任务:做完了,就忘了。

它不是。它更像是你每天出门前看一眼门锁——很烦,很没成就感,但你一旦不看,代价就是全丢。

十七万次访问教给我的,就是这一句:你忘记的地方,就是别人进来的地方。