解決和防止異常程序註入篡改文件
故障點分析:
1.大部分域名被劫持跳轉到同一條域名
2.域名劫持只有部分地區,但都是訪問量大的地區
3.授權DNS的工具dnspod剛好這個時間維護了
4.nginx配置文件被修改,是否有做地址重寫
5.問開發說可能是js或者php文件被篡改,url地址被程序重寫定向了
解決流程:
起初,我們以為部分地區被劫持,加上dnspod維護,以為是dnspod那裏業務受到了影響,導致了跳轉現象。但是從dnspod上的維護信息上看,只是解析業務暫停,之前解析好的域名業務正常使用,而我們在這個時間之前解析的域名還是被劫持,所以排除掉dnspod工具解析波動的問題。
查看nginx配置文件,都是正常的。那就只有文件被篡改這個了,站點文件很多,成千上萬個,先用find加grep 跳轉url地址 排查下,無果。想想也知道,入侵者怎麽會傻到暴露很明顯的url地址了,那不很快的排除掉了。然後我們就只有從重點文件一個個下手排查異常,配合開發,才知道url地址都要過一個防sql註入的php文件過濾規則,仔細檢查這個文件。發現多了一個異常函數,大概意思就是所有訪問的url地址全部跳轉到這個url地址,這個地址用16進制加密了,而且還生成了一個隱藏的臨時文件,這個臨時文件放置了大量的IP,都是針對地區性的。註釋掉這個函數,問題就解決了。這個問題雖小,但是影響很大(初入運維這行,故障問題點分析或解決可能不專業,敬請諒解)
為了防止下次再出現類似問題,本人開發了一個shell腳本用來實現入侵檢測和報警(如有不完善的地方,歡迎各位讀者熱情交流探討)
一:文件內容改變有以下特征
文件內容會變化,這裏用生成md5sum指紋驗證
文件大小會變化
文件時間會話
增加或者刪除一些文件,比對每次檢測後的差異文件數量
二:腳本的實現流程和思路
本文以監控Web服務器apache的站點目錄/var/html/www下的所有文件是否被篡改為示例,實際環境參考自己部署的代碼目錄以及監測所需的文件
生成環境中,在網站發布代碼之後,就可以對網站數據或者服務相關的配置建立初始的指紋庫和文件數量庫,這步很重要。這是最基礎的指紋庫,後面就沒有對比的對象,那就無法進行入侵檢測了。
友情提示:chattr +i +文件名 可以鎖死文件,防止修改和刪除重要文件,一般對/etc/passwd和/etc/shadow這種放置重要數據的類似文件,都可以用這個命令鎖起來。如果為了更加安全,可以改名chattr這個命令為其它名字,記住修改名即可。但是要經常修改的文件用這個方法就比較麻煩了,要先解鎖,才能正常修改。
1)導入測試數據
cp -a /etc/a* /var/www/html/
cp -a /etc/b* /var/www/html/
[root@www html]# ls /var/www/html/
abrt aliases alternatives at.deny bash_completion.d
acpi aliases.db anacrontab audisp bashrc
adjtime alsa asound.conf audit blkid
2)建立初始的文件指紋庫
find /var/www/html/ -type f |xargs md5sum >/opt/zhiwen.db #建立文件內容指紋庫
[root@www opt]# tail -5 /opt/zhiwen.db
5238f32ba493cb2543bb2ed222a7a397 /var/www/html/bashrc
9cf17d7193572d7e684215051926b8ed /var/www/html/aliases.db
199eaa1e43fa9139f0910bdb64fd219e /var/www/html/audisp/plugins.d/af_unix.conf
b011b799f8cf6918611c9949bef00c19 /var/www/html/audisp/plugins.d/syslog.conf
2bba2f3012bdee732a5cfb7edf3a52a2 /var/www/html/audisp/audispd.conf
3)建立初始的文件數量庫
find /var/www/html/ -type f >/opt/wenjian.db #建立文件名和數量庫
[root@www opt]# tail -5 /opt/wenjian.db
/var/www/html/bashrc
/var/www/html/aliases.db
/var/www/html/audisp/plugins.d/af_unix.conf
/var/www/html/audisp/plugins.d/syslog.conf
/var/www/html/audisp/audispd.conf
4)檢測文件內容變化
echo ywxi >> /var/www/html/audisp/audispd.conf
export LANG=en
[root@www html]# md5sum -c --quiet /opt/zhiwen.db #檢測所有文件內容是否有變化。
/var/www/html/audisp/audispd.conf: FAILED
md5sum: WARNING: 1 of 30 computed checksums did NOT match
5 ) 檢測文件數量變化
echo ywxi.txt > /var/www/html/test.txt
md5sum -c --quiet /opt/zhiwen.db #無法檢測到文件的變化
find /var/www/html/ -type f >/opt/wenjian.db.error #獲取檢測前的所有文件數量及文件名
[root@www html]# diff /opt/wenjian.db* #用diff命令去比較兩個文件的差異
18a19
> /var/www/html/test.txt #這個文件就是新增的
6)調整命令放入shell腳本中
[root@www scripts]# cat /scripts/Monitorfile.sh
#!/bin/bash
RETVAL=0 #狀態初始化,有利於下面做
export LANG=zh_CN.UTF-8 #調整字符集
CHECK_DIR=/var/www/html #定義檢測目錄
[ -e $CHECK_DIR ]||exit 1 #檢測目錄是否存在
zhiwendb="/opt/zhiwen.db" #定義原始指紋庫路徑
filedb="/opt/wenjian.db" #定義原始文件庫路徑
ErrLog="/opt/error.log" #定義檢測後的日誌內容
[ -e $zhiwendb ] || exit 1 #如果原始指紋庫不存在則退出腳本
[ -e $filedb ] || exit 1 #如果原始文件庫不存在則退出腳本
#Detect file content
echo "`date` The contents of the file have been modified" >> $ErrLog #打印檢測命令,方便日誌記錄清晰可觀
md5sum -c --quiet /opt/zhiwen.db &>>$ErrLog #實際執行檢測命令
RETVAL=$? #收集返回值
# Detect the number and name of documents
find $CHECK_DIR -type f >/opt/wenjian.db.error #實際執行檢測命令,獲取最新文件數量
echo "`date` Increase or delete the number of files " &>>$ErrLog #打印檢測命令,方便日誌記錄清晰可觀
diff /opt/wenjian.db* &>>$ErrLog #實際執行檢測命令,對比文件數量及文件名變化情況
if [ $RETVAL -ne 0 -o `diff /opt/wenjian.db*|wc -l` -ne 0 ] #如果返回值不為0,或者對比行數不為0,則做出判斷發郵件
then
mail -s "`uname -n` $(date +%F) error" *******@qq.com <$ErrLog #發錯誤日誌給郵箱
else
echo "Sites dir is ok"|mail -s "`uname -n` $(date + %F) is ok" *******@qq.com #發正確信息給郵箱
fi
7)把腳本放在定時任務裏面執行
[root@www opt]# crontab -l|tail -2
#monitor site dir and file change by ywxi at 2018323
*/5 * * * * /bin/sh /scripts/Monitorfile.sh >/dev/null 2>&1
8)測試腳本是否正常使用
[root@www scripts]# sh /scripts/Monitorfile.sh
[root@www opt]# cat error.log
2018年 04月 27日 星期五 17:59:53 CST The contents of the file have been modified
/var/www/html/audisp/audispd.conf: 失敗
md5sum: 警告:1/30 生成的校驗和不匹配
2018年 04月 27日 星期五 17:59:53 CST Increase or delete the number of files
18a19
> /var/www/html/test.txt #這是上面用檢測命令時改過的文件和新增的文件
[root@www scripts]# echo ywxi.test >>/var/www/html/test2.txt
[root@www scripts]# echo ywxi2 >> /var/www/html/audisp/plugins.d/syslog.conf
[root@www scripts]# sh Monitorfile.sh
[root@www opt]# cat error.log
2018年 04月 27日 星期五 18:24:38 CST The contents of the file have been modified
/var/www/html/audisp/plugins.d/syslog.conf: 失敗
/var/www/html/audisp/audispd.conf: 失敗
md5sum: 警告:2/30 生成的校驗和不匹配
2018年 04月 27日 星期五 18:24:38 CST Increase or delete the number of files
18a19
> /var/www/html/test.txt
24a26
> /var/www/html/test2.txt #看到這些報錯信息,表示腳本執行成功
腳本總結:這個腳本是個簡單實用但並沒有優化過的,各位讀者可以從實際生產環境出發,根據需要修改這個腳本。生產環境中有很多重要文件都需要被監控起來,如服務器的配置文件,系統命令文件,系統啟動文件這些都可以監控起來,做好日誌審計,讓操作透明化。減少當黑鍋俠的風險。
解決和防止異常程序註入篡改文件