ssh被暴力猜解登录密码,利用pandas简单分析ssh登录失败记录

本人为了学习和使用VPS因此手中长期配置一到两台VPS,没想到这点苍蝇肉也成了黑客眼里的肥肉。

近来一个月发现被人正在暴力猜解ssh登录密码,心想,这准是有人想要拿shell想要把这点苍蝇肉都想占为己有。然而我也不是眼里能揉这种沙子的人。于是就有了分析一下登录失败记录信息的念头。首先我们执行命令:

lastb >>faillog.txt

将所有登录失败信息导出来,然后我们下载faillog.txt文件到本地目录,就地在此目录中开vscode或jupyter并启用python环境。

我们的faillog.txt文件是一个类似csv的一个文件,只是并非用逗号分割,而是用空格分割,格式如下:

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按一个或一个以上空格作为分隔符来读取为DataFrame。我们下一步就要添加第一行作为整个表格的表头:

于是前几行就成了

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)    

注意,表头要和下面的数据列一一对应起来,表头的列数要和数据的列数相同。需要注意的是,我们因为已经决定以空格作为表分隔符,那么只要有空格分割的部分就要当做一个列。比如“-”前后有空格,所以也要当成一个数据列,大不了后面我们去掉一些用不到的列就是了。

安装pandas:

$ pip install pandas

接下来我们开始导入到DataFrame,我们用read_csv或read_table以\s+模式读入:

import pandas as pd

csvfile = pd.read_csv("faillog.txt",sep="\s+")
data = pd.DataFrame(csvfile, columns=['user', 'sourceip'])
data.head(15)

如之前我们所加的列名,我们只需要猜解时登录的用户名和来源IP地址读入表中,我们只需要将这两个列的列名作为DataFrame的columns的参数加进来就可以了。

执行了data.head(15)这句话以后,就会以表格的形式打印前15行数据。

 usersourceip
0root218.92.0.206
1root181.142.251.23.b
2xml212.64.59.227
3root218.92.0.206
4xml212.64.59.227
5root218.92.0.206
6root218.92.0.206
7root218.92.0.206
8lxkh-125-44.a400.pr
9root218.92.0.206
10lxkh-125-44.a400.pr
11root120.92.88.227
12root218.92.0.206
13shashi106.54.205.236
14shashi106.54.205.236

我们需要统计下,猜解次数最多的前10名IP地址:

ipcounts = data.loc[:,'sourceip'].value_counts()
headip = pd.DataFrame(ipcounts.head(10))
headip

我们通过loc算符读取所有行以及sourceip这一列,使用value_counts()函数进行频次统计,然后输出暴力猜解前10名IP:

 sourceip
218.92.0.20682882
218.92.0.20781502
49.88.112.7324522
112.85.42.7216506
112.85.42.9414506
49.88.112.748302
49.88.112.706138
58.198.177.405204
49.88.112.714092
112.85.42.1953980

接下来我们统计下一共多少IP在猜解攻击:

ipcounts.shape

输出为

5430

再看一下所有的这些IP总共进行了多少次暴力猜解攻击:

csvfile.shape

输出为

783627

 

也就是说,这一个月里有5430个IP(肉鸡)在尝试分布式暴力猜解我这个小小的VPS的密码,截止到收集数据为止一共猜解了78万余次,按照25天计,平均每天每分钟21.7次猜解尝试,真的是让在下不胜惶恐以至汗颜。这是准备把我的这台苍蝇肉VPS非要拿下不可?

算了,还是换掉SSH端口+安装Fail2ban,顺便改个超强密码以绝后患。

故事就这么结束了……

 

才怪!

我还是很好奇,这些黑客究竟都尝试了哪些用户名进行密码猜解?

所以我还是手欠的统计了一下被尝试猜解最多的用户名排名:

usernamecounts = data.loc[:,'user'].value_counts()
tb_usernamecounts = pd.DataFrame(usernamecounts.head(60))
tb_usernamecounts

这回我输出了前60名,够在这里阅读的读者做参考了

 user
root425035
admin28574
test14836
ubuntu11050
postgres10580
user6964
oracle5108
deploy4992
git4568
ftpuser4310
guest2160
hadoop2124
test11522
nagios1172
ubnt1024
support1000
teamspea988
test2946
tester936
server898
teste868
minecraf720
testftp718
testuser708
testing680
tomcat676
firefart674
jenkins662
backup648
mysql641
user1632
usuario618
pi606
develope584
zabbix576
administ544
dev544
ts544
www544
student534
ts3524
apache520
test3504
webmaste488
web488
demo480
info472
ansible464
Admin448
www-data444
steam444
sinusbot440
tom432
bot428
odoo428
Administ416
admin1410
vnc400
uftp388
1234384

毫无疑问被猜解 的用户名首当其冲的就是root,因为root不但是最高权限也是开发者最常用的ssh登录用户名。

然后就是

root
admin
test
ubuntu
postgres
user
oracle
deploy
git
ftpuser
guest
hadoop

基本上就跟开发者习惯用的用户名都卯上了…

还没说完呢,如果查查看我前面的那个IP排名的话,你会发现很多东西,比如这些IP的归属地等等。

我在查这些IP的时候意外发现了用于记录IP地址数据库的站点,里面记录了很多受害者所受到攻击的来源IP,都在这个网站上记录了。

https://ip-46.com/

查一下,你就知道是哪来的黑客在攻击你的VPS了。

对于企业来说,收集这些数据有个巨大的好处,就是收集安全大数据,为自己的网站服务进行防护可有的放矢的辨认和识别这些黑客用户,虽然算不上是金矿,但是也算是一种黑矿,保护自己企业服务的黑矿。

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值