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