CATALOG
- 前言
- 實作方法
- 1.命令替換
- 實作方法
- 對抗方法
- 2.Hook系統呼叫
- 實作方法:
- 對抗方法:
- 3.利用mount命令進行掛載
- 實作方法
- 對抗方法
- 參考文章
前言
這篇文章主要做一個技術點的記錄,過去接觸比較少,現在對其進行一個小結,
實作方法
1.命令替換
實作方法
替換top、ps等命令
對抗方法
使用stat命令查看檔案狀態并且使用md5sum命令查看檔案hash并將其與正常檔案hash進行比較,如果確定被替換,使用正常檔案替代壞檔案即可,

2.Hook系統呼叫
比如說ps這個命令:
原理:
(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個途徑
I、修改內核呼叫,比如getdents 的原始碼
II、修改libc庫中readdir 函式的原始碼
III、利用環境變數LD_PRELOAD 或者配置ld.so.preload檔案 以使的惡意的動態庫先于系統標準庫加載,以達到架空系統標準庫中相關函式的目的,最終實作對特定行程的隱藏
備注:getdents函式對應的系統呼叫是sys_getdents(),readdir函式對應的系統呼叫是proc_pid_readdir(),
對抗方法:
跟蹤系統呼叫可以使用sysdig這個程式:
sysdig proc.name=ps
上述命令可以查看行程的整個啟動程序,可以分析是否被劫持,

3.利用mount命令進行掛載
這個幾乎是最常用的實作方式,利用mount命令將磁盤掛在到proc檔案夾下的特定位置即可隱藏行程:
實作方法
- 查看行程
我們先使用ps查看python行程,這時候發現有一個pid為1906的python3的行程,

- 掛載磁盤到指定位置
我們根據ps的原理可知,ps查詢的是proc檔案夾下的內容,我么直接將磁盤掛在到proc檔案夾下的1906即可實作對1906行程的隱藏,
首先使用df命令查看磁盤:

接著使用mount命令掛載/dev/sda1到/proc/1906:
mount /dev/sda1 /proc/1906

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

對抗方法
使用cat /proc/mounts查看,看是否有被掛載的磁盤,如下圖所示,選中部分即為掛載情況:

使用umount /dev/sda1 /proc/1906即可恢復原狀取消掛載,
參考文章
聊一聊Linux下行程隱藏的常見手法及偵測手段
linux下行程的隱藏方法與其對抗
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/216201.html
標籤:其他
