为了隐藏恶意意图,攻击者对恶意代码进行混淆处理已成为常态。如今,有人将有效载荷的代码经过四层混淆处理,并根据开发人员电脑所运行的操作系统类型,通过NPM包分发窃密软件。
安全公司Socket近期发现10个恶意NPM包,攻击者采用“拼写错误注册”(Typosquatting)手法,模仿TypeScript、discord.js和ethers.js等知名包的名称,诱骗开发者上当。这些恶意包于7月4日上架,至今已被下载9900次。一旦开发者下载并安装,这些包便会根据受害电脑的操作系统(Windows、Linux或macOS),植入对应的窃密软件,从密码管理工具、浏览器和身份验证服务中窃取账号密码和凭证。特别的是,攻击者为降低开发者的戒心,在执行过程中还会显示伪造的验证码。
尽管这些恶意包能在NPM仓库中存活长达四个月,关键在于其恶意代码经过四层混淆处理,难以被察觉异常,但其他手段同样值得关注。首先,攻击者在恶意包的安装流程中加入了预安装(preinstall)脚本,确保恶意载荷在NPM包安装完成后立即执行。
攻击者首先通过install.js判断受害电脑的操作系统,随后下载对应的操作系统恶意载荷app.js——这正是Socket所指出的经过四层混淆处理的有效载荷。
这四层混淆技术包括:使用自解码的Eval函数包装、动态密钥与XOR算法解码、URL编码处理,以及控制流程混淆。
特别的是,该恶意程序在包安装完成后,还会显示用ASCII字符构建的验证码,这种手法在NPM包攻击中极为罕见。Socket认为,攻击者这样做的目的可能有多个:一是让恶意软件看起来像合法工具,使开发者误以为来源可信;二是由于图灵验证需要用户交互,有机会绕过自动化安全扫描机制;三是延迟恶意代码的执行,从而降低恶意软件与NPM包之间的关联性。
在下载真正的窃密程序之前,该恶意代码还会将受害电脑的IP地址发送至攻击者的服务器,以便追踪攻击进程,确认目标设备符合攻击条件,并排除特定国家或地区的用户。随后,攻击者才会下载一个大小为24MB的二进制程序,该程序使用Python编写,功能是跨平台窃取账户凭证。
值得注意的是,攻击者特别针对Windows、macOS及不同Linux桌面环境,窃取系统内置密码管理机制中存储的凭证。在Windows系统中,他们针对Windows凭证管理器;在macOS系统中,针对钥匙串(Keychain);此外,攻击者还针对KDE桌面环境的KWallet、GNOME的Keyring进行攻击。除了操作系统自带的凭证存储机制,攻击者还试图从Firefox浏览器、OAuth认证库、JWT令牌,以及Ubuntu系统内置的LaunchPad模块中,提取用于身份验证的令牌。