Linux安全1-使用者密碼被暴力破解

kikajack發表於2017-05-16

本人所用Linux為CentOS7,本文寫於2017-05-16,請注意版本區別和時效性。

1.緣由

今天連線伺服器時,發現有接近3萬次的連線失敗記錄。抓緊查了查怎麼回事,原來是被攻擊了,可能是殭屍網路乾的。大神們建議,root密碼要保證足夠複雜,如果用證書登入替換密碼登入,更能保證安全。
被暴力破解root密碼的記錄
但是事情不能就這麼過了,得刨根問底。

2.檢視Linux日誌

1.首先要做的,先分析明白我們經歷了什麼。而這一切都在日誌裡。

Linux系統的日誌,都儲存在/var/log目錄下:
/var/log/boot.log:記錄了系統在開機引導過程中(開機自檢過程顯示在螢幕上)發生的事件
/var/log/lastlog:記錄最後一次使用者成功登陸的時間、登陸IP等資訊
/var/log/messages:記錄Linux作業系統常見的系統和服務錯誤資訊
/var/log/secure:Linux系統安全日誌,記錄使用者和工作組變化情況、使用者登陸認證情況
/var/log/btmp:記錄系統登陸失敗的使用者、時間以及遠端IP地址
/var/log/syslog:只記錄警告資訊,常常是系統出問題的資訊,使用lastlog檢視
/var/log/wtmp:該日誌檔案永久記錄每個使用者登入、登出及系統的啟動、停機的事件,使用last命令檢視
/var/run/utmp:該日誌檔案記錄有關當前登入的每個使用者的資訊。如 who、w、users、finger等就需要訪問這個檔案
/var/log/syslog或/var/log/messages 儲存所有的全域性系統活動資料,包括開機資訊。基於 Debian 的系統如 Ubuntu 在 /var/log/syslog中儲存,而基於RedHat的系統如RHEL或CentOS 則在/var/log/messages 中儲存。
/var/log/auth.log或/var/log/secure 儲存來自可插拔認證模組(PAM)的日誌,包括成功的登入,失敗的登入嘗試和認證方式。Ubuntu 和 Debian 在/var/log/auth.log 中儲存認證資訊,而RHEL或CentOS 則在/var/log/secure 中儲存。

我們需要的,就是/var/log/btmp(系統才安裝了3天,這個日誌檔案已經40多兆了,汗),部分截圖如下:
這裡寫圖片描述
暴力破解的人,不停的嘗試各種使用者名稱+各種密碼,看來是有一個字典庫了。
###2.檢視發起攻擊的IP和攻擊次數
Linux命令:cat /var/log/secure | awk '/Failed/{print $(NF-3)}' | sort | uniq -c | awk '{print $2" = "$1;}'
資料:

101.200.1.126 = 3
101.95.184.150 = 3
103.207.36.69 = 1
103.207.39.37 = 5
103.207.39.38 = 9
106.57.36.158 = 6
106.75.35.108 = 12
109.163.234.4 = 2
109.163.234.9 = 2
111.73.1.31 = 6
112.101.170.251 = 6
112.126.89.5 = 11
113.122.41.161 = 6
113.123.34.205 = 6
113.195.145.21 = 2095
113.195.145.52 = 1109
113.69.26.141 = 6
114.141.132.53 = 6
115.209.234.171 = 6
116.252.34.161 = 6
116.31.116.11 = 2154
116.31.116.18 = 795
116.31.116.52 = 762
117.197.240.164 = 6
117.62.112.19 = 6
117.66.164.107 = 6
118.128.209.166 = 6
119.176.53.5 = 6
119.193.140.146 = 6
119.193.140.181 = 6
119.193.140.221 = 6
120.150.35.58 = 6
120.29.217.46 = 1
120.40.34.72 = 6
120.41.33.19 = 6
123.183.209.135 = 753
123.183.209.136 = 1487
95.68.183.161 = 6
...

有幾個IP攻擊次數超多,查一下位置:
59.63.188.3 = 19359
61.177.172.17 = 18945
這裡寫圖片描述
這裡寫圖片描述
好吧,是中國的被控制的計算機。。。

3.安裝軟體保護自己

如果你用證書登入,那啥都不用安裝。密碼登入的,還是安全第一。
有兩個比較常用的軟體,可以安裝在伺服器上:fail2ban(支援多種協議,登入失敗N次後拉黑IP)和denyhosts(支援SSH,自動遮蔽非法IP連線)。兩款軟體的對比參考:https://serverfault.com/questions/128962/denyhosts-vs-fail2ban-vs-iptables-best-way-to-prevent-brute-force-logons。fail2ban更全面,那就安裝fail2ban。wiki在此:https://en.wikipedia.org/wiki/Fail2ban。

1.fail2ban安裝配置教程:

https://linux.cn/article-5067-1.html
http://www.cnblogs.com/jasmine-Jobs/p/5927968.html

在CentOS7中安裝還是比較簡單的,yum install fail2ban即可。然後配置,把自己的規則放在/etc/fail2ban/jail.local 裡以覆蓋/etc/fail2ban/jail.conf 裡的預設配置。配置摘要如下:

在針對服務的監獄區(在[DEFAULT]區後面的地方),你需要定義一個[ssh-iptables]區,這裡用來定義SSH相關的監獄配置。真正的禁止IP地址的操作是通過iptables完成的。

[DEFAULT]
# 以空格分隔的列表,可以是 IP 地址、CIDR 字首或者 DNS 主機名
# 用於指定哪些地址可以忽略 fail2ban 防禦
ignoreip = 127.0.0.1 172.31.0.0/24 10.10.0.0/24 192.168.0.0/24
 
# 客戶端主機被禁止的時長(秒)
bantime = 86400
 
# 客戶端主機被禁止前允許失敗的次數 
maxretry = 5
 
# 查詢失敗次數的時長(秒)
findtime = 600
 
mta = sendmail
 
[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=your@email.com, sender=fail2ban@email.com]
# Debian 系的發行版 
logpath = /var/log/auth.log
# Red Hat 系的發行版
logpath = /var/log/secure
# ssh 服務的最大嘗試次數 
maxretry = 3

根據上述配置,fail2ban會自動禁止在最近10分鐘內有超過3次訪問嘗試失敗的任意IP地址。一旦被禁,這個IP地址將會在24小時內一直被禁止訪問 SSH 服務。這個事件也會通過sendemail傳送郵件通知。

2.重啟fail2ban服務,測試是否可用

重啟:systemctl restart fail2ban
測試服務可用性:fail2ban-client ping
如果有響應:Server replied: pong,表示成功。
測試暴力破解防護是否有效:用錯誤的密碼來用SSH連線到伺服器模擬一個暴力破解攻擊
檢視fail2ban日誌:tail -f /var/log/fail2ban.log
####3.檢視fail2ban當前活動的監獄列表:
fail2ban-client status
####4.檢視fail2ban指定監獄狀態(例如ssh-iptables):
fail2ban-client status ssh-iptables

Status for the jail: ssh-iptables
|- Filter
|  |- Currently failed:	1
|  |- Total failed:	92
|  `- File list:	/var/log/secure
`- Actions
   |- Currently banned:	3
   |- Total banned:	3
   `- Banned IP list:	116.31.116.52 113.195.145.52 192.99.210.174

哈哈,已經拉黑了3個IP。

5.設定 Fail2ban 自動啟動

systemctl enable fail2ban

每個IP在幾次嘗試後放棄,切換為其他IP(因為Linux有登入失敗N次自動鎖定當前使用者的機制),所以這種防護效果有限,最好還是用證書登入。現實世界中一個IP代表一臺主機,這麼多機器,是怎麼被人控制的呢?

3.更改sshd服務埠號

ssh預設是22埠,如果改為其他埠可以更安全一些。

修改SSHD服務的配置檔案

vim /etc/ssh/sshd_config

找到下面這一行,把行首的 # 註釋符號去掉,埠號改成你想用的即可:

 #Port 22 

例如:

Port 2222

在 vim 編輯器中輸入 :wq 儲存退出

重啟 SSHD 服務

根據自己的機器重啟服務,我用的CentOS命令為:

systemctl restart sshd

當然你的也可能是:service sshd restart

用新埠號重新登入即可

這裡如果無法登入,可能是防火牆把你的新埠號給過濾了,需要設定 iptables 開啟對於埠。如果是雲伺服器,可能還需要設定安全組。

4.殭屍網路跟IRC

殭屍網路(Botnet,Robot network)

從FreeBuf上看到一篇文章,把我給科普了一下,連結如下:
http://www.freebuf.com/articles/system/113690.html

殭屍網路:黑客用一臺臺受控制的計算機(肉雞)組成的網路。通過控制伺服器(Command and Control Server,C&C,C2)可以操控每一個節點。數量巨大的節點同時訪問指定伺服器,即DDoS攻擊(DDoS,Distributed Denial of Service)。

控制伺服器是整個網路的核心,負責執行黑客的指令,控制肉雞的行為。控制伺服器與肉雞之間通訊通常用IRC協議,這又是什麼鬼?

4.IRC協議

IRC(Internet Relay Chat)是一種網際網路聊天協議,速度快,頻寬佔用小,使用者可以在頻道(Channel)群聊(需要伺服器)或直接一對一聊天(可以不經過伺服器)。

so,控制伺服器就是IRC伺服器,每臺肉雞就是IRC客戶端,登入的IRC伺服器。黑客通過控制伺服器向肉雞下達指令。

每個肉雞通常至少開兩個執行緒:一個負責和IRC伺服器通訊接受指令,另一個則通過埠掃描嘗試感染其他機器。

常用的攻擊方式是UDP攻擊,它比TCP型別的攻擊更難防,因為TCP是需要建立連線的,很容易被IDS/IPS裝置RST,也很容易通過設定協議棧Syn Cookies遮蔽掉攻擊包。------PS:這裡暫時還不懂。。。

5.總結一下

有一部分人專門做這種生意:控制大批計算機,同時訪問某伺服器導致其癱瘓或暴力破解各種密碼。有些攻擊是有針對性的,有些完全是隨機的埠掃描。現在只能束手無策。。。待我好好研究研究再說。

相關文章