Python 惡意程式攻擊重創 Top.gg 和 GitHub
奇怪的消息,被駭了
「我今天使用我的筆記型電腦,只是在命令列上執行 Python 和其他指令,直到我在命令行上看到一條奇怪的消息,說 Python 上的 Colorama 有問題,起初並沒有太在意,因為已經習慣了這些東西, 所以我跳過了它,幾分鐘後,在另一個我在用的腳本中也收到了相同的錯誤訊息。 當我看到這個的時候,我就知道發生了什麼事,我被駭了。」
這個令人不寒而慄的敘述來自 Mohammed Dief 最近的一篇部落格文章,他是一位 Python 開發人員,在複製 (Clone) 儲存庫 "maleduque/Valorant-Checker"時成為複雜惡意程式攻擊的受害者。
Mohammed Dief 的故事只是這場惡意程式活動廣泛影響的一個例子。該活動背後的攻擊者採用了一種狡猾的策略,透過惡意 GitHub 儲存庫散播惡意程式。
偽冒的 Python 鏡像
攻擊基礎設施包括一個看似 Python 套件鏡像的網站,並在網域 " files[.]pypihosted[.]org " 下註冊。
這個網域選擇是對官方 Python 鏡像 " files[.]pythonhosted[.]org " 巧妙地錯字仿冒,因為後者通常是存放 PyPi 套件官方文件的地方。根據攻擊者的蹤跡,我們看到他們利用了 pip(Python 的套件管理器)中的一項功能,你可以在其中指定 URL 來獲取套件相依性並使用他們偽冒的 Python 鏡像來下載套件。
Requirement.txt 文件中的假鏡像 URL 與合法 URL
偽造的鏡像托管含有惡意的 " Colorama "
攻擊者使用 Colorama 並在其中添加惡意程式碼,然後將含有惡意的 Colorama 套件託管在其偽冒的網域上;攻擊者能夠使用與熱門的 " Colorama " 套件完全相同的名稱,而不會立即引起懷疑。這種策略使得使用者更難檢測到套件的惡意性質,因為乍看下它似乎是合法的相依性。
為了進一步隱藏他們的惡意意圖,攻擊者在對許多惡意儲存庫提交變更時採用了一種策略方法。他們會同時提交多個文件, 包括包含惡意連結的要求文件以及其他合法文件。這項經過深思熟慮的措施旨在最大限度地減少檢測的機會,因為惡意連結會與合法的相依性混合在一起,從而降低使用者在粗略審查已提交的變更時發現異常的可能性。
攻擊者在多個文件的提交中隱藏偽冒鏡像 URL 的範例
GitHub帳號被劫持
攻擊者的影響力不僅僅是透過他們自己的帳戶創建惡意儲存庫。他們成功劫持了一位名為 " editor-syntax " 使用者的GitHub 帳戶,該使用者是 top-gg 公司的成員,也是其中一個儲存庫的貢獻者。 透過控制這個可信任帳戶,攻擊者進行了一系列惡意活動:
- 為惡意儲存庫標註星號:受感染的帳戶用於名為 LoffyNora 的使用者建立多個惡意 GitHub 儲存庫並標註星號。此活動目的為提高惡意儲存庫的可見性和可信度。
- 惡意提交到 top-gg 儲存庫:攻擊者利用與 " editor-syntax " 受駭帳號相關的信任和特權,對屬於 top-gg 的儲存庫進行了惡意提交。
- 散播惡意軟體: 透過受損的帳戶, 攻擊者可能將惡意軟體散播給信任 " editor-syntax " 和 top-gg 組織聲譽的無防備使用者。
透過竊取Cookie劫持帳戶
" editor-syntax " 的 GitHub 帳戶很可能是透過被盜的 cookie 而被劫持的。攻擊者獲得了對帳戶會話 cookie 的存取權 限,從而允許他們繞過身份驗證並使用 GitHub UI 執行惡意活動。這種帳戶接管方法尤其令人擔憂,因為它不需要攻擊者知道帳戶的密碼。
該事件在 top-gg 社群(擁有超過 17 萬名會員)引起了恐慌,因為使用者在 Discord 上公告了關於 " editor-syntax " 其帳戶發出的可疑活動。至少可以說, " editor-syntax " 本人非常震驚,因為他透過自己的 GitHub 帳戶意識到發生了什麼事,很明顯該惡意軟體已經危害了很多人,凸顯了攻擊的規模和影響。
有趣的是,攻擊者的 Typosquatting 技術是如此令人信服,甚至 GitHub 上的使用者在不知不覺中成為了受害者。當惡意網域 " piphosted[.]org " 停止運作時,該使用者在其中一個惡意儲存庫上提出問題,並對此進行了抱怨,但沒有意識到它是惡意負載的主機。
深入研究惡意Python套件
除了透過惡意 GitHub 儲存庫散播惡意軟體外,攻擊者還利用名為 " yocolor " 的惡意 Python 套件進一步發佈包含惡意程式的 " colorama " 套件。他們採用了相同的 Typosquatting 技術,將惡意套件託管在網域 " files[.]pypihosted[.]org " 上,並使用與合法 " colorama " 套件相同的名稱。
透過操縱套件安裝過程並利用使用者對於 Python 套件生態系統中的信任,攻擊者確保只要在專案要求中指定惡意相依性,就會安裝惡意 " colorama " 套件。這種策略使攻擊者得以避開懷疑,並滲透到依賴 Python 套件系統完整性且毫無戒心的開發人員的系統中。
第一階段
第一階段是,毫無戒心的使用者從偽冒的網域 " files[.]pypihosted[.]org " 下載包含惡意相依性的惡意儲存庫或套件 " colorama " 。
ycolor 套件中惡意程式碼的範例
第二階段
惡意套件 " colorama " 包含與合法套件相同的程式碼,除了一小段額外的惡意程式碼。最初,該程式碼位於" colorama/tests/__init__.py " 檔案中,但攻擊者後來將其移至 " colorama/init.py ",可能是為了確保惡意程式碼更可靠地執行。該程式碼為攻擊的後續階段奠定了基礎。
攻擊者採用了一種巧妙的技術將惡意負載隱藏在程式碼中。他們使用大量的空白將惡意程式碼推離螢幕,讓使用者檢查套件包時需要在發現隱藏的惡意內容之前水平滾動很長一段時間。該技術目的是使惡意程式碼在快速查看套件的來源檔案時不那麼引人注目。
此程式碼從 hxxps[:]//pypihosted[.]org/version 取得並執行另一段 Python 程式碼,該程式碼安裝必要的函式庫並使用 fernet 函式庫解密硬編碼資料。然後,被解密的程式碼會搜尋有效的 Python 直譯器,並執行保存在暫存檔案中的另一個混淆的程式碼片段。
第三階段
惡意軟體進一步發展,從另一個外部連結獲取額外混淆的 Python 程式碼 hxxps[:]//162[.]248[.]100[.]217/inj 並使用 " exec " 執行它。
第四階段
經過分析,攻擊者很明顯地已經對他們的程式碼進行了混淆。使用中文和日文字串、zlib 壓縮和誤導性變數名等技術只是使程式碼分析和理解複雜化的一些技術。簡化的程式碼檢查受感染主機的作業系統,並選擇一個隨機的資料夾和檔案名稱來託管最終的 Python 惡意程式碼,該程式碼從 hxxp[:]//162[.]248[.]100[.]217[:]80/grb中取得。
惡意軟體也採用持久化機制,透過修改 Windows 註冊表來建立新的運行金鑰,確保每次系統重新啟動時都會執行 Python 惡意程式碼。這使得惡意軟體即使在重新啟動後也能在受感染的系統上保持運作。
第五階段
惡意軟體的最後階段,從遠端伺服器提取及揭示了其資料竊取能力的真實程度。它針對各種熱門的軟體應用程式並竊取敏感訊息,其中一些資訊包括:
- 瀏覽器資料:此惡意軟體針對多種網頁瀏覽器 ,包括 Opera、Chrome、 Brave、Vivaldi、Yandex 和 Edge。 它搜尋與每個瀏覽器關聯的特定目錄,並嘗試竊取敏感數據,例如 Cookie、自動填入資訊、瀏覽記錄、書籤、信用卡和登入憑證。
- Discord 資料: 程式碼透過搜尋與 Discord 相關的目錄和檔案來專門針對 Discord。它嘗試定位並解密 Discord 令牌,這些令牌可用於未經授權存取受害者的 Discord 帳戶。
- 加密貨幣錢包:此惡意軟體包含一系列的加密貨幣錢包,目的是從受害者系統中竊取檔案。它會搜尋與每個錢包關聯的特定目錄並嘗試竊取與錢包相關的檔案,然後被盜的錢包資料被壓縮成 ZIP 檔案並上傳到攻擊者的伺服器。
- Telegram 會話:惡意軟體也嘗試竊取 Telegram 會話資料。它搜尋與 Telegram 相關的目錄和文件,目的是獲取受害者的會話資訊。透過存取 Telegram 會話,攻擊者可以偷偷地未經授權存取受害者的 Telegram 帳戶和通訊。
- 電腦檔案:此惡意軟體包含一個檔案竊取程式元件,可搜尋名稱或副檔名中包含特定關鍵字的檔案。它的目標目錄包括桌面、下載、文件和最近使用的文件。
- Instagram 資料:惡意軟體嘗試利用 Instagram 會話令牌從受害者的 Instagram 個人資料中竊取敏感資訊。該惡意軟體使用竊取的會話令牌向 Instagram API 發送請求,以獲取各種帳戶詳細資訊。
對最終有效負載的進一步分析表明,該惡意軟體還包含鍵盤記錄 (Keystrokes) 元件,可捕獲受害者的擊鍵並將其保存到檔案中,然後將其上傳到攻擊者的伺服器。 此功能允許攻擊者監視和記錄受害者鍵入的輸入內容,從而可能暴露密碼、個人訊息和財務詳細資訊等敏感資訊。
使用各種技術將被竊取的資料外洩到攻擊者的伺服器,程式碼中還包括將檔案上傳到匿名檔案共用服務 (例如 GoFile 和 Anonfiles) 的功能。它還使用 HTTP 請求將竊取的資訊以及硬體 ID 或 IP 位址等唯一識別碼傳送到攻擊者的伺服器以追蹤受害者。
總結
該活動是惡意行為者採用複雜策略透過 PyPI 和 GitHub 等可信任的平台散佈惡意軟體的典型例子。這個事件凸顯在安裝套件和儲存庫時保持警覺的重要性,即使是來自可信任來源的套件和儲存庫。徹底審查相依性、監控可疑網路活動並保持強大的安全實踐,以降低成為此類攻擊受害者的風險至關重要。隨著網路安全社群不斷發現和分析這些威脅,協作和資訊共享對於持續打擊軟體供應鏈中的惡意行為者仍然至關重要。我們向 Cloudflare 報告了被濫用的網域,而且它們已被刪除。
Checkmarx 作為供應鏈安全解決方案的領導品牌,研究團隊持續監控開源軟體生態系統中的可疑活動。我們追蹤並標記可能表明不法行為的「信號」,並及時提醒我們的客戶以幫助保護他們,共同努力維護開源生態系統的安全。