您的位置  > 互联网

如何处理官方未解决的命令注入漏洞(CVE-2020-15778)源码分析

将本地文件复制到远程机器,本来后面跟的是文件名,但是由于未正确过滤其中的特殊字符导致命令注入。scp允许在scp.c远程功能中注入命令,攻击者可利用该漏洞使用反引号执行任意命令。

源码分析

通过分析scp的源码不难发现,scp没有对文件名进行过滤,会导致利用文件名进行命令行注入,而目前仅禁用ssh无法限制scp。 攻击者可以在文件名中添加反引号“**”,这将导致服务器崩溃或重新启动,从而导致DOS攻击。 对于该漏洞,如果密码长期更改且不泄露,造成危害的可能性较小。 但是对于系统安全性的要求往往很高,安全软件也会扫描这个漏洞。 下面说说解决办法。

禁用SCP

关于如何禁用scp,网上一般的建议是直接禁用。 首先,无论对业务是否有影响,勇气删除后,服务器的所有ssh操作指令都将失效,影响服务器的可操作性。 在这里我们可以找到scp的位置并阻止其权限。 scp 将不再具有可执行权限。 即使该漏洞被利用,也会因程序无法执行而消除危害。

whereis scp #查找scp所在目录
cd /usr/bin
chmod -x scp #移除执行权限

避免漏洞扫描

我们上面已经去掉了scp的权限,但是漏洞扫描软件仍然会诊断安全问题。 事实上,scp 已不再起作用,并且该漏洞已被修复。 扫描软件不会扫描文件的执行权限,而只会比较网络上已经披露的漏洞,因此仍然会扫描错误。 这里,我们可以通过伪装SSH版本号来欺骗扫描软件。 注意! 版本号的名称必须符合格式。 自定义格式的版本号生效后,可能会导致sshd服务出现错误。

sed -i 's/OpenSSH_8.8/OpenSSH_x.x/g' /usr/sbin/sshd   
sed -i 's/OpenSSH_8.8/OpenSSH_x.x/g' /usr/sbin/ssh   
sshd -v	
ssh -v		

对比前后,SSH的版本号被隐藏。
修改后,漏洞扫描软件将扫描不到问题。本漏洞成功被修复,被禁用的scp也可以使用rsync进行替代。