国产91精品在线播放,欧美精品在线免费,日韩中文字幕在线有码视频网

上海校區切換校區
圖標

學習文章

當前位置:首頁 > >學習文章 > >

Linux進程隱藏的一種實現思路

發布時間: 2017-06-16 13:52:09

之前眾多技術宅們與騰科小編分享的自建蜜罐深深的引起了我濃厚的興趣,于是小編決定山寨一個類似的蜜罐玩玩。但是擺在面前的頭等大事就是一些監控進程需要運行在蜜罐中,一但被黑客察覺到這些奇奇怪怪的進程就囧了。在這里對Linux略知一二的小編決定嘗試一下如何將這些監控進程隱藏起來。

準備工作

眾所周知,Linux 操作系統天生自帶一個虛擬分區 /proc,該分區下保存硬件信息、內核運行參數、系統狀態信息等等,進程運行時的一些信息自然也就存在這個分區下。

                                                           虛擬分區/PROC

系統里運行的每一個進程都會在 /proc 分區下新建一個以自己 pid 命名的目錄,并將本進程的參數存到該目錄下。在該目錄下可以通過修改 cgroup 文件,殘暴的將進程綁定在某個CPU上,也可以通過修改cpuset文件來優化進程在NUMA架構系統上的運行效率,還可以通過修改oom_adj文件與系統OOM機制say Goodbye。而ps、top這類查看進程的命令恰恰也就是在/proc分區下收集信息。通俗點講就是如果讓ps、top命令“失明”,就能達到我們隱藏進程的目的了。

初次嘗試

網上關于 Linux 隱藏進程的方式有很多,比如:

1)強行將進程 pid 變為 0,這種方法存在破綻因此不予考慮。

2)系統啟動時會依據/etc/fstab文件內容來掛載分區,在 proc 分區掛載參數中加入 hidepid=2 參數后,登陸系統的用戶只能查看到當前用戶啟動的進程的信息。也就是說tomcat用戶只能看到屬于自己的進程信息。這種方法也存在弊端,罐中的黑客只能看到有限的進程信息,可能就會產生會懷疑。如果再存在tomcat提權漏洞,那罐子的身份就會瞬間露餡。所以這種方式也不合適,那么如何才能將我們的問題解決在系統最底層呢?

“肝”起來

對于Linux系統來說有著得天獨厚的優勢,我們可以從內核解決一切問題。可是小編的C語言實在讓人捉急,還好我生活在偉大的中國,高手藏于民間啊!!!瞬間得到了廣大吃瓜群眾的響應,一位妹紙的思路很新穎,在內核中新增兩個信號,當進程向內核發出hide信號時,內核將不會為該進程在/proc目錄下生成對應的目錄,從而也就從底層鏟除了進程的信息,即使黑客獲得了root權限也無法通過常規手段察覺到蛛絲馬跡。除此之外,新增的unhide信號作用恰好與hide信號相反。通過查閱官方文檔發現,Demo中使用的內核版本為2.6.15。在include/asm-i386/unistd.h 文件中定義新信號294和295。

系統在接收到我們新定義的294和295兩個信號之后需要調用對應的函數來做出相應的動作。在kernel/sys.c中我們實現294和295信號調用的函數。如下圖說明,sys_hide 和 sys_unhide 兩個函數主要功能是修改進程 hide 變量的值。

proc相關內核代碼位于 fs/proc/base.c 中,在進程相關結構體中新聲明變量hide,通過發送信號來修改hide的值,最后在base.c文件proc_pid_readdir函數中將hide變量的值作為進程是否在proc文件系統中體現的依據。

踩雷

新內核編譯完成后小編本以為可以愉快的玩耍了,結果新內核根本無法啟動。通過各種修改啟動參數發現,內核報錯“kernel too old”,尷尬了。再次求助妹紙,原來 gcc 調用的 libc 不是完全向下兼容的,我們可以通過

  1. file /lib/libc-*.*.so 

來查看當前libc能夠編譯的最低版本的內核,如下圖所示 libc-2.5.so 可以編譯最低到2.6.9版本的內核,如果編譯內核版本低于 2.6.9 的話就會報錯導致內核無法啟動。

So,我們的 libc版本不能太高,又因為Demo中修改的是 i386 架構的內核源碼,所以小編選擇的實驗環境為 CentOS 5.11 (32bit) 。至此,我們就可以成功安裝并啟動 2.6.15 版本內核了,然而事情并沒有結束。系統供外部進程使用的信號僅有64 個。

所以一般情況下我們的進程只能發出這 64 種信號,我們想要發出 294 和 295 號信號就必須借助于與系統關系更密切的C語言來完成。

然后通過執行命令

  1. gcc hide.c -fPIC -shared -o hide.so 

將hide.c編譯為hide.so的動態鏈接庫。以后各位如果有進程需要隱藏的話,只需要在代碼里調用hide.so中的hide函數即可,同樣unhide函數是它的逆過程。如下圖所示,在Python中 import ctypes ,使用它調用hide.so庫即可實現當前Python2.7進程的隱藏與恢復。

至此,已經實現了內核級別的進程隱藏,可以愉快地做一些偷偷摸摸的事情了…不要想歪哦~

上一篇: Linux系統下安裝MySQL的步驟詳解

下一篇: 親測有效:高速下載360云盤文件方法

在線咨詢 ×

您好,請問有什么可以幫您?我們將竭誠提供最優質服務!

<menuitem id="vlare"></menuitem>

    <ul id="vlare"><rp id="vlare"><optgroup id="vlare"></optgroup></rp></ul>

  • 主站蜘蛛池模板: 合水县| 湖州市| 台江县| 淄博市| 应城市| 建昌县| 临澧县| 邵阳县| 于都县| 塘沽区| 前郭尔| 麻城市| 新巴尔虎左旗| 木里| 宜阳县| 永德县| 南汇区| 黄平县| 太谷县| 长岛县| 广州市| 昆明市| 青冈县| 靖安县| 建瓯市| 陆丰市| 开阳县| 宁河县| 策勒县| 舞钢市| 蛟河市| 阿坝| 蓬安县| 天等县| 砀山县| 资兴市| 江津市| 连州市| 老河口市| 连平县| 南陵县|