JFrog 和 Docker 在近期發(fā)現(xiàn)Docker Hub 存儲庫被用于傳播惡意軟件和網(wǎng)絡釣魚詐騙后,聯(lián)手采取緩解和清理措施。
作者:安全研究員AndreyPolkovnichenko | 惡意軟件研究團隊負責人BrianMoussalli | 安全研究高級總監(jiān)ShacharMenashe
作為軟件生態(tài)系統(tǒng)的重要組成部分兼合作伙伴,JFrog與Docker正在攜手優(yōu)化軟件生態(tài)系統(tǒng)。JFrog安全研究團隊的工作包括通過持續(xù)監(jiān)控開源軟件注冊表,主動識別和解決潛在的惡意軟件與漏洞威脅。
通過持續(xù)掃描所有主要公共存儲庫,JFrog在NPM、PyPI和NuGet注冊表中發(fā)現(xiàn)數(shù)個惡意軟件包。在本文中,我們將介紹最近發(fā)現(xiàn)的針對Docker Hub 的三個大規(guī)模惡意軟件攻擊活動,這些活動將數(shù)百萬個“無鏡像”存儲庫植入到惡意元數(shù)據(jù)。研究發(fā)現(xiàn),這些存儲庫包含的并非容器鏡像(因此無法在 Docker引擎或Kubernetes集群中運行),而是惡意元數(shù)據(jù)。
Docker Hub是一個為開發(fā)者提供多樣化功能的平臺,它為Docker 鏡像的開發(fā)、協(xié)作和分發(fā)開辟了許多可能性。目前,它是全球開發(fā)者首選的頭號容器平臺,托管著超過1500萬個存儲庫。
然而,這些公共存儲庫的內(nèi)容卻出現(xiàn)了一個重大問題。JFrog研究顯示,這些公共存儲庫中有近 20%(近300萬個存儲庫?。┩泄苓^惡意內(nèi)容,包括通過自動生成的賬戶上傳的用于推廣盜版內(nèi)容的垃圾郵件,以及惡意軟件和釣魚網(wǎng)站等極度惡意的實體。
雖然Docker Hub維護者目前對許多上傳的存儲庫進行了管理,并且在披露后已經(jīng)下架有隱患的存儲庫,但這些攻擊表明,要想完全阻止惡意上傳的難度巨大。
是什么導致了這次攻擊?
Docker Hub是Docker用于托管和分發(fā)鏡像的云端注冊服務。其核心概念是一個存儲庫,其中包含建立在容器數(shù)據(jù)基礎上的文本描述和元數(shù)據(jù)。
Docker Hub 的存儲庫
雖然Docker存儲庫的核心功能是保存Docker 鏡像的集合(一種可以通過固定名稱更新和訪問的應用程序),但Docker Hub引入了幾項關鍵的增強功能,其中最重要的是社區(qū)功能。
對于公共存儲庫來說,Docker Hub 充當著一個社區(qū)平臺的角色。用戶可以通過它搜索和發(fā)現(xiàn)可能對其項目有用的鏡像,可以對存儲庫進行評分和評論,幫助他人衡量可用鏡像的可靠性和實用性。
為幫助用戶搜索和使用鏡像,Docker Hub允許存儲庫維護者添加HTML格式的簡短描述和文檔,這些描述和文檔將顯示在庫的主頁上。庫文檔通常用于解釋鏡像的用途并提供使用指南。
合法存儲庫文檔示例
但如果以墨菲定律的角度來看,在網(wǎng)絡安全領域,如果惡意軟件開發(fā)者可以利用某些漏洞,那么它將無法避免這一隱患。
JFrog 的安全研究團隊發(fā)現(xiàn),Docker Hub中約有460萬個存儲庫是沒有鏡像的,除了存儲庫的文檔外沒有任何內(nèi)容。深入檢查后發(fā)現(xiàn),這些被上傳的無鏡像存儲庫,絕大多數(shù)都是帶著惡意目的——它們的概述頁面試圖欺騙用戶訪問釣魚網(wǎng)站或托管著危險惡意軟件的網(wǎng)站。
在討論各種惡意載荷之前,我們將先一步說明發(fā)現(xiàn)這些惡意存儲庫的方法。
識別惡意存儲庫
JFrog首先從 Docker Hub存儲庫的發(fā)布模式中發(fā)現(xiàn)了異常。為此,我們調出了過去五年中發(fā)布的所有“無鏡像”Docker Hub存儲庫,按創(chuàng)建日期進行分組,并將其繪制成圖表:
每月存儲庫創(chuàng)建圖
正如所見,Docker Hub上的活動軌跡通常比較平穩(wěn),但2021年和2023年出現(xiàn)了幾個峰值。如果放大觀察,就會發(fā)現(xiàn)每天的活動都很明確并且與常規(guī)工作日時間吻合。甚至在視覺上,就能注意到工作日創(chuàng)建的存儲庫較多,而周末創(chuàng)建的存儲庫較少。
放大觀察2023年的異常情況
從圖中可以看出,當異?;顒娱_始時,每天創(chuàng)建的存儲庫數(shù)量會翻十倍
通過深入分析在異常日創(chuàng)建的存儲庫,發(fā)現(xiàn)許多存儲庫偏離常規(guī)。主要的偏差在于它們不包含容器鏡像,只包含一個文檔頁面,這就導致該庫不能像正常的docker鏡像那樣被拉取和運行,從而無法使用。
惡意存儲庫示例
例如,上述截圖中顯示的存儲庫在描述中包含了幾個鏈接,引導用戶訪問一個釣魚網(wǎng)站。該網(wǎng)站欺騙毫無戒心的訪問者,承諾為他們購買處方藥,但隨后卻竊取他們的信用卡信息。
雖然所有異常存儲庫之間存在一定的差異,而且是由不同用戶發(fā)布,但大多數(shù)都遵循相同的模式。這使我們能夠創(chuàng)建一個簽名,并按系列(或活動)對其進行分組。在對所有無鏡像存儲庫應用這一簽名后,我們采集了發(fā)布這些存儲庫的中心用戶列表,將這些用戶發(fā)布的所有存儲庫也歸類為惡意軟件。
在將這些活動繪制在時間軸上后,能夠清晰地了解規(guī)模最大的惡意軟件攻擊活動的運作時期。
其中兩個活動在2021年上半年最為活躍,每天發(fā)布數(shù)千個存儲庫。下載器活動在2023年8月又進行了一次嘗試。網(wǎng)站SEO活動的運作方式與之不同,三年來始終堅持每天推送少量存儲庫。
每天注冊的惡意存儲庫(按活動)
在DockerCon 2023 召開時,Docker Hub已包含1500萬個存儲庫,因此我們將使用這個數(shù)字作為Docker Hub存儲庫的基準總數(shù)。
發(fā)布到 Docker Hub 的無鏡像存儲庫總數(shù)為460萬,占所有公共存儲庫的30%。我們能夠將其中的281萬個(約占19%)存儲庫與這些大型惡意攻擊活動聯(lián)系起來。
除了已發(fā)現(xiàn)的大型活動外,在分析中還發(fā)現(xiàn)了一些較小的存儲庫。這些活動似乎主要集中在垃圾郵件/搜索引擎優(yōu)化方面,暫時無法對這些活動的所有變化形態(tài)進行分類。這些較小的“活動”每個包含不到1000個軟件包。在分類時,我們將這些較小的數(shù)據(jù)集歸入了一個標有“其他可疑”的組別。
DockerHub存儲庫分類
惡意存儲庫鏡像分布(按活動):
由此可以總結出惡意存儲庫有不同的傳播方式。“下載器”和“電子書釣魚”活動會在短時間內(nèi)分批創(chuàng)建虛假存儲庫,而“網(wǎng)站SEO”活動則會在整個時間段內(nèi)每天創(chuàng)建多個存儲庫,并在每個存儲庫中使用單個用戶。
現(xiàn)在,通過了解在 Docker Hub 上運行的主要惡意軟件活動,接下來將深入回顧一下它們的策略和手段。
1. “下載器”活動
2. “電子書釣魚”活動
3. “網(wǎng)站SEO”活動
Docker Hub惡意軟件活動分析
1. “下載器”活動
下載器活動存儲庫分布
屬于該活動的存儲庫包含自動生成的文本,這些文本含有搜索引擎優(yōu)化(SEO)文本,會建議下載盜版內(nèi)容或視頻游戲作弊器。此外,這些文本還包括所謂“廣告軟件”的鏈接。
該活動分兩輪進行(約2021年和2023年),兩輪都使用了完全相同的惡意載荷(見以下分析)。
帶有惡意軟件下載鏈接的惡意存儲庫示例
2021年活動——偽裝成URL縮短器的惡意域
該活動中使用的大多數(shù)URL都假裝使用已知的URL縮短器(例如 tinyurl.com),這與2021年發(fā)現(xiàn)的谷歌廣告攻擊活動類似。嘗試解析后發(fā)現(xiàn),不同于真正的縮短器,這些惡意縮短器實際上并不對URL進行編碼。相反,它們會對文件名進行編碼,并在每次關閉惡意資源時將鏈接解析到不同的域。
例如在我們調查期間,URL blltly[.]com/1w1w1被重定向到https[://]failhostingpolp[.]ru/9ebeb1ba574fb8e786200c62159e77d15UtXt7/x60VKb8hl1YelOv1c5X1c0BuVzmFZ8-teb-LRH8w。但該服務器每次收到后續(xù)請求,都會觸發(fā)生成一個新的 URL路徑。
其唯一目的就是充當惡意CDN的代理。
同一縮短鏈接每次收到后續(xù)請求都會帶來不同的URL,并且如果托管惡意文件的服務器被關閉,縮短器將返回一個指向新活動服務器的鏈接。
我們收集了所有惡意域的列表,并編制了一個表格,顯示欺詐性縮短器與其真實可信版本之間的對應關系。
惡意軟件活動使用的偽造網(wǎng)址縮短器
該策略于2021年制定,在反病毒公司發(fā)現(xiàn)鏈接列表并將其添加到黑名單之前,它曾短暫的起過一段時間的作用。目前,當有人試圖訪問上表中的鏈接時,瀏覽器和服務提供商會發(fā)出警報。
2023年活動——加強型反檢測技術
第二輪活動發(fā)生在2023年,主要側重于避免被檢測。惡意存儲庫不再直接鏈接到惡意資源,而是將合法資源重定向到惡意資源。
在這些資源中有一個托管在 blogger.com 上的頁面,其中包含的JavaScript代碼會在 500 毫秒后重定向到惡意載荷:
另一種方法是谷歌中一個著名的開放式重定向漏洞,惡意行為者可以使用特定參數(shù)將用戶重定向到帶有合法 Google 鏈接的惡意網(wǎng)站。
通常情況下,Google 鏈接 https://www[.]google[.]com/url?q=https%3A%2F%2Fexample.us%2F不會將用戶重定向到目標網(wǎng)站。相反,它會顯示一個警告,提示用戶正被重定向到另一個域。
重定向提示示例
不過,可以通過添加非法參數(shù) usg來禁用此警告。該參數(shù)包含一個散列值或簽名,可使 google.com 自動重定向到目標網(wǎng)站。
該重定向指向目標網(wǎng)站。在編撰本報告時,目標網(wǎng)站是gts794[.]com 和 failhostingpolp[.]ru 。這些網(wǎng)站誘使受害者下載廣告軟件。但無論登陸頁面上的名稱如何,下載的文件始終是同一個帶有EXE安裝程序的壓縮包。正如我們在AnyRun分析中看到的,惡意軟件會將名為 freehtmlvalidator.exe 的二進制文件安裝到“%LOCALAPPDATA%\HTML Free Validator ”目錄中。
下載器活動中的惡意載荷
“下載器”活動載荷分析
“下載器”活動的載荷是一個惡意可執(zhí)行文件,大多數(shù)殺毒引擎將其檢測為普通木馬。
殺毒檢測服務載荷
該惡意軟件是用曾經(jīng)風靡一時的Delphi環(huán)境的后繼版本Embarcadero RAD Studio 27.0編寫的:
該惡意軟件使用HTTP POST請求與C2C服務器 http://soneservice[.]shop/new/net_api 通信。該請求是一條JSON消息,與三字節(jié)密鑰“787”XOR并用十六進制編碼。
JSON 字段的編碼方式相同,但使用了不同的密鑰:“*2k”。了解到這一點后,我們就可以對以下請求進行解碼
惡意軟件向服務器發(fā)送的第一條命令是 getinitializationdata。它包含兩個參數(shù):惡意軟件的唯一標識符(“l(fā)id”)和系統(tǒng)語言標識符。后者會告知服務器受感染系統(tǒng)的語言設置,從而實現(xiàn)定制響應。惡意軟件會在所有后續(xù)服務器請求中使用這個唯一標識符。
作為回應,服務器會提供特定于 Delphi 的布局和本地化細節(jié),這些細節(jié)會根據(jù)系統(tǒng)的語言設置進行適配。
隨后惡意軟件發(fā)送初始化請求,傳遞有關受感染系統(tǒng)的信息。這些信息包括特定于操作系統(tǒng)的信息、硬件、安裝的瀏覽器、.NET框架版本、運行進程以及可用的網(wǎng)絡適配器。服務器會返回一個指向所謂承諾軟件的鏈接和一份offer列表。承諾的軟件部分由URL和文件名表示:
惡意軟件與C2服務器的通信
該回復中的“offers”部分也包含一份可執(zhí)行文件鏈接列表。此外,它還概述了下發(fā)可執(zhí)行文件必須滿足的各種條件。最重要的條件有:
· excludeGeoTargeting包含不應安裝惡意軟件的國家的代碼
· blackAvList包含殺毒應用程序的列表,也可以防止惡意軟件被安裝
· 進程黑名單(樣本中未觀察到)
· 目標系統(tǒng)上必須存在Windows注冊表項列表(樣本中未觀察到)
考慮到惡意軟件已經(jīng)向服務器發(fā)送了系統(tǒng)信息,這些條件在客戶端上略顯多余。此外,響應中還包含了二進制惡意軟件中從未使用過的字段,但卻是廣告網(wǎng)絡的典型字段,如price、offer_id 和 advertiser_id。從這些字段中,我們可以推測該惡意軟件操作是更廣泛生態(tài)系統(tǒng)的一部分,可能涉及廣告軟件或變現(xiàn)方案,這些方案從第三方軟件的分發(fā)和安裝中獲益?;谶@一認識,我們進一步假設這些請求參數(shù)很可能是從可疑的廣告網(wǎng)絡API復制并嵌入到軟件中的,第三方可能會付費分發(fā)其可執(zhí)行文件。
處理該響應后,惡意軟件會顯示一個安裝對話框,建議用戶下載并安裝惡意Docker Hub存儲庫中承諾的軟件。
由惡意軟件顯示的安裝對話框
用戶接受后,除了安裝承諾的軟件外,惡意軟件還會下載所有惡意二進制文件,并通過命令 “SCHTASKS.exe /Create /TN <random_name> /RL HIGHEST /SC DAILY ”安排它們的持續(xù)執(zhí)行。
2. “電子書釣魚”活動
電子書釣魚活動每天注冊的惡意存儲庫
2021年中期創(chuàng)建的近百萬個存儲庫將Docker Hub變成了一座“盜版電子書圖書館”。這些垃圾郵件存儲庫均提供免費電子書下載,包含隨機生成的描述和下載URL。
電子書釣魚存儲庫示例
所有鏈接最終都會將用戶重定向到同一個頁面:http://rd[.]lesac[.]
電子書下載登陸頁面
在承諾免費提供完整版電子書后,網(wǎng)站會從用戶IP可用的頁面集中隨機選擇一個頁面,并將用戶重定向到該頁面。接下來的步驟取決于用戶所在的國家,但通常會出現(xiàn)要求用戶輸入信用卡信息的表單。
毫無疑問,這一行為背后的唯一意圖就是網(wǎng)絡釣魚,目的是竊取信用卡詳細信息,并在用戶不知情的情況下讓其加入訂閱服務。這些目標網(wǎng)站的頁腳通常有幾乎無法閱讀的文字,表明訂閱費用為每月40-60 歐元。
活動中的一些釣魚站點
3. “網(wǎng)站SEO”活動
與前兩次公然惡意(網(wǎng)絡釣魚/惡意軟件下載)的活動不同,這次活動的目的并不那么明確。雖然存儲庫本身顯然不是出于善意上傳的,但其內(nèi)容大多無害——只是一個隨機描述字符串,其用戶名由“axaaaaaxxx ”模式生成,其中a是字母,x是數(shù)字。這些用戶發(fā)布的所有存儲庫都有一個相同的名稱:網(wǎng)站。
該活動可能是實施真正惡意活動之前的某種壓力測試。
該活動的注冊程序也與眾不同。從以下圖示中我們可以看到,活動背后的惡意行為者在三年內(nèi)每天創(chuàng)建了上千個存儲庫!這與之前的活動不同,之前的活動主要是在更短的時間內(nèi)生成無鏡像存儲庫。在這次活動中,攻擊者只通過每個創(chuàng)建的用戶發(fā)布一個存儲庫;而在之前的活動中,一個用戶被用于發(fā)布數(shù)千個存儲庫。
“網(wǎng)站SEO”活動每天注冊的惡意存儲庫
在該活動中,存儲庫描述通常包含一個簡短、看似隨機且毫無意義的短語,該短語不包含任何其他信息。
有些存儲庫包含社交網(wǎng)站鏈接,但這些鏈接似乎也大多包含垃圾信息,而不是惡意URL或文件。
以下是這次活動中的一些用戶名,以及存儲庫文檔中的相關描述
網(wǎng)站SEO活動存儲庫中的隨機段落
當我們搜索這些用戶名時,我們發(fā)現(xiàn)該活動還以其他開放貢獻政策的平臺為目標。
在其他平臺使用的網(wǎng)站 SEO活動用戶名
向 Docker 公司披露
在本報告發(fā)布之前,JFrog 研究團隊向 Docker 安全團隊披露了所有發(fā)現(xiàn),其中包括320萬個疑似托管惡意或多余內(nèi)容的存儲庫。Docker 安全團隊迅速從 Docker Hub 中刪除了所有惡意和多余的存儲庫。我們誠摯感謝 Docker 安全團隊迅速而專業(yè)地處理了此次披露的事件,并很高興能為 Docker 生態(tài)系統(tǒng)的持續(xù)安全使用做出貢獻。
Docker Hub 用戶如何避免類似攻擊?
用戶應優(yōu)先使用在 Docker Hub 中標記為 “可信內(nèi)容 ”的 Docker 鏡像。
Docker Hub為受信任的內(nèi)容設置了特定標簽,用戶在瀏覽鏡像描述頁面時可以查找這些標簽。第一個標簽是官方Docker鏡像標簽,也稱為Docker Hub庫,這是一組經(jīng)過精心挑選的Docker存儲庫。該庫包含由受值得信賴的知名軟件開發(fā)基金會、組織和公司維護的存儲庫,例如Python、Ubuntu和Node。第二個標簽“已驗證發(fā)布者”(Verified Publisher)標簽,該標簽分配給 Docker 驗證發(fā)布者計劃(Docker Verified Publisher Program)中的每個存儲庫。這一組包含來自商業(yè)發(fā)布者的存儲庫,這些發(fā)布者已通過 Docker Hub 的驗證。同時,具有Sponsored OSS 標簽的內(nèi)容,則是由 Docker Hub 贊助的開源項目存儲庫。
當用戶瀏覽版本庫頁面時,頁面頂部版本庫名稱旁邊會出現(xiàn)一個徽章,表明該版本庫屬于上述類型之一。
遵循這些準則將降低從存儲庫描述頁面進入 Docker Hub 外部惡意鏈接的風險。本文中提到的惡意存儲庫沒有一個被標記為 “可信內(nèi)容”。
總結
與直接針對開發(fā)者和組織的典型攻擊不同,本案例中的攻擊者試圖利用Docker Hub的平臺信譽,這使得識別網(wǎng)絡釣魚和惡意軟件安裝意圖的過程變得更加困難。
近300萬個惡意存儲庫(其中一些已活躍三年多)凸顯了攻擊者對 Docker Hub 平臺的持續(xù)濫用,以及對此類平臺進行持續(xù)監(jiān)控的必要性。
(免責聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準確性及可靠性,但不保證有關資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網(wǎng)站對有關資料所引致的錯誤、不確或遺漏,概不負任何法律責任。
任何單位或個人認為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權或存在不實內(nèi)容時,應及時向本網(wǎng)站提出書面權利通知或不實情況說明,并提供身份證明、權屬證明及詳細侵權或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關文章源頭核實,溝通刪除相關內(nèi)容或斷開相關鏈接。 )