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