這篇是 Day 17,我不小心搞錯順序了,請大家先看 Day 16 再回來看這篇,非常抱歉。
今天要打的是 Seized Lab,難度為 medium,分類是 Endpoint Forensics。
使用 Volatility,運用您作為安全藍隊分析師的記憶體分析技能,調查提供的 Linux 記憶體快照並找出攻擊細節。
說明:
使用最新版本的 Volatility,將附件中的 Volatility 設定檔「Centos7.3.10.1062.zip」放置在以下路徑:volatility/volatility/plugins/overlays/linux。
Volatility2
這個 zip 是 Volatility 的「設定檔」(profile),用於幫助 Volatility 正確地分析其記憶體結構,從他的命名規則中可以看出它是 CentOS 7 且 kernel 3.10.1062 的設定檔。
在維基百科中可以看到 kernel 3.10.1062 對應的是 7.7-1908
Ans:7.7.1908
我們在照著題目指示把 zip 放到 /volatility/volatility/plugins/overlays/linux 路徑下後,用 --info 可以看到我們自訂的 profile 就可以開始分析了
用 linux_bash 插件可以看到 bash history
python ~/volatility/vol.py -f dump.mem --profile=LinuxCentos7_3_10_1062x64 linux_bash
發現可疑指令 echo "c2hrQ1RGe2wzdHNfc3Q0cnRfdGgzXzFudjNzdF83NWNjNTU0NzZmM2RmZTE2MjlhYzYwfQo=" > y0ush0uldr34dth1s.txt
這個指令把一串 base64 寫到一個 txt 檔裡
Base64 編碼只會有大小寫 a-z 和 0-9 和 +/=,所以當你在一個字串裡只有看到這些字元,並且長度是 4 的倍數,它很有可能是 Base64
用線上解碼器,我用的是 CyberChef
Ans:shkCTF{l3ts_st4rt_th3_1nv3st_75cc55476f3dfe1629ac60}
用 netstat 插件
python ~/volatility/vol.py -f dump.mem --profile=LinuxCentos7_3_10_1062x64 netstat
這裡看起來非常可疑,Ncat、Bash、Python、Vim 同時連到同一台主機的同一個 port,很有可能是一個 reverse shell
Ncat 和 Netcat 很像,都可以用來讀取和寫入網路數據,建立連線,雖然 Ncat 是管理員常用的診斷工具,但它也是駭客最常濫用的工具之一,例如建立 reverse shell、設置後門、傳輸資料等等。在被入侵的系統中看到它是非常可疑的。
Ans:2854
要看攻擊者下載的程式又要回到 bash history
我們看到攻擊者 git clone https://github.com/tw0phi/PythonBackup 並且執行了 PythonBackup.py。
儲存庫裡 app 下的 snapshot.py 有這麼一行程式碼藏在很右邊
到這個 URL 看看
把這段 Base64 解碼
Ans:shkCTF{th4t_w4s_4_dumb_b4ckd00r_86033c19e3f39315c00dca}
我們剛剛 netstat 的輸出可以看到本地 port 12345,攻擊者 IP 192.168.49.1。
Ans:192.168.49.1:12345
這裡問的是 reverse shell 連上之後攻擊者執行的第一個指令。我們可以用我們可以用 linux_psaux,他和我們之前用的 windows.cmdline 的作用基本是一樣的,都會從運行中的進程中提取完整命令列參數。
在linux_psaux的輸出中可以看到reverse shell連上後的第一個指令 python -c import pty; pty.spawn("/bin/bash")
Ans:python -c import pty; pty.spawn("/bin/bash")
我們可以看到攻擊者用 Vim(文字編輯器)修改 /etc/rc.local 的紀錄,可以知道攻擊者有修改系統配置檔的權限,並且在建立持久化機制。
我先嘗試用 linux_find_file 尋找 /etc/rc.local 但是沒有找到,所以改從 Vim 下手
inux_dump_map 插件會提取進程的虛擬記憶體區域,所以我們可以用這個插件提取 Vim 的虛擬記憶體區域,還原 Vim 當時正在處理的數據。
python ~/volatility/vol.py -f dump.mem --profile=LinuxCentos7_3_10_1062x64 linux_dump_map -p 3196 -D dump/
把所有檔案的 strings 集成一個 txt
strings dump/* > vim.txt
在其中看到攻擊者建了一把 SSH key,這就是攻擊者繞過密碼存取系統的方法。
除了建立ssh key之外還有一段文字
Well played : c2hrQ1RGe3JjLmwwYzRsXzFzX2Z1bm55X2JlMjQ3MmNmYWVlZDQ2N2VjOWNhYjViNWEzOGU1ZmEwfQo=
一樣是 Base64
Ans:shkCTF{rc.l0c4l_1s_funny_be2472cfaeed467ec9cab5b5a38e5fa0}
Rootkit 最常用的隱藏手法之一是 syscall hooking,它會修改 system call table 然後劫持一個合法的系統呼叫。
linux_check_syscall 插件會檢查這個 table,如果發現任何不屬於合法核心模組的地址,它就會標記為 HOOKED,顯示 Rootkit 的存在。
python ~/volatility/vol.py -f dump.mem --profile=LinuxCentos7_3_10_1062x64 linux_check_syscall | grep HOOKED
Ans:sysemptyrect
我們沒辦法從被加密的檔案中找出金鑰,但我們可以從 Rootkit 載入時的行為來尋找線索。
linux_lsmod 插件會列出所有已載入的核心模組,-P 參數會顯示這些模組啟動時傳遞的參數。
python ~/volatility/vol.py -f dump.mem --profile=LinuxCentos7_3_10_1062x64 linux_lsmod -P
可以看到 crc65_key=1337tibbartibbar
Ans:1337tibbartibbar
今天我們學到了很多 Linux 記憶體分析技術:透過 linux_check_syscall 插件和 linux_lsmod 插件來檢測和分析 Rootkit 的存在,並使用 dump_map 來蒐集文字編輯器正在處理的資料,分析 /etc/rc.local、SSH 金鑰等常見持久化手法。
明天我們要進行更深入的 Windows 記憶體分析。