天天看點

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

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

測試環境:CentOS7.0_x64

auditd簡介

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

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

• 監控檔案通路

• 監控系統調用

• 記錄使用者指令執行

• 記錄安全事件

• 執行審計搜尋

• 統計概要報表

• 監控網絡通路

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

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

通常我們使用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,可以看到該配置指令本身也産生了日志:

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

其中1506925689.197為審計日志的時間戳,對應2017/10/214:28:09,698444為日志消息ID。

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

WebShell執行系統指令的監測

1

部署和執行WebShell

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

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

2

檢視和分析auditd審計日志

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

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

上述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=SYSCALL和type=EXECVE都能看到執行的程式名稱和參數

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

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

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

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

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

3

深入分析程序及檔案關系

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

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

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

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

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

4

梳理小結

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

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

WebShell執行系統指令過程中的程序調用關系如下:

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

總結&思考

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

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

• 主動識别Web程序和Web目錄資訊

• 對audit.log日志檔案進行采集,發送到遠端伺服器進行收集

• 采集和關聯分析Web通路日志

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

• 深入學習和了解auditd的運作機制和參數配置

• 合理配置auditd的運作參數,準确評估審計功能對系統性能的影響

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

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

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

關于SYSCALL

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

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