关键词
供应链攻击、数据窃取、NPM
ReversingLabs的研究员发现,一个安装恶意 NPM 包以窃取敏感数据的攻击正在广泛传播中,这些敏感数据来自移动应用及网站中的嵌入表单。
ReversingLabs的研究人员近来发现了一些广泛传播的供应链攻击的相关证据。这些供应链攻击通过NPM包管理来传播恶意的JavaScript包。ReversingLabs的研究人员发现了20多个六个月之前发布的NPM包,包含着经过混淆的恶意JavaScript代码,这些恶意代码能够从调用这些包的网站和移动应用中窃取个人的表单数据。
经过进一步调研,发现了IconBurst联合供应链攻击的证据:其中大量的NPM包有恶意的jQuery代码,这些代码能够在恶意包被部署的应用中窃取表单数据。尽管尚不清楚这次攻击的全部范围,但发现的恶意软件包很可能被数百种或数千种的下游手机和桌面端应用程序以及网站使用。在其中一个案例中,一个恶意包已经被下载了超过17,000次。
同近来对德国组织的依赖混淆攻击一样,这些恶意攻击依赖于故意的错误拼写(typo-squatting),这种方法中攻击者使用与合法NPM包相似的名称,或者使用合法NPM包的常见错误拼写来命名恶意的NPM包,并伪装成像umbrellajs包以及ionic.io发布的包一样的下载量大的包。这种攻击的目标是软件或数据的终端用户,而非开发组织,这使得这种攻击更接近于臭名昭著的SolarWinds攻击。根据许多NPM包中用于获取数据的域名间的相似性,这次供应链攻击可能源于同一个攻击者。
下文中是这次广泛传播的供应链攻击的详细信息,包括攻击相关的失陷因子,以及对这些恶意NPM包的修补建议。
四月,ReversingLabs的研究人员偶然发现了使用JavaScript混淆器来隐藏其功能逻辑的一系列NPM包。对这些包的分析证实了对德国多个不同行业的头部公司软件供应链的模拟“依赖混淆”攻击。从那以后, NPM仓库中出现的使用相同混淆器的包就一直受到持续关注。
下面介绍了如何通过关注这种混淆技术来发现那些发布恶意代码的NPM账户,这些恶意代码最终被用于窃取用户输入的表单数据。
是否用了JavaScript混淆器是研究人员最初对大量NPM包关注的指标,这些包大多在过去两个月发布,都使用上文提到的混淆器。总共发现了二十多个这样的NPM包,查看这些包的名称可以发现惊人的相似之处,如图1所示。
图1:使用JavaScript混淆器的相似NPM包
为了搞清楚这些包具体做了什么,研究人员开始尝试使用JavaScript 解混淆器对这些包进行解混淆。通过仔细测试解混淆后的实例,发现了它们都通过jQuery 的 Ajax请求模块窃取用户表单数据,并将这些数据发送到不同的域名下,最终由恶意代码的作者获取。一言以蔽之,这是恶意行为存在的证据。
显然,这种通过故意错误拼写来使开发者搞混这些包和恶意包的策略是有效的。以npm包作者ionic-io创建的包为例,图2所示的是该作者发布的名为icon-package的包,该NPM包共计18个版本,其中包含着窃取数据的恶意代码。这个包显然是旨在误导开发者使用这个包而非ionicons,这是一个常用的开源图标库,它为Web、安卓及桌面端应用提供了1000多个图标。
图2:icon-package 发布的版本
图4:正常的ionic页面
在追踪活动来源的过程中,甚至发现了包含此类恶意功能的旧软件包。它们由作者fontsawesome于2021年12月发布,也针对上文提到的ionicons图标集。这些包中用于数据获取的域名为https://graph-googleapis.com,与icon包前两个版本中使用的域名相同。
尽管该行为的确切开始尚不清楚,但恶意NPM包从2021年12月开始,一直到2022年5月中旬,主要在模仿ionicons框架。此后,攻击者转向开发新的NPM软件包,这些软件包使用与之前相同的手法,并开始针对其他流行的UI框架。
其中一个包被名为umberlaks,这显然是对非常流行的umberlajs这一JavaScript DOM(document object model)操作框架的一种故意错误拼写。
图5:GitHub搜索结果
图6:Woxruz的HackingTool仓库
图7:sidr包的说明和参考网站的内容
虽然最初观察到的恶意软件包采用保守的方法收集表单数据,但最近发布的恶意软件包正在采取更主动的方法获取数据。研究人员发现的另一个恶意软件包footericon使用定义的“登录表单”类从所有表单元素收集数据。
图8:footericon包的表单窃取代码
类似地,swiper-bundle包是一个针对流行的JavaScript框架swiper的恶意NPM包,它使用在jQuery嵌入代码的方法,扩展了其end() 函数,使用页面上的每个表单窃取数据。
图9:swiper-bundle包的表单数据窃取代码
虽然无法确定这些攻击背后的主导者,但被部署的NPM包中藏着许多线索。例如,swiper-bundie软件包在payload中包含一个JavaScript标头,并带有明文注释,标记该NPM包的作者为Alberto Varela, 即Arpanrizki针对的sidr包的作者。同样地,较长的注释掉的单行JavaScript还包含对sidr包的几个引用。
图10:swiper-bundle包payload开始的注释标头
最后,恶意软件包使用具有一致命名模式的域名:
<子域>.my.id
这些线索表明了各种恶意包背后是由同一系列的攻击者主导的。
作者名与包名 |
下载数 |
fontsawesome |
|
ionic-icon |
108 |
ionicio |
3724 |
ionic-io |
|
icon-package |
17774 |
ajax-libs |
2440 |
umbrellaks |
686 |
ajax-library |
530 |
arpanrizki |
|
iconion-package |
101 |
package-sidr |
91 |
kbrstore |
89 |
icons-package |
380 |
subek |
99 |
package-show |
103 |
package-icon |
122 |
kbrstore |
|
icons-packages |
170 |
ionicon-package |
64 |
icons-pack |
49 |
pack-icons |
468 |
ionicons-pack |
89 |
aselole |
|
package-ionicons |
144 |
package-ionicon |
57 |
base64-javascript |
40 |
ionicons-js |
38 |
ionicons-json |
39 |
footericon |
|
footericon |
1903 |
ajax-libz |
|
roar-01 |
40 |
roar-02 |
37 |
wkwk100 |
38 |
swiper-bundie |
39 |
ajax-libz |
40 |
swiper-bundle |
185 |
atez |
43 |
ReversingLabs的研究发现了影响广泛的软件供应链攻击,下载数据表明,这次攻击涉及数千个下游应用程序使用的二十多个NPM包。
对NPM包的分析揭示了合伙攻击的证据,这些恶意包来源于一小部分作者,并且它们在支撑架构上与数据窃取域名有着相似之处。
此次攻击标志着软件供应链攻击的显著升级。捆绑在NPM包内的恶意代码在数量未知的移动和桌面应用程序以及网页中运行,获取了难以计数的用户数据。由于很少有开发组织能够检测到开源库和模块中的恶意代码,因此攻击持续了数月才引起研究人员的注意,此时相关的NPM模块已被总计下载超过27000次。在编写本报告时,虽然一些恶意软件包已从NPM中删除,但大多数软件包仍然可以下载。
除了这一特定事件之外,很明显软件开发组织及其客户需要新的工具和流程来评估供应链攻击的风险,例如这些恶意NPM包所带来的风险。应用程序开发的分散和模块化性质意味着应用程序和服务仅与其最不安全的组件一样强。这次攻击是得逞的,超过二十个恶意包可在通用的包管理软件上下载,其中一个在几周内被下载了17,000次。这揭示了应用开发自由散漫的特质,并说明恶意代码甚至漏洞的代码很容易存在于敏感应用程序和IT环境。
[graph]-googleapis.com
[io]nicio.com
[cur]ls.safhosting.xyz
[arp]anrizki.my.id
[dns]ter.my.id
[ok]ep.renznesia.xyz
[ryu]cha.my.id
elllgege.001www.com
[nge].scrp.my.id
[api]ii-xyz.yogax.my.id
el.archodex.xyz
el.curlz.online
(2) NPM包哈希
NPM包名 |
版本 |
SHA1 |
ionic-icon |
4.7.0 |
8ab228743d3fef5c89aa55c7d3a714361249eba8 |
ionicio |
5.0.0 |
f0221e1707075e2976010d279494bb73f0b169c7 |
icon-package |
5.0.0 |
9299a3eb1f11fcc090c7584bb9ce895ba38fd2cb |
icon-package |
5.1.0 |
6092606456adce8eb705ba33ad3e9536682d917f |
icon-package |
5.2.0 |
d106693abc732a93176085410c67c4581de28447 |
icon-package |
5.3.0 |
5a631ab46373251dade6dca5bb460b55bf738a64 |
icon-package |
5.4.0 |
c173de3d3ee1dd0920ee5a3a4f80d8c280ce2697 |
icon-package |
5.5.0 |
49f2bc011d1beece62b7a4ed47818e288b71edb6 |
icon-package |
5.9.0 |
cf8a7066865ab6d009e226096fa879867b8e61bc |
icon-package |
6.0.0 |
6e2b0d621bf6031beee18b897b2da5d93d3ce5e7 |
icon-package |
6.0.1 |
164ff2295b63434e8b260a46041669c98eab4235 |
icon-package |
6.0.2 |
96aca5e901bd8f1229683339766073e4e5d1de59 |
icon-package |
6.6.6 |
6253324c1d741c1be3ae20fd8262adb54530ee8b |
icon-package |
6.6.7 |
c77eda629d2076663276bc48c7462ea07470dbdc |
icon-package |
6.6.8 |
b7dc23a51469574205b0691944f4120e2d92e64d |
icon-package |
7.7.7 |
83e5ebd7f355b1655778a37db6b6953042fb77c4 |
icon-package |
7.7.8 |
123dad7d48c47486e9c226ad50b26b2ba5ec9fe2 |
icon-package |
7.7.9 |
17fef01df47ceb87b2755f4a18db23d8f7276d30 |
icon-package |
8.0.9 |
ae70ef4e5a0bb522179e5d488ed56efb9ae5b4d9 |
icon-package |
9.0.0 |
e66609e433e5b51a148889ff128bd7182fe22d4b |
ajax-libs |
9.0.1 |
54549337e60eede3d4dc6b52662c582449b66c40 |
ajax-libs |
9.0.2 |
fd72a461bb62dce8989f1c24bdcc6ae6d4eaabc5 |
ajax-libs |
9.0.3 |
66c41baf38e29c4b0a979cff35df4a1eed11e13e |
umbrellaks |
1.0.0 |
81031febc2ed49bdd8c8f7ca810830df1b0d3476 |
ajax-library |
1.0.0 |
326dab8f5d4dab461ca5fd14f136503d12227eae |
ajax-library |
1.0.1 |
2afd6730426166f061d96a8ccbfba8d8c7ed9e3e |
iconion-package |
1.0.0 |
73db956f7f752c4f71a8a8588604fa7d7af7de7e |
package-sidr |
2.2.2 |
87cb0505dbb141391103e2bd358f3aa774210a4a |
kbrstore |
1.0.0 |
7e14150502ee992fc8b1259de58261aeb2f58ae1 |
icons-package |
4.4.4 |
fb672c0b982542eeacce66be67a5bc4ff9567596 |
icons-package |
4.4.5 |
a386ddf8fb1d0846e01501f6fbac11e0389ef581 |
icons-package |
2.2.2 |
a5ad7a0edda67b7267694898a82abbee1ec7a466 |
icons-package |
3.0.9 |
20254c86209118144e6a25fb90abea6f7c903d8e |
subek |
1.0.0 |
68d1c1883cfab75fa933ab08189ba7abbd2625a8 |
package-show |
5.5.9 |
def789dc6322255264703c00d4f4dd265a48b50e |
package-icon |
6.0.5 |
1a719f2efa398ef8659a401e6209377beab87105 |
icons-packages |
7.4.0 |
a2d25c070750cbd20f0c327980a40c26f4ea47ec |
ionicon-package |
9.0.3 |
f78a57ab8e288c725e452787f3b070ec690f276b |
icons-pack |
7.8.3 |
6388e354433f8c608ab8a97ed9391b9dc44d2a99 |
pack-icons |
2.4.3 |
cda4b444744196ae9b2753830f750bc5e4548061 |
package-ionicons |
8.0.5 |
abb8ff44d224b23266769d0808ebe97c3838e484 |
package-ionicon |
8.0.5 |
c11d9aa077207adeef30cfdd9df3fe979e114b06 |
footericon |
1.0.0 |
067e42878df480c0d1ca45c268300c96a258be63 |
footericon |
3.7.1 |
06dbd365e76e7cb593df86a80385e8c46ca05545 |
footericon |
3.7.0 |
8562edf90e988f7ca556183c2f032bc307dfefdb |
footericon |
3.7.3 |
08bc77bb17b6a4ab365d0354683cbd912219becf |
footericon |
1.7.9 |
9f5f2f34f15a03c4528d6fa632899d0e3b6d1ceb |
roar-01 |
1.0.0 |
8c128c3be9645582db2fee9e64e175149d51d92c |
roar-02 |
1.0.0 |
a1e2cb98d2aa1b134b3be04d6a720393dcf6c072 |
wkwk100 |
3.4.5 |
9f2a2001a07b92adef023ca697e4febba073728e |
swiper-bundie |
10.5.3 |
b64a10493897c96feb6eda1d0c9fc7ec85506258 |
ajax-libz |
1.0.0 |
dd01c6baadd1d79f29b3d69a300e82b860edc57d |
swiper-bundle |
1.0.0 |
05d2084e1b2ce1d28c3096f16694413ec480704e |
swiper-bundle |
3.7.1 |
1de14d6be4029aa7888f8fc83779b61c96c063da |
swiper-bundle |
10.52.3 |
06cb7b1810ca1485e15fa81d92bd92533ff8c001 |
swiper-bundle |
10.22.3 |
fa234405c958a9ff22bac7debfbcde452294d73c |
swiper-bundle |
10.21.3 |
64cd1eda88f92b32323f9784aab6d1a0bdd7a38c |
ionicons-pack |
1.5.2 |
fe59a8d59f6764800ce5b85f2bfbc4db05840bae |
base64-javascript |
3.7.2 |
77170de7458ee81382efd7de2499694a459abee3 |
ionicons-js |
5.0.2 |
069f9c723af8be981a3e6220b991b9c40320d8b5 |
ionicons-json |
5.0.2 |
52a96612e3d2df0a7980de81d622da6c5ff84513 |
atez |
1.0.0 |
c6569dc3fd94f642cad56cb7a950175ff7c2062f |
编辑|王浩钧
审校|何双泽、金矢
本文为CNTIC编译整理,不代表本公众号观点,转载请保留出处与链接。联系信息进入公众号后点击“关于我们”可见。
原文始发于微信公众号(国家网络威胁情报共享开放平台):IconBurst:从应用程序及网站中窃取数据的 NPM 软件供应链攻击
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论