Linux應急響應手冊--SSH暴力破解
0x00 前言
SSH 是目前較可靠,專為遠端登入會話和其他網路服務提供安全性的協議,主要用於給遠端登入會話資料進行加密,保證資料傳輸的安全。SSH口令長度太短或者複雜度不夠,如僅包含數字,或僅包含字母等,容易被攻擊者破解,一旦被攻擊者獲取,可用來直接登入系統,控制伺服器所有許可權。
0x01 應急場景
某天,網站管理員登入伺服器進行巡檢時,發現埠連線裡存在兩條可疑的連線記錄,如下圖:
-
TCP初始化連線三次握手吧:發SYN包,然後返回SYN/ACK包,再發ACK包,連線正式建立。但是這裡有點出入,當請求者收到SYS/ACK包後,就開始建立連線了,而被請求者第三次握手結束後才建立連線。
-
客戶端TCP狀態遷移:
CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
伺服器TCP狀態遷移:
CLOSED->LISTEN->SYN recv->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED
-
當客戶端開始連線時,伺服器還處於LISTENING,客戶端發一個SYN包後,服務端接收到了客戶端的SYN並且傳送了ACK時,伺服器處於SYN_RECV狀態,然後並沒有再次收到客戶端的ACK進入ESTABLISHED狀態,一直停留在SYN_RECV狀態。
在這裡,SSH(22)埠,兩條外網IP的SYN_RECV狀態連線,直覺告訴了管理員,這裡一定有什麼異常。
0x02 日誌分析
SSH埠異常,我們首先有必要先來了解一下系統賬號情況:
A、系統賬號情況
1、除root之外,是否還有其它特權使用者(uid 為0)
[[email protected] ~]# awk -F: '$3==0{print $1}' /etc/passwd root
2、可以遠端登入的帳號資訊
[[email protected] ~]# awk '/$1|$6/{print $1}' /etc/shadow root:$6$38cKfZDjsTiUe58V$FP.UHWMObqeUQS1Z2KRj/4EEcOPi.6d1XmKHgK3j3GY9EGvwwBei7nUbbqJC./qK12HN8jFuXOfEYIKLID6hq0::0:99999:7:::
我們可以確認目前系統只有一個管理使用者root。接下來,我們想到的是/var/log/secure,這個日誌檔案記錄了驗證和授權方面的資訊,只要涉及賬號和密碼的程式都會記錄下來。
B、確認攻擊情況:
1、統計了下日誌,發現大約有126254次登入失敗的記錄,確認伺服器遭受暴力破解
[[email protected] ~]# grep -o "Failed password" /var/log/secure|uniq -c 126254 Failed password
2、輸出登入爆破的第一行和最後一行,確認爆破時間範圍:
[[email protected] ~]# grep "Failed password" /var/log/secure|head -1 Jul 8 20:14:59 localhost sshd[14323]: Failed password for invalid user qwe from 111.13.xxx.xxx port 1503 ssh2 [[email protected] ~]# grep "Failed password" /var/log/secure|tail -1 Jul 10 12:37:21 localhost sshd[2654]: Failed password for root from 111.13.xxx.xxx port 13068 ssh2
3、進一步定位有哪些IP在爆破?
[[email protected] ~]# grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25 [0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c | sort -nr 12622 23.91.xxx.xxx 8942 114.104.xxx.xxx 8122 111.13.xxx.xxx 7525 123.59.xxx.xxx ...................
4、爆破使用者名稱字典都有哪些?
[[email protected] ~]# grep "Failed password" /var/log/secure| perl -e 'while($_=<>){ /for(.*?) from/; print "$1n";}' |uniq -c|sort -nr 9402 root 3265 invalid user oracle 1245 invalid user admin 1025 invalid user user .....................
C、管理員最近登入情況:
1、登入成功的日期、使用者名稱、IP:
[[email protected] ~]# grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}' Jul 9 09:38:09 root 192.168.143.100 Jul 9 14:55:51 root 192.168.143.100 Jul 10 08:54:26 root 192.168.143.100 Jul 10 16:25:59 root 192.168.143.100 ............................
通過登入日誌分析,並未發現異常登入時間和登入IP。
2、順便統計一下登入成功的IP有哪些:
[[email protected] ~]# grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more 27 192.168.204.1
通過日誌分析,發現攻擊者使用了大量的使用者名稱進行暴力破解,但從近段時間的系統管理員登入記錄來看,並未發現異常登入的情況,需要進一步對網站伺服器進行入侵排查,這裡就不再闡述。
0x04 處理措施
SSH暴力破解依然十分普遍,如何保護伺服器不受暴力破解攻擊,總結了幾種措施:
1、禁止向公網開放管理埠,若必須開放應限定管理IP地址並加強口令安全審計 (口令長度不低於8位,由數字、大小寫字母、特殊字元等至少兩種以上組合構成)。 2、更改伺服器ssh預設埠。 3、部署入侵檢測裝置,增強安全防護。