要點•在2023年9月,一名攻擊者通過Pypi執行了一次針對性的攻擊,將使用阿里雲服務、AWS和Telegram的開發人員吸引到惡意軟件包。
•這些軟件包中的惡意代碼不是自動執行,而是巧妙地隱藏在函數中,旨在僅在這些函數被調用時才觸發。
•攻擊者利用誤植域名和星標劫持(Starjacking)這兩種技術將開發人員引誘到惡意軟件包。
•其中一個惡意軟包模仿一個流行的代碼存儲庫,利用了它在Pypi軟件包管理器中的缺失大做文章。
在今年9月份,一個化名為“kohlersbtuh15”的攻擊者試圖通過向PyPi軟件包管理器上傳一系列惡意軟件包來鑽開源社區的空子。
從這些軟件包的名稱及其中所含的代碼來看,攻擊者的目標似乎是使用阿里雲服務、Telegram和AWS的開發人員。
圖1. kohlersbtuh15用戶帳戶
攻擊者實施了諸多技術,包括誤植域名和星標劫持(指攻擊者通過將軟件包鏈接到GitHub上一個毫不相關的不同軟件包的代碼存儲庫,以操縱衡量軟件包受歡迎程度的星標),以誘騙受害者下載惡意軟件包。
這種攻擊的特別之處在於,不同於在Python軟件包的設置文件中植入惡意代碼這種常見策略(一旦軟件包安裝就會自動執行),這個攻擊者將惡意腳本嵌入到軟件包的深處,嵌入到特定的函數中。這意味著惡意代碼只會在正常使用期間特定函數被調用時執行。
這種隱藏惡意代碼的獨特方法不僅有助於隱藏代碼,還針對特定的操作或功能,從而使攻擊更有效、更難檢測。此外,由於許多安全工具掃描查找可自動執行的惡意腳本,將代碼嵌入到函數中加大了規避這類安全措施的可能性。
攻擊途徑:誤植域名誤植域名利用開發人員在輸入安裝命令時所犯的擊鍵錯誤來利用人為錯誤,威脅分子可能會發布名稱與目標軟件包相似的惡意軟件包。
此外,如果開發人員在瀏覽網頁時不小心拼錯了合法軟件包的名稱,他們可能會在渾然不覺的情況下進入到惡意軟件包的網站。
攻擊者的手法是製作一個酷似合法軟件包的軟件包,但添加了一個隱藏的惡意依賴項,從而觸發惡意腳本在後台運行。攻擊者也可能將惡意代碼直接嵌入到軟件包中。
從受害者的角度來看,軟件包似乎正常運行,掩蓋了幕後開展的惡意活動。
攻擊途徑:星標劫持對於開源開發人員說,通常的工作流程包括在GitHub上託管項目,並通過NPM或PyPi等軟件包管理器分發可使用的軟件包。
從軟件包管理器中選擇軟件包時,開發人員通常查看該軟件包的受歡迎程度,通常是通過其GitHub統計數據來查看,一些軟件包管理器直觀地顯示這個指標,以此表明其質量和維護水平。
然而,軟件包管理器顯示的統計數據並沒有經過任何驗證,偽造這些統計數據很簡單。
星標劫持是將託管在軟件包管理器上的軟件包鏈接到GitHub上另一個毫不相關的軟件包的代碼存儲庫的做法。然後,毫無防備的開發人員上當受騙,以為這是值得信賴的軟件包。
為了最大限度地擴大攻擊範圍,攻擊者將星標劫持和誤植域名結合在同一個軟件包中,而這正是攻擊者決定對其許多軟件包所做的操作,“Telethon2”就是一個例子。
圖2
Telethon 2其中一個引人注目的軟件包是python軟件包Telethon2,它模仿了流行的“Telethon”軟件包(下載量達6900萬次),它還通過使用“telethon”軟件包的GitHub官方代碼存儲庫來執行星標劫持。
負責這起活動的攻擊者從官方“telethon”軟件包複製了完全相同的源代碼,只有一點不同:在“telethon/client/messages.py”文件中嵌入了以下兩行惡意代碼。
圖3. 惡意代碼隱藏在telethon2-1.30.3/telethon/client/messages.py的send_message函數中。
惡意代碼不是在軟件包下載時自動執行,而是在“send message”函數被調用才被激活。
這段代碼從“hxxps[:]//tg[.]aliyun-sdk-requests[.]xyz/telegram”中獲取base64編碼的外部內容,然後將其解碼以執行操作系統命令。
enumerate-iam另一個引人注目的軟件包是“enumerate-iam”軟件包。攻擊者利用了一個名為“enumerate-iam”的流行GitHub代碼存儲庫,該代碼存儲庫並沒有相應的Python軟件包,攻擊者創建了自己的惡意Python軟件包,與合法代碼存儲庫同名。
圖4. 合法GitHub代碼存儲庫:enumerate-iam
圖5. 惡意軟件包:“enumerate-iam”
與攻擊者的其他軟件包一樣,惡意代碼隱藏在軟件包中的一個函數中,一旦函數被激活,就會試圖竊取敏感憑據。
圖6
對於在GitHub上維護項目的維護者來說,這個跡象充分錶明至少要有一個佔位符軟件包,以防止攻擊者利用這條攻擊途徑。
圖7. 該列表顯示了惡意軟件包及其相應的攻擊技術
圖8. 按國家或地區劃分的惡意軟件包總下載量百分比分佈
影響通過瞄準Telegram、AWS和阿里雲等平台上使用的流行軟件包,攻擊者展示了很高的精準度。這不是一起隨機的行為,而是一起蓄意的行為,以攻擊依賴這些廣泛使用的平台的特定用戶,可能影響數百萬人。
這起攻擊的潛在損害並不僅限於受攻擊的系統,還涉及與這些平台相關的特定數據,包括來自Telegram的通訊內容細節、來自AWS的敏感雲數據以及來自阿里雲的業務相關信息。
攻擊者在特定函數中嵌入惡意代碼,以確保有害腳本在這些函數被調用之前保持潛伏狀態。這種方法不僅繞過了通常檢測自動執行腳本的許多常規安全掃描,還允許發動更有針對性的攻擊。當毫無戒心的開發人員或用戶調用這些函數時,他們不知不覺中激活了惡意代碼,使攻擊既隱蔽又高效。
結論星標劫持和誤植域名是攻擊者採用的常見方法,以加大攻擊得逞、感染盡可能多目標的機會。這些技術旨在使軟件包看起來很受歡迎,並強調使用它的其他開發人員的數量之多,從而提高軟件包的可信度。
對於在GitHub上維護熱門項目的那些人來說,至少在PyPi這樣的平台上擁有佔位符軟件包可以作為一種防護措施,防止伺機下手的攻擊者利用合法軟件包的缺失大做文章。
在代碼中使用惡意軟件包作為依賴項帶來了很大的風險,在最好的情況下,最終會感染網絡中擁有高優先權的開發人員帳戶;如果不那麼幸運,最終可能會使客戶感染上被污染的軟件版本。
軟件包•enumerate-iam
•aliababcloud-tea-openapi
•alibabacloud-vpc20180317
•python-cos-sdk-v5
•alibabacloud-ecs20180317
•aliyun-oss2
•python-aliyun-sdk-kms
•python-aliyun-sdk-ecs
•python-aliyun-sdk-rds
•python-aliyun-sdk-core
•telethon2
•tencentcloud-python-sdk
•arangodba
•aws-consoler2