在應急響應中,經常碰到ps命令和top命令查不到惡意程序(異常程序)的情況,會對應急響應造成很大的影響。輕則浪費時間,重則排查不出問題,讓黑客逍遙法外。所以這篇部落格研究學習如何對抗linux程序隱藏的手段。
這是一類簡單的隱藏方法,同時也是相對容易破解的方法。
1、命令替換
替換ps、top、ls等命令的檔案,破解方法很簡單,檢視檔案修改時間和hash值,如果與預設時間,或正常命令檔案的hash值不符,則被替換。破解方法,傳回來乙個正常的檔案重新使用命令操作即可
#檢視檔案狀態
stat filename
#計算檔案hash值
2、hook系統呼叫
hook系統呼叫
舉例ps
#ps命令原理:
(1)呼叫openat系統函式獲取/proc目錄的檔案控制代碼
(2)呼叫系統函式getdents遞迴獲取/proc目錄下所有檔案資訊(包括子目錄)
(3)呼叫open函式開啟/proc/程序pid/stat和/proc/程序pid/status,以及/proc/程序pid/cmdline檔案開始獲取程序資訊
(4)然後列印輸出
攻擊者可以劫持getdents和libc中的readdir函式(修改核心中的系統呼叫**或者修改lib中的函式**)實現過濾特定程序名,從而實現程序隱藏。備註:getdents函式對應的系統呼叫是sys_getdents(),readdir函式對應的系統呼叫是proc_pid_readdir(),跟蹤系統呼叫可以:
3、劫持lib庫劫持lib庫
原理解析:利用環境變數ld_preload或者配置ld.so.preload檔案使的惡意的動態庫先於系統標準庫載入,以達到架空系統標準庫中相關函式的目的,最終實現對特定程序的隱藏。
例子參考聊一聊linux下程序隱藏的常見手法及偵測手段
方法2和方法3的隱藏只要檢視/proc下面找到程序相關資訊即可。可以寫指令碼遍歷/proc/pid下面的cmdline
4、掛載目錄到/proc下
#原理掛載一些空的路徑到/proc對應程序號下面,ps等命令在遍歷/proc時則沒有辦法找到該程序的資訊。
# -*- coding:utf-8 -*-
import os
import time
while true:
pid = os.getpid()
print "start!"
os.system("mount /dev/sda1 /proc/%s"%str(pid))#當然也可以使用mount -o bind /empty/dir /porc/***x
對抗方法:cat /proc/mount檢視掛載情況
1、劫持vfs介面層
proc檔案系統也是vfs抽象類的乙個具體子類,與其它檔案系統不同的是,它是存在與記憶體中的虛擬檔案系統,以檔案系統的方式為訪問核心資料的操作提供介面。在執行ps或ls命令時,proc檔案系統會呼叫readdir函式依次遍歷proc目錄下的數字目錄,而readdir又會呼叫filldir函式返回改數字目錄對應程序的相關資訊,因此,只要在filldir函式中增加適當的過濾,就可以實現對程序的隱藏了。
2、劫持系統呼叫
#如getdents函式對應的系統呼叫是sys_getdents(),readdir函式對應的系統呼叫是proc_pid_readdir()
上面兩個方法要麼修改核心,要麼新增加核心模組(lkm)。修改核心一般需要重啟,增加核心模組不需要,所以增加核心模組更隱蔽一些。對抗方法: Linux 應急響應基礎
0x01 技能樹 0x02 linux 常用命令 find name jsp find type f mtime 3 find type f ctime 3 grep nv root etc passwd grep nr root grep nr v 404 grep e jsp jspx more...
Linux應急響應基礎
伺服器被攻擊,或多或少都會有相對應的症狀,例如 挖礦病毒,cpu利用率公升高,記憶體佔用率增加,出現異常程序,伺服器響應速度變慢等等。根據病毒傳播傳播途徑,對系統進行加固,防止再次感染。通過.bash history檢視帳號執行過的系統命令 root的歷史命令 histroy 開啟 home各帳號目...
linux程序隱藏
1.系統命令替換,通過stat檢視檔案狀態修改,md5sum檢視hash是否匹配,如果要修復,將正常檔案複製回來即可。2.hook系統呼叫,在呼叫鏈中修改惡意庫,造成惡意呼叫實現隱藏。查詢此類 通過sysdig proc.name ps檢視ps的呼叫 找到惡意的動態庫即可。也可以檢視環境變數ld p...