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