GSS資安電子報 0223 期【Checkmarx 報告:Python 惡意程式攻擊重創 Top.gg 和 GitHub】

訂閱電子報
2024-05-19 17:00
翻譯及整理:叡揚資訊 資訊安全事業處
  

  Checkmarx 研究團隊最近發現了一場針對軟體供應鏈的攻擊活動,有證據顯示已有多個受害者收到攻擊。其中包括 Top.gg GitHub 組織(擁有超過 17 萬使用者的社群)和多位個人開發者。資安威脅者在這次攻擊中使用了多種 TTPs,包括透過竊取的瀏覽器 cookie 接管帳戶、向經過驗證的提交中加入惡意程式碼、設定自定義的 Python 鏡像以及將惡意套件發佈到 PyPi 註冊表內。本次報告將介紹此次攻擊以及攻擊者使用的技術。

  關鍵點

  1. 攻擊者通過將惡意元件其相依性關聯到 GitHub 上的熱門專案和合法的 Python 套件來發佈在偽造的 Python 基礎架構上。
  2. 將惡意套件的相依性偽裝成受歡迎的「colorama」套件,其中內含隱藏的惡意程式碼,目的是從受感染的系統中竊取敏感資料。
  3. 攻擊者劫持了 GitHub 帳戶,其中包括屬於top.gg 貢獻者的帳戶,利用該帳戶進行惡意提交並將惡意程式碼散播到擁有超過 17 萬名成員的社群。
  4. 採用多階段執行流程,惡意軟體從多個外部來源取得並執行已混淆的程式碼,使用加密、編碼、壓縮和誤導性字元等技術來逃避偵測。
  5. 該惡意程式碼針對各種應用程式,例如網頁瀏覽器、社交媒體平台、電子郵件服務和通訊軟體來收集敏感訊息,包括登入憑證、會話令牌和個人資料。
  6. 遭竊取的數據被轉移到攻擊者的伺服器上,並通過修改 Windows 註冊表(registry)來建立持續性。
  

奇怪的消息,被駭了

  「我今天使用我的筆記型電腦,只是在命令列上執行 python 和其他指令,直到我在命令行上看到一條奇怪的消息,說 python 上的 colorama 有問題,起初並沒有太在意,因為已經習慣了這些東西,所以我跳過了它,幾分鐘後,在另一個我在用的腳本中也收到了相同的錯誤訊息。當我看到這個的時候,我就知道發生了什麼事,我被駭了。」

  這個令人不寒而慄的敘述來自Mohammed Dief 最近的一篇部落格文章,他是一位 Python 開發人員,在複製(Clone)儲存庫「maleduque/Valorant-Checker」時成為複雜惡意程式攻擊的受害者。

  Mohammed Dief 的故事只是這場惡意程式活動廣泛影響的一個例子。該活動背後的攻擊者採用了一種狡猾的策略,透過惡意 GitHub 儲存庫散播惡意程式。

   

偽冒的 Python 鏡像

  攻擊基礎設施包括一個看似 Python 套件鏡像的網站,並在網域"files[.]pypihosted[.]org"下註冊。

  這個網域選擇是對官方 Python 鏡像"files.pythonhosted.org"的巧妙地錯字仿冒,因為後者通常是存放 PyPi 套件的官方文件的地方。

05171

  根據攻擊者的蹤跡,我們看到他們利用了 pip(Python 的套件管理器)中的一項功能,你可以在其中指定 URL 來獲取套件相依性並使用他們偽冒的 Python 鏡像來下載套件。

05172

Requirement.txt 文件中的假鏡像 URL 與合法 URL

  

偽造的鏡像托管含有惡意的"Colorama"

  資安威脅者使用 Colorama 並在其中添加惡意程式碼,然後將含有惡意的 Colorama 套件託管在其偽冒的網域上;攻擊者能夠使用與熱門的"Colorama"套件完全相同的名稱,而不會立即引起懷疑。這種策略使得使用者更難檢測到套件的惡意性質,因為乍看下它似乎是合法的相依性。

  為了進一步隱藏他們的惡意意圖,攻擊者在對許多惡意儲存庫提交變更時採用了一種策略方法。他們會同時提交多個文件,包括包含惡意連結的要求文件以及其他合法文件。這項經過深思熟慮的措施旨在最大限度地減少檢測的機會,因為惡意連結會與合法的相依性混合在一起,從而降低使用者在粗略審查已提交的變更時發現異常的可能性。
05173

攻擊者在多個文件的提交中隱藏偽冒鏡像 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 執行惡意活動。這種帳戶接管方法尤其令人擔憂,因為它不需要攻擊者知道帳戶的密碼。

  

"哇!怎麼回事"

05174

  該事件在 top-gg 社群(擁有超過 17 萬名會員)引起了恐慌,因為使用者在 Discord 上公告了關於"editor-syntax"其帳戶發出的可疑活動。至少可以說,"editor-syntax"非常震驚,因為他透過自己的 GitHub 帳戶意識到發生了什麼事。很明顯,該惡意軟體已經危害了很多人,凸顯了攻擊的規模和影響。

   05175

  有趣的是,攻擊者的 Typosquatting 技術是如此令人信服的,甚至 GitHub 上的使用者在不知不覺中成為了受害者。當惡意的網域"piphosted[.]org"停止運作時,該使用者在其中一個惡意儲存庫上提出問題,並對此進行了抱怨,但沒有意識到它是惡意負載的主機。

05176

深入研究惡意 Python 套件

  除了透過惡意 GitHub 儲存庫散播惡意軟體外,攻擊者還利用名為"yocolor"的惡意 Python 套件進一步發佈包含惡意程式的"colorama"套件。他們採用了相同的 Typosquatting 技術,將惡意套件託管在網域"files[.]pypihosted[.]org"上,並使用與合法"colorama"套件相同的名稱。

  透過操縱套件安裝過程並利用使用者對於 Python 套件生態系統中的信任,攻擊者確保只要在專案要求中指定惡意相依性,就會安裝惡意「colorama」套件。這種策略使攻擊者得以避開懷疑,並滲透到依賴 Python 套件系統完整性且毫無戒心的開發人員的系統中。

05177

階段1

  第一階段是,毫無戒心的使用者從偽冒的網域"files[.]pypihosted.org"下載包含惡意相依性的惡意儲存庫或套件-"colorama"。

05178

ycolor 套件中惡意程式碼的範例

第二階段

  惡意套件"colorama"包含與合法套件相同的程式碼,除了一小段額外的惡意程式碼。最初,該程式碼位於"colorama/tests/__init__.py"檔案中,但攻擊者後來將其移至"colorama/init.py",可能是為了確保惡意程式碼更可靠地執行。該程式碼為攻擊的後續階段奠定了基礎。

  攻擊者採用了一種巧妙的技術將惡意負載隱藏在程式碼中。他們使用大量的空白將惡意程式碼推離螢幕,要求檢查包的人在發現隱藏的惡意內容之前水平滾動很長一段時間。該技術目的是使惡意程式碼在快速查看套件的來源檔案時不那麼引人注目。

  此程式碼從"hxxps[:]//pypihosted[.]org/version"取得並執行另一段 Python 程式碼,該程式碼安裝必要的函式庫並使用 fernet 函式庫解密硬編碼資料。然後,被解密的程式碼會搜尋有效的 Python 直釋器,並執行保存在暫存檔案中的另一個混淆的程式碼片段。

第三階段

  惡意軟體進一步發展,從另一個外部連結獲取額外混淆的Python程式碼:hxxp[:]//162[.]248[.]100[.]217/inj,並使用"exec"執行它。

05179

第四階段

  經過分析,攻擊者很明顯地已經對他們的程式碼進行了混淆。使用中文和日文字串、zlib 壓縮和誤導性變數名等技術只是使程式碼分析和理解複雜化的一些技術。

  簡化的程式碼檢查受感染主機的作業系統,並選擇一個隨機的資料夾和檔案名稱來託管最終的 Python 惡意程式碼,該程式碼從"hxxp[:]//162[.]248[.]100.217[:] 80/grb"中取得。

  惡意軟體也採用持久化機制,透過修改 Windows 註冊表來建立新的運行鑰,確保每次系統重新啟動時都會執行 Python 惡意程式碼。這使得惡意軟體即使在重新啟動後也能在受感染的系統上保持運作。

051710

第五階段-沒有人掉隊

  惡意軟體的最後階段,從遠端伺服器提取及揭示了其資料竊取能力的真實程度。它針對各種熱門的軟體應用程式並竊取敏感訊息,其中一些資訊包括:

  • 瀏覽器資料:此惡意軟體針對多種網頁瀏覽器,包括 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 供應鏈安全解決方案的一部分,我們的研究團隊持續監控開源軟體生態系統中的可疑活動。我們追蹤並標記可能表明不法行為的「信號」,並及時提醒我們的客戶以幫助保護他們。共同努力維護開源生態系統的安全。

時間軸:

  1. 2022 年 11 月: Pypi 使用者 "felpes" 為 Python 套件索引(PyPI)新增了三個套件,其中包含各種形式的惡意程式碼
  2. 2024 年 2 月 1 日:攻擊者註冊了網域 pypihosted[.]org
  3. 2024 年 3 月 4 日: top.gg 貢獻者的 GitHub 帳戶遭到洩露,攻擊者利用該帳戶提交惡意程式碼至組織的儲存庫
  4. 2024 年 3 月 13 日:攻擊者註冊了網域 pythanhosted.org,進一步擴展了他們的網域仿冒基礎設施
  5. 2024 年 3 月 5 日:惡意套件 "yocolor" 在 PyPI 上發佈,充當惡意軟體的傳遞機制。

  

套件清單

051711051712

  

入侵指標

  • hxxps[:]//files[.]pythanhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.5.tar.gz
  • hxxps[:]//files[.]pypihosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz
  • hxxps://files[.]pypihosted[.]org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.3.tar.gz
  • 162[.]248.101.215
  • pypihosted.org/version
  • 162[.]248.100.217
  • 162.248.100.117
  • 0C1873196DBD88280F4D5CF409B7B53674B3ED85F8A1A28ECE9CAF2F98A71207
  • 35AC61C83B85F6DDCF8EC8747F44400399CE3A9986D355834B68630270E669FB
  • C53B93BE72E700F7E0C8D5333ACD68F9DC5505FB5B71773CA9A8668B98A17BA8

相關文章

叡揚資安團隊榮獲 Checkmarx 卓越客戶維護獎 深耕 AppSec 領域展...

叡揚資訊資安團隊近日榮獲全球應用程式安全測試(AST)領導者 Checkmarx 頒發「卓越客戶維護」獎項,肯定該公司在應用程式安全(AppSec)領域的長期耕耘與卓越表現。
2025/03/17

資安通報:polyfill[.]io供應鏈攻擊

近期最駭人聽聞的資安新聞,莫過於 polyfill.io 供應鏈攻擊,影響超過 10 萬個網站而被撻伐,一度再度傳出他們使用新的網域 polyfill[.]com 提供類似服務,而有可能再度發動類似攻擊。Polyfill[.]io 是一個可以自動提供前端 polyfill 的服務,使用方法相當方便,只需要選擇想被 polyfill 的功能,直接引用 JavaScript 的檔案即可。如果要講得更精確一點的話,有一個叫做 polyfill-service 的開源專案,提供 CDN 服務,只需引用其程式碼即可達成需求。
2024/08/07

資安通報: Python 惡意套件-請儘速檢查與移除

近期專注於資訊安全的 Checkmarx 的供應鏈安全團隊追蹤到惡意攻擊的活動,其作業的手法比典型的資訊竊取操作更進一步,利用開發生態系與開發社群的供應鏈關係,將隱藏惡意行為的 PayLoad 藏身於合法的儲存庫(repository),近幾個月來,這種威脅不斷出現、不斷成長並不斷改變其樣貌,其攻擊的目標從特定應用系統、瀏覽器至使用者的資料,而這些藏有惡意之 Package 至今已累積 75,000 下載次數。
2023/12/08

新聞中心 - 叡揚資訊與 Checkmarx 助攻 關貿網路打通 SSDLC 安...

叡揚資安團隊鼎力支持,為關貿打造最佳檢測環境。受惠於叡揚團隊的專業服務能力,使 Checkmarx 導人過程極為平順。叡揚不僅依據關貿網路當下與未來檢測量能,針對主機容量進行最適規劃,也悉心安排教育訓練、系統安裝及使用諮詢等工作,讓使用者無痛接軌新環境。隨著系統上線至今,只要 OWASP 等規範出現更新,叡揚都會立即提供 Patch 檔,確使品保中心恆常套用最新安全程式碼撰寫規則。
2023/03/01