
恶意NPM套件的攻击行动层出不穷,但为了隐匿作案的行蹤,骇客会试图结合多种手法,像是透过Unicode埋藏恶意内容,或是滥用合法的云端服务来达到目的。
例如,最近资安业者Aikido、Veracode揭露的NPM套件os-info-checker-es6,就是典型的例子,攻击者利用Unicode字元来藏匿恶意程序码,并且使用Google行事曆活动(event)邀请的短网址,来存取最终的有效酬载,使得这起多阶段攻击行动的蹤迹难以察觉。
针对整起攻击行动的过程,Aikido指出该恶意套件起初在3月19日上架,当时他们仅是发现套件并未具备开发人员标榜的功能,认为不寻常而进行追蹤,但没发现异状。研究人员从该套件的preinstall.js元件察觉有异,起因是内部功能函数eval()会呼叫经由Base64处理的输入内容。
他们对骇客使用的二进位文件进行逆向工程,此文件以Rust打造而成,结果发现骇客输入decode函数的内容出现不寻常的「"」开头,经过确认其实是Unicode未分配标準字元使用的字码(译注:此处应该是指Unicode的Private Use Area characters,而非Aikido提到的Private Use Access characters)。
不过,即使研究人员解开骇客使用的Unicode特殊字元,还是无法得知意图。另一方面,他们陆续看到4个相依os-info-checker-es6的套件,分别是:skip-tot、vue-dev-serverr、vue-dummyy、vue-bit,怪异的是,这些相依套件竟然不会呼叫os-info-checker-es6当中的decode函数。
直到5月7日骇客上传了os-info-checker-es6新版1.0.8,答案终于揭晓,这个NPM套件的preinstall.js更换了eval()内容,经解码后出现的竟是Google行事曆发送的活动邀请连结,这个活动的名称也很诡异,是一串字串,活动定于2027年6月27日举行。研究人员将字串以Base64演算法解开,结果得到一段网址。但用途为何?他们并未进一步说明。
Veracode也公布相关调查结果,他们指出该恶意套件起初在3月19日上架,当天骇客先后共发布了5个版本,但这些套件看起来没有什么破坏能力,主要的功能在于收集目标环境的作业系统、版本,处理器架构、主机名称等系统资讯,并未有资料洩露或显着的恶意行为,Veracode推测,这几个版本骇客主要的目的,在于测试NPM套件能否正常部署。
骇客沉寂了数日,于3月22日至23日再度活动,对于不同作业系统编译Node.js模组进行测试,但还是难以看出其攻击意图。
直到后续出现的1.0.8版os-info-checker-es6,他们才确认骇客的目的,研究人员指出preinstall.js比之前的版本大上许多,并指出骇客使用了相当複杂的C2机制。
首先,NPM套件安装后,会取得Google Calendar短网址,此套件使用特定的功能函数追蹤,直到收到HTTP 200 OK的回应。
接着此套件从Google Calendar活动标题取得经Base64演算法处理的网址并解码,下载第二阶段的恶意软件有效酬载,此有效酬载同样经过Base64处理。最终攻击者解密有效酬载,并透过功能eval()执行。