應急響應系統之 Linux 主機安全檢查
我們在做主機安全檢查或安全事件處置時,避免不了要去檢查系統的安全情況。在進行 Linux 安全檢查時,需要使用相關的腳本對系統的安全情況進行全面分析,一方面需要盡可能的收集系統的相關信息,另一方面在數量較多的時候盡可能的提高效率。由于在多次的安全檢查中遇到檢查時都是幾十臺服務器要做一個全面檢查的情況,如果人工手寫腳本的話,一方面效率較低另一方面需要安全檢查者熟悉所需要檢查的項。在這種情況下,本人寫了一個 Linux 安全檢查的腳本,該腳本主要在以下場景使用:
- Linux 主機安全檢查時
- Linux 主機發生安全事件需要全面分析時
該腳本完成有一段時間,最近在應急響應群里討論,發現這塊的安全檢查是大家的一個強需求,因此把該檢查腳本共享給大家,共享的目的主要以兩個:一是提高大家在 Linux 安全檢查時的效率,釋放大家的精力;另一方面希望大家在使用的過程中可以不斷地發現問題,不斷的總結缺少的安全檢查項,協助完善該檢查腳本。所以大家在使用過程中有任何問題或建議歡迎及時同步給我。
檢查內容
1. 整體框架
關于 Linux 安全檢查,這里面我總結主要需要檢查以下內容:
- 系統安全檢查(進程、開放端口、連接、日志等):這一塊是目前個人該腳本所實現的功能
- Rootkit:建議使用 rootkit 專殺工具來檢查,如 rkhunter
- Webshell:這一塊查殺技術難度相對較高,不是本腳本所需要實現的功能,針對這一塊的檢查可以使用 D 盾來檢查 (Linux 下可以將 web 目錄掛載到 Windows 下進行檢查)
- Web 日志:
- 流量:這一塊主要側重主機的長期的流量分析,目前個人使用 tshark 實現了基礎的流量分析,后期會進行相應的完善。流量這一塊可以提取流量五元組、DNS 流量、HTTP 流量再結合威脅情報的數據進行深度分析。這個后期個人會進行相關的嘗試,可能的話會進行相應內容的分享。
2. 系統安全檢查框架
3. 功能實現
功能設計:
- V1.0 主要功能用來采集信息
- V1.1 主要功能將原始數據進行分析,并找出存在可疑或危險項
- V1.2 增加基線檢查的功能
- V1.3 可以進行相關危險項或可疑項的自動處理
目前到 V1.2 版本,后期完善 V1.3 相關的功能。
另外,操作上可以實現一鍵進行安全檢查,并將檢查后的結果保存到本機。只需要在hosts文本中輸入相應的IP、賬號、密碼。操作上人工參與最小化。
4. 各腳本功能說明
下載后相關整個腳本的目錄結構如下所示:
- checkrulues:部分判斷邏輯,這里面目前僅有端口的判斷邏輯,后期可以將進程、應用程序是否有漏洞等邏輯放在這里面進行安全檢查,比較簡單的判斷邏輯直接在 buying_linuxcheck.sh 中可以實現
- buying_linuxcheck.sh:核心檢查邏輯
- del.exp:刪除遠程服務器上的腳本與檢查結果
- get.exp:獲取遠程服務器上安全檢查的結果
- hosts.txt:需要被檢查的服務器列表
- login.sh:一鍵進行登錄檢查,安全檢查時只需要運行該腳本即可
- put.exp:將安全檢查腳本上傳到遠程服務器上
- readme.txt:使用相關說明文檔
- sh.exp:在遠程服務器上執行安全檢查腳本
下面針對其中部分腳本進行介紹
(1) Checkrules
判斷邏輯主要放在兩個文件中:一個是 checkrules 中,格式為 dat,這里面建議將比較復雜的判斷邏輯放在這里,如下面的 TCP 危險端口這塊,因為比較多,如果放在 buying_linuxcheck.sh 中則代碼有些冗長,下面是 TCP 高危端口的判斷邏輯,主要還是根據木馬默認使用的端口號,這里面判斷的邏輯相對簡單,可能會存在誤報的情況,所以后續需要人工介入分析。
(2) buying_linuxcheck.sh
核心的功能收集與判斷邏輯,比較簡單的判斷邏輯可以放在這里面進行判斷。
5. 使用
使用比較簡單,將本腳本拷貝到自己一臺 Linux 主機上,可以使用虛擬機,將需要被檢查的服務器的 IP、賬號、密碼放到 hosts.txt 目錄中,直接運行即可實現一鍵安全檢查。
相關操作如下:
(1) 將需要被檢查的服務器 IP、賬號、密碼寫入到 hosts.txt 文件中,格式為
- IP:port:user:userpassword:rootpassword
其中 user 為普通用戶的賬號,port 為 ssh 登錄端口, uesrpassword 為普通賬號的密碼, rootpassword 為 root 的密碼, 只所以加個普通用戶是因為有的系統做了安全策略,不允許 root 直接登錄,如果被檢查的服務器允許 root 直接登錄,可以直接把 user 和 userpassword 寫成 root 以及 root 密碼
這里面被檢查的服務器允許 root 直接登錄,因此直接寫 root 賬號和密碼
(2) 運行安全檢查腳本,
- sh login.sh
安全檢查腳本就在后臺運行了,稍等…….
(3) 看到刪除遠程服務器上的檢查腳本與檢查結果,就說明檢查結束了
(4) 檢查結束后,會將遠程服務器上的結果保存到本地主機上
6. 檢查結果說明
檢查結束后,將相應的結果解壓后目錄結構如下所示:
(1) Check_file
保存的是檢查的最終結果,長這個樣子……
(2) Log
目錄中保存的是 Linux 系統日志,web 日志這塊目前腳本沒有實現自動打包的功能,原因就是 web 日志經常太大,并且保存的日志可能從運行到現在的所有日志,很多日志并不需要進行檢查與分析,因此在檢查時相關人員可以根據具體情況進行打包相應的日志
(3) danger_file.txt
保存的是在安全檢查過程中發現的問題
(4) sysfile_md5.txt
保存的是系統關鍵文件或系統文件的 MD5 值,之所以將這些關鍵文件的 MD5 記錄下來主要有兩個功能:一是周期性的檢查時,可以與之前的結果進行對比,若有變動會提示;另一個是可以將這些關鍵文件的 MD5 值跑一下威脅情報庫或 virustotal 以發現可能存在的系統文件被替換的情況。
7. 代碼下載
相關代碼已上傳到 github,有需要可自行下載,有問題也可以直接聯系:
https://github.com/T0xst/linux