【天问】SysJoker:以npm软件供应链为攻击入口的跨平台恶意后门分析
/ / 点击 / 阅读耗时 13 分钟摘要
- 奇安信技术研究院星图实验室利用自研的天问软件供应链安全分析平台,发现了用于传播SysJoker恶意软件的两个npm包
mos-sass-loader
和css-resources-loader
,两个包均由同一个账号上传至npm公开仓库中,最早出现时间为2021年10月7日。
概述
- 2022年1月11日,intezer发布了一个报告[1],揭露了一个跨Windows, Linux, macOS三个平台的恶意软件SysJoker,并推测该恶意软件最初的攻击向量是一个受感染的npm包。根据intezer提供的SysJoker恶意后门相关信息,奇安信技术研究院星图实验室利用自研的天问平台,对npm生态监测历史数据进行了扫描分析,证实SysJoker确实通过npm传播,我们发现早在2021年10月7日,传播SysJoker的恶意包
mos-sass-loader
就出现在npm生态中,且存在时间长达19天,此后在2021年10月25日,攻击者又上传了新的恶意包css-resources-loader
,但仅存在1天。
mos-sass-loader分析
mos-sass-loader
文件结构- 攻击者发布及删除该包的时间:(2021.10.7—2021.10.26),存在19天。
- 依据抓取到的包相关元数据,发现gitHead信息。
- 根据gitHead信息,通过git记录找到了上传者的github账号:moshee411(https://github.com/moshee411)
- 其中SASS-Loader项目即为上传到npm源中的恶意包
mos-sass-loader
1.0.0版本。同时该github还有两个早期项目,其中未发现有用信息。 - 该包的元数据中包含了该包的npm上传账号:moshe.411 (moshe411@bezeqint.net),与其github账号moshee411相似。经分析,域名bezeqint.net为以色列电信供应商所有,网站主页默认语言为希伯来语,该域名提供对外注册服务,近一年天穹沙箱分析的恶意样本中有5个样本与该域名的子域名mailmx.bezeqint.net有关联。在历史数据中检索,通过bezeqint.net域名邮箱注册的npm账号仅涉及这两个包。
- 该包的元数据中还包含了一个作者自己指定的名称:Maik Jonson,经过搜索未找到更多可以证实攻击者身份的信息。
- 通过包中README文件的分析可以得知,该包是对
sass-loader
包的仿冒,这是一个周下载量超千万次的流行npm包。 mos-sass-loader
共有两个版本,差异对比如下:
具体版本包名 | 发布时间UTC | SysJoker恶意文件路径 | 文件类型 | IOC | 分析 | 版本差异 | 启动参数 |
---|---|---|---|---|---|---|---|
mos-sass-loader@1.0.0 | 2021-10-07T09:17:20.298Z | package/src/sass.js | PE32 executable (DLL) (GUI) Intel 80386, for MS Windows | 0bf2615f85ae7e2e70e58d5d70491cea37c4e80f(未知IoC) | 1.0.0 版本里面少一个 powershell start xxxxxx\msg.exe | 初始版本 | rundll32.exe shell32.dll, Control_RunDLL "%INIT_CWD%/src/sass.js\” |
mos-sass-loader@1.0.1 | 2021-10-07T09:57:18.405Z | package/src/sass.js | PE32 executable (DLL) (GUI) Intel 80386, for MS Windows | d1d5158660cdc9e05ed0207ceba2033aa7736ed1 | 已知IOC | 仅有sass.js不同,文件大小类型相同,但sha1不一致,经过分析多一个powershell start xxxxxx\msg.exe | rundll32.exe shell32.dll, Control_RunDLL "%INIT_CWD%/src/sass.js\” |
css-resources-loader分析
css-resources-loader
文件结构- 攻击者发布及删除该包的时间(2021.10.25—2021.10.26),仅存在1天。
- 该恶意包共发布过10个版本,各个版本信息差异对比如下:
包名 | 发布时间UTC | Sysjoker恶意文件路径 | 文件类型 | IoC | 启动参数 | 版本差异 |
---|---|---|---|---|---|---|
css-resources-loader@1.0.0 | 2021-10-25T06:50:29.668Z | 1. package/src/utils/style-loader.ts 2.package/src/utils/types-config | 1. PE32 executable (DLL) (GUI) Intel 80386, for MS Windows 2. Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64:Mach-O 64-bit executable arm64] | d1d5158660cdc9e05ed0207ceba2033aa7736ed1 8b49f61ce52f70dc3262c3190a6c7f2f7d9fdae8(未知IoC) | 通过一个被混淆的js文件来启动恶意后门。位于:package/src/utils/config.ts 89c82f46e673e60f5dd850ecb3e7a6a0bfb61848 | 初始版本 |
css-resources-loader@1.0.1 | 2021-10-25T06:53:16.080Z | 同上 | 同上 | 同上 | package/src/utils/config.ts 984addb9b3c8b45360437c4928f08ff8ba8c60d4 | 混淆的js文件被修改过 |
css-resources-loader@1.0.2 | 2021-10-25T06:54:57.949Z | 同上 | 同上 | 同上 | package/src/utils/config.ts 3fc977bf6f3791eebaa979d913b0b1574a562338 | 混淆的js文件被修改过 |
css-resources-loader@1.0.3 | 2021-10-25T06:58:26.132Z | 同上 | 同上 | 同上 | package/src/utils/config.ts aa04d11286f3bea66c9a7f9f2c1a880c999aeef1 | 混淆的js文件被修改过 |
css-resources-loader@1.0.4 | 2021-10-25T07:00:10.779Z | 同上 | 同上 | 同上 | package/src/utils/config.ts 215bb9daa3a61df830542fd647d80fafdc5634e5 | 混淆的js文件被修改过 |
css-resources-loader@1.0.5 | 2021-10-25T07:02:59.082Z | 同上 | 同上 | 同上 | package/src/utils/config.ts 76f9be51714d36f11e9d739ec82abd9b4bc5f5d2 | 混淆的js文件被修改过 |
css-resources-loader@1.0.6 | 2021-10-25T07:07:18.272Z | 同上 | 同上 | 同上 | package/src/utils/config.ts 2ac06d75434fcd3ee73ff379288a8e8060dde4b5 | 混淆的js文件被修改过 |
css-resources-loader@1.0.7 | 2021-10-25T07:09:53.363Z | 同上 | 同上 | 同上 | package/src/utils/config.ts bfc302c35e39bf3afef475f8ce48e838f574d958 | 混淆的js文件被修改过 |
css-resources-loader@1.0.8 | 2021-10-25T07:11:21.838Z | 同上 | 同上 | 同上 | package/src/utils/config.ts f3d74a484464a2d0f084475eb950ee9df082fef9 | 混淆的js文件被修改过 |
css-resources-loader@1.0.9 | 2021-10-25T07:33:34.291Z | 同上 | 同上 | d1d5158660cdc9e05ed0207ceba2033aa7736ed1 554aef8bf44e7fa941e1190e41c8770e90f07254 | 与1.0.8版本相同 | 修改了types-config, 针对macos平台的Sysjoker恶意后门的内容 |
css-resources-loader@1.1.0 | 2021-10-25T09:04:38.660Z | 1.package/src/utils/style-loader.ts 2.package/src/utils/types-config.ts | 同上 | 同上 | package/src/utils/config.ts 71896061fc9a53befeeee599604edac28df5d31f | 1. 给Mach-O文件类型的恶意后门添加了.ts后缀,但文件内容没有变化,sha1一致 2. 用于启动后门的混淆js文件有变化 |
- 通过各版本发布时间及版本间差异分析可以看到,攻击者一直在修改启动恶意后门的脚本。
- 分析反混淆后的js代码结构,可以大致看出,该js代码会调用SysJoker后门运行,并将运行结果写入文件保存。由于反混淆有信息丢失,无法判断多个版本之间的具体修改细节。
- 通过对包中README文件分析可知,该包是对
style-resources-loader
的仿冒,这也是一个周下载量在40万次的流行包。
总结
- SysJoker恶意软件早在2021年10月就在npm生态中出现,并通过仿冒两个热门的npm包进行传播,且传播时间长达20天。
- 所仿冒的包均是用于Web资源打包时加载静态样式(CSS/SASS)的处理模块,这些包使用率极高,攻击者目标明确。建议使用了
sass-loader
和style-resources-loader
的用户进行自查,是否已经受到攻击。正常包名 SysJoker仿冒包名 sass-loader mos-sass-loader style-resources-loader css-resources-loader - 发现两个早期状态的SysJoker后门,疑似攻击者调试过程中使用,不排除已传播感染的可能。
IoCs
Windows
d1d5158660cdc9e05ed0207ceba2033aa7736ed1
0bf2615f85ae7e2e70e58d5d70491cea37c4e80f (新增IoC)
Mac
554aef8bf44e7fa941e1190e41c8770e90f07254
8b49f61ce52f70dc3262c3190a6c7f2f7d9fdae8 (新增IoC)
参考文献
我们目前正在招聘,工作地点覆盖北京、上海、南京、成都等城市,详情请参见:https://research.qianxin.com/recruitment/