【知了堂信安筆記】SSH暴力破解

0x00 前言
SSH 是目前較可靠,專(zhuān)為遠(yuǎn)程登錄會(huì)話(huà)和其他網(wǎng)絡(luò)服務(wù)提供安全性的協(xié)議,主要用于給遠(yuǎn)程登錄會(huì)話(huà)數(shù)據(jù)進(jìn)行加密,保證數(shù)據(jù)傳輸?shù)陌踩?。SSH口令長(zhǎng)度太短或者復(fù)雜度不夠,如僅包含數(shù)字,或僅包含字母等,容易被攻擊者破解,一旦被攻擊者獲取,可用來(lái)直接登錄系統(tǒng),控制服務(wù)器所有權(quán)限。
0x01 應(yīng)急場(chǎng)景
某天,網(wǎng)站管理員登錄服務(wù)器進(jìn)行巡檢時(shí),發(fā)現(xiàn)端口連接里存在兩條可疑的連接記錄,如下圖:

TCP初始化連接三次握手吧:發(fā)SYN包,然后返回SYN/ACK包,再發(fā)ACK包,連接正式建立。但是這里有點(diǎn)出入,當(dāng)請(qǐng)求者收到SYS/ACK包后,就開(kāi)始建立連接了,而被請(qǐng)求者第三次握手結(jié)束后才建立連接。
客戶(hù)端TCP狀態(tài)遷移:
CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
服務(wù)器TCP狀態(tài)遷移:
CLOSED->LISTEN->SYN recv->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED當(dāng)客戶(hù)端開(kāi)始連接時(shí),服務(wù)器還處于LISTENING,客戶(hù)端發(fā)一個(gè)SYN包后,服務(wù)端接收到了客戶(hù)端的SYN并且發(fā)送了ACK時(shí),服務(wù)器處于SYN_RECV狀態(tài),然后并沒(méi)有再次收到客戶(hù)端的ACK進(jìn)入ESTABLISHED狀態(tài),一直停留在SYN_RECV狀態(tài)。
在這里,SSH(22)端口,兩條外網(wǎng)IP的SYN_RECV狀態(tài)連接,直覺(jué)告訴了管理員,這里一定有什么異常。
0x02 日志分析
SSH端口異常,我們首先有必要先來(lái)了解一下系統(tǒng)賬號(hào)情況:
A、系統(tǒng)賬號(hào)情況
1、除root之外,是否還有其它特權(quán)用戶(hù)(uid 為0)
[root@localhost ~]# awk -F: '$3==0{print $1}' /etc/passwd
root
2、可以遠(yuǎn)程登錄的帳號(hào)信息
[root@localhost ~]# awk '/\$1|\$6/{print $1}' /etc/shadow
root:$6$38cKfZDjsTiUe58V$FP.UHWMObqeUQS1Z2KRj/4EEcOPi.6d1XmKHgK3j3GY9EGvwwBei7nUbbqJC./qK12HN8jFuXOfEYIKLID6hq0::0:99999:7:::
我們可以確認(rèn)目前系統(tǒng)只有一個(gè)管理用戶(hù)root。
接下來(lái),我們想到的是/var/log/secure,這個(gè)日志文件記錄了驗(yàn)證和授權(quán)方面的信息,只要涉及賬號(hào)和密碼的程序都會(huì)記錄下來(lái)。
B、確認(rèn)攻擊情況:
1、統(tǒng)計(jì)了下日志,發(fā)現(xiàn)大約有126254次登錄失敗的記錄,確認(rèn)服務(wù)器遭受暴力破解
[root@localhost ~]# grep -o "Failed password" /var/log/secure|uniq -c
? ? 126254 Failed password
? ?
2、輸出登錄爆破的第一行和最后一行,確認(rèn)爆破時(shí)間范圍:
[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、進(jìn)一步定位有哪些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、爆破用戶(hù)名字典都有哪些?
[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、登錄成功的日期、用戶(hù)名、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
............................
通過(guò)登錄日志分析,并未發(fā)現(xiàn)異常登錄時(shí)間和登錄IP。
2、順便統(tǒng)計(jì)一下登錄成功的IP有哪些:
[root@localhost ~]# grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
? ? 27 192.168.204.1
通過(guò)日志分析,發(fā)現(xiàn)攻擊者使用了大量的用戶(hù)名進(jìn)行暴力破解,但從近段時(shí)間的系統(tǒng)管理員登錄記錄來(lái)看,并未發(fā)現(xiàn)異常登錄的情況,需要進(jìn)一步對(duì)網(wǎng)站服務(wù)器進(jìn)行入侵排查,這里就不再闡述。
0x04 處理措施
SSH暴力破解依然十分普遍,如何保護(hù)服務(wù)器不受暴力破解攻擊,總結(jié)了幾種措施:
1、禁止向公網(wǎng)開(kāi)放管理端口,若必須開(kāi)放應(yīng)限定管理IP地址并加強(qiáng)口令安全審計(jì)(口令長(zhǎng)度不低于8位,由數(shù)字、大小寫(xiě)字母、特殊字符等至少兩種以上組合構(gòu)成)。
2、更改服務(wù)器ssh默認(rèn)端口。
3、部署入侵檢測(cè)設(shè)備,增強(qiáng)安全防護(hù)。