程序員攻防實戰:linux下這樣隱藏進程,簡直太溜了,快用起來(linux 隱藏進程)

某些時候程序員為了防止其他人不小心或者惡意破壞掉你運行的程序,或者我們要做些“見不得光”的事情,就有隱藏進程的需求,目的是讓小白或者初級運維無法通過相關命令工具查找到你的程序,達到隱藏目的。前兩天正好項目上需要用到隱藏進程的需求,所以分析了下個人覺得目前比較好的做法。

linux下查看進程的方法

ps命令

程序員攻防實戰:linux下這樣隱藏進程,簡直太溜了,快用起來(linux 隱藏進程)程序員攻防實戰:linux下這樣隱藏進程,簡直太溜了,快用起來(linux 隱藏進程)

top命令

程序員攻防實戰:linux下這樣隱藏進程,簡直太溜了,快用起來(linux 隱藏進程)

目前網上很多方法基本都是通過如下方式來達到進程隱藏:

1.根據分組權限來實現不同用戶組查看不同的進程權限。

2.修改內核,將需要隱藏的進程的進程pid改為0(task->pid = 0),因為ps,top命令不會顯示進程id為0的進程。

3.修改內核,hook掉系統調用,在hook函數中修改邏輯判斷已達到隱藏進程。

第一種如果追中人有管理員權限就沒有辦法隱藏了。第二三種需要懂內核編程,有一定的技術門檻(實際上只要會點內核還是很easy的),今天我們說下第四種辦法:在用戶態修改系統調用,從而隱藏進程。

PS/TOP顯示進程原理

strace命令是一個常用的代碼調試工具,它可以跟蹤到一個進程產生的系統調用,包括參數,返回值,執行消耗的時間。因此對于調試程序出錯是非常有用的。這里不過多展示strace的調試用法,具體可以查看詳細的strace命令。

我們看下ps,top是如何顯示進程信息的:

strace ps

程序員攻防實戰:linux下這樣隱藏進程,簡直太溜了,快用起來(linux 隱藏進程)

strace top

程序員攻防實戰:linux下這樣隱藏進程,簡直太溜了,快用起來(linux 隱藏進程)

通過strace命令可以看出 ps,top等查看進程的信息都是通過調用 readdir 方法遍歷 /proc 目錄來獲取進程信息。每個動態創建的進程ID號下面詳細的記錄了關于該進程的fd,mem,io,cpuset等進程信息。

程序員攻防實戰:linux下這樣隱藏進程,簡直太溜了,快用起來(linux 隱藏進程)程序員攻防實戰:linux下這樣隱藏進程,簡直太溜了,快用起來(linux 隱藏進程)

既然進程信息是proc目錄下動態生成的,因此最顯而易見和最徹底的方法就是不讓proc下生成該進程信息。通過查找代碼,定位到內核通過fs/proc/base.c中的proc_pid_lookup查找進程號,然后由proc_pid_instantiate來在proc下創建該進程號相關的進程信息。因此我們只需要在proc_pid_lookup中匹配要過濾的進程名,然后直接返回就行了,如下:

程序員攻防實戰:linux下這樣隱藏進程,簡直太溜了,快用起來(linux 隱藏進程)

內核proc創建pid進程信息

這種辦法徹底不創建該進程信息,但是要修改編譯內核,實際上是不太可取的。而我們目的也只是隱藏,不必完全屏蔽進程信息。因此,有沒有一種辦法在用戶態通過劫持系統調用而忽略掉我們的進程呢?

本來想著如何自己實現一個hook系統調用,但是本著絕不重復造輪子的工匠精神,瓶子哥嘗試搜羅了下,還真有現成的,即通過劫持readdir系統調用實現ps,top無法查找到進程而達到隱藏進程。

我們先實戰,在看其實現原理。

1 . 實現:

1) git clone https://github.com/gianlucaborello/libprocesshider.git

2) cd libprocesshider/ && make

3) cp libprocesshider.so /usr/local/lib/

4) echo /usr/local/lib/libprocesshider.so >> /etc/ld.so.preload

這一步也可以用export LD_PRELOAD=/usr/local/lib/libprocesshider.so來代替。

執行命令上述命令前,運行mtop進程,ps可以查看到mtop的進程。

程序員攻防實戰:linux下這樣隱藏進程,簡直太溜了,快用起來(linux 隱藏進程)

執行上述命令后,ps 查看,可以發現已經找不到該進程了,而且 top,ls /proc/下面也不能找到該進程,完美達到隱藏進程。

程序員攻防實戰:linux下這樣隱藏進程,簡直太溜了,快用起來(linux 隱藏進程)

2. 原理:

我們查看processhider.c源碼可以發現,原理上就是重寫了readdir的系統調用,因為無論ps,top,ls 都會調用readdir。

程序員攻防實戰:linux下這樣隱藏進程,簡直太溜了,快用起來(linux 隱藏進程)

而思路就是利用 LD_PRELOAD 來實現系統函數的劫持,程序在執行外部庫函數調用的時候,會根據動態庫的優先級來加載庫函數,linux下庫的加載順序為/etc/ld.so.preload( LD_PRELOAD)>/etc/ld.so.cache>/etc/ld.so.conf,當程序調用外部庫的函數,如果LD_PRELOAD里面有自定義和其他系統庫相同的庫函數,則優先加載我們自定義的函數,這樣就達到了劫持系統函數的目的。

由于ps,top,ls 等幾乎所有的查看命令都基于readdir系統調用,所以能夠完美的隱藏掉進程,對付一般的小白是完全夠用了。如果為了避免分析人員查找 /etc/ld.so.preload而定位到進程,我們可以不創建ld.so.preload文件,而使用LD_PRELOAD宏來定義庫的路徑。例如將export LD_PRELOAD=/usr/local/lib/libprocesshider.so 放到linux系統啟動過程中rc文件去加載,加大定位的難度。

程序員攻防實戰:linux下這樣隱藏進程,簡直太溜了,快用起來(linux 隱藏進程)

另外除去隱藏,還可以對執行程序進行運行加密,常量字符串加密混淆,程序自動銷毀等反追蹤等,后面我們再一一討論。

(每天一個實戰技能,感謝點贊、關注、轉發。)

版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

(0)
上一篇 2023年5月11日 上午10:51
下一篇 2023年5月11日 上午11:07

相關推薦

avav在线播放| 色狠狠一区二区三区香蕉蜜桃| 国产精品成人一区二区三区| a级毛片在线视频免费观看| 成人国产精品免费视频| 久久99国产这里有精品视| 成人无码Av片在线观看| 中文字幕不卡高清免费| 婷婷伊人五月天| 久久99精品久久久久婷婷| 成人国产网站v片免费观看| 中文字字幕在线| 天天综合天天添夜夜添狠狠添| 一二三四社区在线中文视频 | 亚洲91精品麻豆国产系列在线| 日韩欧美在线综合网高清| 久久经典免费视频| 新木乃伊电影免费观看完整版| 久久久亚洲精品视频| 性做久久久久久久久| 一级做a爰片久久毛片看看| 夜夜爽免费888视频| 999福利视频| 国产真实乱子伦xxxx仙踪| 青青青国产免费线在| 国产亚洲精品仙踪林在线播放| 综合久久久久久中文字幕| 冬日恋歌国语版20集中文版| 波多野结衣被躁| 免费大片黄在线观看| 欧美日韩福利视频| 亚洲欧洲自拍拍偷综合| 最新欧洲大片免费在线| 久久精品国产99精品最新| 成人午夜短视频| yy4080私人影院6080青苹果手机| 国产色无码精品视频国产| 黄色网站在线观看视频| 国产亚洲精品拍拍拍拍拍| 男女猛烈xx00免费视频试看| 人人妻人人爽人人澡人人|