Kippo是一个中等交互的SSH蜜罐,提供了一个可供攻击者操作的shell,攻击者可以通过SSH登录蜜罐,并做一些常见的命令操作。当攻击者拿下一台服务器的权限后,很可能会进行小范围的端口探测或者批量的端口扫描,以便横向扩展,控制更多服务器的控制权,因此部署内网SSH蜜罐,把攻击者引诱到蜜罐里来,触发实时的告警,即可让安全人员及时知道已经有攻击者渗透内网、知道哪台服务器被控制、以及攻击者在蜜罐上做了哪些操作。
如何把攻击者引诱到蜜罐里来,除了要看蜜罐是否具备主动欺骗能力外,还要看蜜罐在公司网络中的部署密度。网络安全域通常会要求不同的网段是隔离的,而且攻击者很可能是先在同一网段进行扫描,不会上来就全网扫描。所以如果只有一台蜜罐服务器,很可能无法把攻击者引诱过来,也就不会触发蜜罐的告警,所以理想情况是在所有网段均部署诱捕节点,但如果都用服务器部署的话,又太浪费资源,所以我们通过端口转发的方式,利用现有服务器充当诱捕节点。
一、蜜罐的搭建
1、Kippo
1.1 Kippo的安装
GitHub地址:https://github.com/desaster/kippo
安装环境:centos7
下载代码、安装相关的依赖
1 git clone https://github.com/desaster/kippo.git # 无法运行git命令,请先安装 yum -y install git 2 yum –y install twisted python-zope-interface python-pyasn1 3 yum -y install python-devel mysql-devel 4 yum install -y python2-paramiko 5 pip install twisted==15.2.0 # 无pip命令,请执行 yum -y install python-pip ; 如果提示没有pip包,请先执行yum -y install epel-release。安装twisted时如果提示unable to execute gcc: No such file or directory,运行命令 yum install gcc 6 pip install mysql-python
解压下载的kippo-master.zip
unzip kippo-master.zip
因为kippo不能以root运行,所以新建一个kippo账号
useradd -d /kippo kippo
把kippo文件夹复制到/kippo 目录下面,并更改这个文件夹的所有者
cp -R kippp /kippo/kippo chown -R kipp:kippo kippo
安装mysql
yum install mysql-server # 提示没有mysql-server安装包,请执行wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm
创建数据库和账号
create database kippo; GRANT ALL PRIVILEGES ON kippo.* TO [email protected] IDENTIFIED BY ‘password’;
初始化数据表
mysql -ukippo -p -Dkippo < /kippo/kippo/doc/sql/mysql.sql
在/kippo/kippo下面复制配置文件,并修改相应的配置
cp kipp0.cfg.dist kippo.cfg vim kippo.cfg
启动开始程序 # 如果提示缺少哪些模块,pip install 安装,如缺少Crypto 执行pip install pycrypto,缺少pyasnl.error 执行 pip install pyasnl
sh start.sh
1.2 kippo测试
查看kippo监听的端口,默认2222端口
kippo/data 的userdb.txt 保存了ssh登陆蜜罐的用户名和密码,也可以根据公司实际情况,添加更逼真的SSH账号和弱密码。
用另一台机器SSH登陆蜜罐的2222端口(用户名和密码就是上面userdb.txt中的)
模拟交互登陆
登录以及登录后的操作日志,在log文件夹下面的kippo.log里面
1.3 kippo优化
kippo默认的监听端口是2222,为了更逼真,我们要把蜜罐服务器原SSH服务的端口改成非22。
vim /etc/ssh/ssh_config # 修改port 22 service sshd restart # 重启ssh服务
修改kippo.cfg 中的监听端口,把2222改成22的时候异常,那是因为kippo不能以root运行,非root账号不能监听1024以下的端口,所以通过iptables做一次端口转发
iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-ports 2222
这时候蜜罐服务器的22端口就是蜜罐的SSH服务了。
二、创建诱捕节点
理想情况我们要在所有网段部署诱捕节点,但如果都用服务器部署的话,太浪费资源。
所以我们在各网段找一台在用的,重要程度不高的机器,在这台机器上新建一个专用IP,通过端口转发的方式把这个IP对应的22端口转发至蜜罐服务器的22端口(蜜罐的SSH服务),对于攻击者来说,是无感知的。
2.1 增加专用IP
IDC找一台在用,且重要程度不高的机器,查看现有的ifcfg-eth0文件
cat /etc/sysconfig/network-scripts/ifcfg-eth0
确保IP为静态IP,且掩码、网关填写正确
创建专用IP的配置文件
vim /etc/sysconfig/network-scripts/ifcfg-eth0:1
重启新配置文件生效
ifup eth0:1
找另外一台机器,ping新的IP地址确认是通的
2.2 设置端口转发(安装rinetd)
目标:让攻击者扫描访问上述专用IP的22端口,把上述专用IP的22端口,转发至蜜罐的22端口(蜜罐服务器原SSH已更改为其他端口)。
rinetd官网地址:https://boutell.com/rinetd/
通过官网下载安装包
上传至服务器解压
tar –zxvf rinetd.tar.gz
创建稍后编译时需要用到的文件夹
mkdir /usr/man/man8
编译&安装
make make install
上一步make的时候可能会报两种错误
第一种:
解决方法:修改Makefile文件
第二种错误:提示超出系统最大定义端口,修改rinetd.c文件的544和567行,把65536端口改成65535
创建配置文件
touch /etc/rinetd.conf 0.0.0.0 22 蜜罐Ip 22 #源地址 端口 目的地址 端口 logfile /var/log/rinetd.log # 日志文件
运行这个工具
rinetd # 关掉工具的命令是 pkill rinetd
当攻击者访问专用IP的22端口时,会被转发至蜜罐的SSH服务。
rinetd会产生日志,具体路径是在/etc/rinetd.conf中设置的,日志样例如下
成功登录蜜罐后,在伪造的shell中进行命令操作,蜜罐服务器也会记录一份日志,但是这地方记录的访问源IP是我们新建的专用IP地址,不是攻击者所在服务器的IP地址。
三、自动告警
可通过splunk实现自动告警
首先通过syslog的方式把端口转发(rinetd.log)和蜜罐(kippo.log)这两份日志实时同步至splunk服务器。
splunk上新建一个应用(kippo)
splunk新建索引(kippo)
通过本地文件的方式导入数据
splunk设置告警
转载请注明出处: https://www.cnblogs.com/Eleven-Liu/p/9204244.html
原文地址:https://www.cnblogs.com/Eleven-Liu/p/9204244.html