前言
这几年信息安全要求很高,奈何口号响亮掩盖不了我们技术基础依然很低的事实,加上风口烧钱和政绩工程等因素,于是就诞生了一些乱象,其中一个就是安全扫描胡乱标记,这里面的典型就是OpenSSH的漏洞扫描报告。
比如,OpenSSH社区说我们最近修复了某个漏洞,发布补丁到新版本OpenSSH 9.7。然后像红帽,SUSE,欧拉,Ubuntu这些大公司或者Debian,ARCH等社区的发行版会第一时间把相关补丁打入自己的升级包,但是按照发行规则,命名就跟随大版本,如RHEL7/CentOS7新的升级包可能是openssh-server-7.4p1-23.el7_9.x86_64,也就是说版本继续在7.4后面增加小版本号。
这时候某些漏洞扫描工具就闪亮登场了,它们无力去验证对端的ssh服务到底有没有这个漏洞,但是sshd的版本号是谁都可以看到的啊,你是7.4,低于9.7,那你这个OpenSSH就是有漏洞。
这种扫描版本号来判断是否存在漏洞的方式并非不可行,只要去该Linux发行版的官网,查询下修补漏洞记录就可以知道某个版本号是否修复了某个漏洞,可是直到现在,这么一个简单的事情却没见到有人做。可能对安全扫描来说,能多找出一些漏洞更重要吧,哪怕这些漏洞根本不存在。
于是系统管理员花时间去修补不存在或者不必处理的漏洞,有时候,为了修补一个不存在的漏洞,还要升级OpenSSL,导致更多系统和应用的故障。
操作
下面的操作很危险,可能导致ssh远程链接失败,所以不要贸然在生产系统尝试。任何情况下操作请确保有另一个登陆系统的办法,比如云平台的novnc/vnc等等。
下面以Debian 11为例,其OpenSSH的版本是8.4p1-5+deb11u3
$ dpkg -l openssh-server
期望状态=未知(u)/安装(i)/删除(r)/清除(p)/保持(h)
| 状态=未安装(n)/已安装(i)/仅存配置(c)/仅解压缩(U)/配置失败(F)/不完全安装(H)/触发器等待(W)/触发器未决(T)
|/ 错误?=(无)/须重装(R) (状态,错误:大写=故障)
||/ 名称 版本 体系结构 描述
+++-==============-=================-============-=================================================================
ii openssh-server 1:8.4p1-5+deb11u3 amd64 secure shell (SSH) server, for secure access from remote machines
$ strings /usr/sbin/sshd | grep OpenSSH
OpenSSH_8.4p1 Debian-5+deb11u3
OpenSSH_8.4
OpenSSH_2.*,OpenSSH_3.0*,OpenSSH_3.1*
OpenSSH_2*,OpenSSH_3*,OpenSSH_4*
OpenSSH_7.0*,OpenSSH_7.1*,OpenSSH_7.2*,OpenSSH_7.3*,OpenSSH_7.4*,OpenSSH_7.5*,OpenSSH_7.6*,OpenSSH_7.7*
OpenSSH_3.*
OpenSSH_5*
OpenSSH_6.6.1*
OpenSSH_6.5*,OpenSSH_6.6*
OpenSSH*
OpenSSH_8.4p1
我们把这个8.4改成9.5
在本服务器上安装hexedit,这是一个十六进制编辑器。
创建副本并修改
备份和复制sshd的执行文件,通常是/usr/sbin/sshd
cp /usr/sbin/sshd /usr/sbin/sshd.$(date +%Y%m%d-%H%M)
cp /usr/sbin/sshd /tmp/sshd
下面用hexedit修改/tmp/sshd的版本号,命令中的--color不是必须的
hexedit --color /tmp/sshd
下图两个区域,区域1是十六进制显示,2是文本显示,可以使用tab键在两个区域之间切换,我们切换到文本区域
按键Ctrl+s,查找OpenSSH_8
使用方向键,移动光标到OpenSSH_8.4p1的数字8上面
直接输入数字9,同样把小数点后面的4改为5
继续搜索OpenSSH_8和修改,每次修改都要保存
一共有三处,全部修改完成后按键Ctrl+x退出
替换
用这个修改过的/tmp/sshd替换/usr/sbin/sshd
mv /usr/sbin/sshd /usr/sbin/sshd.$(date +%Y%m%d-%H%M) && cp /tmp/sshd /usr/sbin/sshd
再用openssh客户端测试下,参数-v查看详情,客户端还是8.4p1,但是服务器已经是9.5p1了。
后记
无论如何,关注并安装发行版的最新openssh,这是大厂的实力和信誉。
用白名单限制访问IP地址和账户。