Linux應急響應(一):SSH暴力破解

Bypass--發表於2018-08-30

0x00 前言

​ SSH 是目前較可靠,專為遠端登入會話和其他網路服務提供安全性的協議,主要用於給遠端登入會話資料進行加密,保證資料傳輸的安全。SSH口令長度太短或者複雜度不夠,如僅包含數字,或僅包含字母等,容易被攻擊者破解,一旦被攻擊者獲取,可用來直接登入系統,控制伺服器所有許可權。

0x01 應急場景

​ 某天,網站管理員登入伺服器進行巡檢時,發現埠連線裡存在兩條可疑的連線記錄,如下圖:

 

  1. TCP初始化連線三次握手吧:發SYN包,然後返回SYN/ACK包,再發ACK包,連線正式建立。但是這裡有點出入,當請求者收到SYS/ACK包後,就開始建立連線了,而被請求者第三次握手結束後才建立連線。

  2. 客戶端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

  3. 當客戶端開始連線時,伺服器還處於LISTENING,客戶端發一個SYN包後,服務端接收到了客戶端的SYN並且傳送了ACK時,伺服器處於SYN_RECV狀態,然後並沒有再次收到客戶端的ACK進入ESTABLISHED狀態,一直停留在SYN_RECV狀態。

    在這裡,SSH(22)埠,兩條外網IP的SYN_RECV狀態連線,直覺告訴了管理員,這裡一定有什麼異常。

0x02 日誌分析

​ SSH埠異常,我們首先有必要先來了解一下系統賬號情況:

A、系統賬號情況

1、除root之外,是否還有其它特權使用者(uid 為0)
[root@localhost ~]# awk -F: '$3==0{print $1}' /etc/passwd
root
​
2、可以遠端登入的帳號資訊
[root@localhost ~]# awk '/\$1|\$6/{print $1}' /etc/shadow
root:$6$38cKfZDjsTiUe58V$FP.UHWMObqeUQS1Z2KRj/4EEcOPi.6d1XmKHgK3j3GY9EGvwwBei7nUbbqJC./qK12HN8jFuXOfEYIKLID6hq0::0:99999:7:::
[root@localhost ~]# awk -F: '$3==0{print $1}' /etc/passwd
root
​
2、可以遠端登入的帳號資訊
[root@localhost ~]# 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次登入失敗的記錄,確認伺服器遭受暴力破解
[root@localhost ~]# grep -o "Failed password" /var/log/secure|uniq -c
     126254 Failed password
     
2、輸出登入爆破的第一行和最後一行,確認爆破時間範圍:
[root@localhost ~]# 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
[root@localhost ~]# 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在爆破?
[root@localhost ~]# 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、爆破使用者名稱字典都有哪些?
[root@localhost ~]# grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
      9402  root
      3265  invalid user oracle
      1245  invalid user admin
      1025  invalid user user
      .....................
​1、統計了下日誌,發現大約有126254次登入失敗的記錄,確認伺服器遭受暴力破解
[root@localhost ~]# grep -o "Failed password" /var/log/secure|uniq -c
     126254 Failed password
     
2、輸出登入爆破的第一行和最後一行,確認爆破時間範圍:
[root@localhost ~]# 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
[root@localhost ~]# 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在爆破?
[root@localhost ~]# 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、爆破使用者名稱字典都有哪些?
[root@localhost ~]# grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
      9402  root
      3265  invalid user oracle
      1245  invalid user admin
      1025  invalid user user
      .....................
​

C、管理員最近登入情況:


1、登入成功的日期、使用者名稱、IP:
[root@localhost ~]# 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有哪些:
[root@localhost ~]# grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
     27 192.168.204.11、登入成功的日期、使用者名稱、IP:
[root@localhost ~]# 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有哪些:
[root@localhost ~]# 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、部署入侵檢測裝置,增強安全防護。

最後

歡迎關注個人微信公眾號:Bypass--,每週原創一篇技術乾貨。 

參考連結:

https://www.zhihu.com/question/33964391

http://www.freebuf.com/articles/system/11424.html

https://help.aliyun.com/knowledge_detail/37479.html?spm=a2c4g.11186623.4.1.W0eomj

 

相關文章