01
因由
如今 较盛行 的SSH蜜罐有中交互的kippo cowire ,高交互的honssh,都是基于twisted框架。在用这些蜜罐的时间 想起来之前看python黑帽子用过paramiko库,非常好用,既能当ssh client又能当ssh server ,模块的文档也非常具体 ,以是 产生了基于paramiko写一个SSH高交互蜜罐的想法 。
02
SSH蜜罐
低交互蜜罐重要 实现了部分 SSH协议,用于记录 黑客爆破ssh的暗码 和入侵谍报 。
中交互蜜罐会给黑客模仿 浩繁 下令 和返回结果 ,但是总是可以找到漏洞 ,到达 一条下令 辨认 的结果 。
高交互蜜罐要将体系 做的更加逼真 ,以是 用了一个真实存在的操纵 体系 用于实行 黑客的下令 ,但是SSH通讯 又是加密的,以是 蜜罐必要 可以或许 署理 SSH并记录 黑客的交互。
它必要 做到:
完备 的提供ssh各项功能
获取入侵者要实行 的交互或下令
与其他主机交互并实行 下令
将得到的结果 返回给入侵者
记录 入侵者的全部 举动
及时 关照 蜜罐管理职员
03
高交互要求
TCP服务器
paramiko模块提供ssh server服务必要 一个传入已经创建 毗连 的socket因此直接利用 了python自带的SocketServer模块的多线程tcp服务器ThreadingTCPServer
SSH服务
通过重写paramiko的ServerInterface类的各个方法,使一个正常的SSH Server变为一个SSH蜜罐蜜罐要提供完备 的SSH服务 ,也就是至少要提供:
认证(auth)
只提供password方式的认证
获取Shell并实行 下令 (shell)
最常用的ssh利用 方式
单次实行 下令 (exec)
不会向体系 哀求 shell,只实行 单条下令
雷同 ssh root@server ‘netstat -autpn’
scp下令 实际 上利用 的是exec通道
因此可将scp传输的文件从exec通讯 中分析 出来
正向端口转发(direct)
SSH服务方向与端口转发服务方向雷同
ssh -Nf -L 8000:localhost:80 root@server
访问本地 8000即为访问server的80
反向端口转发(reverse)
SSH服务方向与端口服务方向相反
ssh -Nf -R 8000:localhost:80 root@server
访问server的8000即为访问本地 的80
正向SOCKS5署理
SSH服务方向与署理 服务方向雷同
ssh -Nf -D 0.0.0.0:1080 root@server
实际 上署理 每一个毗连 调用一次direct正向端口转发
SFTP服务
由于SSH提供了隧道本领 ,其他不安全的明文协议可基于ssh隧道提供更安全的服务
paramiko提供了subsystem来提供对基于SSH隧道的协议支持
由于大多数SSH服务器都提供了SFTP子体系 ,以是 作为SSH蜜罐SFTP也要支持,还要可以或许 生存 下来黑客上传的文件 。
Wetland
wetland是这个蜜罐的名字,起的比力 随意。
github地点 ——https://github.com/ohmyadd/wetland
Docker
docker作为轻量级假造 化工具,很方便又提供了隔离本领
有些ssh蜜罐利用 docker的python api ,为每一个入侵者创建 一个新的sshd容器
wetland没有采取 如许 的方式,一方面由于 懒。 。另一方面以为 如许 做有些缺点
在wetland公网测试的过程中,发现入侵的每每 是一个团队 ,会从差别 的ip登岸 ,假如 采取 上述的方式很大概 出现两人同时在线却找不到对方的环境 ,如许 会袒露 蜜罐服务 ,以是 wetland简单 的利用 手动创建 的一个sshd容器,不管谁登岸 都能看到前人留下的陈迹 。
须要 时可导出当前的docker容器取证,重修 容器、更换公网ip ,如许 又是一条豪杰 (蜜罐)了
Auth
wetland只采取 了password认证,方便攻击者爆破
服务器返回答应 的认证方式利用 paramiko.ServerInterface的get_allowed_auth方法若认证乐成 会通过output插件关照 管理者,关照 方式我喜好 bearychat ,还可以是email 、短信之类的
Shell
当攻击者认证乐成 后可以哀求 一个shell
此时wetland会另开线程保持攻击者的shell和ssh容器shell间的通讯 。
在转发数据的同时会将其记录 进shell.log中,可通过后 文先容 的playlog脚本重放查察
Exec command
exec request只实行 一条下令 ,会打开三条通道:stdin stdout stderr
假如 下令 立即 实行 完毕,三条通道会直接关闭
scp有本身 的简单 的协议格式 ,并通过这三条通道传输文件
wetland不会在exec通讯 举行 中及时 分析 文件,而是通过playlog脚本分析 出exec.log中攻击者上传的文件,并生存 到相应的文件夹
Direct forward Socks forward
实行 ssh -fN -L 8000:localhost:80 8000:localhost:80 xxx操纵 后 ,实际 只在本地 开启服务器并监听8000端口
当有程序毗连 8000端口时,ssh客户端才会发送一个direct_tcpip_request
当收到一个request,正常的ssh服务器判定 目标 ip的目标 端口(localhost:80)可以毗连 时 ,会创建 两者间的通讯
当收到一个request,wetland蜜罐会向ssh容器发送雷同 的哀求 ,假如 乐成 就创建 并记录 两者间的通讯
Socks署理 与正向端口转发的区别在于 ,署理 每次哀求 访问的ip、端口可以是差别 的
Reverse forward
实行 ssh -fN -R 8000:localhost:80 xxx操纵 后,实际 只在server端监听了8000端口
与正向端口转发雷同 ,wetland只转发并记录 通道中的通讯
SFTP
wetland的sftp模块重要 重写SFTPServerInterface
重要 将入侵者的哀求 翻译为wetland作为sftp客户端的相应函数 ,在ssh容器中实行 并记录
假如 攻击者通过SFTP上传了文件,wetland会别的 生存 一份在download文件夹
Network
ssh署理 的一个弊端 就是,当在ssh容器中查察 网络毗连 ,比如 netstat下令 ,看到的会是wetland主机的IP
当时 意识到题目 后没有想出好的办理 办法,厥后 查察 honssh的wiki发现他已经找到了办理 方案,叫做高级网络设置
具体 操纵 是为每个攻击者创建 一个假造 网卡 ,ip为随机值叫做fake ip
然后利用 iptables的SNAT和DNAT,修改fake ip和ssh容器间tcp 22端口流量的src和dst,其他的通讯 走正常的路由 ,如许 一来ssh容器中看到的ssh毗连 的源地点 和攻击者的ip就一样了
wetland和ssh容器间创建 socket毗连 前,必要 先有一个bind操纵 sock.bind((fake_ip, haker_port))
末了 只管 ifconfig看到的ip是内网的,这也是比力 正常的 ,外网的哀求 都是转发进来的
Playlog Clearlog
由于有的ip只爆破的暗码 或爆破乐成 但没有登岸 实行 下令 ,如许 的日记 还不在少数
util文件夹中的clearlog.py工具,可整理 log文件夹 ,只留下含有实际 操纵 的日记 ,并把用于爆破的账号暗码 会合 整理生存
util文件夹中的playlog.py可以重放入侵者的各种下令 、流量
重放日记 分为四类,shell、exec 、direct、reverse
shell类会输出全部 ssh服务返回的字符,也就是能看到全部 入侵者能看到的字符 ,输出分割为单条下令 ,回车输出下条下令 的结果
exec类会分析 生存 log中全部 通过scp传输的文件,而且 打印全部 的下令 和结果
reverse、direct类会打印出两个方向的通讯 内容
04
安装
可以查察 github上的README ,只必要 安装所需的python库,并选择性的设置 p0f 、关照 插件等额外功能就可以了
05
结果
我摆设 了一个wetland蜜罐在腾讯云学气愤 上,四五天可以捕获 这么多扫描或攻击
wetland蜜罐捕获 的攻击
颠末 clearlog脚本处理 惩罚 后 ,剩下有效 入侵ip
有效 入侵ip
利用 playlog脚本,可以重放exec.log
playlog脚本 重放exec.log
可以看到入侵者下载了一波脚本,每个脚本都是别的 下载一批木马 ,适配了各种架构结果
逆向的小搭档 可以分析一波
本日 看文章发现,360天眼团队已经在六月份陈诉 过46.218.149.85这个法国ip了这个服务器是作为各种恶意程序的下载服务器,微步在线上也有相应记录
这个项目只是当初的一个想法 ,如今 还在渐渐 美满
(泉源 :红客学院)