當前位置:
首頁 > 新聞 > 如何利用Pspy監控沒有Root許可權的Linux進程

如何利用Pspy監控沒有Root許可權的Linux進程

pspy是一個命令行工具,它可以在沒有Root許可權的情況下,監控Linux進程。黑客可以利用它來查看其他用戶的計劃任務工作(cron job)等,該工具也非常適合技術人員在CTF(Capture The Flag)中枚舉Linux系統,同樣該工具也會很好地向我們展示為什麼在命令行上將密碼作為參數傳遞是一個不好的選擇。

該工具會收集來自procfs掃描的信息,放置在文件系統選定部分的Inotify觀察器會觸發這些掃描功能以捕獲Linux進程信息。

·procfs :procfs是進程文件系統(file system) 的縮寫,包含一個偽文件系統(啟動時動態生成的文件系統),用於通過內核訪問進程信息。

·notify :notify是一個Linux特性,它監控文件系統操作,比如讀取、寫入和創建。Inotify反應靈敏,用法非常簡單,並且比cron任務的繁忙輪詢高效得多。

基本介紹

將該工具放到要監控的Linux設備上,首先得到二進位文件。你可以通過運行make build-build-image來構建它們,從而構建make build中用於構建四個二進位文件的docker鏡像:

·32位大端模式,靜態版本:pspy32;

·64位大端模式,靜態版本:pspy64

·32位小型版本:pspy32s;

·64位小型版本:pspy64s;

靜態編譯的文件應該適用於任何版本的Linux系統,但是非常大,大約有4MB左右。如果覺得太大,可以嘗試使用libc和UPX壓縮的較小版本,大約有1MB左右。

你可以運行「pspy --help」命令來了解各種標誌及其含義,我在此簡要地介紹一下:

·-p:啟用列印命令stdout(默認啟用);

·-f:啟用將文件系統事件列印到stdout的命令(默認情況下禁用);

·-r:使用Inotify監控的目錄列表,pspy將遞歸地監控所有子目錄(默認情況下,為 watches /usr, /tmp, /etc, /home, /var, and /opt);

·-d:使用Inotify監控的目錄列表,pspy只會查看這些目錄,而不是子目錄(默認為空)。

·-i:procfs掃描之間的間隔以毫秒為單位,無論Inotify事件如何,pspy會定期掃描新進程,以防萬一沒有收到任何事件。

·-c:以不同顏色列印事件,紅色表示新進程,綠色表示新的Inotify事件。

對於大多數應用程序,默認設置應該都可以進行監控,由於許多工具將訪問其中的庫,所以在/usr中監控文件是最重要的。

監控計劃任務工作(cron job)

要查看該工具的運行情況,只需複製repo並運行make example(需要Docker)。眾所周知,將密碼作為命令行參數傳遞是不安全的,這一點可以在本節的演示中清楚看到,該命令會啟動一個Debian容器,在該容器中,一個由root運行的秘密cron job會每分鐘更改一次用戶密碼。此時,pspy作為用戶myuser在前台運行,並掃描進程。如下所示,就是輸出的內容:

首先,pspy會列印所有當前正在運行的進程,每個進程都有PID,UID和命令行。當pspy檢測到新進程時,它會在此日誌中添加一行。在這個示例中,你可以找到一個具有PID 23的進程,它似乎對myuser的密碼進行過修改。這是Python腳本被用於linux下以root角色調度crontab任務(/var/spool/cron/crontabs/root)的結果,該腳本執行這個shell命令(檢查crontab和腳本)。請注意,myuser既不能看到crontab,也不能看到Python腳本,不過使用pspy仍然可以看到命令。

來自Hack The Box的CTF示例

Hack The Box是一個超棒的CTF平台,下面是來自Hack The Box的Shrek設備的一個例子。在此CTF挑戰中,任務是利用隱藏的cron job來改變文件夾中所有文件的所有權,挑戰就在於用Linux修改許可權命令chmod用法,這需要大量猜測。不過有了pspy, cron job就很容易被找到和分析。

Pspy會列出在Linux系統上執行的所有進程,包括已完成的進程。例如,有forkstat( 通過fork創建的進程),它會接收內核關於進程相關事件(如fork和exec)的通知。

監控Linux進程的合適方法

一般情況下,要列出在Linux系統上執行的所有進程,其前提是要獲得該設備的root許可權。但這並不意味著,沒有root許可權就沒有辦法監控在Linux系統上運行的進程。因為只要進程正在運行,procfs中就會顯示很多信息,唯一的問題是你要如何在它們運行的瞬間捕獲進程信息。可以在無限循環中掃描/ proc目錄中的新PID來達到這樣的效果,但會佔用大量CPU。

更隱蔽的方法是使用以下技巧,在諸如/usr中的庫,/tmp中的臨時文件,/var中的日誌文件等文件中捕獲進程信息。使用inotify API,無論用戶何時創建、修改、刪除、訪問這些文件,你都可以獲得進程信息。Linux不需要為這個API使用特權用戶,因為許多無害的應用程序(比如顯示最新文件瀏覽器的文本編輯器)都需要這個特權用戶。因此,雖然非root用戶無法直接監控進程,但是他們可以監控進程對文件系統的影響。

我們可以使用文件系統事件作為掃描/proc的觸發器,進而能夠以足夠快的速度捕獲進程,這就是pspy的過人之處。在我的測試中,pspy似乎能捕獲每一次進程的信息。一般來說,流程運行的時間越長,捕獲它們的機會就越大。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

加密貨幣挖礦殭屍通過潛在的垃圾網站攻擊運行SSH服務的設備
威脅獵手在現代安全環境中運作之道

TAG:嘶吼RoarTalk |