亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

找到惡意軟件包:Go 語言生態(tài)系統(tǒng)中的供應(yīng)鏈攻擊是怎樣的?

近期發(fā)生的嚴(yán)重的 SolarWinds 攻擊事件和新型 “依賴混淆“攻擊,讓供應(yīng)鏈攻擊成為討論焦點:攻陷供應(yīng)鏈中不太安全的元素,導(dǎo)致更安全的目標(biāo)遭攻陷。

供應(yīng)鏈攻擊的流行目標(biāo)一直都是流行編程語言的很多包管理系統(tǒng),如 NPM (JavaScript)、Rubygems (Ruby) 以及 PyPI (Python)。這些系統(tǒng)常年來遭受惡意攻擊,攻擊者上傳惡意包并等待受害者安裝。

目前為止,尚未看到關(guān)于 Go 生態(tài)系統(tǒng)的供應(yīng)鏈攻擊情況。鑒于 Go 語言是我的新寵,我決定自己做一些調(diào)查。

好在依賴混淆并未Go 開發(fā)人員需要擔(dān)心的攻擊,因為導(dǎo)入數(shù)據(jù)包時來源總是顯而易見的,因此當(dāng) Go 得到外部依賴關(guān)系時,不會遇到如何獲取的困擾:

找到惡意軟件包:Go 語言生態(tài)系統(tǒng)中的供應(yīng)鏈攻擊是怎樣的?

然而,Go 開發(fā)人員可能會遇到 “誤植域名 (typosquatting)“的情況,即攻擊者利用人們經(jīng)常從鍵盤按下錯誤按鍵的事實。攻擊者可以注冊 github.com 的常用打字錯誤,在主機域名上執(zhí)行誤植域名攻擊,或者只是在 GitHub 或其它程序包主機上注冊一個新用戶,而常見的打字錯誤是程序包所有人的用戶名。

鑒于此,我構(gòu)建了一款工具,用于找到潛在在野 typosquat 程序包:

  1. 大量獲取 Go 包導(dǎo)入路徑列表(如 github.com/stretchr/testify)
  2. 排列每個唯一程序包的用戶名稱,獲得潛在的typosquat列表
  3. 檢查平臺上是否存在其中任何typosquat用戶
  4. 如找到了潛在的typosquat用戶,則檢索其所有存儲庫
  5. 記錄名稱和所檢查的原始程序包名稱一樣的倉庫

結(jié)果,我構(gòu)建了一款工具,名為 “pkgtwist”,如有興趣嘗試捕獲惡意 Go 程序包,可訪問:https://gitlab.com/michenriksen/pkgtwist。

排列

pkgtwist 最重要的部分很可能是生成良好的用戶名排列,從而增加檢測到typosquat 的幾率。一番研究后,我進入zntrio/typogenerater,它看似是生成潛在用戶名輸入錯誤的完美程序包。該程序包執(zhí)行了非常長的排列策略,我從中挑選了一些,因此 pkgtwist 僅檢查我認(rèn)為最可能是輸入錯誤的情況即可:

缺失:刪除單一字符(缺少按鍵, stretchr => strechr)

重復(fù):重復(fù)字符(兩次按鍵,gobuffalo => gobuffallo)

Bitsquatting:很可能的位翻轉(zhuǎn)錯誤 (stretchr => strftchr)

換位:交換相鄰字符(按錯誤順序按鍵,stretchr => strethcr)

這意味著,如果 pkgtwist 獲得程序包 github.com/stretchr/testify 作為輸入,那么它會檢查如下用戶是否存在于 GitHub 上,如存在,則檢查是否擁有一個名為 testify 的倉庫:

tretchr sretchr stetchr strtchr strechr strethr stretcr stretch sstretchr sttretchr strretchr streetchr strettchr stretcchr stretchhr stretchrr rtretchr qtretchr ptretchr wtretchr vtretchr utretchr ttretchr suretchr svretchr swretchr spretchr sqretchr srretchr ssretchr stsetchr stpetchr stqetchr stvetchr stwetchr sttetchr stuetchr strdtchr strgtchr strftchr stratchr strctchr strbtchr streuchr strevchr strewchr strepchr streqchr strerchr streschr stretbhr stretahr stretghr stretfhr stretehr stretdhr stretcir stretcjr stretckr stretclr stretcmr stretcnr stretcor stretchs stretchp stretchq stretchv stretchw stretcht stretchu tsretchr srtetchr stertchr strtechr strecthr strethcr stretcrh

主題

接下來是找到程序包列表并進行檢查。最初我以為可以找到類似于“前幾大 Go 程序包”的列表,但并未如愿,因此對托管在 github.com 和 gitlab.com 上的來自 Go Module Index(共731個程序包)的程序包運行了 pkgtwist。

結(jié)果找到惡意軟件包:Go 語言生態(tài)系統(tǒng)中的供應(yīng)鏈攻擊是怎樣的?

對這731個程序包運行了幾個小時后,pkgtwist 篩選出7個可能存在 typosquat的程序包進行進一步的調(diào)查。說實話雖然我本來認(rèn)為會更多,但目前來看 Go 生態(tài)系統(tǒng)尚未遭惡意 typosquat 程序包感染,這一點讓人高興。

然而,有幾個 typosquat 程序包映入我的眼簾。

github.com/siruspen/logrus

sirupsen 提供的 logrus 包是很多 Go 項目都在使用的非常流行的日志記錄程序包(在 GitHub 上獲得 17.3k 個star),從而成為 typosquat 供應(yīng)鏈攻擊的目標(biāo)。因此當(dāng)我看到用戶 siruspen(注意字母替換)具有一個名稱類似的倉庫時,快速查看了它的目的。

結(jié)果發(fā)現(xiàn)該項目是原始 logrus 倉庫的 fork,因此將二者做比對非常容易。在本文成稿之時,這個潛在的 typosquat 倉庫中添加的唯一內(nèi)容是一個配有單獨的 PrintIn 調(diào)用的很小的 init 函數(shù):

找到惡意軟件包:Go 語言生態(tài)系統(tǒng)中的供應(yīng)鏈攻擊是怎樣的?

雖然從各個角度來講,它并非惡意,但未來很可能會被所有人快速修改,因此我肯定會關(guān)注這個倉庫。同時建議使用 logrus 的用戶確保自己使用的是真正的程序包!

github.com/utfave/cli

Urfave/cli是構(gòu)建 CLI 項目的流行 Go 程序包(在 GitHub 上獲得15.4k個star)。因此當(dāng)我看到用戶 utfave 也擁有一個名為 cli 的倉庫時,警鐘敲響并進一步調(diào)查。

結(jié)果發(fā)現(xiàn),倒數(shù)第二個 commit 引入了一個非??梢傻?init 函數(shù):

找到惡意軟件包:Go 語言生態(tài)系統(tǒng)中的供應(yīng)鏈攻擊是怎樣的?

看起來作者 utfave 想要了解使用他們的 urfave/cli 版本的機器的主機名、操作系統(tǒng)和架構(gòu)。該函數(shù)提取了系統(tǒng)信息,然后通過 HTTP 調(diào)用添加到某互聯(lián)網(wǎng)公司的 IP 地址 122.51.124.140,并將該系統(tǒng)信息添加為 URL 參數(shù)。

雖然通過該代碼無法獲得對系統(tǒng)的訪問權(quán)限,但非常可疑,收集了這些信息,他們就能發(fā)現(xiàn)某個有價值或感興趣的系統(tǒng),然而迅速更改此代碼,通過反向shell 進行回調(diào)。

我已將問題告知 GitHub并希望能在不久之后撤銷該倉庫。在此之前,我建議 urfave/cli 用戶仔細檢查是否使用了“誤植域名“版本。

結(jié)論

雖然這個小小的研究項目并未涵蓋所有的 Go 程序包,但足以粗略了解到 Go 生態(tài)系統(tǒng)中的供應(yīng)鏈攻擊情況。Siruspen/logrus 和 utfave/cli 倉庫僅僅是我認(rèn)為可疑的7個被標(biāo)記出的倉庫,我會持續(xù)關(guān)注余下項目,因為從理論上將講,它們隨時可能轉(zhuǎn)變?yōu)閻阂鈧}庫。

我認(rèn)為相比其它編程語言,Go語言的情況更好,因為每次程序包被使用時,其來源都會被明確地寫出來,但代碼編輯器自動化將使“誤植域名“攻擊更可能發(fā)生,開發(fā)人員常常不會手動編寫導(dǎo)入路徑。例如,如果 VS Code 的 Go 擴展被安裝,那么開發(fā)人員一般只會在第一次使用時輸入程序包導(dǎo)入,之后當(dāng)該程序包名稱被使用時,編輯器將會自動在其它文件中添加導(dǎo)入。如果開發(fā)人員在第一次錯誤地輸入導(dǎo)入路徑,那么惡意程序包會被引入并在 Go 項目中駐留很久。

資料專區(qū)

《手撕GO語言》,從?基礎(chǔ)數(shù)據(jù)類型、流程控制、符合數(shù)據(jù)類型、函數(shù)、包、結(jié)構(gòu)體、方法、并發(fā)、測試、常用標(biāo)準(zhǔn)庫等15個模塊做了詳細的講解,219頁的文檔,需要的朋友點擊?閱讀原文?領(lǐng)取網(wǎng)盤鏈接和提取碼。

找到惡意軟件包:Go 語言生態(tài)系統(tǒng)中的供應(yīng)鏈攻擊是怎樣的?

領(lǐng)取資料請戳:https://iiv.h5.xeknow.com/s/1ueGrH 【微信打開領(lǐng)取網(wǎng)盤鏈接和提取碼】

文章轉(zhuǎn)自奇安信代碼衛(wèi)士

https://codesafe.qianxin.com

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評如潮的Linux云計算運維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機構(gòu)!