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