老司機用腳本批量巧刪惡意文件

2024年2月6日 24点热度 0人点赞

一條指令徹底刪除掃描出來的有害程序

作者:田逸(formyz)

一個NFS服務器,為多個Web項目所共享。這些目錄包括PHP程序、圖片、HTML頁面和用戶上傳的文檔和附件等。因為某些Web框架古老,存在諸如不對上傳文件做嚴格的安全性檢查,雖然此NFS服務器位於受保護的內部網絡,但任然被別有用心的人上傳了大量的惡意文件。強烈要求程序員進行程序(Discuz)更新,答復說更新難度太大,無法在程序上進行處理。從系統管理層面上,臨時的措施僅僅是安裝shadu軟件,對這個共享目錄進行掃描,然後刪除這些有害的文件(治標不治本)。

共享存儲NFS部署在Centos 7.9上,存儲空間44T,使用空間4.5T(如下圖所示),由於管理相對松懈,有大量的垃圾信息不進行清理和歸檔。

根據以往的經驗和使用習慣,決定在NFS 服務所在的宿主系統Centos 7.9部署開源的、大名鼎鼎的安全軟件Clavam,其官方的宣傳“ClamAV® is an open-source antivirus engine for detecting trojans, viruses, malware & other malicious threats”--ClamAV®是一款開源防Virtual引擎,用於檢測特洛伊Muma、病Du、惡意軟件和其他惡意威脅。不知從什麼時候開始,官網底部的標識換成網絡設備生產商CISCO,即便如此,Clamav目前還是開源、免費的,可以不受限制使用。在Centos 7.9上,至少有3種部署安裝Clamav的方法:RPM二進制包、二進制源碼和在線包管理工具“yum”,如下圖所示。

在Centos 7.9下部署安裝Clamav最容易、最便捷的方式就是“yum install”,試著在系統命令行下執行“yum install clamav”,執行過程及輸出如下。

很遺憾,Clamav沒有包含在軟件倉庫中,不能被正確安裝到系統。再試著添加一個“epel-release”附加軟件倉庫,執行的命令是“yum install epel-release”。接著繼續執行“yum list clamav”,從輸出可知,附加的倉庫列表已經包含軟件包“clamav”,如下圖所示。

執行指令“yum install clamav”進行正式安裝。除了主軟件Clamav外,還有另外多個依賴包被一起安裝,如下圖所示。

與用源碼包安裝相比,不需要根據安裝過程中的錯誤輸出逐一安裝所需的依賴,效率大大的提高了。

初次被安裝部署的Clamav的bingdu庫比較陳舊滯後,需要在系統命令行下對這個bingdu特征庫進行更新,降低掃描識別的遺漏。執行bingdu庫更新的命令是“freshclam”,不帶任何參數和選項,執行的過程及輸出如下圖所示。

Bingdu庫已經是最新的了,在正式執行掃描之前,為了預防SSH遠程終端斷開而導致掃描中斷,強烈建議在“screen”上執行掃描。如果執行命令“screen”提示命令不存在,用“yum install screen”安裝之。正確執行命令“screen”後,系統立即返回Shell提示符,這時,正式輸入如下指令對疑似有問題的共享目錄進行完整掃描,並把輸出記錄到日志文件”/var/log/clamscan.log”。

clamscan -r /data -l /var/log/clamscan.log

經過漫長的等待,我這個掃描耗費了好多天的時間才完成。查看掃描日志文件,是否存在惡意文件,使用的命令如下:

[root@nas wenku]# grep FOUND /var/log/clamscan.log

/data/cu/attachment/forum/201305/29/22155372jcjxtt0vfx2uk2.zip: Win.Trojan.IRCBot-785 FOUND

/data/cu/attachment/forum/201501/05/155857clzd9d10bwdpl3s0.zip: Unix.Trojan.Agent-37008 FOUND

/data/cu/attachment/forum/201501/10/2110526a6afrfrzvas2h25.zip: Win.Tool.Chopper-9839749-0 FOUND

/data/cu/attachment/forum/201501/10/210932qsy27wsnwazswagr.zip: Win.Tool.Chopper-9839749-0 FOUND

/data/cu/attachment/forum/201405/18/082512hhjnzummmnuu4i8i.zip: Unix.Dropper.Mirai-7338045-0 FOUND

/data/cu/attachment/forum/201205/11/084024426448y1bk6jmmb9.zip: Win.Trojan.SdBot-13589 FOUND

/data/cu/attachment/forum/201206/05/092231faffjiak6z3gkzqv.zip: Win.Malware.Aa93a15d-6745814-0 FOUND

/data/kong/blog/attach/attachment/201603/9/30229789_1457535724sulu.jpg: Win.Trojan.Generic-6584387-0 FOUND

…………….省略更多…………………………..

/data/wenku/App_Data/Documents/2012-03-10/7da3d2c7-6d16-44c2-aab1-e8a317716c15.txt: Dos.Trojan.Munga-4 FOUND

/data/wenku/App_Data/Documents/2014-02-17/4ed74e66-54d1-46b5-8a41-4915ced095a5.ppt: Xls.Trojan.Agent-36856 FOUND

/data/wenku/App_Data/Documents/2014-02-23/c5c1dfa6-9f04-4e53-b418-4d711ce5408d.ppt: Win.Exploit.Fnstenv_mov-1 FOUND

/data/wenku/App_Data/Documents/2014-07-15/ae2dfca5-ddef-4c41-8812-bcc5543415e1.txt: Legacy.Trojan.Agent-34669 FOUND

一共有500多條帶關鍵字“FOUND”的記錄,而且分佈路徑不規律,無法通過刪除目錄的方式將這些分佈離散的惡意文件給處理掉。如果手工一條一條的按絕對路徑刪除,即低效也容易出錯;假使這種形式分佈的惡意文件成千上萬,用手工逐一刪除的方式基本無法完成。

命令“clamscan”本身帶選項“--remove”直接刪除掃描出來的惡意文件,但這樣沒有經過相關人員的確認,可能會引起爭論。所以需要將這些有問題的惡意文件,呈現給相關人員確認,沒有異議以後,才可以移動或者刪除。

從Clamav掃描出來的日志文件下手,用工具將惡意文件的全路徑提取出來,使用的指令如下。

[root@nas wenku]#grep FOUND /var/log/clamscan.log |awk -F[:] '{print $1}'

/data/wenku/App_Data/Documents/2016-04-11/8fe8d01e-e752-4e52-80df-f202374b2b6d.doc

/data/wenku/App_Data/Documents/2016-04-11/03a14021-279f-45cd-83c5-b63076032c9e.doc

/data/wenku/App_Data/Documents/2016-04-11/c45ddc01-ec3d-4a54-b674-8c2082d76ce3.doc

/data/cu/attachment/forum/201305/29/22155372jcjxtt0vfx2uk2.zip

/data/cu/attachment/forum/201501/05/155857clzd9d10bwdpl3s0.zip

/data/cu/attachment/forum/201501/10/2110526a6afrfrzvas2h25.zip

/data/cu/attachment/forum/201501/10/210932qsy27wsnwazswagr.zip

/data/cu/attachment/forum/201405/18/082512hhjnzummmnuu4i8i.zip

/data/cu/attachment/forum/201205/11/084024426448y1bk6jmmb9.zip

/data/cu/attachment/forum/201206/05/092231faffjiak6z3gkzqv.zip

………………省略若幹…………………………

與原始日志相比,去掉了冒號“:”以及其後的全部字段。在此指令後,增加管道並配合“xargs”傳遞參數,就可以將掃描出來的惡意文件全部清理掉,不管它分佈到什麼路徑,完整的命令如下所示。

grep FOUND /var/log/clamscan.log |awk -F[:] '{print $1}'| xargs rm -rf

執行完畢,隨機找幾條掃描出來的惡意文件全路徑,文件應該不存在(如下圖所示),則表明腳本正確,正是我們所期待的結果。