ssh被暴力猜解登录密码,利用pandas简单分析ssh登录失败记录
本人為了學(xué)習(xí)和使用VPS因此手中長期配置一到兩臺(tái)VPS,沒想到這點(diǎn)蒼蠅肉也成了黑客眼里的肥肉。
近來一個(gè)月發(fā)現(xiàn)被人正在暴力猜解ssh登錄密碼,心想,這準(zhǔn)是有人想要拿shell想要把這點(diǎn)蒼蠅肉都想占為己有。然而我也不是眼里能揉這種沙子的人。于是就有了分析一下登錄失敗記錄信息的念頭。首先我們執(zhí)行命令:
lastb >>faillog.txt將所有登錄失敗信息導(dǎo)出來,然后我們下載faillog.txt文件到本地目錄,就地在此目錄中開vscode或jupyter并啟用python環(huán)境。
我們的faillog.txt文件是一個(gè)類似csv的一個(gè)文件,只是并非用逗號(hào)分割,而是用空格分割,格式如下:
root ssh:notty 218.92.0.206 Tue Apr 28 22:16 - 22:16 (00:00) root ssh:notty 181.142.251.23.b Tue Apr 28 22:16 - 22:16 (00:00) xml ssh:notty 212.64.59.227 Tue Apr 28 22:16 - 22:16 (00:00) root ssh:notty 218.92.0.206 Tue Apr 28 22:16 - 22:16 (00:00) xml ssh:notty 212.64.59.227 Tue Apr 28 22:16 - 22:16 (00:00) root ssh:notty 218.92.0.206 Tue Apr 28 22:16 - 22:16 (00:00) root ssh:notty 218.92.0.206 Tue Apr 28 22:16 - 22:16 (00:00) root ssh:notty 218.92.0.206 Tue Apr 28 22:16 - 22:16 (00:00) lxk ssh:notty h-125-44.a400.pr Tue Apr 28 22:16 - 22:16 (00:00)我們需要令pandas按一個(gè)或一個(gè)以上空格作為分隔符來讀取為DataFrame。我們下一步就要添加第一行作為整個(gè)表格的表頭:
于是前幾行就成了
user channel sourceip weekday month day starttime to endtime during root ssh:notty 218.92.0.206 Tue Apr 28 22:16 - 22:16 (00:00) root ssh:notty 181.142.251.23.b Tue Apr 28 22:16 - 22:16 (00:00) xml ssh:notty 212.64.59.227 Tue Apr 28 22:16 - 22:16 (00:00) root ssh:notty 218.92.0.206 Tue Apr 28 22:16 - 22:16 (00:00) xml ssh:notty 212.64.59.227 Tue Apr 28 22:16 - 22:16 (00:00) root ssh:notty 218.92.0.206 Tue Apr 28 22:16 - 22:16 (00:00) root ssh:notty 218.92.0.206 Tue Apr 28 22:16 - 22:16 (00:00) root ssh:notty 218.92.0.206 Tue Apr 28 22:16 - 22:16 (00:00)注意,表頭要和下面的數(shù)據(jù)列一一對(duì)應(yīng)起來,表頭的列數(shù)要和數(shù)據(jù)的列數(shù)相同。需要注意的是,我們因?yàn)橐呀?jīng)決定以空格作為表分隔符,那么只要有空格分割的部分就要當(dāng)做一個(gè)列。比如“-”前后有空格,所以也要當(dāng)成一個(gè)數(shù)據(jù)列,大不了后面我們?nèi)サ粢恍┯貌坏降牧芯褪橇恕?/p>
安裝pandas:
$ pip install pandas接下來我們開始導(dǎo)入到DataFrame,我們用read_csv或read_table以\s+模式讀入:
import pandas as pdcsvfile = pd.read_csv("faillog.txt",sep="\s+") data = pd.DataFrame(csvfile, columns=['user', 'sourceip']) data.head(15)如之前我們所加的列名,我們只需要猜解時(shí)登錄的用戶名和來源IP地址讀入表中,我們只需要將這兩個(gè)列的列名作為DataFrame的columns的參數(shù)加進(jìn)來就可以了。
執(zhí)行了data.head(15)這句話以后,就會(huì)以表格的形式打印前15行數(shù)據(jù)。
| root | 218.92.0.206 |
| root | 181.142.251.23.b |
| xml | 212.64.59.227 |
| root | 218.92.0.206 |
| xml | 212.64.59.227 |
| root | 218.92.0.206 |
| root | 218.92.0.206 |
| root | 218.92.0.206 |
| lxk | h-125-44.a400.pr |
| root | 218.92.0.206 |
| lxk | h-125-44.a400.pr |
| root | 120.92.88.227 |
| root | 218.92.0.206 |
| shashi | 106.54.205.236 |
| shashi | 106.54.205.236 |
我們需要統(tǒng)計(jì)下,猜解次數(shù)最多的前10名IP地址:
ipcounts = data.loc[:,'sourceip'].value_counts() headip = pd.DataFrame(ipcounts.head(10)) headip我們通過loc算符讀取所有行以及sourceip這一列,使用value_counts()函數(shù)進(jìn)行頻次統(tǒng)計(jì),然后輸出暴力猜解前10名IP:
| 82882 |
| 81502 |
| 24522 |
| 16506 |
| 14506 |
| 8302 |
| 6138 |
| 5204 |
| 4092 |
| 3980 |
接下來我們統(tǒng)計(jì)下一共多少IP在猜解攻擊:
ipcounts.shape輸出為
5430再看一下所有的這些IP總共進(jìn)行了多少次暴力猜解攻擊:
csvfile.shape輸出為
783627?
也就是說,這一個(gè)月里有5430個(gè)IP(肉雞)在嘗試分布式暴力猜解我這個(gè)小小的VPS的密碼,截止到收集數(shù)據(jù)為止一共猜解了78萬余次,按照25天計(jì),平均每天每分鐘21.7次猜解嘗試,真的是讓在下不勝惶恐以至汗顏。這是準(zhǔn)備把我的這臺(tái)蒼蠅肉VPS非要拿下不可?
算了,還是換掉SSH端口+安裝Fail2ban,順便改個(gè)超強(qiáng)密碼以絕后患。
故事就這么結(jié)束了……
?
才怪!
我還是很好奇,這些黑客究竟都嘗試了哪些用戶名進(jìn)行密碼猜解?
所以我還是手欠的統(tǒng)計(jì)了一下被嘗試猜解最多的用戶名排名:
usernamecounts = data.loc[:,'user'].value_counts() tb_usernamecounts = pd.DataFrame(usernamecounts.head(60)) tb_usernamecounts這回我輸出了前60名,夠在這里閱讀的讀者做參考了
| 425035 |
| 28574 |
| 14836 |
| 11050 |
| 10580 |
| 6964 |
| 5108 |
| 4992 |
| 4568 |
| 4310 |
| 2160 |
| 2124 |
| 1522 |
| 1172 |
| 1024 |
| 1000 |
| 988 |
| 946 |
| 936 |
| 898 |
| 868 |
| 720 |
| 718 |
| 708 |
| 680 |
| 676 |
| 674 |
| 662 |
| 648 |
| 641 |
| 632 |
| 618 |
| 606 |
| 584 |
| 576 |
| 544 |
| 544 |
| 544 |
| 544 |
| 534 |
| 524 |
| 520 |
| 504 |
| 488 |
| 488 |
| 480 |
| 472 |
| 464 |
| 448 |
| 444 |
| 444 |
| 440 |
| 432 |
| 428 |
| 428 |
| 416 |
| 410 |
| 400 |
| 388 |
| 384 |
毫無疑問被猜解 的用戶名首當(dāng)其沖的就是root,因?yàn)閞oot不但是最高權(quán)限也是開發(fā)者最常用的ssh登錄用戶名。
然后就是
root admin test ubuntu postgres user oracle deploy git ftpuser guest hadoop基本上就跟開發(fā)者習(xí)慣用的用戶名都卯上了…
還沒說完呢,如果查查看我前面的那個(gè)IP排名的話,你會(huì)發(fā)現(xiàn)很多東西,比如這些IP的歸屬地等等。
我在查這些IP的時(shí)候意外發(fā)現(xiàn)了用于記錄IP地址數(shù)據(jù)庫的站點(diǎn),里面記錄了很多受害者所受到攻擊的來源IP,都在這個(gè)網(wǎng)站上記錄了。
https://ip-46.com/
查一下,你就知道是哪來的黑客在攻擊你的VPS了。
對(duì)于企業(yè)來說,收集這些數(shù)據(jù)有個(gè)巨大的好處,就是收集安全大數(shù)據(jù),為自己的網(wǎng)站服務(wù)進(jìn)行防護(hù)可有的放矢的辨認(rèn)和識(shí)別這些黑客用戶,雖然算不上是金礦,但是也算是一種黑礦,保護(hù)自己企業(yè)服務(wù)的黑礦。
?
?
?
?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的ssh被暴力猜解登录密码,利用pandas简单分析ssh登录失败记录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IOS 实现美图秀秀
- 下一篇: 特征阻抗出现波动的原因