文章目錄
- 一、Webshell概述
- 什么是Webshell
- Webshell分類
- 基于編程語言
- 基于文件大小/提供的功能多少
- Webshell 檢測方法
- 二、常規處置方法
- 三、技術指南
- 1、初步預判
- 2、 Webshell排查
- 3、Web日志分析(查找攻擊路徑及失陷原因)
- 4、系統排查
- 4.1 Windows
- 4.2 Linux
- 5、系統日志
- 6、流量分析
- 案例
一、Webshell概述
什么是Webshell
shell
的概念源于操作系統,就是一個解析字符串命令并執行的程序。為了動態執行某些功能,編程語言一般會提供一些函數,將用戶輸入的字符串解析為語言代碼,或解析為操作系統命令。典型的PHP一句話木馬
:
<?phpeval($_GET['cmd']);
?>
通過網絡IO(socket API),獲得cmd
,eval()
將cmd字符串
當作操作系統命令執行。Webshell就是指JSP、ASP、PHP等編程語言(網頁腳本)的程序,一般帶有命令執行、文件操作等功能。通過Web服務器來通信和調用,并具有shell
的功能,稱為Webshell。
Webshell分類
基于編程語言
理論上只要是編程語言都可以,只要實現相應的Web框架就行。
基于文件大小/提供的功能多少
- 大馬
- 小馬
- 一句話木馬
Webshell 檢測方法
- 基于流量:通過流量還原數據包,并對HTTP數據包中的字符串做正則匹配
- 基于文件:
- 計算文件的哈希值,創建Webshell樣本hash庫
- 檢測文件屬性(創建時間、文件權限等)
- 基于日志:分析日志中進行了什么可疑行為,溯源Webshell
二、常規處置方法
- 入侵時間確定
- Webshell 文件的創建時間 —> 攻擊的時間范圍(根據此時間進行溯源分析、追蹤攻擊者活動路徑)
- Web日志分析
- 重點關注入侵時間前后的日志記錄,尋找攻擊路徑、所利用的漏洞
- 漏洞分析
- 通過日志中發現的問題,針對攻擊者的活動路徑,排查網站存在的漏洞,進行分析
- 漏洞復現
- 對發現的漏洞進行復現,還原攻擊者的活動路徑
- 漏洞修復
- 清除Webshell,修復存在的漏洞
三、技術指南
1、初步預判
1)事件表現:植入webshell,系統可能出現的異常現象
- 網頁被篡改
- 安全設備告警2)判斷Webshell事件發生時間
- 根據異常現象發生能時間,結合Webshell創建時間,定位事件發生的時間段
3)判斷系統架構(定位系統可能存在的漏洞)
項目 | 內容 |
---|---|
服務器 | Windows、Linux等 |
CMS | Jeecms、Wordpress、Drupal、TRS WCM、Phpcms、Dedecms等 |
中間件 | Tomcat、IIS、Apache、WebLogics、JBoss、Websphere、Jetty等 |
框架 | Struts2、Thinkphp、Spring、Shiro、Fastjson等 |
數據庫 | MySQL |
腳本語言 | ASP、PHP、JSP等 |
業務架構 | 前端網頁是否是后端通過FTP上傳的 等 |
2、 Webshell排查
Windows:D盾、河馬
Linux:河馬、常用搜索命令
3、Web日志分析(查找攻擊路徑及失陷原因)
Windows下常見的中間件/Web服務器/HTTP服務器/Web容器
默認日志路徑
Linux下的路徑
常用日志檢索的命令:
4、系統排查
攻擊者上傳Webshell之后,往往還會執行進一步操作,如提權、添加用戶、寫入系統后門等,實現持久化駐留。因此還需要做系統排查。
4.1 Windows
到了系統排查這一步,其實是利用操作系統提供的相關組件與配置信息,查找攻擊者的痕跡。在Win10里,Windows提供的相關工具在C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools
都有相應快捷方式,打開到文件所在目錄,這些工具幾乎都在C:\Windows\system32
目錄下。其他版本的,請自行百度
在Windows Server 2019下,按win鍵
,直接搜索“管理工具”,
用戶信息排查
- 用戶排查:
net user
查看用戶信息 (看不到隱藏用戶)net user username
查看某個賬戶的詳細信息
- 隱藏用戶排查
- 打開【計算機管理】->【本地用戶和組】(家庭版無該組件)
進程排查
- 進程名稱(異常、不常見的名稱要注意)
- 進程的路徑、CPU占用信息
服務排查
- 服務說到底就是進程。比較新的Windows可以直接在任務管理器中看到服務
- 我們可以在【系統信息】->【軟件環境】->【服務】下,看到服務的啟動情況及其對應啟動文件
網絡連接排查
netstat -ano
-->查看當前網絡連接情況,定位可疑的ESTABLISHED
連接
啟動項
可以在按win鍵
搜【系統配置】,也可以在命令行輸msconfig
,下圖為我新裝的win server 2019
計劃任務
任務計劃日志通常存放在C:\Windows\System32\Tasks
目錄,可以直接打開系統的【任務計劃程序】進行查看
文件排查
攻擊想進一步擴大戰果,就要上傳一些遠控木馬等惡意文件。我們需要排查相關敏感目錄,確定是否存在異常文件。
- temp相關目錄
C:\Windows\temp
C:\users\Administrator\AppData\Local\temp
- recent 相關目錄
C:\Documents and Settings\Administrator\recent
C:\Documents and Settings\Default User\recent
重點查看攻擊時間范圍內的文件,比如在非系統System32和Syswow64目錄下的svchost.exe
文件基本為惡意文件,.ps1
為Powershell文件,可以直接編輯查看。
4.2 Linux
用戶排查
cat /etc/passwd
,是否有未知用戶- 重點分析
UID
為 0 的用戶
進程排查 ps aux
, 優先關注CPU、內存占用比較高的進程
-
根據PID,使用
ls -alh /proc/PID
,查看其對應可執行程序,或使用lsof -p PID
。 -
-
lsof -i:port
,查看指定端口對應的可執行程序 -
-
查看隱藏進程,需下載
unhide
工具 -
查看系統運行的服務
systemctl --type service
網絡連接
netstat -anp
,優先關注對外連接的進程,或連接高危端口的進程
netstat 命令詳解
啟動項
Linux中,系統啟動內核掛載跟文件系統,然后啟動并運行一個init
程序,init 是非內核進程中第一個被啟動運行的,PID為1。init 讀取其配置文件來進行初始化工作,init 的配置文件如下
操作系統 | 配置文件 |
---|---|
CentOS 5 | /etc/inittab |
CentOS 6 | /etc/inittab、/etc/init/*.conf |
CentOS 7 | /etc/systemd/ststem、/usr/lib/systemd/system |
init 進程的會運行開機啟動程序,Linux 為不同的場合分配不同的開機啟動程序,有稱為“運行級別”(runlevel)
運行級別 | 說明 |
---|---|
運行級別0 | 系統停機狀態,系統默認運行級別不能為0,否則不能正常啟動 |
運行級別1 | 單用戶工作狀態,root 權限,用于系統維護,禁止遠程登錄 |
運行級別2 | 多用戶狀態(沒有NFS) |
運行級別3 | 完全的多用戶狀態(有NFS),登陸后進入控制臺命令行模式 |
運行級別4 | 系統未使用,保留 |
運行級別5 | X11 控制臺,登陸后進入GUI模式 |
運行級別6 | 系統正常關閉并重啟,系統默認運行級別不能為6,否則將不能正常啟動 |
7個運行級別對應7個目錄,在/et/c/rc[0-6].d
,里面的軟鏈接,真實文件都在/etc/rc.d/init.d
(內核較新或者不同發行版目錄會有差異)。init.d
目錄通常存放一些腳本,類似Windows中的注冊表;rc.local
文件會在用戶登陸前讀取,每次系統啟動時都會執行一次。(內核較新的都用systemd,這些文件會舍棄,下圖是rc.local文件的內容)
關于systemd
cat /etc/init.d/rc.local
cat /etc/rc.local
ls -alt /etc/init.d
任務計劃
有空再寫
文件排查