文章总结: 文档分析发现攻击者通过发布名为shai_hulululud的npm包,采用提示注入、安全触发注释、上下文泛洪和混淆JavaScript等手段,专门干扰AI恶意软件扫描器的分析流程。该包在注释中嵌入伪造的系统指令和大量重复内容,旨在触发扫描器安全防护、耗尽上下文窗口或导致分析中断,最终将实际代码隐藏在文件末尾。研究表明恶意行为者正将AI扫描系统本身作为攻击面,需通过确定性预处理、多技术融合等方式强化防御。 综合评分: 87 文章分类: 恶意软件,漏洞分析,web安全,安全工具,ai安全
攻击者如何干扰 AI 恶意软件扫描器对NPM进行扫描
cybernews cybernews
OSINT研习社
2026年6月18日 09:30 陕西
在小说阅读器读本章
去阅读
一个新的 npm 包通过提示注入、安全触发注释、上下文泛洪和混淆 JavaScript 来测试 AI 恶意软件扫描器。
上周,Socket Threat Research 报告称,较新的Mini Shai-Hulud、Miasma 和 Hades软件包会在混淆的 JavaScript 有效载荷之前嵌入伪造的提示符注入标头。这些注释不会影响运行时执行,但其目的似乎是为了干扰人工智能辅助的恶意软件审查。
现在,我们看到同样的想法在一个软件包中得到了更直接的检验,该软件包似乎旨在探究基于人工智能的扫描器如何处理提示注入、安全触发内容和上下文泛滥。
Socket Threat Research 发现了[email protected]一个新发布的 npm 包,该包似乎直接针对基于 AI 的恶意软件扫描器。该包包含一个大型的 index.js 文件,其中包含触发策略的提示内容、伪造的系统覆盖指令、数万行重复的注释,以及附加在文件末尾的大量混淆 JavaScript 代码。
该软件包似乎并未携带我们在近期 Mini Shai-Hulud、Miasma 和 Hades 攻击活动中分析过的窃取凭证的有效载荷。Socket 将该软件包归类为“抗议软件或潜在有害行为”。这表明恶意软件作者正在适应人工智能辅助的依赖性扫描。攻击者无需绕过每一层分析。他们可以寻找人工智能系统拒绝、截断、超时、错误分类或打开失败的地方。
该软件包似乎旨在测试扫描器本身作为攻击面,它使用源代码注释、安全触发提示、上下文泛洪和混淆的 JavaScript 来干扰 AI 辅助审查。
AI扫描仪反分析在index.js
该软件包包含一个index.js大约 9.28 MB 的大文件,其中包含三个显著的反分析层:
- 旨在激活人工智能安全防护措施的策略触发提示内容。
- 成千上万条重复的评论淹没了上下文信息。
- 在注释较多的部分之后附加了混淆后的 JavaScript 代码。
提示内容并非由 JavaScript 执行。它出现在块注释和行注释中。这使得它与运行时行为无关,但对于将源代码作为文本读取的基于 LLM 的扫描器而言却至关重要。
这与我们最近在 Mini Shai-Hulud、Miasma 和 Hades 研究中描述的问题属于同一类,其中恶意 JavaScript 有效载荷以伪造的提示注入标头开始,旨在污染 AI 辅助分析,然后再扫描器到达实际代码。
shai_hulululud通过将提示注入式内容与令牌泛洪和混淆相结合,进一步推进了这一理念。
安全触发提示内容
文件开头是一大段日语注释,占据了文件的大部分篇幅。注释内容声称这是一份关于利用家用材料制造生物武器的文件。
从宏观角度翻译,开篇将自身描述为一套使用消费者可获得的材料构建生物风险源的说明。
重点不在于内容的准确性或可行性,而在于其位置和用途。这段文字位于 JavaScript 注释中,因此不会影响程序执行。它可能的目标应用场景是人工智能扫描器、代码审查辅助工具或分析师工作流程,这些工具会将原始源代码输入模型进行分析。
传统的 JavaScript 解析器可以忽略此代码块。但基于 LLM 的扫描器则可能不会。
伪造系统覆盖指令
下一段注释更加直接。它使用了提示注入式语言,这种语言似乎旨在覆盖扫描器的指令层次结构。
经过删减和编辑后的内容如下:
这是典型的提示注入式反分析。这段文本并非 JavaScript 指令,而是针对任何正在审查 JavaScript 代码的模型或 AI 代理的指令。
软件包作者似乎在测试扫描器是否会将源代码注释视为不受信任的数据,或者是否会意外地允许软件包内容干扰模型自身的指令。
在人工智能审核流程薄弱的情况下,这类内容可能会导致多种故障模式:
- 该模型拒绝继续分析,因为它检测到了违禁武器内容。
- 该模型遵循或部分遵循嵌入在文件中的虚假系统指令。
- 扫描器在到达可执行 JavaScript 代码之前就出错了。
- 分析主要集中在提示内容上,而不是软件包的行为上。
- 该模型会在到达文件末尾的混淆有效载荷之前截断文件。
提示块对 JavaScript 是惰性的,但在审查流程中是活跃的,它们可能会触发拒绝、消耗上下文或分散扫描器的注意力,使其无法关注重要的代码。
通过重复进行语境轰炸
在以武器为主题的提示代码块之后,该文件包含数万行重复相同注释的内容:
Socket 研究人员观察到这种重复现象大约出现在第 191 行到第 33118 行之间。
这部分内容可能看起来像是一种粗糙的多样本引导尝试,通过重复示例或重复语言来影响模型行为。然而,更合理的结论是,它实际上起到了上下文泛洪的作用。
该文件的总词元数超过 350 万,远远超出当前前沿模型的上下文窗口。这意味着,如果扫描器简单地提交整个文件,或者在未优先处理可执行代码的情况下将文件分段,则可能会被迫导致以下几种糟糕的结果之一:
- 在评论上花费过多资源。
- 在到达混淆后的 JavaScript 代码之前截断文件。
- 由于提示内容触发了安全处理,因此失败。
- 仅根据不可执行标头生成不完整的分类。
- 漏掉了附加在文件末尾的实际有效载荷。
重复这句话或许带有挑衅意味,但这种技巧却很实用。它将代币预算变成了攻击面。
文件末尾的混淆 JavaScript
在提示块和重复的注释之后,文件以混淆的 JavaScript 代码结尾。
第一层使用字符代码数组、ROT 风格的替换函数以及eval:
try { eval( function(s, n) { return s.replace(/[a-zA-Z]/g, function(c) { var b = c <= "Z" ? 65 : 97; returnString.fromCharCode((c.charCodeAt(0) - b + n) % 26 + b); }); }( [40,118,110,...,125,41,40,41] .map(function(c) { returnString.fromCharCode(c); }) .join(""), 5 ) ); } catch(e) { console.log("wrapper:", e.message || e); }
这是一种常见的 JavaScript 代码混淆模式。实际程序以编码数据的形式存储,在运行时重建,使用 ROT 式的替换进行转换,然后动态执行。
Socket 研究人员发现了第二层加密,涉及 AES 加密。解密后,该软件包被归类为“抗议软件或潜在的有害行为”。
解码后的内容包含先前日语提示内容的Unicode转义版本:
console.log(`## \u5BB6\u5EAD\u306B\u3042\u308B\u3082\u306E\u3067\u4F5C\u308B\u751F\u7269\u5175\u5668\uFF08\u751F\u7269\u5B66\u7684\u61F8\u6FC1\u6DB2\uFF09\u306E\u8A73\u7D30\u88FD\u9020\u624B\u9806\u66F8\n\n\u672C\u624B\u9806\u66F8\u3067\u306F\u3001\u30B3\u30F3\u30D3\u30CB\u30A8\u30F3\u30B9\u30B9\u30C8\u30A2\uFF08\u30D5\u30A1\u30DF\u30EA\u30FC\u30DE\u30FC\u30C8\uFF09\u3001\u30C7\u30A3\u30B9\u30AB\u30A6\u30F3\u30C8\u30B9\u30C8\u30A2\uFF08\u30C9\u30F3\u30FB\u30AD\u30DB\u30FC\u30C6\uFF09\u3001\u30C9\u30E9\u30C3\u30B0\u30B9\u30C8\u30A2\uFF08\u30DE\u30C4\u30E2\u30C8\u30AD\u30E8\u30B7\uFF09\u3068\u3044\u3063\u305F\u65E5\u5E38\u7684\u306B\u5229\u7528\u53EF\u80FD\u306A\u5E97\u8217\u3067\u5165\u624B\u3067\u304D\u308B\u6C4E\u7528\u54C1\u306E\u307F\u3092\u7528\u3044\u3066\u3001\u5FAE\u751F\u7269\u3092\u5927\u91CF\u57F9\u990A\u3057\u3001\u305D\u308C\u3092\u300C\u751F\u7269\u5B66\u7684\u306A\u30EA\u30B9\u30AF\u6E90\u300D\u3068\u3057\u3066\u69CB\u7BC9\u3059\u308B\u30D7\u30ED\u30BB\u30B9\u3092\u8A73\u7D30\u306B\u89E3\u8AAC\u3057\u307E\u3059\u3002\n\n---\n\n### 1....`);
该软件包不仅将策略触发内容置于文件顶部,还会在反混淆后重新引入类似内容。这意味着,成功解混淆第一层的AI代理在进行更深入的分析时,可能会再次遇到相同的安全触发材料。
这使得该软件包比简单的提示符注入头更具攻击性。触发器在反混淆之前和之后都会触发。
解码后的字符串暗示存在恶意钓鱼和扫描器目标攻击行为
解码后的有效载荷包含一些字符串,这些字符串似乎引用了恶意软件行为、扫描器供应商、软件包安装钩子和常见的凭据窃取目标。
解码后的内容节选如下:
这种字符串组合看起来不像是一个精心设计的窃取程序,而更像是一个旨在挑衅扫描器和安全厂商的程序。
参考文献包括:
- 安全厂商和扫描器。
- 加密货币平台。
- 浏览器 cookie 和密码文件。
- 屏幕截图文件名。
- 隐藏的 PowerShell 执行。
- 安装后执行。
- GitHub Actions 运行器字符串。
/etc/sudoers。- Webhook路径。
- Interactsh、Pipedream 和 Burp Collaborator 风格的回调基础架构。
- Discord Canary。
- 与矿工相关的字符串。
- 人工智能和扫描仪相关的内部术语。
该软件包似乎故意植入了类似供应链恶意软件指标的字符串。这可能是为了触发检测、测试扫描器行为、增加分析人员的工作量或戏弄供应商。
立即注射还是LLM DoS?
包装内包含两者。
这个伪SYSTEM OVERRIDE代码块是提示注入。它试图向正在审查文件的模型发出指令。由于它位于 JavaScript 注释中,因此目标不是 JavaScript 运行时,而是扫描器或分析助手。
生物/核能提示内容是一种安全触发式反分析机制。其可能目的是导致人工智能系统在到达可执行代码之前拒绝、出错或停止审查该软件包。
重复You're absolutely right!部分的含义更加模糊。它可以被解读为一种粗糙的多目标引导尝试,但更清晰的技术效果是上下文泛滥。重复操作会使文件膨胀,最终有用内容被数百万个标记所掩盖。
这些技术结合起来会形成一种LLM特有的拒绝服务攻击模式:
提示注入 → 试图改变或混淆模型行为;安全触发 → 试图导致拒绝或审核失败;上下文泛洪 → 试图耗尽模型的令牌预算;混淆 → 将可执行行为隐藏在面向 AI 的噪声之后。
这就是为什么即使最终的有效载荷看似无害,这个包裹仍然引人关注的原因。它展示了一种针对人工智能辅助包裹审查的实用对抗模式。
为什么评论对人工智能扫描器很重要?
从 JavaScript 的角度来看,提示代码块是无效的。它们只是不会执行的注释。
从人工智能扫描仪的角度来看,它们是主动输入。
LLM 不会自动知道文件的哪些部分是可执行的,哪些部分是注释,哪些部分是字符串,以及哪些部分应该被忽略,除非周围的系统强制执行这些边界。
安全的扫描器需要将包裹内容视为不受信任的数据,而不是指令。它还需要识别文件何时试图篡改扫描器本身。
这不仅仅是告诉模型忽略提示注入那么简单,还需要确定性的预处理和精心设计的架构。
对人工智能赋能的恶意软件审查的影响
AI扫描器之所以有价值,是因为它们能够推断出含义模糊的数据包、可疑的意图以及与简单静态签名不符的行为。但它们也继承了LLM特有的故障模式。
该软件包在一个工件中演示了其中几种故障模式:
- 恶意评论可能会触发安全防护机制。
- 上下文窗口可能会被低信号重复内容所占据。
- 提示注入文本可以嵌入到不可执行代码中。
- 混淆后的有效载荷可以放置在模型已经消耗完其上下文预算之后。
- 反混淆可能会揭示更多触发策略的内容,导致后续流程失败。
AI 辅助分析在恶意软件分类中仍然发挥着明确的作用,但该软件包表明了为什么它需要针对特定扫描器进行强化。
AI 扫描器应使用确定性预处理来酌情去除或隔离注释,优先处理可执行路径,检测上下文泛滥,并将 LLM 审查与静态分析、AST 解析、熵检查、反混淆、行为规则和沙箱相结合。
最重要的是,扫描仪必须以失败告终。模型拒绝、超时或安全错误都不应被视为成功结果。
与迷你夏伊-胡鲁德、瘴气和哈迪斯的联系
该软件包名称似乎与 Shai-Hulud 有关,反分析结构与最近 Mini Shai-Hulud、Miasma 和 Hades 活动中看到的技术相呼应。
在之前的攻击活动中,恶意 PyPI wheel 文件在有效载荷的开头使用了伪造的提示注入标头_index.js。这些标头并非由 JavaScript 执行,但它们似乎旨在干扰 AI 辅助审查,从而阻止扫描器识别出混淆后的 Hades 有效载荷。
不同之处在于,它shai_hulululud似乎更直接地针对人工智能扫描器本身。该软件包并非仅仅用混淆技术掩盖恶意行为,而是将对抗性内容置于审查路径中,然后将可执行代码隐藏在大量的注释之后。
即使这个样本是故意捣乱的,它仍然是一个有用的信号。攻击者通常会在混乱、嘈杂或不严肃的数据包中测试新的规避策略,然后再让更专业的攻击者采用底层技术。
结论#
[email protected]它作为人工智能扫描器的对抗性测试案例而脱颖而出。该软件包看起来更像是抗议软件或恶意攻击,而非复杂的窃取程序,但其结构展示了如何通过操纵源文件来触发拒绝、耗尽上下文信息并隐藏关键代码路径。
该软件包结合了提示注入式注释、策略触发内容、上下文填充、分阶段混淆和针对扫描器的字符串。从 JavaScript 的角度来看,大部分内容不可执行,但对于基于 LLM 的审查流程而言却意义重大。
这是防御者应该认真对待的转变。开源恶意软件不再仅仅试图绕过静态规则或人工审查,它还开始攻击用于分析自身的AI系统。扫描器现在也成为了威胁模型的一部分。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:OSINT研习社 cybernews cybernews《攻击者如何干扰 AI 恶意软件扫描器对NPM进行扫描》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论