監(jiān)控Linux文件變化,防止系統(tǒng)被黑
運(yùn)維服務(wù)器比較頭疼的一個(gè)問(wèn)題是系統(tǒng)被黑,淪為肉雞或者礦機(jī)。除了加強(qiáng)安全基線配置,加強(qiáng)網(wǎng)絡(luò)和端口加固,系統(tǒng)和應(yīng)用bug修復(fù),上IDS/IPS(入侵檢測(cè)/防御系統(tǒng))之外,另一個(gè)方面就是系統(tǒng)監(jiān)控,一個(gè)完善準(zhǔn)確的安全監(jiān)控可以在主機(jī)層面及時(shí)發(fā)現(xiàn)入侵活動(dòng)、予以告警以備及時(shí)處理。本文蟲蟲就給大家來(lái)說(shuō)說(shuō)系統(tǒng)文件變化的監(jiān)控。
概述
在*nix體系一切皆文件,系統(tǒng)文件的變化往往反應(yīng)著系統(tǒng)的變化,比如系統(tǒng)應(yīng)用的更新、系統(tǒng)的操作活動(dòng)(可以用安全審計(jì)來(lái)確定)或系統(tǒng)被黑。根據(jù)蟲蟲多年來(lái)維護(hù)經(jīng)驗(yàn)系統(tǒng)被黑最明顯之一的特征就是系統(tǒng)文件變化,包括不限于:
- /bin (替換基本工具為惡意木馬等,比如netstat,ps等)
- /sbin (替換基本工具為惡意木馬等,比如sshd,lsof,ss等)
- /usr/bin(替換基本工具為惡意木馬等,比如sshd,lsof,ss等)
- /usr/sbin (替換基本工具為惡意木馬等,比如sshd,lsof,ss等)
- /etc/init.d (修改開機(jī)啟動(dòng)任務(wù),添加惡意腳本開機(jī)啟動(dòng))
- /etc/
- /etc/cront.d (修改計(jì)劃任務(wù),添加惡意腳本定時(shí)執(zhí)行)
- /etc/crontab (修改計(jì)劃任務(wù),添加惡意腳本定時(shí)執(zhí)行)
- ~/.ssh/目錄 (注入公鑰)
- /etc/sysconfig (修改iptables配置等,開放網(wǎng)絡(luò)限制)
- /etc/ssh/ (修改ssh配置)
- web目錄 (修改網(wǎng)站)
等目錄下文件被替換或者添加非法文件。
加強(qiáng)對(duì)這些目錄和文件的監(jiān)控,就可以在一定程度上防止系統(tǒng)被黑,以及系統(tǒng)被黑,而無(wú)法發(fā)現(xiàn)的問(wèn)題。
find –mtime目錄文件變化
監(jiān)控系統(tǒng)變化的最簡(jiǎn)單,最常用的方法是使用find命令,其-mtime表示最近有過(guò)變動(dòng)的文件。
比如要查看一天內(nèi)/usr/bin目錄下變化過(guò)的文件可以使用
- find /usr/bin -m -1
要看詳細(xì)這些文件詳細(xì)信息,可以用xargs或者-exec把這些變化文件在用ls -al顯示出來(lái),比如:
- find /var -type f -mtime -1 -exec ls -al {} \;
RPM監(jiān)控系統(tǒng)文件的變化
RPM是Linux一種應(yīng)用包,利用RPM安裝應(yīng)用大家可能都熟悉。實(shí)際上RPM還是一個(gè)系統(tǒng)包數(shù)據(jù)庫(kù),并提供包驗(yàn)證功能,可以用來(lái)發(fā)現(xiàn)原始安裝包變化情況。RPM應(yīng)用包文件驗(yàn)證的基本命令是rpm -V。比如查詢驗(yàn)證nginx包可以用rpm -V nginx:
該命令結(jié)果的前幾位屬性驗(yàn)證,.表示屬性正常,其他標(biāo)志表示屬性有變化,如果文件被刪除,則會(huì)提示"missing …"。具體屬性的含義如下:
結(jié)果表示:nginx包中default.conf文件的大小,md5哈希值,文件修改時(shí)間都改變了。
注意:上圖中中間位還有個(gè)字母c標(biāo)志,該標(biāo)表示文件的屬性,c表示文件為配置文件。其他標(biāo)志有:d %doc 說(shuō)明文檔;g %ghost 不應(yīng)包含的文檔,有可能有問(wèn)題;l %license 授權(quán)文件;r %readme readme說(shuō)明文件。
-V選項(xiàng)增加-a就可以列出當(dāng)前系統(tǒng)中安裝后,所有變化過(guò)的包文件,可以以此來(lái)檢查文件包的完整性,安全性等。我們對(duì)結(jié)果使用grep進(jìn)一步檢查就得到具體的文件,比如要獲取bin目錄系統(tǒng)文件變化過(guò)的文件:
Inotify監(jiān)控文件變化
另一個(gè)比較常用的方法是用Inotify來(lái)監(jiān)控文件變化。Inotify是Linux內(nèi)核自帶(2.6.13)的系統(tǒng)事件監(jiān)控機(jī)制。Inotify優(yōu)點(diǎn)之一是基于內(nèi)核事件通知機(jī)制,無(wú)需定時(shí)主動(dòng)探測(cè)文件狀態(tài),簡(jiǎn)單可靠。另一個(gè)好處是有文件變化時(shí)通知時(shí)候,可以記錄當(dāng)時(shí)的用戶和事件進(jìn)程?;贗notify的工具有inotify-tools、sersync和lsyncd等,我們此處簡(jiǎn)單介紹inotify-tools使用。
(1) inotify-tools安裝
安裝比較簡(jiǎn)單,以centos為例,先添加epel源,然后
- yum install inotify-tools
(2) inotify-tools使用
inotify-tools安裝后會(huì)附帶兩個(gè)工具即inotifywait和inotifywatch。inotifywait工具用來(lái)添加文件或目錄監(jiān)控,支持對(duì)文件的一些操作事件,比如open、close、delete等,運(yùn)行后系統(tǒng)處于阻塞狀態(tài)。inotifywait的參數(shù)和對(duì)應(yīng)事件列表如下圖所示:
做為安全方面考慮,重點(diǎn)關(guān)注文件文件變化和創(chuàng)建時(shí)間,即modify和create事件。
inotifywatch工具用來(lái)查看所監(jiān)視的文件發(fā)生事件的數(shù)據(jù)統(tǒng)計(jì)。
下面舉一個(gè)實(shí)例來(lái)說(shuō)明,我們用inotifywait來(lái)監(jiān)控/var目錄下文件的變化:
- inotifywait -mre modify /var
為了便于閱讀,我們添加一些日志和時(shí)間格式參數(shù):
- inotifywait -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f' -e modify -e create /var
要統(tǒng)計(jì)系統(tǒng)內(nèi)30秒內(nèi)的變化數(shù)據(jù),可以用inotifywatch:
- inotifywatch -v -t 30 -r /proc
inotifywatch 的使用此處不在詳細(xì)介紹。
自建編寫腳本進(jìn)行文件Md5監(jiān)控
還有一個(gè)方法就是對(duì)特定目錄(比如Web目錄)開始時(shí)候?qū)ζ溆?jì)算md5 哈希,以后定時(shí)計(jì)算md5然后比對(duì),發(fā)現(xiàn)md5 哈希不一致了,說(shuō)明文件已經(jīng)被篡改了。對(duì)此,蟲蟲之前基于這個(gè)原理用Perl寫了一個(gè)腳本MD5Check(github:/bollwarm/MD5Check),可以直接用來(lái)使用或者做參考。
MD5Check安裝很簡(jiǎn)單,有Perl的環(huán)境下(依賴Digest::MD5)直接下直接clone文件就可以使用,或者使用cpanm安裝
- cpanm MD5Check
使用:
使用方法,執(zhí)行 perl bin/init.pl web目錄(自定義),初始化MD5值。
然后使用perl bin/check.pl前一部保存的md5哈希的文件檢查。
詳細(xì)實(shí)例,見bin目錄下的 init.pl 和 check.pl
cpanm安裝后,可以直接用perl單行程序檢查使用
初始化:
- perl -MMD5Check -e 'init("/web")' >file
檢查:
- perl -MMD5Check -e 'print md5check(file)'
實(shí)例:我們舉一個(gè)wordexpree網(wǎng)站為例子:
- perl init.pl /web >webmd5.20161027
檢查:
- perl check.pl webmd5.20161027
總結(jié)
本文我們講述了通過(guò)監(jiān)控linux文件變化方式防止系統(tǒng)被黑。講述了常見的幾種監(jiān)控linux系統(tǒng)下文件監(jiān)控的方法:find、rpm,Inodify以及自編寫腳本的方法。當(dāng)然這些方法需要配合監(jiān)控系統(tǒng)(比如zabbix)才能實(shí)現(xiàn)及時(shí)全面的系統(tǒng),可以將其做為系統(tǒng)安全監(jiān)控部分(其他部分包括進(jìn)程監(jiān)控、防火墻變化監(jiān)控、流量變化)來(lái)配置和告警。關(guān)于這些部分,以后有機(jī)會(huì)再給大家介紹。