步驟1 上傳到伺服器
一線人員把busybox,chkrootkit和,GatherInfo腳本一起上傳到目标伺服器上
步驟2 執行資訊收集腳本
接下來執行以下指令進行
# bash GatherInfo.sh
步驟3 回傳資訊收集包
腳本執行完成後,會在/tmp目錄下生成一個GatherInfo.tar.gz檔案,回傳該檔案給應急人員。
步驟4 應急響應診斷
應急人員根據各個指令執行内容進行分析,并完善“應急響應Checklist”内容。
步驟5 其他情況
如果自動化腳本收集到的資訊不足以判斷病毒情況,則需要應急人員人工連接配接到伺服器執行排查。
#!/bin/bash
function initial(){
echo "Doing initial"
mkdir /tmp/GatherInfo
chmod +x ./chkrootkit
chmod +x ./busybox
}
function chkrootkit_info(){
echo "Doing chkrootkit"
./chkrootkit > /tmp/GatherInfo/chkrootkit.log 2>&1
}
function network_info(){
echo "Gathering network info"
netstat -tulnp > /tmp/GatherInfo/netstat_tulnp.log 2>&1
netstat -anp > /tmp/GatherInfo/netstat_anp.log 2>&1
}
function process_info(){
echo "Gathering process info"
ps aux > /tmp/GatherInfo/ps_aux.log 2>&1
ps auxef > /tmp/GatherInfo/ps_auxef.log 2>&1
top -n 1 > /tmp/GatherInfo/top_n1.log 2>&1
}
function init_info(){
echo "Gathering init info"
chkconfig --list > /tmp/GatherInfo/chkconfig_list.log 2>&1
ls -alt /etc/init* > /tmp/GatherInfo/ls_alt_etc_init.log 2>&1
}
function cron_info(){
echo "Gathering cron info"
cat /etc/crontab > /tmp/GatherInfo/crontab.log 2>&1
cat /etc/anacrontab > /tmp/GatherInfo/anacrontab.log 2>&1
crontab -l > /tmp/GatherInfo/crontab_l.log 2>&1
cd /etc/cron.d/
ls -alt > /tmp/GatherInfo/etc_cron.d.log 2>&1
cat * >> /tmp/GatherInfo/etc_cron.d.log 2>&1
cd /etc/cron.daily/
ls -alt > /tmp/GatherInfo/etc_cron.daily.log 2>&1
cat * >> /tmp/GatherInfo/etc_cron.daily.log 2>&1
cd /etc/cron.hourly/
ls -alt > /tmp/GatherInfo/etc_cron.hourly.log 2>&1
cat * >> /tmp/GatherInfo/etc_cron.hourly.log 2>&1
cd /etc/cron.monthly/
ls -alt > /tmp/GatherInfo/etc_cron.monthly.log 2>&1
cat * >> /tmp/GatherInfo/etc_cron.monthly.log 2>&1
cd /etc/cron.weekly/
ls -alt > /tmp/GatherInfo/etc_cron.weekly.log 2>&1
cat * >> /tmp/GatherInfo/etc_cron.weekly.log 2>&1
cd /var/spool/cron/
ls -alt > /tmp/GatherInfo/var_spool_cron.log 2>&1
cat * >> /tmp/GatherInfo/var_spool_cron.log 2>&1
cd /var/spool/anacron/
ls -alt > /tmp/GatherInfo/var_spool_anacron.log 2>&1
cat * >> /tmp/GatherInfo/var_spool_anacron.log 2>&1
}
function other_info(){
echo "Gathering other info"
# check system users
cat /etc/passwd | grep -v nologin > /tmp/GatherInfo/passwd.log 2>&1
# check dirs with 777 permition
ls -alt /tmp > /tmp/GatherInfo/tmp.log 2>&1
ls -alt /var/tmp > /tmp/GatherInfo/var_tmp.log 2>&1
ls -alt /dev/shm > /tmp/GatherInfo/dev_shm.log 2>&1
# check ld env
echo $LD_PRELOAD > /tmp/GatherInfo/LD_PRELOAD.log 2>&1
cat /etc/ld.so.preload > /tmp/GatherInfo/etc_ld.so.preload.log 2>&1
# check root ssh config
ls -alt /root/.ssh > /tmp/GatherInfo/ls_alt_root_.ssh.log 2>&1
cat /root/.ssh/* > /tmp/GatherInfo/cat_root_.ssh.log 2>&1
# check bash config
cat /root/.bash_profile > /tmp/GatherInfo/cat_root_bash_profile.log 2>&1
cat /root/.bashrc > /tmp/GatherInfo/cat_root_bashrc.log 2>&1
for user in /home/*
do
if test -d $user;then
cat /home/$user/.ssh/* > /tmp/GatherInfo/cat_$user.ssh.log 2>&1
ls -alt /home/$user > /tmp/GatherInfo/cat_$user.home.log 2>&1
fi
done
}
initial
chkrootkit_info
network_info
process_info
init_info
cron_info
other_info
cd /tmp
tar -zcvf GatherInfo.tar.gz GatherInfo
附件: 常見檢查項
步驟 | 執行操作 | 解釋 | 執行結果 | 結論 |
确定程序 | 執行 #ps aux | 檢視目前系統運作的程序 | 備注:結果需要明确惡意程序,輸出程序名稱以及程序pid | |
執行 #ps auxef | 檢視目前系統運作的程序,及父子程序關系 | |||
執行 #netstat -tulnp | 檢視目前系統開啟監聽的tcp,udp端口的程序 | |||
執行 #netstat -anp | 檢視目前系統所有的網絡連接配接 | |||
執行 #top -n 1 | 檢視目前系統 | |||
确定惡意程序關聯檔案 | 執行 #ls -l /proc/pid/exe | 檢視惡意程序對于的可執行程式 | 備注:結論需要明确哪個目錄,哪些檔案和惡意檔案關聯,以ls -R dir的結果形式呈現,比如ls -R /home/.virus的執行結果。輸出病毒檔案結構,并整理打包所有相關檔案 | |
執行 #cat /proc/pid/cmdline | 檢視惡意程序啟動指令 | |||
執行 #lsof -p pid | 檢視與惡意程序關聯的檔案 | |||
執行 #ls -alt /tmp | 檢視/tmp目錄下的可疑檔案,特别是以點開頭的隐藏檔案 | |||
執行 #ls -alt /var/tmp | 檢視/var/tmp目錄下的可疑檔案,特别是以點開頭的隐藏檔案 | |||
執行 #ls -alt /dev/shm | 檢視/dev/shm目錄下的可疑檔案,特别是以點開頭的隐藏檔案 | |||
分析惡意程式/腳本,了解惡意程式對系統的改動 | 分析病毒相關的文本檔案 | 盡可能收集多的資訊以便後續排查,把擷取到的資訊寫入執行結果 | 備注:結論可以包括病毒執行了哪些操作,是什麼類型的病毒等 | |
分析腳本檔案,了解病毒邏輯 | 分析腳本,腳本可能是shell,python,perl等,甚至還可能混淆過,如果分析難度太大,可跳過暫不分析 | |||
分析二進制程式,用常見的逆向工具如IDA pro分析病毒邏輯 | 如果分析難度太大,可跳過暫不分析 | |||
把二進制病毒上傳到virustotal檢測 | 檢測病毒是什麼類型的病毒 | |||
确定惡意程序定時任務 | 執行 #cat /var/log/cron.log | 檢視定時任務的log記錄,看是否有異常的定時任務 | 輸出異常的定時任務日志資訊 | |
執行 #grep -rn 病毒特征 /etc | 病毒特征可以是某個路徑或者病毒樣本名稱,基本上比對到就可以認為是和病毒有關。這麼操作的原因定時任務和惡意程式之間,可能通過多個腳本關聯,比如定時任務執行a.sh,而a.sh調用了b.sh,b.sh調用惡意程式。 | 輸出比對的檔案名稱及相關資訊 | ||
執行 #grep -rn 病毒特征 /var | ||||
執行 #grep -rn 病毒特征 /bin | ||||
執行 #grep -rn 病毒特征 /sbin | ||||
确定惡意程序開機啟動項 | 執行 #ls -alt /etc/init.d | |||
特别需要關注etc目錄下的rc相關目錄檔案以及init相關目錄及檔案。 | ||||
清除與恢複 | 執行 #vim 定時任務檔案 | 删除惡意定時任務 | ||
執行 #killall -9 程序名 執行 #kill -9 pid | 殺死惡意程序 | |||
再次确認惡意定時任務是否被删除 | ||||
執行 #ps aux | grep 程序名 | 再次确認惡意程序是否被殺死 | |||
執行 #vim /etc/init.d/* | 删除惡意開機啟動項 | |||
執行 #rm,#rm -rf,#rmdir | 清除所有和病毒有關聯的檔案 | 删除各個病毒檔案,如果檔案不能被删除,很可能是設定了第二屬性,通過chattr -i 檔案名去除不能修改的權限。 | ||
執行 #reboot | 如條件允許則重新開機系統看是否有惡意程序 | |||