close
關鍵詞

供應鏈攻擊、數據竊取、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所示。

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

對這些NPM包更深入的研究可以發現,這些包有更多的相似之處,它們大多與以下幾個賬號有關聯:ionic-io、arpanrizki、kbrstore以及aselole。
5. 經混淆的表單竊取代碼


為了搞清楚這些包具體做了什麼,研究人員開始嘗試使用JavaScript 解混淆器對這些包進行解混淆。通過仔細測試解混淆後的實例,發現了它們都通過jQuery 的 Ajax請求模塊竊取用戶表單數據,並將這些數據發送到不同的域名下,最終由惡意代碼的作者獲取。一言以蔽之,這是惡意行為存在的證據。

顯然,這種通過故意錯誤拼寫來使開發者搞混這些包和惡意包的策略是有效的。以npm包作者ionic-io創建的包為例,圖2所示的是該作者發布的名為icon-package的包,該NPM包共計18個版本,其中包含着竊取數據的惡意代碼。這個包顯然是旨在誤導開發者使用這個包而非ionicons,這是一個常用的開源圖標庫,它為Web、安卓及桌面端應用提供了1000多個圖標。

圖2:icon-package發布的版本

NPM下載記錄顯示,惡意包icon-package總計被下載了17000餘次,這些包竊取的數據被傳送到https://ionicio.com,一個仿照正常ionicons框架官網ionic.io的釣魚頁面,這個頁面很容易被開發者誤以為是真的頁面。不過,這個釣魚行為已經超出了NPM包管理的範疇。注意觀察圖3中的ionic釣魚頁面與圖4中的正常ionic頁面。

圖3:假的ionic頁面

圖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所示。

圖5:GitHub搜索結果

結果表明,其中一個包含上述字符串的GitHub倉庫由arpantek維護,arpantek是一個與NPM包作者的暱稱非常相似的暱稱。另一個結果與NPM作者Woxruz的HackingTool庫有關。

圖6:Woxruz的HackingTool倉庫

最後一次提交的描述提供了這個項目預期用途的線索。這些工具是為「攻擊PUBG id」而設計的。PUBG是一款流行的在線遊戲,擁有大量用戶。換句話說,似乎Arpantek和Arpanrizki帳戶背後的人試圖將盜號腳本移植到NPM生態系統中以擴大攻擊範圍。
Arpanrizki發布的包名也表明,它們是針對流行的JavaScript框架,例如ionicons和sidr。特別地,sidr NPM軟件包已有6年沒有維護,但每周仍有500多次下載,這使其成為一個很好的目標。此作者發布的軟件包已從NPM中刪除,並由安全占位符取代。sidr軟件包描述證實,在準備階段,Arpanrizki帳戶背後攻擊者的主要目標是PUBG用戶。

圖7:sidr包的說明和參考網站的內容

7.數據竊取


雖然最初觀察到的惡意軟件包採用保守的方法收集表單數據,但最近發布的惡意軟件包正在採取更主動的方法獲取數據。研究人員發現的另一個惡意軟件包footericon使用定義的「登錄表單」類從所有表單元素收集數據。

圖8:footericon包的表單竊取代碼

類似地,swiper-bundle包是一個針對流行的JavaScript框架swiper的惡意NPM包,它使用在jQuery嵌入代碼的方法,擴展了其end() 函數,使用頁面上的每個表單竊取數據。

圖9:swiper-bundle包的表單數據竊取代碼

8.隱藏在代碼中的線索


雖然無法確定這些攻擊背後的主導者,但被部署的NPM包中藏着許多線索。例如,swiper-bundie軟件包在payload中包含一個JavaScript標頭,並帶有明文注釋,標記該NPM包的作者為Alberto Varela, 即Arpanrizki針對的sidr包的作者。同樣地,較長的注釋掉的單行JavaScript還包含對sidr包的幾個引用。

圖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

[pan]elllgege.001www.com

[nge].scrp.my.id

[api]ii-xyz.yogax.my.id

[pan]el.archodex.xyz

[pan]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編譯整理,不代表本公眾號觀點,轉載請保留出處與鏈接。聯繫信息進入公眾號後點擊「關於我們」可見。


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()