ssh暴力攻击可以说是一种非常好的字典来源, 所以我做了个工具当诱饵来收集字典.
既然是诱饵, 那就叫baithook吧
呃, 我修改openssh的源码, 然后打包了docker镜像, 在这篇文章记录一下用法.
首先放上github的链接, 仓库里是构建用的脚本.
然后是docker hub的链接.
快速上手
可以用如下命令
docker -run -p 2222:22 -itd catium/baithook:latest
直接拉取打包好的镜像运行.
一定得保证容器的22
端口通过某种方式转发到公网了才会有攻击源上钩.
原理
修改了openssh源码里面验证身份的函数, 然后把尝试的用户名和密码都写进文件, 然后拒绝所有连接.
拒绝连接是为了防止万一真的被被攻破了就寄了…
就算寄了也很难实施容器逃逸吧
收获
容器运行后, 在sshd第一次被尝试连接的时候会在容器根目录生成/dict.txt
和/addr.txt
, 分别是攻击的字典和攻击源ip地址, 攻击源地址可以加入宿主机黑名单什么的.
运行一段时间后文件可能会很大, 建议定期归档.
我挂了一晚上就收了好几千组, 不过质量不是特别高, 有一些重复的, 回头可以写个脚本去重.
拓扑
建议:
把容器的22
端口转发到宿主机2222
端口, 宿主机ssh server仍然使用22
端口.
把宿主机2222
端口转发至公网22
端口, 作为诱饵露出.
令宿主机22
端口仅对安全的网络开放, 比如内网.
构建
如果您希望再修改点什么, 可以修改github仓库下载下来压缩包的build.sh
文件.
里面定义了编译后的安装目录, 还有要基于哪个版本的openssh修改.
现在的构建方式是, 从镜像站拉某个版本的openssh源码包, 解压之后用预先修改过关键函数的文件替换源码同名文件, 然后编译安装.
构建后会生成一个目录以及一个/run.sh
, 在容器直接把/run.sh
作为启动进程就行.
已知的问题: 在Ubuntu环境下可能会缺少libcrypto库而无法编译, 编译出来也不能正常运行. 最好在CentOS环境编译.
已修复, 查看