玖叶教程网

前端编程开发入门

网络安全与防御-OpenSSH用户名枚举及其检测方法

前言


当你有一台云主机,而你又开放了SSH端口,那么请一定要注意及时升级OpenSSH版本。不然有可能因为OpenSSH版本漏洞导致主机被入侵,从而造成你的数据泄露危险。


今天以一个小脚本,来跟大家分享下一个之前的安全漏洞问题,教你如何检测服务器的OpenSSH版本漏洞,希望大家喜欢。



漏洞说明


OpenSSH 7.7前存在一个用户名枚举漏洞,服务器在接收到畸形的认证请求包时,会根据用户名的存在与否给出不同的响应,由此导致通过SSH服务枚举服务器的用户名。


通过该漏洞,攻击者可以判断某个用户名是否存在于目标主机中。


具体版本影响范围:

OpenSSH >=2.3&&<=7.7


如何查看服务器SSH版本


在服务器上执行这个命令,就可以看到是不是在漏洞版本范围内。这里我拿了一台没有升级的服务器,来进行演示。

# ssh -V

OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013


如何进行模拟检测是否有漏洞


这里以Python2.7版本为例,请注意不是Python3.X。


第一步:安装指定的第三方库版本

# pip install paramiko==2.0.8


第二步:编写一个脚本ssh_checkusername.py,脚本如下图所示:



第三步:按照脚本的语法进行执行


语法:

python ssh_checkusername.py ip username –port 22


假设我当前主机有一个用户名aiwm,不存在用户名aiwm1。


* 当我们尝试使用不存在的用户名来检测

# python test.py 10.3.3.6 --port 22022 aiwm1
[*] Invalid username

从这里可以看到服务器是没有这个用户,所以报“Invalid username”无效的用户名。


* 当我们尝试使用存在的用户名来检测

# python test.py 10.3.3.6 --port 22022 aiwm
[+] Valid username

从这里可以看到服务器是有这个用户,所以报“Valid username”存在这个用户名。


这时候我们可以分别看系统日志,可以看到攻击者的IP:10.3.21.12。

# tail -F /var/log/secure
Jul  6 09:09:03 centos6-dev6 sshd[10528]: error: buffer_get_ret: trying to get more bytes 1907 than in buffer 564
Jul  6 09:09:03 centos6-dev6 sshd[10528]: error: buffer_get_string_ret: buffer_get failed
Jul  6 09:09:03 centos6-dev6 sshd[10528]: fatal: buffer_get_string: buffer error
Jul  6 09:09:19 centos6-dev6 sshd[10530]: Invalid user aiwm1 from 10.3.21.12
Jul  6 09:09:19 centos6-dev6 sshd[10531]: input_userauth_request: invalid user aiwm1
Jul  6 09:09:19 centos6-dev6 sshd[10531]: Connection closed by 10.3.21.12
Jul  6 09:18:14 centos6-dev6 sshd[11721]: Accepted password for aiwm from 10.3.21.12 port 50794 ssh2
Jul  6 09:18:14 centos6-dev6 sshd[11721]: pam_unix(sshd:session): session opened for user aiwm by (uid=0)
Jul  6 09:18:14 centos6-dev6 su: pam_unix(su-l:session): session opened for user root by aiwm(uid=503)


升级SSH版本后问题解决


升级前的效果是:

  • 如果服务器存在的用户,则脚本会返回Valid username。
  • 如果服务器不存在的用户,则脚本会返回Invalid username。

如果升级ssh版本之后,不管存不存在都会返回Valid username。

  • 如果服务器存在的用户,则脚本会返回Valid username。
  • 如果服务器不存在的用户,则脚本会返回Valid username。


总结


对于一些基础的入口,我们要不断升级我们的版本,以免被渗透,及时加固,才是王道。


希望这篇文章可以让你们有更加安全的意识。



我是testerzhang,喜欢本文的童鞋,可以关注我+收藏,不明白的地方也可以评论留言。


发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言