【轉】webshell檢測——使用auditd進行system呼叫審計
本文件將介紹:如何通過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選項。
本文轉自張昺華-sky部落格園部落格,原文連結:http://www.cnblogs.com/bonelee/p/7803377.html,如需轉載請自行聯絡原作者
相關文章
- Centos8 使用auditd配置系統審計CentOS
- RHEL審計配置/etc/audit/auditd.conf
- Webshell安全檢測篇Webshell
- 中轉Webshell繞過流量檢測防護Webshell
- WebShell流量特徵檢測_哥斯拉篇Webshell特徵
- 物體檢測實戰:使用 OpenCV 進行 YOLO 物件檢測OpenCVYOLO物件
- 使用 YOLO 進行實時目標檢測YOLO
- 影像分析,使用Halcon進行缺陷檢測
- java程式碼審計人工漏洞檢測方法Java
- 使用關鍵點進行小目標檢測
- webshell是什麼意思,怎麼檢測網站是否被留下webshell後門?Webshell網站
- 基於PHP的Webshell自動檢測芻議PHPWebshell
- Linux版對sys使用者進行審計的示例Linux
- 【網路安全】6款常見的Webshell檢測工具!Webshell
- 使用 Bash shell 指令碼進行功能測試(轉)指令碼
- 【原創】Linux版 對普通使用者進行審計的示例Linux
- 【原創】Linux版 對sys使用者進行審計的示例Linux
- 使用VLD進行記憶體洩漏檢測(release + debug)記憶體
- Python OpenCV 3 使用背景減除進行目標檢測PythonOpenCV
- Linux 下使用 dd 命令進行硬碟 I/O 效能檢測Linux硬碟
- Oracle審計(轉)Oracle
- 如何對非同步呼叫進行單元測試非同步
- 使用oracheck進行系統巡檢
- 呼叫建構函式進行型別轉換函式型別
- Linux核心即時入侵檢測安全增強-系統呼叫執行步驟(轉)Linux
- 用深度學習進行欺詐檢測深度學習
- 再談審計專案審計質量(轉)
- webshell安全測試工具WeevelyWebshell
- 使用 HTTPie 進行 API 測試HTTPAPI
- 使用PostMan進行API測試PostmanAPI
- 如何對Mac進行基礎檢測和速度測試Mac
- 網站上傳漏洞掃描與檢測 以及webshell解決辦法網站Webshell
- ORACLE SYSTEM表空間異常與審計的功能Oracle
- 在 Hub 上使用 Presidio 進行自動 PII 檢測實驗
- 入侵檢測與網路審計產品是孿生兄弟嗎?
- 檢視oracle執行計劃 - 轉Oracle
- 使用 MeterSphere 進行 Dubbo 介面測試
- 使用JUnit進行單元測試