iT邦幫忙

2025 iThome 鐵人賽

DAY 16
0
Security

我一個大調查下去:從零開始的數位鑑識系列 第 16

【Day 17】Memory Forensics 06:持久化手法與 Rootkit 檢測 - Seized Lab

  • 分享至 

  • xImage
  •  

前言

這篇是 Day 17,我不小心搞錯順序了,請大家先看 Day 16 再回來看這篇,非常抱歉。
今天要打的是 Seized Lab,難度為 medium,分類是 Endpoint Forensics。

Seized

情境

使用 Volatility,運用您作為安全藍隊分析師的記憶體分析技能,調查提供的 Linux 記憶體快照並找出攻擊細節。
說明:
使用最新版本的 Volatility,將附件中的 Volatility 設定檔「Centos7.3.10.1062.zip」放置在以下路徑:volatility/volatility/plugins/overlays/linux。

工具

Volatility2

Q1:機器上安裝的CentOS版本是什麼?

這個 zip 是 Volatility 的「設定檔」(profile),用於幫助 Volatility 正確地分析其記憶體結構,從他的命名規則中可以看出它是 CentOS 7 且 kernel 3.10.1062 的設定檔。
在維基百科中可以看到 kernel 3.10.1062 對應的是 7.7-1908
https://ithelp.ithome.com.tw/upload/images/20250904/20177998V2FbKmPWj6.png
Ans:7.7.1908

Q2:bash history 中有一個指令包含一條奇怪的訊息。你能讀懂它嗎?

我們在照著題目指示把 zip 放到 /volatility/volatility/plugins/overlays/linux 路徑下後,用 --info 可以看到我們自訂的 profile 就可以開始分析了
https://ithelp.ithome.com.tw/upload/images/20250904/20177998LrwJw5fJkD.png
用 linux_bash 插件可以看到 bash history

python ~/volatility/vol.py -f dump.mem --profile=LinuxCentos7_3_10_1062x64 linux_bash

https://ithelp.ithome.com.tw/upload/images/20250904/201779987afpSPBEgF.png
發現可疑指令 echo "c2hrQ1RGe2wzdHNfc3Q0cnRfdGgzXzFudjNzdF83NWNjNTU0NzZmM2RmZTE2MjlhYzYwfQo=" > y0ush0uldr34dth1s.txt
這個指令把一串 base64 寫到一個 txt 檔裡
Base64 編碼只會有大小寫 a-z 和 0-9 和 +/=,所以當你在一個字串裡只有看到這些字元,並且長度是 4 的倍數,它很有可能是 Base64
用線上解碼器,我用的是 CyberChef
https://ithelp.ithome.com.tw/upload/images/20250904/20177998nb2TH0yQm8.png
Ans:shkCTF{l3ts_st4rt_th3_1nv3st_75cc55476f3dfe1629ac60}

Q3:可疑進程的PID是什麼?

用 netstat 插件

python ~/volatility/vol.py -f dump.mem --profile=LinuxCentos7_3_10_1062x64 netstat

https://ithelp.ithome.com.tw/upload/images/20250904/20177998fxhiZTevc9.png
這裡看起來非常可疑,Ncat、Bash、Python、Vim 同時連到同一台主機的同一個 port,很有可能是一個 reverse shell
Ncat 和 Netcat 很像,都可以用來讀取和寫入網路數據,建立連線,雖然 Ncat 是管理員常用的診斷工具,但它也是駭客最常濫用的工具之一,例如建立 reverse shell、設置後門、傳輸資料等等。在被入侵的系統中看到它是非常可疑的。
Ans:2854

Q4:攻擊者下載了一個後門程式來獲得持久性。這個後門程式中隱藏的訊息是什麼?

要看攻擊者下載的程式又要回到 bash history
https://ithelp.ithome.com.tw/upload/images/20250904/20177998GJ7NY6X7Vk.png
我們看到攻擊者 git clone https://github.com/tw0phi/PythonBackup 並且執行了 PythonBackup.py。
儲存庫裡 app 下的 snapshot.py 有這麼一行程式碼藏在很右邊
https://ithelp.ithome.com.tw/upload/images/20250904/201779982Ri3PK08Pz.png
到這個 URL 看看
https://ithelp.ithome.com.tw/upload/images/20250904/20177998HBZI4EboRR.png
把這段 Base64 解碼
https://ithelp.ithome.com.tw/upload/images/20250904/20177998QNfuWcnAG0.png
Ans:shkCTF{th4t_w4s_4_dumb_b4ckd00r_86033c19e3f39315c00dca}

Q5:攻擊者的 IP 位址和目標機器上的本機連接埠是什麼?

我們剛剛 netstat 的輸出可以看到本地 port 12345,攻擊者 IP 192.168.49.1。
Ans:192.168.49.1:12345

Q6攻擊者執行的第一個指令是什麼?

這裡問的是 reverse shell 連上之後攻擊者執行的第一個指令。我們可以用我們可以用 linux_psaux,他和我們之前用的 windows.cmdline 的作用基本是一樣的,都會從運行中的進程中提取完整命令列參數。
https://ithelp.ithome.com.tw/upload/images/20250904/20177998a4sFYvQw3g.png
在linux_psaux的輸出中可以看到reverse shell連上後的第一個指令 python -c import pty; pty.spawn("/bin/bash")
Ans:python -c import pty; pty.spawn("/bin/bash")

Q7:更改使用者密碼後,我們發現攻擊者仍然可以存取。你能找出原因嗎?

我們可以看到攻擊者用 Vim(文字編輯器)修改 /etc/rc.local 的紀錄,可以知道攻擊者有修改系統配置檔的權限,並且在建立持久化機制。
我先嘗試用 linux_find_file 尋找 /etc/rc.local 但是沒有找到,所以改從 Vim 下手
https://ithelp.ithome.com.tw/upload/images/20250904/20177998DCOXBAkNXp.png
inux_dump_map 插件會提取進程的虛擬記憶體區域,所以我們可以用這個插件提取 Vim 的虛擬記憶體區域,還原 Vim 當時正在處理的數據。

python ~/volatility/vol.py -f dump.mem --profile=LinuxCentos7_3_10_1062x64 linux_dump_map -p 3196 -D dump/

https://ithelp.ithome.com.tw/upload/images/20250904/20177998Gvm59rK8m9.png
把所有檔案的 strings 集成一個 txt

strings dump/* > vim.txt

在其中看到攻擊者建了一把 SSH key,這就是攻擊者繞過密碼存取系統的方法。
https://ithelp.ithome.com.tw/upload/images/20250904/20177998FeJ3GllE8f.png
除了建立ssh key之外還有一段文字
Well played : c2hrQ1RGe3JjLmwwYzRsXzFzX2Z1bm55X2JlMjQ3MmNmYWVlZDQ2N2VjOWNhYjViNWEzOGU1ZmEwfQo=
一樣是 Base64
https://ithelp.ithome.com.tw/upload/images/20250904/20177998n1O7fIy368.png
Ans:shkCTF{rc.l0c4l_1s_funny_be2472cfaeed467ec9cab5b5a38e5fa0}

Q8:攻擊者使用的 rootkit 名稱是什麼?

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

https://ithelp.ithome.com.tw/upload/images/20250904/20177998Fb6iXsKqWg.png
Ans:sysemptyrect

Q9:該rootkit使用crc65加密。密鑰是什麼?

我們沒辦法從被加密的檔案中找出金鑰,但我們可以從 Rootkit 載入時的行為來尋找線索。
linux_lsmod 插件會列出所有已載入的核心模組,-P 參數會顯示這些模組啟動時傳遞的參數。

python ~/volatility/vol.py -f dump.mem --profile=LinuxCentos7_3_10_1062x64 linux_lsmod -P

https://ithelp.ithome.com.tw/upload/images/20250904/20177998LknZCUHrE6.png
可以看到 crc65_key=1337tibbartibbar
Ans:1337tibbartibbar

小結

今天我們學到了很多 Linux 記憶體分析技術:透過 linux_check_syscall 插件和 linux_lsmod 插件來檢測和分析 Rootkit 的存在,並使用 dump_map 來蒐集文字編輯器正在處理的資料,分析 /etc/rc.local、SSH 金鑰等常見持久化手法。
明天我們要進行更深入的 Windows 記憶體分析。


上一篇
【Day 15】Disk Forensics 06:OLE 分析與 Firefox 鑑識 - Phishy Lab
下一篇
【Day 16】Memory Forensics 05:Code Injection 分析 - BlackEnergy Lab
系列文
我一個大調查下去:從零開始的數位鑑識18
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言