当你有一台云主机,而你又开放了SSH端口,那么请一定要注意及时升级OpenSSH版本。不然有可能因为OpenSSH版本漏洞导致主机被入侵,从而造成你的数据泄露危险。
今天以一个小脚本,来跟大家分享下一个之前的安全漏洞问题,教你如何检测服务器的OpenSSH版本漏洞,希望大家喜欢。
OpenSSH 7.7前存在一个用户名枚举漏洞,服务器在接收到畸形的认证请求包时,会根据用户名的存在与否给出不同的响应,由此导致通过SSH服务枚举服务器的用户名。
通过该漏洞,攻击者可以判断某个用户名是否存在于目标主机中。
具体版本影响范围:
OpenSSH >=2.3&&<=7.7
在服务器上执行这个命令,就可以看到是不是在漏洞版本范围内。这里我拿了一台没有升级的服务器,来进行演示。
# 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。
对于一些基础的入口,我们要不断升级我们的版本,以免被渗透,及时加固,才是王道。
希望这篇文章可以让你们有更加安全的意识。