AI 能写代码了,安全工程师的护城河在哪

上周 code review,一个年轻同事提交了一个 SQL 注入修复的 PR。我点开一看,commit message 写着”Copilot generated fix”。

修得对不对?对。参数化查询,写得比我自己还规范。

但我盯着那行代码,还是打了个 return。不是因为它有 bug,是因为他只修了眼前这个注入点,而同一个模块的另外三个函数里,一模一样的拼接写法纹丝不动。AI 帮他修了一个洞,没告诉他这一刀要切到骨头。

这件事让我想了很久。当 Copilot 越来越强,当代码这件事越来越像”描述需求 + AI 生成”,一个干了十几年安全的人,到底还有什么不可替代的地方?

第一层:威胁建模——AI 修洞,人看棋盘

安全圈有句话:”能发现漏洞的是好工程师,能画出攻击面的是安全架构师。”

AI 发现漏洞的能力正在逼近甚至超越人类。给它一段代码,它能瞬间标出 OWASP Top 10 里的所有坑。但它不看棋盘——它不知道这个系统对外暴露了哪几个接口、数据流是怎么转的、哪个环节一垮就是 P0 事故。

举个真实的例子。我们内部有个老系统,代码写得一言难尽,但从安全角度看它其实不危险——因为它跑在隔离网段,只跟两个白名单服务通信,出不了大事。反过来,有个新重构的微服务,代码质量很高,但它同时接入了用户系统、支付网关和第三方物流,任何一个环节的鉴权疏漏都可能打穿整条链路。

这件事,AI 不会告诉你。它只看代码片段,不看系统拓扑;只分析语法,不理解架构。安全的”危”与”险”,从来不在代码里,在上下文里。

威胁建模的人,看的是棋盘;AI 看的是棋子。 棋子可以交给它,棋盘得自己盯。

第二层:攻防直觉——在坏人之前想到坏的可能

有一回凌晨三点,监控告警弹了一条异常:某接口的 QPS 突然从几百涨到两万。

值班同事看了半天,说流量来源都正常、没报错、不像攻击。但我本能地觉得不对——凌晨三点,什么正常业务会有这种脉冲?

我翻了三天的日志,发现这个脉冲每隔 27 小时出现一次,每次持续 11 分钟,来源 IP 一直在变但地理分布高度集中在同一个云服务商网段。最后查出来:是竞品在爬我们的数据,用了一批弹性 IP 轮换,故意避开了频率告警的阈值。

这事 AI 能发现吗?能,但前提是有人先定义了”什么叫不对劲”。

安全很多时候不是”看见异常”,而是”感觉到哪里可疑”。这种感觉不是玄学,是十几年踩坑踩出来的肌肉记忆。你知道攻击者会怎么想,因为你自己在红蓝对抗里扮演过他们;你知道什么数据值得偷,因为你做过资产梳理;你甚至能猜到对手下一步会试探哪个参数——因为在真实对抗里被人这样试探过。

AI 擅长在已知的攻击模式里匹配,但攻击者从来不会按剧本出牌。那个”不对劲”的直觉,是我花了十几年攒下来的,一张 prompt 买不走。

第三层:合规判断——安全不是绝对干净,是该干净的都干净

有一次,业务方急着上线一个新功能,问我能不能先发再补安全测试。

我说:可以,但有条件。第一,这个功能不碰用户敏感数据,先发没硬伤;第二,三天内补测完,延期我就直接挂整改单;第三,你邮件给我一个书面的风险确认,抄送你的主管。

业务方愣了一下,照做了。

这件事说穿了不值钱:安全不是追求零风险,是在风险可控的前提下让业务能跑。 但”可控”这两个字的刻度在哪,没有标准答案。

AI 可以给出一百条合规检查项,但它判断不了”这个风险现在能不能放”。它不知道当下的业务压力有多大、这个功能的竞品窗口有多紧、这个开发团队的信誉靠不靠谱。这些判断,需要人在组织里泡了很多年才能做。

合规的本质不是 checklist,是 trade-off。而 trade-off 的核心不是技术,是权重——你对人、对业务、对时间窗口的判断。这件事,AI 连门槛都摸不到。

儿子的”护城河”

周末在家写这篇文章,四岁的 dorian 凑过来看我的屏幕。”爸爸,你在写什么?”我说,在写一个很厉害的东西快要代替爸爸写代码了。

他想了两秒,很认真地问我:”那它会不会也代替你陪我搭积木?”

我笑了,说不会。他放心地跑开了。

小孩子看问题有一种大人没有的直觉。他知道陪他搭积木这件事,不是因为我有手所以能做,是因为我爱他所以愿意做。AI 有手(有代码生成能力),但它没有”愿意”。

安全的护城河,说到底也是这种东西。不是 AI 做不了安全,而是总有些事——该不该放行、信不信这个人、这个边界划到哪——需要有人来”愿意”,有人来负责。 AI 可以生成一万行加固代码,但它永远不会在凌晨三点被报警叫醒,对着屏幕上的异常流量,在十分钟内做出一个可能要担责任的判断。

那是人的事。以前是,以后也是。

结尾:护城河不是挡住水,是知道哪道堤不能拆

最近我在团队里推了一件事:每个用 Copilot 写的安全修复,必须手工标注”这个修复的影响范围”——不只是改了什么,是为什么没有影响更多、为什么修到这里就够了。

同事们一开始觉得烦。用了两个星期,有人说了一句话让我很欣慰:”以前 Copilot 帮我修 bug,现在我在教 Copilot 怎么思考安全。”

这就是我想说的。护城河不是堵在 AI 前面不让他过,是踩在护城河的堤上,指给 AI 看:这个方向,你可以挖;这个方向,一铲子都不能下。

AI 正在把”写代码”这件事变成基础设施。对安全工程师来说,重要的不再是手写代码的速度,而是看清攻击面的眼界、嗅到异常的本能、划出合规边界的分寸。

这三样东西,不在任何模型的训练数据里。

它们只长在一个人十几年如一日地对着日志、盯着流量、守着一道别人看不见的防线的过程里。

那是护城河。我们的。