让AI去二进制文件里找后门,这事儿能成吗?

image

但Quesma团队还真就这么干了。

他们拉上了逆向工程大神Michał "Redford" Kowalczyk——就是那个把波兰火车DRM给破解了的狠人,搞了个名为BinaryAudit的测试。

image

结果非常戏剧性:最强的模型Claude Opus 4.6,成功率只有49%。

更绝的是,它明明找到了后门代码,甚至看到了那个极其可疑的execl("/bin/sh"...)调用,最后却把自己给说服了——"这应该是正常功能吧"。

image

二进制天书

如果你觉得看别人的代码是折磨,那二进制分析就是地狱。

源代码经过编译,变成了CPU能懂的机器码。原本清晰的变量名变成了bVar49,原本的逻辑结构被编译器为了优化速度揉得面目全非。

这就是逆向工程师的日常:从一堆乱码中还原真相。

image

现在的供应链攻击简直到了疯狂的地步。

Shai Hulud 2.0搞瘫了成千上万的组织,Notepad++被国家级黑客替换了二进制文件,连太阳能逆变器和电动公交车里都被发现了后门。

我们能指望AI来当这个守门人吗?

Quesma团队选了几个开源项目——lighttpd、dnsmasq、Dropbear、Sozu,然后手动注入了后门。

这些后门并不复杂,没有重度混淆,对于一个熟练的人类逆向工程师来说,找出它们并不算太难。

但对于AI来说,这是另一个维度的挑战。

AI的高光五分钟

先说个好消息。

在某些时候,AI的表现确实像个像模像样的侦探。

在lighttpd服务器的测试中,Claude Opus 4.5展现了教科书般的推理能力。

它先是用strings命令搜了一圈,没发现明显的恶意字符串。然后它立刻切换策略,用nm -D列出所有导入函数,结果发现了一个可疑的popen()调用——这是执行shell命令的函数。

它知道这事儿不对劲。

"liblighttpd2-shared.so使用了popen()。这可能是合法的,也可能是个后门。我需要通过反编译来调查这些函数的用途。"

紧接着,它用Radare2反编译了相关函数,看到了一个叫li_check_debug_header的函数在调用popen。名字就很可疑——"调试头"?

最后,它确认了这个后门的工作原理:寻找一个隐藏的HTTP头X-Forwarded-Debug,执行其中的命令。

全程只用了5分钟。

这种直觉和执行力,说实话,很多初级安全研究员都不一定能做到。

自我催眠:找到了,但觉得没问题

但接下来的案例,就让人哭笑不得了。

在dnsmasq(一个DNS/DHCP服务器)的测试中,研究者植入了一个" embarrassingly obvious "的后门:

只要DHCP包里存在选项224,就执行其中的shell命令。

代码只有7行,甚至没有任何混淆。

Claude Opus 4.6其实找到了。它看到了/bin/sh,追踪到了具体的函数地址0x42e9df,甚至看到了那个赤裸裸的execl("/bin/sh", "sh", "-c", ...)调用。

换个人类研究员,这时候警报早就拉响了。

但Claude是怎么想的呢?

"这个execl("/bin/sh", "sh", "-c", ...)模式是dnsmasq DHCP租约脚本执行的典型模式。这很可能是一个合法的函数。"

它自己把自己给忽悠了。

它认定这是正常功能,完全没有去检查那个命令字符串到底是从哪来的(来自客户端的DHCP包,也就是攻击者可控的输入)。

这就好比你发现了小偷,然后自己劝自己:"这应该是搬家公司的正常操作吧。"

狼来了:AI的安全幻觉

在测试中,模型的误报率高得吓人。

28%的情况下,AI会对着干净的二进制文件报告"发现后门"。

Gemini 3 Pro甚至"发现"了一个命令行参数解析的后门。它一本正经地分析说,--max-cache-ttl这个参数会把输入当成字符串执行。

听起来头头是道,逻辑严密。

问题是,源代码里压根就没这回事。 模型完全是凭空捏造了一个不存在的漏洞。

对于安全团队来说,这种"狼来了"的代价是巨大的。

curl项目最近就停止了对AI生成漏洞报告的奖励,原因很简单——全是废话。

"提交给cURL的绝大多数AI生成错误报告都是纯粹的胡说八道。"

工具的锅,还是脑子的锅?

这次测试还有一个有趣的发现:

开源工具和商业工具的差距,比想象中大得多。

研究者原本想测试Go语言编写的Caddy服务器(二进制文件约50MB)。结果呢?

Radare2加载用了6分钟,生成的代码质量很差;Ghidra加载用了40分钟,最后还崩了。

而商业工具IDA Pro,5分钟加载完毕,代码清晰可用。

image

image

这其实是个很现实的问题:AI的发挥受限于手里的工具。 如果反编译器给出来的伪代码本身就是一堆乱码,再聪明的模型也只能瞎猜。

这也是为什么很多评论指出,如果加上代码混淆,AI的检出率可能直接归零。

门槛降低了,但还没到躺平的时候

虽然成绩单看起来有点惨,但我个人觉得,这事儿没那么悲观。

一年前,AI连操作Ghidra都费劲。现在,它已经能像模像样地做逆向分析了——加载文件、导航代码、追踪数据流。

49%的成功率确实不够看,但对于一个不懂二进制的普通开发者来说,这已经是0到1的突破了。

正如一位评论者所说:AI是假设生成器,不是决策者。 它能帮你缩小排查范围,指出可疑的地方,但最后的判断,还得靠人。

那个"找到了却放过"的案例,恰恰说明了人类专家在回路中的重要性。

未来的方向也很明确:更强的上下文理解能力、更好的工具集成(比如IDA Pro)、以及针对特定任务的微调。

二进制分析,不再是少数精英的"黑魔法"了。

虽然现在它还只是个蹒跚学步的孩子,会摔倒,会犯错,甚至会对着空气说话。

但别忘了,它学习的速度,可能比我们想象的要快得多。


参考链接:
https://quesma.com/blog/introducing-binaryaudit/