「只要你懂 Rootkit,Rootkit就會幫你」
什麼是 Rootkit
Rootkit來自於兩個字的結合,Root是類Unix作業系統上特權帳號的名稱,而Kit是工具套件的意思。所以Rootkit也就是具有特權權限的工具套件,一般來說指的是惡意軟體,是攻擊者在入侵的主機上為了維持對主機的控制以及保持隱蔽性所使用的惡意工具。
Rootkit根據層級可以分成不同的類型,比較常被提及的是「User Mode Rootkit」和「Kernel Mode Rootkit」,但也有像是Bootkits、Hypervisor level、Firmware and hardware等不同類型的Rootkit。我主要研究的是Kernel Mode Rootkit。
本篇文章其實目的也不是要介紹與教學關於Rootkit知識,就不說太多了。只是做為分享與紀錄幾篇介紹Rootkit的文章。應該說原本的確是打算自己寫文章,後來發現好像自己寫的,不會比別人好。花時間投入鑽研的報酬率也太低,就放棄了XD。畢竟對我的工作職務來說,這個不是主要的重點。
前陣子在架設一些資安防禦偵測系統的時候,開始在思考以及測試如何檢測Rootkit,當然也是有安裝了一些Rootkit sample來試試看。結果沒想到,越是測試更多Rootkit,心中的疑惑就越來越多。發現好像還是不得已去了解Rootkit。有找到了一些很不錯的資源來紀錄一下,順便分享給大家。
TheXcellerator Linux Rootkits
這邊首先強力推薦 TheXcellerator 一系列對於Rootkit的介紹文章,其實說"介紹"有點太低估它了,它這系列文章真的是非常詳細解析與教學的,不管你只是想了解運作原理,還是你想要撰寫自己的Rootkit程式,這系列文章都涵蓋了。我自己覺得一般資安人對Rootkit研究,其實看完這系列也差不多足夠了,除非真的是在該領域有更專業或進階的需求吧。
- Linux Rootkits Part 1: Introduction and Workflow
- Linux Rootkits Part 2: Ftrace and Function Hooking
- Linux Rootkits Part 3: A Backdoor to Root
- Linux Rootkits Part 4: Backdooring PRNGs by Interfering with Char Devices
- Linux Rootkits Part 5: Hiding Kernel Modules from Userspace
- Linux Rootkits Part 6: Hiding Directories
- Linux Rootkits Part 7: Hiding Processes
- Linux Rootkits Part 8: Hiding Open Ports
- Linux Rootkits Part 9: Hiding Logged In Users (Modifying File Contents Without Touching Disk)
- Fancy Bear’s a Lumberjack and It’s Okay – A Dive into the Kernel Component of Drovorub
- Linux Rootkits: New Methods for Kernel 5.7+
根據文章的介紹,Rootkit的本質是hook function,包含對於syscalls或是一般function的hook。
而Rootkit一般可以做到的:
- 顯示/隱藏LKM(Loadable kernel module)
- 隱藏檔案或目錄
- 隱藏Process
- 隱藏Open Ports
- 隱藏登入的使用者
- 提權
文章有仔細解說每一個項目達成的原理,例如隱藏LKM是通過將module從linked list當中移除,讓lsmod顯示當中不顯示載入的rootkit module。
※提醒事項※
測試Rootkit的過程,要隨時注意自己的Kernel vesion,隨時。有時候你更新了甚麼或是重新開機之後可能跟你想像的版本不同,建議做許多操作之前要保持確認目前的Kernel version。
然後很重要的事!不管是照文章自己寫程式來測試,還是從找網路上的Rootkit樣本來測試,千萬不要在實體機上的Linux安裝Rootkit來練習!即時你覺得看文章看原理好像都看得懂,也千萬不要這麼做。除非真的已經對這個很熟悉也可以承擔風險,不過如果是這樣,你應該也不需要看這文章了XD
要測試請用虛擬機測試,然後可以照文章裡面的用vagrant來幫助你練習。我自己是只有用VMware workstation的snapshot啦,不過過程有出了一些問題,我也不確定問題在哪裡就是了,畢竟一開始練習的時候對Rootkit不熟悉,也不知道VM底層snapshot原理,我以為有備份很穩了,但練習過程還是有遇到沒辦法開機,導致我重新安裝一台VM。
其他Rootkit文章補充
Linux Rootkit 中文系列
另外一個也是Rootkit系列的文章,但有個地方很有趣,第一篇文章跟後面幾篇的作者不同,第二篇的作者開頭有提到第一篇文章作者跑路(?),所以他決定繼續接著寫下去。總之我是沒有很了解整個系列文章的來龍去脈以及原始出處,網路上到處都有轉載跟備份的文章,但沒有很齊全的,所以我這邊的六篇文章也是來自於不同網站。
- Linux Rootkit系列一:LKM的基础编写及隐藏
- Linux Rootkit 系列二:基于修改 sys_call_table 的系统调用挂钩
- Linux Rootkit 系列三:实例详解 Rootkit 必备的基本功能
- Linux Rootkit 系列四:对于系统调用挂钩方法的补充
- Linux Rootkit 系列五:感染系统关键内核模块实现持久化
- Linux Rootkit 系列六:基于修改派遣例程的系统调用挂钩
Linux Rootkit for Fun and Profit – 0x00 – Design
https://jm33.me/linux-rootkit-for-fun-and-profit-0x00-design.html
這個部落格裡面也很多篇文章是講Rootkit的
分析过程:服务器被黑安装Linux RootKit木马
https://www.freebuf.com/articles/endpoint/344453.html
這篇文章跟原本預期想找到的不太一樣,原本是想知道如何檢測發現伺服器上有Rootkit
不過這個比較偏向於發現之後去逆向分析。
裡面有提到一套工具可以檢測記憶體發現木馬
python2 [vol.py](<http://vol.py/>) --info --profile=LinuxUbunt4_15_0-118-generic_profilex64 -f lubunut_reptile_infected.mem linux_check_modules
Code language: HTML, XML (xml)
不過查了一下這套工具volatility
https://github.com/volatilityfoundation/volatility
看起來很強大,但使用上可能沒那麼簡單。像是他載入profile需要指定linux版本,要確認一下它怎麼生成的。然後這個也有陣子沒更新,所以看起來沒有支援到最新的Linux Kernel版本。
Rootkit Samples
如果有需要可以練習的Rootkits樣本,awesome-linux-rootkits算是有提供一些不錯的參考。
awesome-linux-rootkits
https://github.com/milabs/awesome-linux-rootkits
Rootkit 檢測工具
- Chkrootkit
- Rkhunter
- unhide
Chkrootkit
官網
sudo apt update
sudo apt install wget apt-transport-https gnupg2 software-properties-common
sudo apt install chkrootkit
sudo chkrootkit
rkhunter
鳥哥的詳細介紹
https://linux.vbird.org/linux_server/others/0420rkhunter.php
sudo apt update
sudo apt -y install rkhunter
rkhunter --check
阿怎麼斷了我還沒很懂海ㄟ
甚麼斷了XD
沒關係, 你可以去找海龍王彼得