直觉与AI联手,Python开发者幸免于灾难
Python开发者Roman Imankulov通过直觉和AI代理识别出一个伪装成招聘测试的恶意仓库。该仓库包含一个隐藏在npm安装脚本中的后门,可触发对攻击者服务器的请求。AI代理在只读模式下标记了该恶意文件,避免了潜在的系统损害。
Python开发者Roman Imankulov差点落入一个精心设计的社交工程陷阱,但他的直觉和AI代码审查代理阻止了灾难的发生。
Imankulov在LinkedIn上收到一位自称是小型加密货币初创公司招聘人员的信息,对方请求他帮助解决一个已弃用的Node模块问题,并暗示需要一位首席工程师。这种请求让Imankulov感到不对劲,他回忆说:“我听说过这些类型的攻击,我当时想,‘如果我就是目标呢?’这完全基于过去的经验。”
为了安全起见,Imankulov在Hetzner上启动了一个VPS来克隆仓库,并使用他的Pi编码代理(运行Codex)进行只读代码分析。他原本以为代理会返回“一切正常”的结果,但代理却立即警告说:“不要运行这段代码,离开,因为这里有陷阱。”
AI代理标记了一个名为app/test/index.js的文件,其中包含一个后门:一个被分割成看似测试配置的服务器URL,以及一个网络请求,该请求会执行服务器响应的任何代码。Imankulov承认自己最初扫描代码时遗漏了这些细节,而AI代理发现了这个漏洞。
如果直接使用npm install安装该仓库,后门会自动触发。仓库的package.json文件中包含一个“prepare”钩子,该钩子在安装后自动运行恶意脚本。该恶意仓库现已被GitHub删除,但克隆版本仍可找到。
独立开源安全架构师Devashri Datta指出,这种攻击的狡猾之处在于它劫持了标准的开发者工作流程:攻击者没有依赖目标执行可疑二进制文件,而是依赖npm install这一常规命令。通过在package.json中的prepare生命周期钩子中隐藏执行逻辑,恶意负载在依赖解析过程中自动触发。这种技术并不新颖,但由于开发者通常自动运行npm install,所以仍然非常有效。
Imankulov发现,恶意仓库的提交记录似乎来自一个拥有成熟网络形象和作品的开发者。但当他联系这位假定的作者时,对方表示自己多次被冒充,并没有编写这段代码。招聘人员的LinkedIn个人资料引用了一位真实的艺术记者,但Imankulov相信该账号是伪造的。
这类软件供应链社交工程攻击已经变得普遍。本月早些时候,有报道指出朝鲜关联的骗子通过虚假面试和招聘信息来入侵开发者账户。Imankulov的案例显示,AI代理可以作为有效的防御工具。Datta表示,Imankulov的做法凸显了安全意识开发者如何改进代码审查习惯:他部署了一个在受限只读环境中运行的本地AI代理,这不易受到疲劳或社交压力的影响,并能在几秒钟内检测出异常行为。
作为防范措施,npm准备在npm 12中默认禁用allowScripts设置,这意味着npm install将不再自动执行依赖项的安装脚本。Imankulov表示他转而使用pnpm来默认禁止脚本执行。Datta强调,企业必须将软件供应链安全扩展到开发者端点,防止攻击者在代码进入企业供应链之前就进行破坏。