linux進程隱藏手段及對抗方法


1.命令替換

實現方法

替換系統中常見的進程查看工具(比如ps、top、lsof)的二進制程序

對抗方法

使用stat命令查看文件狀態並且使用md5sum命令查看文件hash,從干凈的系統上拷貝這些工具的備份至當前系統,對比hash是否一致,不一致,則說明被替換了。

注:需要在bin目錄下執行。

 

2.Hook系統調用

以ps 工作原理為例說明這些進程信息查看工具的原理

我們知道/proc是一個虛擬文件系統,是VFS的一個實現形式,/proc中包含了內核信息,硬件信息,進程信息等,ps等工具就是通過分析/proc文件系統中進程相關目錄的信息獲取進程信息匯總。HooK系統調用型的進程隱藏方式都是通過攔截或者迷惑ps等工具從/proc獲取分析結果的過程,而不是針對/proc/文件系統生成本身。

ps 首先會調用openat 系統函數獲取/proc目錄的文件句柄,然后調用系統函數 getdents 遞歸獲取/proc目錄下所有文件信息(包括子目錄),然后開始open函數打開/proc/進程pid/stat,/proc/進程pid/status/proc/進程pid/cmdline 文件開始獲取進程信息,然后打印結果。

原理:
(1)調用openat系統函數獲取/proc目錄的文件句柄
(2)調用系統函數getdents遞歸獲取/proc目錄下所有文件信息(包括子目錄)
(3)調用open函數打開/proc/進程pid/stat/proc/進程pid/status,以及/proc/進程pid/cmdline文件開始獲取進程信息
(4)然后打印輸出

攻擊者可以劫持getdents和libc中的readdir函數(修改內核中的系統調用代碼或者修改lib中的函數代碼)實現過濾特定進程名,從而實現進程隱藏。

實現方法:

劫持getdents 等系統調用函數或libc中的readdir 函數等系統調用函數一般來說有3個途徑:
(1)修改內核調用,比如getdents 的源碼
(2)修改libc庫中readdir 函數的源碼
(3)利用環境變量LD_PRELOAD 或者配置ld.so.preload文件以使得惡意的動態庫先於系統標准庫加載,以達到架空系統標准庫中相關函數的目的,最終實現對特定進程的隱藏。
備注:getdents函數對應的系統調用是sys_getdents(),readdir函數對應的系統調用是proc_pid_readdir(),

對抗方法:

使用sysdig(有開源版,可以監控ps等的調用過程,觀察是否有惡意動態庫被加載。strace有類似功能)或者prochunter(google 上search)

sysdig proc.name=ps

上述命令可以查看進程的整個啟動過程,可以分析是否被劫持。

在這里插入圖片描述

安裝方法

#導入draios源
rpm --import https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public
curl -s -o /etc/yum.repos.d/draios.repo http://download.draios.com/stable/rpm/draios.repo
 
#裝包
yum -y install kernel-devel*  dkms  sysdig

安裝后如果報錯如下:

 則需執行:

sudo sysdig-probe-loader

3.利用mount命令進行掛載

這個幾乎是最常用的實現方式,利用mount命令將磁盤掛在到proc文件夾下的特定位置即可隱藏進程。

我們知道ps、top等工具會讀取/proc目錄下獲取進程信息,如果將進程ID的目錄信息覆蓋,則原來的進程信息將從ps的輸出結果中隱匿。

實現方法

  1. 查看進程
    我們先使用ps查看python進程,這時候發現有一個pid為5400的python3的進程。
  2. 掛載磁盤到指定位置
    我們根據ps的原理可知,ps查詢的是proc文件夾下的內容,我么直接將磁盤掛在到proc文件夾下的5400即可實現對5400進程的隱藏。
    首先使用df命令查看磁盤:

    接着使用mount命令掛載/dev/vda2到/proc/5400:
    mount /dev/vda2 /proc/5400

    此時我們在用ps命令查看,發現5400進程已經消失了,達到了隱藏的效果:

對抗方法

使用cat /proc/$$/mountinfo 或者cat /proc/mounts 查看是否有利用mount -bind 將其它目錄或文件掛載至/proc下的進程目錄的情況,如下圖所示,選中部分即為掛載情況:

使用umount /dev/vda2 /proc/5400即可恢復原狀取消掛載。

參考資料

https://www.anquanke.com/post/id/160843

https://bbs.huaweicloud.com/blogs/209771


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM