要點
•在 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