運維同事反映一臺阿里雲測試機,反映很慢,除了跑一些docker容器,沒有其他服務。
ps -ef查看當前進程,發現存在多個cryptonight加密貨幣的挖礦進程,分別爲proc, thisxxs, xmrig:
對這些進程的所在路徑進行排查,使用lsof工具查看它們打開的文件:進程所使用的文件都已經找不到,初步判斷是被刪除。
換個思路(中間嘗試過各種假設)掃描該服務器,發現開放了2375端口,說明開放了Docker swarm編排工具WEB接口服務。外網嘗試通過瀏覽器直接訪問 API ,查看容器信息,表明存在未授權訪問漏洞。
Docker Remote API未授權訪問漏洞 :使用 docker swarm管理的 docker 節點上開放一個 TCP端口 2375 ,綁定 IP 爲: 0.0.0.0, 且暴露在公網上。導致可以遠程管理該主機的 docker 容器,啓動、停止創建下載 鏡像甚至刪除上面的容器。
未授權查看所有容器:
通過 API 拉取鏡像、開啓一個容器後,雖然 docker 執行命令只能在container內部, 與宿主機是隔離的。但 docker 運行 container的時候,可以將宿主機文件或目錄作爲 volume olumeolume掛載到 container內,並且在 container內部對這些文件進行修改。比如 /tmp/. ssh , 然後修改 /tmp/. ssh /authorized_keys 文件,把自己的 public key寫進去,修改權限爲 600 。
後面就可以通過 ssh 直借連接宿主機:
確認第二條key是惡意添加的:
挖礦容器:
查看挖礦容器內容:
這是一個簡單的xmrig礦機和相關的運行工具。查看bash歷史記錄相關內容:
注意到其中有很多看上去像是手工的刪除清理docker容器的操作,具有明顯的惡意特徵,詢問同事得知這些操作不是內部人員所爲。由monero-miner容器可以推斷docker存在API允許未授權使用且暴露在公網。以下是docker遠程代碼執行漏洞的exploit代碼節選(https://github.com/SPuerBRead/Docker-Remote-API-Exploit),使用了暴露在公網的docker api,http 2375端口
總結:
1、挖礦容器可以直接刪除,但不保證宿主機還存在其他惡意文件,由於是測試機所以直接重裝了系統。
2、未正確使用 swarm,使Docker Remote API暴露在外網(2375端口)。禁止外訪問或者設置白名單。如果只在內網訪問,對於已經滲透進內網的攻擊者,端口仍然處可以直接訪問的狀態,因此內網使用需設置嚴格的訪問規則(白名單),甚至配TLSTLS 。
3、利用漏洞部署挖礦程序或DDoS木馬,其中有挖礦木馬未嘗試逃出docker容器,而是直接在新建容器裏挖礦。
關於Docker Remote API未授權訪問漏洞可訪問綠盟的公告:
http://blog.nsfocus.net/docker-remote-api-unauthorized-access-vulnerability/