春江暮客

春江暮客的个人学习分享网站

使用docker部署蜜罐记录ssh登陆密码

2019-10-21 技术
使用docker部署蜜罐记录ssh登陆密码

今天登录服务器时发现 SSH 有持续被爆破的记录。更稳妥的处理方式不是直接动线上 OpenSSH,而是先把真实 SSH 服务迁移到其他端口,再单独放一个蜜罐容器监听 22 端口,用来观察爆破来源、用户名和弱密码尝试。

本文只讨论防御侧的日志采集与环境隔离,不涉及反向登录或进一步利用。整个流程是:先保护真实 SSH,再用 Docker 跑一个 SSH 蜜罐,最后分析采集到的日志。

本人环境centos7,ubuntu有所不同,自己根据环境可能需要更换某些环境相关参数。

主要步骤:

  1. 修改sshd服务端口
  • 修改sshd服务默认端口
  • 关闭selinux
  • 修改sshd配置文件,重启ssh服务
  1. 部署ssh蜜罐docker
  • 安装docker,启动docker服务
  • 编译ssh蜜罐docker,运行蜜罐

开始前先确认

  1. 你还能通过新的 SSH 端口正常登录服务器
  2. 云安全组或防火墙已经放行新的管理端口
  3. 蜜罐只用于观察和记录,不要把它当成真实 SSH 服务使用

修改sshd服务端口

修改sshd服务默认端口

直接修改ssh配置文件/etc/ssh/sshd_config,找到#Port 22这一项并修改,这里改为2222

vim /etc/ssh/sshd_config

如图: ssh端口修改

关闭selinux

编辑/etc/selinux/config关闭selinux

vim /etc/selinux/config

修改为SELINUX=disabled

重启系统

shutdown -r now

sestatus可查看selinux状态 如果显示 SELinux status: disabled 则selinux已经关闭成功

重启ssh服务


systemctl restart sshd.service

如果出现这种错误请回到上面关闭linux

使用

netstat -nlp|grep 222

查看ssh服务启动情况 sshd_port_change_success则说明sshd服务修改成功

如果你的系统还开启了云厂商安全组或 firewalld,也记得同步放行新端口,否则重启 SSH 之后可能直接把自己锁在外面。

部署ssh蜜罐docker

安装docker并启动docker

yum update -y
yum install docker -y
systemctl start docker.service

更新yum并安装运行docker

建立第一个服务器并记录信息

使用github上的droberson/ssh-honeypot的ssh蜜罐部署docker

 git clone https://github.com/random-robbie/docker-ssh-honey
 cd docker-ssh-honey/
 docker build . -t local:ssh-honepot
 docker run -itd --name ssh-honeypot -p 22:22 local:ssh-honepot

这里首先使用docker建立一个ssh蜜罐的image,然后把docker蜜罐中的22端口映射到本地22端口,前面修改自身ssh端口就是为了防止与这里蜜罐开放的端口冲突 使用命令查看本地22端口开放情况

netstat -nlp|grep 22

如何验证蜜罐是否工作正常

建议至少检查 3 件事:

  1. 本机 22 端口是否已经由容器接管
  2. docker ps 能否看到 ssh-honeypot 正常运行
  3. docker logs 是否已经开始出现扫描或连接记录

例如:

docker ps
docker logs --tail 20 ssh-honeypot

接下来就是查看蜜罐获取到的用户名和密码了 第一种命令行查看

docker logs -f $(docker ps -f name=ssh-honeypot -q) | grep -v 'Error exchanging' | head -10

第二种把日志保存在日志文件中,下次再来查看有哪些有意思的东西。


docker logs -f $(docker ps -f name=ssh-honeypot -q) | grep -v 'Error exchanging' | awk '{print $6, $7, $8}' >> /root/ssh_name_pass.log

以后分析记录到的ssh爆破密码只需要处理日志文件ssh_name_pass.log了。

一天后查看ssh登陆记录 ssh_login_record

shell分析登陆ip及用到的密码

cat /root/ssh_name_pass.log|grep -v ssh- |grep -v Sess|awk '{print $1}'|sort |uniq -c  ##查看登陆ip及次数

cat /root/ssh_name_pass.log |grep -v ssh-|grep -v Sess|awk '{print $3}'|sort > /root/pass.txt  ###保存对方登陆ssh的密码

#cd ~ && tail pass.txt

知道了对方ip以及扫描用到的密码 ssh_login_ip

这是登陆密码查看

cd ~ && tail pass.txt

ssh_login_pass

常见问题

1. 改完 SSH 端口后连不上服务器

优先检查:

  1. sshd_config 是否真的生效
  2. 安全组或防火墙是否放行新端口
  3. SELinux 或系统策略是否仍在拦截

2. 蜜罐容器启动了,但 22 端口没有监听

通常是端口冲突,说明真实 SSH 还在占用 22 端口,或者 Docker 端口映射失败。

3. 日志一直没有数据

先确认公网 22 端口确实对外暴露,并且容器日志命令读取的是正确容器名。

总结

到这就全部结束了,本文从ssh被人爆破开始,然后使用docker部署ssh蜜罐获取登陆到本机ssh的用户名和密码。相对与使用patch打补丁的方式来说是比较简单的方式,而且可以避免本机用户信息被记录,是在是个好方法。当然真正来说保护ssh的方式是

  1. 设置ssh秘钥,禁止密码登陆
  2. 在安全组上限制只有本机ip可以访问远程端口

当然这么安全就没有办法水这篇文章了。。。

延伸阅读

友情链接

其它