【轉】webshell檢測——使用auditd進行system呼叫審計

桃子紅了吶發表於2017-11-09

本文件將介紹:如何通過Linux審計系統auditd監測WebShell執行系統命令的行為。

測試環境:CentOS7.0_x64

auditd簡介

Linux審計系統提供了一種跟蹤系統上與安全相關的資訊的方法。基於預先配置的規則,稽核生成日誌條目以記錄儘可能多的關於系統上發生的事件資訊。

auditd(或auditd守護程式)是Linux系統中重要的核心審計元件,其負責將審計記錄寫入磁碟。使用auditd可以實現如下場景的審計監控:

• 監控檔案訪問

• 監控系統呼叫

• 記錄使用者命令執行

• 記錄安全事件

• 執行審計搜尋

• 統計概要報表

• 監控網路訪問

Linux審計系統架構如下圖所示:

jinglingshu_2017-10-11_13-43-071

通常我們使用auditctl用來檢視和控制auditd的審計行為,獲取審計日誌,新增或刪除審計規則。如果你希望審計配置在系統重啟後仍然有效,請通過系統檔案/etc/audit/audit.rules進行持久化配置。

配置auditd實現程式審計監控

以root身份執行如下命令,可實現對執行系統命令這一個SYSCALL行為的監控審計。

# auditctl -D # 用於測試,清除已有規則

# auditctl -a always,exit -F arch=b64 -S execve -k rule01_exec_command

上述命令在系統審計規則中增加了一條命令執行監控規則,並且定義規則名為rule01_exec_command。

檢視auditd的日誌檔案/var/log/audit/audit.log,可以看到該配置命令本身也產生了日誌:

jinglingshu_2017-10-11_13-43-07

其中1506925689.197為審計日誌的時間戳,對應2017/10/214:28:09698444為日誌訊息ID。

完成上述配置後,我們就可以對作業系統命令執行進行有效審計啦!

WebShell執行系統命令的監測

1

部署和執行WebShell

在網站目錄/opt/www/php/部署WebShell程式shell.php,訪問地址為https://example.com/shell.php。模擬黑客向該WebShell程式發起一次請求,執行系統命令:cat /etc/passwd。WebShell成功之行命令後,返回結果如下圖所示:

jinglingshu_2017-10-11_13-43-07

2

檢視和分析auditd審計日誌

執行命令tail -f /var/log/audit/audit.log,同步檢視auditd審計日誌。有兩組msg日誌,訊息id分別是:698520和698521。我們重點分析698520,先看日誌內容:

jinglingshu_2017-10-11_13-43-081

上述5條訊息同屬於一組日誌,來自規則rule01_exec_command,型別分別是:SYSCALL、EXECVE、CWD、PATH、PATH。其中,前三條日誌有極高的價值。

• type=SYSCALL:日誌規則“rule01_exec_command”被觸發,uid=996的使用者,通過父程式ppid=18259,呼叫/usr/bin/bash,執行了命令sh,程式pid=13545。

• type=SYSCALLtype=EXECVE都能看到執行的程式名稱和引數

• type=CWD則說明了,命令執行所在的目錄cwd=”/opt/www/php”

請注意EXECVE中出現的十六進位制字串a2=636174202F6574632F706173737764,實際為命令執行的引數。很可能,審計系統為了儘快完成日誌記錄,未對字串進行翻譯。將其轉換後,對應的ASCII字串是:cat /etc/passwd

jinglingshu_2017-10-11_13-43-08

第二組日誌如下,主要是針對命令cat /etc/passwd的審計。基本邏輯如上,不再贅述。

jinglingshu_2017-10-11_13-43-072

3

深入分析程式及檔案關係

檢視當前作業系統中Web系統nginx、php-fpm相關的程式資訊,如下:

jinglingshu_2017-10-11_13-43-09

注意,php-fpm: pool www就是執行WebShell命令的工作程式!

結合Web日誌的內容和時間資訊,我們很容易定位到WebShell的路徑為作業系統檔案/var/www/php/shell.php

jinglingshu_2017-10-11_13-43-091

4

梳理小結

經過對auditd日誌分析,並結合作業系統程式資訊、Nginx日誌,可對本次WebShell執行系統命令的行為進行回溯,細節如下:

http://example.com/shell.php?cmd=cat /etc/passwd該Url觸發了Nginx伺服器對php-fpm的呼叫。對應的檔案在Web目錄/opt/www/php

WebShell執行系統命令過程中的程式呼叫關係如下:

jinglingshu_2017-10-11_13-43-082

總結&思考

至此,我們完成了基於auditd實現的WebShell執行系統命令的審計監控,希望對大家有幫助。當然,本文只是針對某個技術點應用的概念驗證,如果你希望將其產品化實現,可能還需要考慮如下問題:

• 實時收集作業系統程式和程式PID等資訊

• 主動識別Web程式和Web目錄資訊

• 對audit.log日誌檔案進行採集,傳送到遠端伺服器進行收集

• 採集和關聯分析Web訪問日誌

• 部署自研或第三方日誌管理系統對程式資訊進行分析

• 深入學習和理解auditd的執行機制和引數配置

• 合理配置auditd的執行引數,準確評估審計功能對系統效能的影響

• Windows平臺是否有同樣的檢測機制?

基於auditd的審計資訊對於關鍵任務環境來說是至關重要的,可以用於確定安全策略的違反和審計使用者操作行為。審計本身不會為您的系統提供額外的安全性;但它可以用於發現違背安全策略的行為。

auditd的功能很強大,本文只是從一個很小的功能模組進行安全應用探索,更多功能和應用場景期待各位同行的發揮!有時候,立足系統自身,也能有不錯的收穫。

1

關於SYSCALL

上述配置命令中使用 -S execve實現了對命令執行這一SYSCALL的監控,也可以使用 -S 59作為引數實現。執行系統命令ausyscall –dump可以檢視auditd支援的所有SYSCALL選項。


本文轉自張昺華-sky部落格園部落格,原文連結:http://www.cnblogs.com/bonelee/p/7803377.html,如需轉載請自行聯絡原作者


相關文章