朝鲜APT组织Lazarus 扩大恶意 npm 活动:11 个新软件包添加了恶意软件加载程序和 Bitbucket 负载

Contagious Interview行动背后的朝鲜威胁行为者已经扩大了他们在 npm 生态系统中的存在,发布了更多恶意软件包,这些恶意软件包会传播之前发现的BeaverTail 恶意软件,并引入了具有远程访问木马 (RAT) 加载器功能的新软件包。这些最新样本使用十六进制字符串编码来逃避自动检测系统和手动代码审核,这表明威胁行为者的混淆技术发生了变化。
该威胁组织的目标始终没有改变:入侵开发人员系统、窃取敏感凭证或金融资产,并保持对受感染环境的访问。Contagious Interview 威胁行为者继续创建新的 npm 帐户,并在 npm 注册表、GitHub 和 Bitbucket 等平台上部署恶意代码,这表明他们具有持久性,并且没有放缓的迹象。
恶意活动激增#
威胁者通过发布新的恶意 npm 软件包来扩大其活动范围,这些软件包使用之前发现的别名—— 、和——以及新创建的帐户,包括、、alextucker0519
和edan0831
。hottblaze
每个taras_lakhai
软件包都伪装成用于数组、日志记录、调试或事件和 API 处理的实用程序。截至撰写本文时,npm 注册表已暂停除 之外的所有帐户(及相关软件包)。我们已报告此帐户并请求将其删除,以及与任何已识别帐户相关的所有 GitHub 和 Bitbucket 存储库和用户配置文件。总的来说,在这次扩大的活动中发现的另外 11 个恶意软件包已被下载超过 5,600 次。mvitalii``wishorn``crouch626``taras_lakhai
在发现恶意软件包后该账户alextucker0519
被暂停之前,它曾发布了另一个恶意软件包 ,该恶意软件包与端口上的单独命令和控制 (C2) 服务器进行通信。array-empty-validator
empty-array-validator
144.172.87[.]27``1224
taras_lakhai
和mvitalii
是两个新发现的账户,它们使用相同的 IP 和端口组合连接到45.61.151[.]71
端口上的 C2 服务器1224
。共享基础设施将这两个账户作为同一威胁活动的一部分联系起来。该taras_lakhai
账户发布了一个恶意程序包twitterapis
,它使用此端点 — 与之前在该账户的恶意程序包中观察到的基础设施相匹配mvitalii
。
SecurityScorecard 研究人员在调查传染性采访行动期间发现了与 Lazarus Group 相关的基础设施。wishorn
新创建的 npm 帐户发布的软件包之一在软件包中使用了相同的混淆 C2 IP 地址(185.153.182[.]241
端口) 。该帐户还发布了另外两个恶意软件包和,进一步证实了其与 Lazarus 主导的更广泛的活动的联系。1224``dev-debugger-vite
snore-log
core-pino
除了常见的基础架构之外,从新创建帐户中识别出的软件包还与之前归因于Lazarus 的操作具有结构特征。这些软件包一致地实现紧密的循环,扫描多达 200 个 Brave、Chrome 和 Opera 浏览器配置文件目录,并尝试从 Solana 的文件中提取私钥id.json
。通过向链接到已知 Lazarus 基础架构的 C2 服务器发送 HTTP POST 请求,信息泄露会悄无声息地发生。这些脚本表现出该组织工具的标志性特征:分层混淆、多阶段有效载荷传递以及反复使用 BeaverTail——一种针对浏览器数据、macOS 钥匙串和加密货币钱包的信息窃取程序。多个软件包还引用 InvisibleFerret 作为第二阶段后门,它是从早期活动中使用的相同 C2 端点检索到的。
从 GitHub 到Bitbucket
与之前偶尔引用 GitHub 存储库的 Lazarus 链接软件包不同,这些软件包events-utils
(icloud-cod
由该帐户发布mvitalii
)和之前确定的 react-event-dependency
(由该帐户发布elondavid
)都链接到 Bitbucket 存储库。根据观察到的时间线,威胁行为者在发布相应的恶意 npm 包之前创建了这些存储库。该alextucker0519
帐户背后的威胁行为者于 2025 年 3 月 11 日将恶意代码上传到他们的 GitHub 存储库,并empty-array-validator
于第二天(2025 年 3 月 12 日)发布了包含相同代码的 npm 包。这种排序可能有助于建立合法性的假象——让毫无戒心的开发人员觉得该软件包正在积极维护,因为它链接到一个实时代码存储库。
icloud-cod.js
Bitbucket 上托管的恶意 JavaScript 文件
该恶意软件软件包icloud-cod
链接到一个托管在名为eiwork_hire
– 的目录中的 Bitbucket 存储库,这一细节可能反映了威胁行为者进一步努力使“传染性面试”操作合法化,该操作以虚假的工作机会引诱毫无戒心的开发人员,以获取其系统的访问权限,从而实现财务和其他非法目的。
扩展有效载荷和混淆#
npm 帐户crouch626
发布了四个恶意程序包:cln-logger
、、和。前两个程序包和具有不同的代码结构,并使用了与其他程序包不同的混淆技术。相比之下,node-clog
和都通过端口与同一 C2 服务器进行通信,这与之前的发现一致。这种差异表明威胁行为者正在同一个更广泛的活动中部署多个恶意软件变体,可能是为了多样化有效载荷交付并逃避检测。consolidate-log
consolidate-logger
cln-logger``node-clog``consolidate-log``consolidate-logger``144.172.87[.]27``1224
下面是该软件包中的一些代码片段,cln-logger
展示了新的混淆和恶意代码,并带有内联注释,解释了关键功能和目标。
// Decodes obfuscated hex-encoded strings into readable text
// (e.g., function names, URLs)
// Used to hide malicious strings from static analysis tools and manual review
function g(h) {
return h.replace(/../g, match => String.fromCharCode(parseInt(match, 16)));
}
代码定义了一个辅助函数g(h)
,将每两个十六进制字符替换为其 ASCII 等效字符。此机制隐藏了关键字符串(例如require
、、和远程 URL axios
)get
,使它们在检查期间不那么明显。
const hl = [
g('72657175697265'), // "require" — dynamic module import
g('6178696f73'), // "axios" — HTTP client
g('676574'), // "get" — HTTP GET method
g('68747470...613662'), // C2 URL — hxxps://mocki[.]io/v1/32f16c80-602a-4c80-80af-32a9b8220a6b
g('7468656e'), // "then" — handles async response
];
该数组解码关键的 JavaScript 关键字和隐藏在十六进制中的远程 URL,以逃避检测。解析后,脚本便可从 C2 服务器获取并执行代码。
与从模糊字符串解码得到的包cln-logger
引用不同。mocki[.]io``node-clog``m21gk[.]wiremockapi[.]cloud/g/api/880``68747470733a2f2f6d3231676b2e776972656d6f636b6170692e636c6f75642f672f6170692f383830
另一个已识别的帐户wishorn
也在其snore-log
和core-pino
包中使用了这种混淆策略。前者引用端点ip-api-server[.]vercel[.]app/api/ipcheck/703
,而后者使用ip-check-api[.]vercel[.]app/api/ipcheck/703
。这表明威胁行为者正在轮换暂存基础设施或维护多个冗余 C2 端点,同时重复使用相同的加载器模式。
在这些已识别的软件包中,恶意代码始终充当远程访问木马 (RAT) 加载程序,依靠混淆和动态负载执行来逃避检测并传播第二阶段恶意软件。脚本以十六进制对关键字符串进行编码,并使用 对其进行解码String.fromCharCode
,从而有效隐藏模块名称和 C2 URL。这种混淆技术会破坏自动扫描程序和手动代码审计,从而掩盖恶意软件的真实功能和意图。
展望与建议#
最近与 Lazarus Group 有关的恶意活动不断扩大,表明软件供应链面临持续且灵活的威胁。这个高级持续性威胁 (APT) 组织非但没有放慢脚步,反而在多样化其策略 — 使用新的别名发布新的恶意软件,在 GitHub 和 Bitbucket 存储库中托管有效负载,并重复使用 BeaverTail 和 InvisibleFerret 等核心组件以及新观察到的 RAT/加载器变体。这些软件包不仅展示了重复使用的基础设施和目标逻辑,还展示了冗余的 C2 端点和各种混淆风格,突显了威胁组织确保弹性并逃避自动检测和手动审核的意图。
组织必须假设,像“传染性采访”这样的有针对性的渗透活动将持续存在并不断发展。开发人员(尤其是从事开源、DevOps 和基础设施工程工作的开发人员)仍然是高价值目标,因为他们在更广泛的环境中拥有访问权限和信任。因此,主动防御必须成为软件开发实践的基础。
为了降低这些风险,我们建议在整个开发生命周期中嵌入多层供应链安全措施。这包括自动依赖项审核、第三方软件包的上下文扫描以及对下载历史记录有限或维护者无法验证的软件包的严格审查。监控异常依赖项更改并阻止流向已知或可疑 C2 端点的出站流量有助于在威胁升级之前遏制威胁。
Socket 的安全工具专为应对这些挑战而设计。Socket GitHub App提供对拉取请求的实时扫描,在合并之前标记可疑或恶意包。Socket CLI工具在 npm 安装期间显示危险信号,帮助团队尽早发现危险代码。同时,Socket 浏览器扩展会在用户下载或查看可疑包时提醒用户。将这些工具集成到开发流程中,使组织能够主动检测和预防恶意软件,从而减少遭受传染性访谈式供应链攻击的风险。
危害指标 (IOC) #
Malicious npm Packages and Download Count
- empty-array-validator (129)
- twitterapis (102)
- dev-debugger-vite (1,606)
- snore-log (1,904)
- core-pino (483)
- events-utils (133)
- icloud-cod (145)
- cln-logger (308)
- node-clog (213)
- consolidate-log (297)
- consolidate-logger (291)
Threat Actor Identifiers
- npm Aliases and Email Addresses:
taras_lakhai
— kevintracy516@gmail[.]commvitalii
— mvitalii206@gmail[.]comwishorn
— starlancer555@gmail[.]comcrouch626
— crouchtomy@gmail[.]com
- GitHub Accounts:
lukobogdan47
austin-a3
- Bitbucket Accounts:
Ezra Walmsley
Raymundo Curiel
Malicious GitHub Repositories
Malicious Bitbucket Repositories
Command and Control (C2) Endpoints
144.172.87[.]27
45.61.151[.]71
185.153.182[.]241
mocki[.]io/v1/32f16c80-602a-4c80-80af-32a9b8220a6b
m21gk[.]wiremockapi[.]cloud/g/api/880
ip-api-server[.]vercel[.]app/api/ipcheck/703
ip-check-api[.]vercel[.]app/api/ipcheck/703
MITRE ATT&CK Techniques
- T1195.002 — Supply Chain Compromise: Compromise Software Supply Chain
- T1608.001 — Stage Capabilities: Upload Malware
- T1204.002 — User Execution: Malicious File
- T1059.007 — Command and Scripting Interpreter: JavaScript
- T1027.013 — Obfuscated Files or Information: Encrypted/Encoded File
- T1546.016 — Event Triggered Execution: Installer Packages
- T1005 — Data from Local System
- T1082 — System Information Discovery
- T1083 — File and Directory Discovery
- T1217 — Browser Information Discovery
- T1555.003 — Credentials from Password Stores: Credentials from Web Browsers
- T1555.001 — Credentials from Password Stores: Keychain
- T1041 — Exfiltration Over C2 Channel
- T1105 — Ingress Tool Transfer
- T1119 — Automated Collection
- T1657 — Financial Theft