網路資安威脅
駭客將 Jenkins 變成加密貨幣挖礦機
本文說明組態設定錯誤如何讓 Jenkins Script Console 變成駭客從事虛擬加密貨幣挖礦的利器。
摘要
- 駭客可利用 Jenkins Script Console 來執行惡意的 Groovy 腳本,進而從事網路犯罪活動,例如虛擬加密貨幣挖礦。
- 組態設定錯誤 (如認證機制設定錯誤) 會讓「/script」端點暴露在外,讓駭客有機可乘,導致駭客從遠端執行程式碼 (RCE) 或加以濫用。
- 駭客可利用 Jenkins 的漏洞來執行腳本,進而下載挖礦程式來執行,並使用 cron 排程工作與 systemd-run 工具讓挖礦程式常駐在系統內。
Jenkins 是一套開放原始碼「持續整合/持續交付」(CI/CD) 解決方案,可用來將軟體開發的各個階段自動化,例如:測試、組建及部署等階段。儘管它能為使用者帶來諸多效益,但也可能被駭客當成攻擊途徑,利用組態設定錯誤的伺服器或含有漏洞未修補的 Jenkins 版本來部署虛擬加密貨幣挖礦程式及後門程式,或者蒐集機敏資訊。本文說明組態設定錯誤的 Jenkins Script Console 如何變成駭客從事虛擬加密貨幣挖礦的利器。
技術細節
Jenkins 當中的 Script Console (腳本主控台) 是一個讓系統管理員和獲得授權的使用者直接在 Jenkins 伺服器上執行 Groovy 腳本的工具。這個主控台會以 Jenkins 的存取權限來執行腳本,因此腳本將擁有較高的權限。Jenkins 支援的腳本採用 Groovy 語言。
在預設情況下,Jenkins 的腳本主控台不會開放給匿名使用者使用。這個可以執行 Groovy 腳本 (以及危險指令) 的主控台僅限於獲得授權、擁有系統管理權限的使用者才能使用。然而,Jenkins 執行個體卻有可能因為組態設定錯誤 (例如某些認證機制設定不正確) 而導致執行個體暴露出漏洞。如果啟用了「Sign Up」(加入) 或「Registration」(註冊) 選項,在存取 Jenkins 與「/script」端點時,也可能出現「遠端程式碼執行」(RCE) 漏洞。所以,妥善保護這個介面至關重要。不幸的是,有些暴露在網際網路上的 Jenkins 部署環境都存在著組態設定錯誤,所以才會遭駭客濫用。
只要到 Shodan 迅速搜尋一下,就可以找到許多暴露在公共網路上的 Jenkins 伺服器。請注意,雖然並非所有暴露在外的 Jenkins 伺服器都會遭到濫用,但依然可能被駭客當成跳板。
根據趨勢科技觀察,如果駭客能夠存取 Jenkins Script Console,他們就能執行惡意腳本來從事虛擬加密貨幣挖礦。圖 3 顯示我們在分析過程當中發現的惡意內容 (已編碼)。
如圖中所示,駭客利用 Jenkins Groovy 擴充元件的組態設定錯誤來執行 Base64 編碼的字串,這其實是一個惡意腳本。
以下是此腳本的分析:
首先,腳本會檢查自己是否正在執行 BusyBox,如果偵測到這個工具,就會結束腳本:
該腳本有一個名叫「svalid()」的函式會檢查一些具有寫入權限的位置:
此函式需收到一個參數,並且會在指定的目錄中建立一個暫時的指令列腳本,檔名為「vinars」。此腳本單純只會列印「ginerd」這個字到主控台上。接著函式會讓這個小小的腳本變成可以執行,然後使用 $? 來擷取結束狀態,這是一個特殊的變數,內含一個數字,代表上次指令的執行結果。此函式後續用於在某個動態指定的位置執行一個簡單的腳本。
接著,腳本確定有足夠的系統資源來有效執行挖礦工作 (這一點與其他挖礦程式類似)。為了確保這點,腳本會找出哪些處理程序消耗了 90% 以上的 CPU 資源,然後將這些處理程序全部終止。此外,也會終止所有已停止執行運作的處理程序。
接著,駭客會尋找可用來下載和執行挖礦程式的位置。首先,他會使用 svalid () 函式來檢查當前的使用者是否可在「/dev/shm」目錄寫入和執行挖礦程式,如果該函式結束時傳回非零值 (代表目錄無法寫入或執行),那就會繼續尋找其他目錄 (「/proc」和「/sys」除外)。
如果找不到可用的目錄,那就使用「/tmp」來作業,並且在裡面建立一個子目錄,叫做「duet」,然後給予該目錄最大的權限 (777)。
接下來會先檢查挖礦程式的二進位檔案是否已存在目錄當中。如果不存在,那就下載挖礦程式的二進位檔案,然後讓它常駐在系統內。在檢查惡意二進位檔案是否存在時,腳本會核對其 SHA256 雜湊碼。
如果這個指令傳回一個執行失敗的狀態碼,那麼腳本接著就會從 https[:]//berrystore[.]me 下載惡意的二進位檔,這是一個加密的 tar 檔案,檔名為「cex」。腳本使用 wget 來下載二進位檔案。
如果無法透過 wget 下載檔案,那就會使用 OpenSSL 的 s_client 用戶端來下載二進位檔案,此用戶端會用 SSL/TLS 連線至遠端主機。
這個指令會發送一個 HTTPS GET 請求到伺服器,接著讀取伺服器的回覆,從輸入串流擷取出最後 2,481,008 個位元組,顯示出一種躲避偵測的行為。擷取到的資料接著儲存成「cex」檔案。
由於這是一個 AES-256 加密的 tar 檔案,所以接著會使用 OpenSSL 來將它解密。它使用 SHA256 雜湊碼來從密碼演算出金鑰,並使用 AES-256 來解密。解密之後,接著使用 tar 來解壓縮檔案,此時原始的「cex」檔案就會刪除。接著將檔案設定成可執行,這就是腳本稍早使用「sha256sum app」指令來檢查是否存在的那個檔案。
駭客使用 cron 排程工作以及 systemd-run 來確保挖礦程式能常駐在系統內,並使用 flock 系統工具來確認同一時間只有一份挖礦程式在執行。
使用 cron 排程工作來常駐系統
圖 13 的程式碼會建立一個 cron 排程工作:
- 它使用 flock 系統工具來鎖定檔案,然後使用 /var/tmp/verl.lock 檔案來確保同一時間只有一個執行個體在系統上執行。
- 它使用 awk '!a[$0]++' 來清除所有 cron 當中的重複工作。這是另一個確保同一時間只有一個 cron 排程工作在執行的手段。
- 最後,awk 的輸出會透過管線 (pipe) 導入 crontab - 指令,該指令會使用過濾好、非重複的 cron 排程工作來更新使用者的 crontab。
腳本會將整個 cron 排程工作儲存在一個名為「cronny」的變數中,再加上執行挖礦程式所需的所有參數,包括:礦池和錢包位址,然後將排程工作加入 crontab 當中。
使用 systemd-run 來實現常駐
systemd-run 指令會使用 DBUS_SESSSION_BUS_ADDRESS=unix:/run/user/$(id -u)/bus 來將 DBUS_SESSSION_BUS_ADDRESS 這個環境變數設定成當前使用者連線階段的 D-Bus session bus socket 檔案位址。這會讓使用者的連線階段內執行的應用程式和服務能透過 D-Bus 溝通。
駭客接著使用 systemd-run 讓虛擬加密貨幣挖礦程式設定在每一小時開始的時候執行。flock 工具可利用一個檔案鎖來確保同一時間只有一個執行個體在跑。
就算這些方法都失敗,挖礦程式沒有照預期的方式執行,那駭客還有另一個執行機制。
腳本會執行以下動作:
- 將字串寫入一個名為「strptr」的檔案來設定挖礦作業的 rig ID。
- 「trap '' SIG」這道指令會設定一個 trap (陷阱) 來忽略 SIG 系統訊號。這行程式碼的目的可能是要防止腳本被某些系統訊號提前終止。
- 「 ( sleep 40; kill -9 $PPID ) &」這道指令會在背景啟動一個「子」指令列介面 (&)。這個子指令列介面會睡眠 40 秒,然後發送 SIGKILL 系統訊號給「父」處理程序 ($PPID),該處理程序很可能就是腳本本身 (這可能是用來確認腳本會在一段時間之後終止,當成一種清理手段)。
- 最後,exec 指令會執行挖礦程式。
如何防範
要防止 Jenkins 伺服器遭到上述攻擊,我們建議採取以下幾項最佳實務原則:
- 使用 Jenkins 提供的 Script Approval (腳本核准) 功能。
- 套用適當的認證與授權政策來保護網頁主控台的存取。請注意,Jenkins 已針對存取控管提供了一些相關指引。
- 使用 Jenkins 提供的 Audit Logging (稽核記錄檔) 功能。
- 確保 Jenkins 伺服器無法從網際網路存取。
趨勢科技解決方案
Vision One 威脅追蹤查詢
以下是您可在 Vision One 當中追蹤威脅的實用查詢:
- eventSubId: 2 AND processCmd:* exec * --rig-id *
- eventSubId: 2 AND processCmd:cron AND objectCmd:* exec * --rig-id *
結論
Jenkins 軟體的強大功能,讓它成為現代化軟體開發不可或缺的一項工具。然而,這些功能的組態如果沒有設定妥當,或者軟體久未修補,就有可能招來嚴重的風險 (這一點在我們先前一篇有關 Jenkins 的部落格有討論過)。本文討論 Jenkins Script Console 如何被駭客用來部署惡意腳本,從事虛擬加密貨幣挖礦之類的活動。
確保組態設定正確、嚴格的認證與授權、定期稽核,以及限制 Jenkins 伺服器不能從網際網路存取,這些都是能讓企業大幅降低 Jenkins 執行個體成為駭客入侵管道的重要步驟,同時也能防止開發環境遭到駭客攻擊。
入侵指標 (IoC)
如需本文提到的入侵指標完整清單,請至此處。
MITRE ATT&CK 技巧
手法 | 技巧 | 技巧編號 |
---|---|---|
突破防線 | 經由漏洞攻擊企業對外的應用程式 | T1190 |
搜尋 | 處理程序搜尋 | T1057 |
檔案與目錄搜尋 | T1083 | |
躲避防禦 | 檔案與目錄權限修改:Linux 和 Mac 檔案與目錄權限修改 | T1222.002 |
解密/解碼檔案或資訊 | T1140 | |
幕後操縱 | 對內傳輸工具 | T1105 |
應用程式層次的通訊協定:網站通訊協定 | T1071.001 | |
常駐 | 排程工作:Cron | T1053.003 |
排程工作:Systemd 計時器 | T1053.006 | |
衝擊 | 資源挾持 | T1496 |