本文檔將介紹:如何通過Linux審計系統auditd監測WebShell執行系統命令的行為。
測試環境:CentOS7.0_x64
auditd簡介
Linux審計系統提供了一種跟蹤系統上與安全相關的信息的方法。基於預先配置的規則,審核生成日志條目以記錄盡可能多的關於系統上發生的事件信息。
auditd(或auditd守護進程)是Linux系統中重要的內核審計組件,其負責將審計記錄寫入磁盤。使用auditd可以實現如下場景的審計監控:
• 監控文件訪問
• 監控系統調用
• 記錄用戶命令執行
• 記錄安全事件
• 執行審計搜索
• 統計概要報表
• 監控網絡訪問
Linux審計系統架構如下圖所示:
通常我們使用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,可以看到該配置命令本身也產生了日志:
其中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成功之行命令后,返回結果如下圖所示:
2
查看和分析auditd審計日志
執行命令tail -f /var/log/audit/audit.log,同步查看auditd審計日志。有兩組msg日志,消息id分別是:698520和698521。我們重點分析698520,先看日志內容:
上述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
第二組日志如下,主要是針對命令cat /etc/passwd的審計。基本邏輯如上,不再贅述。
3
深入分析進程及文件關系
查看當前操作系統中Web系統nginx、php-fpm相關的進程信息,如下:
注意,php-fpm: pool www就是執行WebShell命令的工作進程!
結合Web日志的內容和時間信息,我們很容易定位到WebShell的路徑為操作系統文件/var/www/php/shell.php
4
梳理小結
經過對auditd日志分析,並結合操作系統進程信息、Nginx日志,可對本次WebShell執行系統命令的行為進行回溯,細節如下:
http://example.com/shell.php?cmd=cat /etc/passwd該Url觸發了Nginx服務器對php-fpm的調用。對應的文件在Web目錄/opt/www/php。
WebShell執行系統命令過程中的進程調用關系如下:
總結&思考
至此,我們完成了基於auditd實現的WebShell執行系統命令的審計監控,希望對大家有幫助。當然,本文只是針對某個技術點應用的概念驗證,如果你希望將其產品化實現,可能還需要考慮如下問題:
• 實時收集操作系統進程和進程PID等信息
• 主動識別Web進程和Web目錄信息
• 對audit.log日志文件進行采集,發送到遠程服務器進行收集
• 采集和關聯分析Web訪問日志
• 部署自研或第三方日志管理系統對進程信息進行分析
• 深入學習和理解auditd的運行機制和參數配置
• 合理配置auditd的運行參數,准確評估審計功能對系統性能的影響
• Windows平台是否有同樣的檢測機制?
基於auditd的審計信息對於關鍵任務環境來說是至關重要的,可以用於確定安全策略的違反和審計用戶操作行為。審計本身不會為您的系統提供額外的安全性;但它可以用於發現違背安全策略的行為。
auditd的功能很強大,本文只是從一個很小的功能模塊進行安全應用探索,更多功能和應用場景期待各位同行的發揮!有時候,立足系統自身,也能有不錯的收獲。
1
關於SYSCALL
上述配置命令中使用 -S execve實現了對命令執行這一SYSCALL的監控,也可以使用 -S 59作為參數實現。執行系統命令ausyscall –dump可以查看auditd支持的所有SYSCALL選項。