Linux應(yīng)急響應(yīng)之工具篇
當(dāng)企業(yè)被攻擊者入侵,系統(tǒng)被掛暗鏈、內(nèi)容遭到惡意篡改,服務(wù)器出現(xiàn)異常鏈接、卡頓等情況時(shí),需要進(jìn)行緊急處理,使系統(tǒng)在最短時(shí)間內(nèi)恢復(fù)正常。由于應(yīng)急處理往往時(shí)間緊,所以嘗試將應(yīng)急中常見(jiàn)處理方法整合到腳本中,可自動(dòng)化實(shí)現(xiàn)部分應(yīng)急工作。應(yīng)急腳本采用python2.0完成,由于所有需要執(zhí)行的命令都是依靠ssh進(jìn)行遠(yuǎn)程鏈接,所以在運(yùn)行腳本之前,需要輸入正確的主機(jī)ip地址、ssh遠(yuǎn)程連接端口、ssh遠(yuǎn)程登錄賬戶(hù)、ssh遠(yuǎn)程登錄密碼。
一、腳本實(shí)現(xiàn)的主要功能
1、獲取主機(jī)信息
獲取的主機(jī)信息包括:主機(jī)ip地址、主機(jī)名、當(dāng)前系統(tǒng)內(nèi)核版本、當(dāng)前系統(tǒng)版本、系統(tǒng)當(dāng)前時(shí)間;
2、獲取異常進(jìn)程
獲取異常進(jìn)程主要是采用兩種方式,第一種,通過(guò)執(zhí)行netstat -antp獲取當(dāng)前主機(jī)存在哪些鏈接,并通過(guò)判斷外部鏈接地址歸屬地,如果歸屬地不是中國(guó),則會(huì)提取相關(guān)pid,并根據(jù)pid定位出文件所在位置。第二種,通過(guò)cpu占有率,一旦發(fā)現(xiàn)cpu占用率高于%15時(shí),會(huì)提取對(duì)應(yīng)程序的pid,根據(jù)pid定位異常文件位置。
3、判斷常見(jiàn)命令是否被篡改
在之前的應(yīng)急響應(yīng)中出現(xiàn)過(guò)常見(jiàn)命令被非法篡改情況,如ps、netstat命令被惡意替換,利用stat查看文件詳細(xì)信息,通過(guò)比對(duì)時(shí)間的方式判斷命令是否被篡改。
4、查看系統(tǒng)啟動(dòng)項(xiàng)
很多惡意程序會(huì)修改系統(tǒng)啟動(dòng)項(xiàng),這樣即使系統(tǒng)進(jìn)行重啟時(shí),惡意程序也能自動(dòng)啟動(dòng),查看init.d目錄下的啟動(dòng)文件,根據(jù)修改時(shí)間提取最近被修改的啟動(dòng)文件,并根據(jù)時(shí)間排序列出前5個(gè)。
5、查看歷史命令
查看.bash_history歷史命令,通過(guò)匹配關(guān)鍵字,如wget、cur等,來(lái)查看系統(tǒng)在被入侵后是否被執(zhí)行了惡意操作。
6、判斷非系統(tǒng)默認(rèn)賬戶(hù)
惡意程序可能會(huì)在系統(tǒng)中新建賬戶(hù),通過(guò)查看login.defs文件獲取最小uid,從而根據(jù)uid查看passwd文件,獲取之后新建的系統(tǒng)用戶(hù)。
7、獲取當(dāng)前登錄用戶(hù)
通過(guò)調(diào)用who,查看當(dāng)前登錄用戶(hù)(tty為本地登錄,pts為遠(yuǎn)程登錄),判斷是否存在異常用戶(hù)登錄情況。
8、查看系統(tǒng)當(dāng)前用戶(hù)
通過(guò)查看etc/passwd,查看相關(guān)用戶(hù)信息,確定是否存在異常用戶(hù)。
9、查看crontab定時(shí)任務(wù)
查看/etc/crontab定時(shí)任務(wù),并將輸出結(jié)果保存到log中
10、查看、保存最近三天系統(tǒng)文件修改情況
通過(guò)find命令,查找最近三天修改過(guò)的文件,由于修改的系統(tǒng)文件較多,所以修改文件被單獨(dú)保存在本地file_edit文件中
11、查找特權(quán)用戶(hù)。
查看passwd文件,查找用戶(hù)id為0的特權(quán)用戶(hù)
12、secure日志分析
日志分析是應(yīng)急的重頭工作,尤其是在應(yīng)急后期的溯源階段,日志分析更顯得尤為重要,由于日志種類(lèi)包括服務(wù)器日志、應(yīng)用日志,此處只是分析了secure服務(wù)器日志,提取日志的ip地址進(jìn)行判斷,并對(duì)ip歸屬地進(jìn)行判斷,查看的secure日志單獨(dú)保存在本地secure中。
腳本運(yùn)行后輸出如下信息:
最終在當(dāng)前目錄下生成如下文件
腳本運(yùn)行完畢后,在當(dāng)前目錄下生成log.txt,記錄腳本檢查結(jié)果:
同時(shí)在當(dāng)前目錄下生成的netstat.txt,保存系統(tǒng)鏈接情況
當(dāng)前目錄下secure.txt,記錄當(dāng)前secure日志
當(dāng)前目錄下file_edit.txt.記錄最近三天文件修改情況
腳本整體的思路比較簡(jiǎn)單,就是遠(yuǎn)程登錄到linux執(zhí)行常見(jiàn)的應(yīng)急命令,腳本中的命令在centos下都是可正常運(yùn)行的,可以在根據(jù)實(shí)際環(huán)境自行在對(duì)命令做調(diào)整。上面的部分功能如果有好的實(shí)現(xiàn)方法也可靈活調(diào)整,如判斷常見(jiàn)命令是否被篡改,腳本中是根據(jù)時(shí)間進(jìn)行判斷,在實(shí)際應(yīng)用中也可根據(jù)文件大小進(jìn)行判斷。
最后,代碼整體寫(xiě)的比較渣,有意見(jiàn)歡迎大家多多指出,希望通過(guò)改進(jìn)能讓功能更加完善。
鏈接地址:https://github.com/tide-emergency/yingji
二、參考資料
在編寫(xiě)此腳本中的很多命令都是借鑒了大牛的的一些經(jīng)驗(yàn),多謝大牛的分享,具體參考鏈接如下:
http://blog.nsfocus.net/emergency-response-case-study/
https://github.com/grayddq
https://github.com/T0xst/linux