如何判斷 Linux 服務(wù)器是否被入侵及排查病毒方法?
啊夜惭,天啊,對(duì)于一個(gè)做前端開發(fā)的人來(lái)說(shuō)铛绰,對(duì)服務(wù)器端的知識(shí)只略懂一二啊诈茧,黑客就知道欺負(fù)小白,入侵我的服務(wù)器捂掰。
一開始我是束手無(wú)策的敢会,根本無(wú)從所知病毒在哪,黑客怎么入侵我的服務(wù)器这嚣。接下來(lái)鸥昏,讓我們一步步來(lái)排查吧,先看看如何判斷 Linux 服務(wù)器是否被入侵姐帚?
2. 判斷Linux 服務(wù)器是否被入侵
所謂的服務(wù)器被入侵或者說(shuō)被黑了的意思吏垮,是指未經(jīng)授權(quán)的人或程序?yàn)榱俗约旱哪康牡卿浀椒?wù)器上去并使用其計(jì)算資源,通常會(huì)產(chǎn)生不好的影響罐旗。
免責(zé)聲明:若你的服務(wù)器被類似 NSA 這樣的國(guó)家機(jī)關(guān)或者某個(gè)犯罪集團(tuán)入侵膳汪,那么你并不會(huì)注意到有任何問(wèn)題,這些技術(shù)也無(wú)法發(fā)覺(jué)他們的存在九秀。
然而遗嗽,大多數(shù)被攻破的服務(wù)器都是被類似自動(dòng)攻擊程序這樣的程序或者類似“腳本小子”這樣的廉價(jià)攻擊者,以及蠢蛋罪犯所入侵的鼓蜒。
這類攻擊者會(huì)在訪問(wèn)服務(wù)器的同時(shí)濫用服務(wù)器資源媳谁,并且不怎么會(huì)采取措施來(lái)隱藏他們正在做的事情。
被入侵服務(wù)器的癥狀
當(dāng)服務(wù)器被沒(méi)有經(jīng)驗(yàn)攻擊者或者自動(dòng)攻擊程序入侵了的話友酱,他們往往會(huì)消耗 100% 的資源。他們可能消耗 CPU 資源來(lái)進(jìn)行數(shù)字貨幣的采礦或者發(fā)送垃圾郵件柔纵,也可能消耗帶寬來(lái)發(fā)動(dòng) DoS 攻擊缔杉。
因此出現(xiàn)問(wèn)題的第一個(gè)表現(xiàn)就是服務(wù)器 “變慢了”。這可能表現(xiàn)在網(wǎng)站的頁(yè)面打開的很慢搁料,或者電子郵件要花很長(zhǎng)時(shí)間才能發(fā)送出去或详。
那么你應(yīng)該查看那些東西呢?
2.1 當(dāng)前都有誰(shuí)在登錄?
你首先要查看當(dāng)前都有誰(shuí)登錄在服務(wù)器上。發(fā)現(xiàn)攻擊者登錄到服務(wù)器上進(jìn)行操作并不復(fù)雜郭计。
其對(duì)應(yīng)的命令是 w霸琴。運(yùn)行 w 會(huì)輸出如下結(jié)果:
10:43:09 up 214 days, 1:20, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/1 183.15.179.82 09:49 0.00s 0.02s 0.00s w
查了一下ip地址,是自己登陸了昭伸,沒(méi)有其他人登陸梧乘,如果查到ip地址不是自己的ip地址就要注意了,這個(gè)不是個(gè)好兆頭。
停下來(lái)做個(gè)深呼吸, 不要恐慌之下只是干掉他們的 SSH 連接选调。除非你能夠防止他們?cè)俅芜M(jìn)入服務(wù)器夹供,否則他們會(huì)很快進(jìn)來(lái)并踢掉你,以防你再次回去仁堪。
請(qǐng)參閱本文最后的“被入侵之后怎么辦”這一章節(jié)來(lái)看找到了被入侵的證據(jù)后應(yīng)該怎么辦哮洽。
whois 命令可以接一個(gè) IP 地址然后告訴你該 IP 所注冊(cè)的組織的所有信息,當(dāng)然就包括所在國(guó)家的信息弦聂。
2.2 誰(shuí)曾經(jīng)登錄過(guò)?
Linux 服務(wù)器會(huì)記錄下哪些用戶鸟辅,從哪個(gè) IP,在什么時(shí)候登錄的以及登錄了多長(zhǎng)時(shí)間這些信息莺葫。使用 last 命令可以查看這些信息匪凉。
輸出類似這樣:
root pts/1 78.31.109.1 Thu Nov 30 08:26 still logged in
root pts/0 113.174.161.1 Thu Nov 30 08:26 still logged in
root pts/1 78.31.109.1 Thu Nov 30 08:24 - 08:26 (00:01)
root pts/0 113.174.161.1 Wed Nov 29 12:34 - 12:52 (00:18)
root pts/0 14.176.196.1 Mon Nov 27 13:32 - 13:53 (00:21)
這里可以看到英國(guó) IP 和越南 IP 交替出現(xiàn),而且最上面兩個(gè) IP 現(xiàn)在還處于登錄狀態(tài)徙融。如果你看到任何未經(jīng)授權(quán)的 IP洒缀,那么請(qǐng)參閱最后章節(jié)。
登錄后的歷史記錄會(huì)記錄到二進(jìn)制的/var/log/wtmp
文件中(LCTT 譯注:這里作者應(yīng)該寫錯(cuò)了欺冀,根據(jù)實(shí)際情況修改)树绩,因此很容易被刪除。通常攻擊者會(huì)直接把這個(gè)文件刪掉隐轩,以掩蓋他們的攻擊行為饺饭。 因此, 若你運(yùn)行了last
命令卻只看得見(jiàn)你的當(dāng)前登錄,那么這就是個(gè)不妙的信號(hào)职车。
如果沒(méi)有登錄歷史的話瘫俊,請(qǐng)一定小心,繼續(xù)留意入侵的其他線索悴灵。
2.3 回顧命令歷史
這個(gè)層次的攻擊者通常不會(huì)注意掩蓋命令的歷史記錄扛芽,因此運(yùn)行 history
命令會(huì)顯示出他們?cè)?jīng)做過(guò)的所有事情。 一定留意有沒(méi)有用 wget
或 curl
命令來(lái)下載類似垃圾郵件機(jī)器人或者挖礦程序之類的非常規(guī)軟件积瞒。
命令歷史存儲(chǔ)在~/.bash_history
文件中川尖,因此有些攻擊者會(huì)刪除該文件以掩蓋他們的所作所為。跟登錄歷史一樣茫孔,若你運(yùn)行history
命令卻沒(méi)有輸出任何東西那就表示歷史文件被刪掉了叮喳。這也是個(gè)不妙的信號(hào),你需要很小心地檢查一下服務(wù)器了缰贝。(LCTT 譯注馍悟,如果沒(méi)有命令歷史,也有可能是你的配置錯(cuò)誤剩晴。)
2.4 哪些進(jìn)程在消耗 CPU锣咒?
你常遇到的這類攻擊者通常不怎么會(huì)去掩蓋他們做的事情。他們會(huì)運(yùn)行一些特別消耗 CPU 的進(jìn)程。這就很容易發(fā)現(xiàn)這些進(jìn)程了宠哄。只需要運(yùn)行 top
然后看最前的那幾個(gè)進(jìn)程就行了壹将。
這也能顯示出那些未登錄進(jìn)來(lái)的攻擊者。比如毛嫉,可能有人在用未受保護(hù)的郵件腳本來(lái)發(fā)送垃圾郵件诽俯。
如果你最上面的進(jìn)程對(duì)不了解,那么你可以 Google 一下進(jìn)程名稱承粤,或者通過(guò) losf
和 strace
來(lái)看看它做的事情是什么暴区。
使用這些工具,第一步從 top
中拷貝出進(jìn)程的 PID辛臊,然后運(yùn)行:
strace -p PID
這會(huì)顯示出該進(jìn)程調(diào)用的所有系統(tǒng)調(diào)用仙粱。它產(chǎn)生的內(nèi)容會(huì)很多,但這些信息能告訴你這個(gè)進(jìn)程在做什么彻舰。
lsof -p PID
這個(gè)程序會(huì)列出該進(jìn)程打開的文件伐割。通過(guò)查看它訪問(wèn)的文件可以很好的理解它在做的事情。
2.5 檢查所有的系統(tǒng)進(jìn)程
消耗 CPU 不嚴(yán)重的未授權(quán)進(jìn)程可能不會(huì)在top
中顯露出來(lái)刃唤,不過(guò)它依然可以通過(guò)ps
列出來(lái)隔心。命令ps auxf
就能顯示足夠清晰的信息了。
你需要檢查一下每個(gè)不認(rèn)識(shí)的進(jìn)程尚胞。經(jīng)常運(yùn)行 ps
(這是個(gè)好習(xí)慣)能幫助你發(fā)現(xiàn)奇怪的進(jìn)程硬霍。
2.6 檢查進(jìn)程的網(wǎng)絡(luò)使用情況
iftop
的功能類似 top
,它會(huì)排列顯示收發(fā)網(wǎng)絡(luò)數(shù)據(jù)的進(jìn)程以及它們的源地址和目的地址笼裳。類似 DoS 攻擊或垃圾機(jī)器人這樣的進(jìn)程很容易顯示在列表的最頂端唯卖。
2.7 哪些進(jìn)程在監(jiān)聽網(wǎng)絡(luò)連接?
通常攻擊者會(huì)安裝一個(gè)后門程序?qū)iT監(jiān)聽網(wǎng)絡(luò)端口接受指令。該進(jìn)程等待期間是不會(huì)消耗 CPU 和帶寬的躬柬,因此也就不容易通過(guò)top
之類的命令發(fā)現(xiàn)拜轨。
lsof
和 netstat
命令都會(huì)列出所有的聯(lián)網(wǎng)進(jìn)程。我通常會(huì)讓它們帶上下面這些參數(shù):
lsof -I
netstat -plunt
你需要留意那些處于 LISTEN
和 ESTABLISHED
狀態(tài)的進(jìn)程允青,這些進(jìn)程要么正在等待連接(LISTEN)撩轰,要么已經(jīng)連接(ESTABLISHED)。如果遇到不認(rèn)識(shí)的進(jìn)程昧廷,使用 strace
和 lsof
來(lái)看看它們?cè)谧鍪裁礀|西。
3. 被入侵之后該怎么辦呢?
經(jīng)過(guò)上面的步驟后偎箫,基本可以找到你的服務(wù)器是否被入侵了木柬。如果入侵了,首先淹办,不要緊張眉枕,尤其當(dāng)攻擊者正處于登錄狀態(tài)時(shí)更不能緊張。你需要在攻擊者警覺(jué)到你已經(jīng)發(fā)現(xiàn)他之前奪回機(jī)器的控制權(quán)。如果他發(fā)現(xiàn)你已經(jīng)發(fā)覺(jué)到他了速挑,那么他可能會(huì)鎖死你不讓你登陸服務(wù)器谤牡,然后開始?xì)瑴幺E。
如果你技術(shù)不太好那么就直接關(guān)機(jī)吧姥宝。你可以在服務(wù)器上運(yùn)行 shutdown -h now
或者 systemctl poweroff
這兩條命令之一翅萤。也可以登錄主機(jī)提供商的控制面板中關(guān)閉服務(wù)器。關(guān)機(jī)后腊满,你就可以開始配置防火墻或者咨詢一下供應(yīng)商的意見(jiàn)套么。
如果你對(duì)自己頗有自信,而你的主機(jī)提供商也有提供上游防火墻碳蛋,那么你只需要以此創(chuàng)建并啟用下面兩條規(guī)則就行了:
- 只允許從你的 IP 地址登錄 SSH胚泌。
- 封禁除此之外的任何東西,不僅僅是 SSH肃弟,還包括任何端口上的任何協(xié)議玷室。
這樣會(huì)立即關(guān)閉攻擊者的 SSH 會(huì)話,而只留下你可以訪問(wèn)服務(wù)器笤受。
如果你無(wú)法訪問(wèn)上游防火墻穷缤,那么你就需要在服務(wù)器本身創(chuàng)建并啟用這些防火墻策略,然后在防火墻規(guī)則起效后使用kill
命令關(guān)閉攻擊者的 SSH 會(huì)話感论。(LCTT 譯注:本地防火墻規(guī)則 有可能不會(huì)阻止已經(jīng)建立的 SSH 會(huì)話绅项,所以保險(xiǎn)起見(jiàn),你需要手工殺死該會(huì)話比肄。)
最后還有一種方法快耿,如果支持的話,就是通過(guò)諸如串行控制臺(tái)之類的帶外連接登錄服務(wù)器芳绩,然后通過(guò)systemctl stop network.service
停止網(wǎng)絡(luò)功能掀亥。這會(huì)關(guān)閉所有服務(wù)器上的網(wǎng)絡(luò)連接,這樣你就可以慢慢的配置那些防火墻規(guī)則了妥色。
重奪服務(wù)器的控制權(quán)后搪花,也不要以為就萬(wàn)事大吉了。
不要試著修復(fù)這臺(tái)服務(wù)器嘹害,然后接著用撮竿。你永遠(yuǎn)不知道攻擊者做過(guò)什么,因此你也永遠(yuǎn)無(wú)法保證這臺(tái)服務(wù)器還是安全的笔呀。
最好的方法就是拷貝出所有的數(shù)據(jù)幢踏,然后重裝系統(tǒng)。(LCTT 譯注:你的程序這時(shí)已經(jīng)不可信了许师,但是數(shù)據(jù)一般來(lái)說(shuō)沒(méi)問(wèn)題房蝉。)
4. 過(guò)程
經(jīng)過(guò)上面步驟 2.1僚匆,2.2,2.3 我都沒(méi)發(fā)現(xiàn)我的服務(wù)器有什么異炒罨茫或者被誰(shuí)登陸過(guò)咧擂,但是在步驟2.4 的時(shí)候,發(fā)現(xiàn)了異常檀蹋,有不認(rèn)識(shí)的進(jìn)程在消耗CPU松申,然后我用strace -p PID
發(fā)現(xiàn)這個(gè)進(jìn)程在向外發(fā)大量的數(shù)據(jù)包,用步驟2.7中的lsof -i
發(fā)現(xiàn)確實(shí)這個(gè)進(jìn)程在監(jiān)聽網(wǎng)絡(luò)連接续扔,進(jìn)程名 有pnscan
攻臀,在我用kill -9 PID
后 ,運(yùn)行ps aux | grep pnscan
發(fā)現(xiàn)該進(jìn)程仍然存在纱昧,于是上網(wǎng)查了一下刨啸,發(fā)現(xiàn)這是JBoss漏洞中毒。
5. 查進(jìn)程端口相互占用情況
Linux下查看進(jìn)程占用端口: 查看程序?qū)?yīng)進(jìn)程號(hào):ps –ef | grep 進(jìn)程名
[root@iZ28ti4v56dZ ~]# ps -ef | grep nginx
root 17453 1 0 Feb27 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 17455 17453 0 Feb27 ? 00:14:13 nginx: worker process
root 32251 32073 0 17:45 pts/0 00:00:00 grep nginx
REDHAT :查看進(jìn)程號(hào)所占用的端口號(hào):netstat –nltp|grep 進(jìn)程號(hào) ubuntu:查看進(jìn)程占用端口號(hào):netstat -anp|grep pid
[root@iZ28ti4v56dZ ~]# netstat -anp | grep 17453
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 17453/nginx
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 17453/nginx
unix 3 [ ] STREAM CONNECTED 11886123 17453/nginx
unix 3 [ ] STREAM CONNECTED 11886122 17453/nginx
[root@iZ28ti4v56dZ ~]# netstat -nltp | grep 17453
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 17453/nginx
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 17453/nginx
Linux下查看端口號(hào)所使用的進(jìn)程號(hào): 使用lsof命令: lsof –i:端口號(hào)
[root@iZ28ti4v56dZ ~]# lsof -i:443
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 17453 root 7u IPv4 11886111 0t0 TCP *:https (LISTEN)
nginx 17455 nginx 7u IPv4 11886111 0t0 TCP *:https (LISTEN)
6. Jboss漏洞導(dǎo)致linux服務(wù)器中毒解決辦法
6.1 中毒現(xiàn)象
- 網(wǎng)絡(luò)出現(xiàn)擁塞识脆,訪問(wèn)延遲增加设联。
- 系統(tǒng)定時(shí)任務(wù)表中出現(xiàn)異常的定時(shí)任務(wù)。
- 出現(xiàn)異常進(jìn)程灼捂。
- $JBOSS_HOME/bin或/root目錄下出現(xiàn)大量的異常文件离例。
6.2 現(xiàn)象分析
這是最近網(wǎng)上流行的一種蠕蟲病毒,它利用Jboss中間件程序的jxm-console與web-console默認(rèn)帳戶漏洞進(jìn)行攻擊悉稠,感染linux服務(wù)器宫蛆,成為僵尸代理。
- 出現(xiàn)網(wǎng)絡(luò)擁塞的原因是該蠕蟲病毒利用名為
pnscan
工具不斷執(zhí)行端口掃描的猛。發(fā)出大量的請(qǐng)求包耀盗,占用網(wǎng)絡(luò)帶寬。 - 在系統(tǒng)定時(shí)任務(wù)表中可查看到名為如下的異常定時(shí)任務(wù)(有時(shí)候只有其中2個(gè))卦尊。 crontab –l [圖片上傳失敗...(image-65d6d1-1594881576159)]
.sysync.pl與.sysdbs都是隱藏文件叛拷,可以通過(guò)ls –la列表查看到。
-
查看進(jìn)程岂却,可以檢查到以下異常進(jìn)程 [圖片上傳失敗...(image-b03e60-1594881576159)]
有些服務(wù)器上還可以看到一些javas的異常進(jìn)程忿薇,請(qǐng)確認(rèn)這些javas進(jìn)程,是否應(yīng)用程序調(diào)用的java躏哩。
-
在$JBOSS_HOME/bin或/root目錄下出現(xiàn)大量如下異常文件 [圖片上傳失敗...(image-82d287-1594881576158)]
其中kisses.tar.gz就是病毒源碼安裝包署浩,安裝后生成以上文件。
6.3 解決方法
步一:查殺病毒
Killall -9 javas Killall -9 pns Killall -9 perl
cd /root 或 cd $JBOSS_HOME/bin rm –rf bm* rm –rf .pl rm –rf treat.sh rm –rf install-sh rm –rf version rm –rf kisses* rm –rf pns* rm –rf Makefile rm –rf ipsort rm –rf kisses* rm –rf .sysdbs rm –rf .sysync.pl
crontab –e 1 1 10 ~/.sysdbs 1 1 24 perl ~/.sysync.pl 1 1 24 perl ~/.sysync.pl 1 1 10~/.sysdbs 刪除掉這幾行 service crond stop
步二:Jboss安全加固扫尺,修改jmx-console與web-console的默認(rèn)口令
JMX安全配置:
把GET和POST兩行注釋掉筋栋,同時(shí)security-constraint整個(gè)部分不要注釋掉。
把security-domain注釋去掉
修改admin密碼
WEB-CONSOLE安全加固
修改方法與JMX安全加固一樣器联。
步三:測(cè)試
完成Jboss的安全加固后做http訪問(wèn)測(cè)試二汛,看能否正常顯示驗(yàn)證窗口,輸入設(shè)置的用戶名口令后能否正常訪問(wèn)拨拓。
6.4 針對(duì)Jboss漏洞攻擊的建議
對(duì)于病毒攻擊一般還是以預(yù)防為主肴颊,一旦發(fā)現(xiàn)服務(wù)器已經(jīng)中毒解決起來(lái)相關(guān)棘手。為了更有效的預(yù)防此類病毒攻擊渣磷,提供以下建議:
- Jboss應(yīng)用程序應(yīng)運(yùn)行在非root用戶下婿着,防止病毒獲得超級(jí)用戶權(quán)限,修改root口令醋界,控制服務(wù)器竟宋。
- 為Jboss控制臺(tái)啟用驗(yàn)證,修改默認(rèn)口令形纺,口令要具有一定的復(fù)雜度丘侠。如果不需要,甚至可以關(guān)閉管理端口和相關(guān)統(tǒng)計(jì)信息逐样,刪除Jboss主目錄和文件蜗字。
- 將Jboss升級(jí)到最新版本,尤其是老板本的Jboss的本身漏洞較多脂新,新版本的Jboss安全性較高挪捕。
- WEB應(yīng)用與接收器分離,如可以通過(guò)Apache與Jboss整合的方式實(shí)現(xiàn)争便,這樣做一方面更安全级零,另一方面更適合高并發(fā)流量的訪問(wèn)。