IconBurst:从应用程序及网站中窃取数据的 NPM 软件供应链攻击

admin 2022年7月12日21:18:28安全新闻 供应链安全评论4 views8509字阅读28分21秒阅读模式

关键词

供应链攻击、数据窃取、NPM


ReversingLabs的研究员发现,一个安装恶意 NPM 包以窃取敏感数据的攻击正在广泛传播中,这些敏感数据来自移动应用及网站中的嵌入表单。

1. 摘要


ReversingLabs的研究人员近来发现了一些广泛传播的供应链攻击的相关证据。这些供应链攻击通过NPM包管理来传播恶意的JavaScript包。ReversingLabs的研究人员发现了20多个六个月之前发布的NPM包,包含着经过混淆的恶意JavaScript代码,这些恶意代码能够从调用这些包的网站和移动应用中窃取个人的表单数据。

经过进一步调研,发现了IconBurst联合供应链攻击的证据:其中大量的NPM包有恶意的jQuery代码,这些代码能够在恶意包被部署的应用中窃取表单数据。尽管尚不清楚这次攻击的全部范围,但发现的恶意软件包很可能被数百种或数千种的下游手机和桌面端应用程序以及网站使用。在其中一个案例中,一个恶意包已经被下载了超过17,000次。

同近来对德国组织的依赖混淆攻击一样,这些恶意攻击依赖于故意的错误拼写(typo-squatting),这种方法中攻击者使用与合法NPM包相似的名称,或者使用合法NPM包的常见错误拼写来命名恶意的NPM包,并伪装成像umbrellajs包以及ionic.io发布的包一样的下载量大的包。这种攻击的目标是软件或数据的终端用户,而非开发组织,这使得这种攻击更接近于臭名昭著的SolarWinds攻击。根据许多NPM包中用于获取数据的域名间的相似性,这次供应链攻击可能源于同一个攻击者。

下文中是这次广泛传播的供应链攻击的详细信息,包括攻击相关的失陷因子,以及对这些恶意NPM包的修补建议。

2. 介绍


四月,ReversingLabs的研究人员偶然发现了使用JavaScript混淆器来隐藏其功能逻辑的一系列NPM包。对这些包的分析证实了对德国多个不同行业的头部公司软件供应链的模拟“依赖混淆”攻击。从那以后, NPM仓库中出现的使用相同混淆器的包就一直受到持续关注。

下面介绍了如何通过关注这种混淆技术来发现那些发布恶意代码的NPM账户,这些恶意代码最终被用于窃取用户输入的表单数据。

3. 检测方法


检测方案主要是分析代码意图并标记恶意行为。检测内容囊括了所有的软件行为,包括对网络、文件系统操作、打包工具等与恶意活动相关的操作的检测,也包括对隐藏行为的检测。
4. 探测混淆


JavaScript混淆器,是一种主要用于保护正常软件免受偷窃和逆向的技术。尽管JavaScript混淆器的好处值得称赞,但过去的研究表明其也具备隐藏恶意代码的功效,因此每次遇到类似的混淆都值得留意。

是否用了JavaScript混淆器是研究人员最初对大量NPM包关注的指标,这些包大多在过去两个月发布,都使用上文提到的混淆器。总共发现了二十多个这样的NPM包,查看这些包的名称可以发现惊人的相似之处,如图1所示。

IconBurst:从应用程序及网站中窃取数据的 NPM 软件供应链攻击

图1:使用JavaScript混淆器的相似NPM包

对这些NPM包更深入的研究可以发现,这些包有更多的相似之处,它们大多与以下几个账号有关联:ionic-io、arpanrizki、kbrstore以及aselole。
5. 经混淆的表单窃取代码


为了搞清楚这些包具体做了什么,研究人员开始尝试使用JavaScript 解混淆器对这些包进行解混淆。通过仔细测试解混淆后的实例,发现了它们都通过jQuery 的 Ajax请求模块窃取用户表单数据,并将这些数据发送到不同的域名下,最终由恶意代码的作者获取。一言以蔽之,这是恶意行为存在的证据。

显然,这种通过故意错误拼写来使开发者搞混这些包和恶意包的策略是有效的。以npm包作者ionic-io创建的包为例,图2所示的是该作者发布的名为icon-package的包,该NPM包共计18个版本,其中包含着窃取数据的恶意代码。这个包显然是旨在误导开发者使用这个包而非ionicons,这是一个常用的开源图标库,它为Web、安卓及桌面端应用提供了1000多个图标。

IconBurst:从应用程序及网站中窃取数据的 NPM 软件供应链攻击

图2:icon-package 发布的版本

NPM下载记录显示,恶意包icon-package总计被下载了17000余次,这些包窃取的数据被传送到https://ionicio.com,一个仿照正常ionicons框架官网ionic.io的钓鱼页面,这个页面很容易被开发者误以为是真的页面。不过,这个钓鱼行为已经超出了NPM包管理的范畴。注意观察图3中的ionic钓鱼页面与图4中的正常ionic页面。

IconBurst:从应用程序及网站中窃取数据的 NPM 软件供应链攻击

图3:假的ionic页面

IconBurst:从应用程序及网站中窃取数据的 NPM 软件供应链攻击

图4:正常的ionic页面

在背后,恶意软件包使用一个修改过的脚本,该脚本扩展了jQuery ajax() 函数的行为,将序列化表单数据发送到攻击者控制的域名。在发送数据之前,该函数验证URL内容以执行目标过滤检查。
6. 溯源


在追踪活动来源的过程中,甚至发现了包含此类恶意功能的旧软件包。它们由作者fontsawesome于2021年12月发布,也针对上文提到的ionicons图标集。这些包中用于数据获取的域名为https://graph-googleapis.com,与icon包前两个版本中使用的域名相同。

尽管该行为的确切开始尚不清楚,但恶意NPM包从2021年12月开始,一直到2022年5月中旬,主要在模仿ionicons框架。此后,攻击者转向开发新的NPM软件包,这些软件包使用与之前相同的手法,并开始针对其他流行的UI框架。

其中一个包被名为umberlaks,这显然是对非常流行的umberlajs这一JavaScript DOM(document object model)操作框架的一种故意错误拼写。

我们还观察到NPM帐户arpanrizki发布的几个包参与了类似形式的数据窃取。不过,与那些包不同,其数据接受域名为https://arpanrizki.my.id。过滤数据的表单标识符非常具体:ValidateVerificationDataForm。因此,作为调查的一部分,对这个标识符在GitHub进行搜索,得到的结果如图5所示。

IconBurst:从应用程序及网站中窃取数据的 NPM 软件供应链攻击

图5:GitHub搜索结果

结果表明,其中一个包含上述字符串的GitHub仓库由arpantek维护,arpantek是一个与NPM包作者的昵称非常相似的昵称。另一个结果与NPM作者Woxruz的HackingTool库有关。

IconBurst:从应用程序及网站中窃取数据的 NPM 软件供应链攻击

图6:Woxruz的HackingTool仓库

最后一次提交的描述提供了这个项目预期用途的线索。这些工具是为“攻击PUBG id”而设计的。PUBG是一款流行的在线游戏,拥有大量用户。换句话说,似乎Arpantek和Arpanrizki帐户背后的人试图将盗号脚本移植到NPM生态系统中以扩大攻击范围。
Arpanrizki发布的包名也表明,它们是针对流行的JavaScript框架,例如ionicons和sidr。特别地,sidr NPM软件包已有6年没有维护,但每周仍有500多次下载,这使其成为一个很好的目标。此作者发布的软件包已从NPM中删除,并由安全占位符取代。sidr软件包描述证实,在准备阶段,Arpanrizki帐户背后攻击者的主要目标是PUBG用户。

IconBurst:从应用程序及网站中窃取数据的 NPM 软件供应链攻击

图7:sidr包的说明和参考网站的内容

7. 数据窃取


虽然最初观察到的恶意软件包采用保守的方法收集表单数据,但最近发布的恶意软件包正在采取更主动的方法获取数据。研究人员发现的另一个恶意软件包footericon使用定义的“登录表单”类从所有表单元素收集数据。

IconBurst:从应用程序及网站中窃取数据的 NPM 软件供应链攻击

图8:footericon包的表单窃取代码

类似地,swiper-bundle包是一个针对流行的JavaScript框架swiper的恶意NPM包,它使用在jQuery嵌入代码的方法,扩展了其end() 函数,使用页面上的每个表单窃取数据。

IconBurst:从应用程序及网站中窃取数据的 NPM 软件供应链攻击

图9:swiper-bundle包的表单数据窃取代码

8. 隐藏在代码中的线索


虽然无法确定这些攻击背后的主导者,但被部署的NPM包中藏着许多线索。例如,swiper-bundie软件包在payload中包含一个JavaScript标头,并带有明文注释,标记该NPM包的作者为Alberto Varela, 即Arpanrizki针对的sidr包的作者。同样地,较长的注释掉的单行JavaScript还包含对sidr包的几个引用。

IconBurst:从应用程序及网站中窃取数据的 NPM 软件供应链攻击

图10:swiper-bundle包payload开始的注释标头

最后,恶意软件包使用具有一致命名模式的域名:

<子域>.my.id

这些线索表明了各种恶意包背后是由同一系列的攻击者主导的。

9. 恶意NPM包列表


作者名与包名

下载数

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

10. 结论


ReversingLabs的研究发现了影响广泛的软件供应链攻击,下载数据表明,这次攻击涉及数千个下游应用程序使用的二十多个NPM包。

对NPM包的分析揭示了合伙攻击的证据,这些恶意包来源于一小部分作者,并且它们在支撑架构上与数据窃取域名有着相似之处。

此次攻击标志着软件供应链攻击的显著升级。捆绑在NPM包内的恶意代码在数量未知的移动和桌面应用程序以及网页中运行,获取了难以计数的用户数据。由于很少有开发组织能够检测到开源库和模块中的恶意代码,因此攻击持续了数月才引起研究人员的注意,此时相关的NPM模块已被总计下载超过27000次。在编写本报告时,虽然一些恶意软件包已从NPM中删除,但大多数软件包仍然可以下载。

除了这一特定事件之外,很明显软件开发组织及其客户需要新的工具和流程来评估供应链攻击的风险,例如这些恶意NPM包所带来的风险。应用程序开发的分散和模块化性质意味着应用程序和服务仅与其最不安全的组件一样强。这次攻击是得逞的,超过二十个恶意包可在通用的包管理软件上下载,其中一个在几周内被下载了17,000次。这揭示了应用开发自由散漫的特质,并说明恶意代码甚至漏洞的代码很容易存在于敏感应用程序和IT环境。

11. 攻击指标


(1) NPM包中解包出的C2域名

[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




END

参考链接:https://blog.reversinglabs.com/blog/iconburst-npm-software-supply-chain-attack-grabs-data-from-apps-websites


编辑|王浩钧

审校|何双泽、金矢

本文为CNTIC编译整理,不代表本公众号观点,转载请保留出处与链接。联系信息进入公众号后点击“关于我们”可见。

IconBurst:从应用程序及网站中窃取数据的 NPM 软件供应链攻击


原文始发于微信公众号(国家网络威胁情报共享开放平台):IconBurst:从应用程序及网站中窃取数据的 NPM 软件供应链攻击

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月12日21:18:28
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  IconBurst:从应用程序及网站中窃取数据的 NPM 软件供应链攻击 http://cn-sec.com/archives/1173350.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: