服務(wù)器中毒了—菜是原罪
周五朋友生日,剛吃完飯準(zhǔn)備唱歌,接到消息說業(yè)務(wù)支付失敗,問題是銀行前置機(jī)無法正常和銀行建立連接。
我麻了......
這臺(tái)服務(wù)器是銀行那邊親自搭的,說實(shí)話我很少去管理:
1、是一臺(tái)Windows服務(wù)器,我也不熟悉(太菜:路走窄了)。
2、不知道銀行裝了什么東西,動(dòng)了會(huì)不會(huì)造成其他問題(還是太菜:心里畏懼了)。
3、業(yè)務(wù)量也不大,平時(shí)也沒出現(xiàn)啥問題(還是太菜:慣性思維)。
但是出了問題,不得不管呀,歌也沒唱了 ,跑到車庫,打開電腦,開始一頓瞎操作。
先去查了所有的監(jiān)控?cái)?shù)據(jù)(這個(gè)時(shí)候就靠它了)。
首先確定CPU、內(nèi)存、磁盤IO、網(wǎng)絡(luò)等都是正常的。
但是發(fā)現(xiàn)在問題時(shí)間點(diǎn),前置機(jī)的連接數(shù)非常高(也許這就是問題的關(guān)鍵)。
沒辦法,先試試能不能遠(yuǎn)程進(jìn)服務(wù)器,發(fā)現(xiàn)是OK的。
先使用網(wǎng)絡(luò)排查三板斧:(1)打開瀏覽器訪問域名,發(fā)現(xiàn)無法建立連接。(2)Ping域名,發(fā)現(xiàn)域名可以正常解析。(3)Telnet IP+Port,發(fā)現(xiàn)Telnet不通。
當(dāng)時(shí)也沒往連接數(shù)已經(jīng)使用完上想。
然后就去找Windows的事件日志了,日志實(shí)在是太多了,多的發(fā)麻,看的頭暈?zāi)X花,不過功夫不負(fù)有心人,還是發(fā)現(xiàn)點(diǎn)問題,如下:
啥意思?
就是本地端口用完了,沒有多余的端口可以分配使用會(huì)導(dǎo)致無法與外部通信。
啥意思?
這就要說到TCP三次握手了,TCP客戶端和服務(wù)器連接時(shí),客戶端必須分配一個(gè)動(dòng)態(tài)端口,不過這里就繼續(xù)贅述了,大家都是大佬。
Windows默認(rèn)動(dòng)態(tài)端口范圍是1024-5000,也就是只能發(fā)起約4000個(gè)Socket連接,然后第一反應(yīng)就是增大動(dòng)態(tài)端口分配范圍(簡直太聰明了)。
然后我就更改了注冊表([HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters]),把端口范圍增大到2000,然后重啟了服務(wù)器(名副其實(shí)的SRE(Server Reboot Enginer))。
服務(wù)器重啟過后,肯定是可以正常服務(wù)了,畢竟沒有重啟解決不了的問題,如果有,那就再重啟幾次。
但是事情就這么完了?
當(dāng)然不,得找找為什么會(huì)有這么多連接,正常的業(yè)務(wù)情況下,不會(huì)出現(xiàn)這種問題。
所以就打開控制臺(tái),使用natstat -ano,不看不知道,一看嚇一跳,發(fā)現(xiàn)非常多的鏈接都是和47.95.x.x進(jìn)行的。
我使用netstat -ano | find "47.95.x.x" | find /c "80"一查,剛起的機(jī)器,就有2000多個(gè)連接了,著實(shí)嚇到我了。
先問業(yè)務(wù)方,確認(rèn)該IP是不是第三方的,得到明確答案不是,我開始慌了。
然后在網(wǎng)上查,發(fā)現(xiàn)這個(gè)IP是阿里云北京數(shù)據(jù)中心的。
一開始以為是阿里云的某些公用云服務(wù),比如阿里云盾、云監(jiān)控等(懂的都懂)。
所以就直接找阿里咯,得到回復(fù)說不是阿里云盾這些服務(wù)的IP,我慌的一批,一種不好的預(yù)感縈繞心頭。
馬上把這個(gè)IP禁用了,在安全組給限制掉。
然后從netstat -ano可以發(fā)現(xiàn)主要是通過1060這個(gè)進(jìn)程建立連接的。
uqccmg這個(gè)進(jìn)程一看就非常規(guī)進(jìn)程(不符合約定俗成的命名規(guī)則),當(dāng)然也要確認(rèn)一番。
得到準(zhǔn)確答案后,嘗試殺掉該進(jìn)程,殺了又起,殺了又起,抓麻了。
然后通過進(jìn)程去找到了文件。
看這非主流的圖標(biāo),中毒無疑了。
試著刪除該文件,當(dāng)然是失敗了,不過,也知曉了該進(jìn)程是通過.net服務(wù)托管著的,那我就把.net停掉唄,反正沒用這個(gè)服務(wù)。
停掉過后,確實(shí)可以殺該進(jìn)程,而且也沒有再啟動(dòng)了,連接也少了。
BUT,不要那么樂觀......
病毒還是在的,只是沒起了而已,僅此而已。
所以只有借助殺毒軟件了,下了一個(gè)火絨,居然發(fā)現(xiàn)17個(gè)風(fēng)險(xiǎn)項(xiàng)目。
先通過殺毒軟件把這個(gè)病毒干掉,具體有沒有干干凈我也不知道了(菜是原罪)。
業(yè)務(wù)現(xiàn)在可以正常使用,socket連接也是正常的,沒再發(fā)現(xiàn)可疑進(jìn)程 。
但是,心里總是沒底,最好的辦法還是重裝,這還需要評(píng)估下遷移和安裝成本,主要不是咱們自己安裝,也不知道.....
通過這個(gè)經(jīng)歷,發(fā)現(xiàn)自己還是太菜:
1、沒有做好系統(tǒng)安全加固,沒有安裝殺毒軟件啥的,主要是阿里云的云盾太貴.....
2、沒有經(jīng)常檢查服務(wù)器,沒做好日常巡檢。
3、開放了沒必要開放的端口(銀行開的,我也不敢關(guān),咋辦?)。
4、對(duì)Windows服務(wù)器天生逆反之心。