修改tpot蜜罐为主控+探测器模式

0x00 关于tpot相关

Tpot我个人理解是一个比较不错的高集成度的蜜罐系统,里面有很多的蜜罐使用docker封装起来独立运行。tpot则将每一个独立的蜜罐的日志格式整理起来最终通过ELK的形式统一展示,效果非常不错,下面是控制端的图:

这界面,这特效,没什么好说的就是棒,就是赛博朋克!
另外dashboard的模板不止一个,所以很不错,搜索那边日志也分割的很清晰,可以搜集到很多有用的信息。
如果我们不需要主控和探测分离,也就是所有的东西都装在一台机器上的话,可以不用看后面的内容,只需要找个可以上传自定义镜像的vps,然后安装标准版然后打开即可用,没有什么好说的。
现在我们希望实现的是如下模式:
————-> sensor1
controller |
—————>sensor2
即部署主从模式的蜜罐,仅仅在外网部署N个探测器,然后将日志信息全部集中到一台主控端上进行分析处理。我翻了一下tpot,貌似没有天生将主控和探测器分离安装,因此要实现这种形式需要手工进行分离ELK。
既然整个tpot日志分析都基于ELK,那么我们要做的也很简单,将elasticsearch和kibana分离出来作为主控端,每个sensor上部署logstash,logstash的日志发送地址全部发送到主控的elasticsearch就好了。
补一个tpot的地址:tpot官网

0x01 提取主控

为了提取主控中的ES和logstash以及其他可能比较喜欢的辅助工具,可以先在自己的本地起个虚拟机,安装标准版的tpot,即安装的时候选择standard,等待安装完毕。
然后我们要做的就是完成安装后进到系统里,默认启动后会自动启动所有的docker实例。使用docker命令将我们需要的实例单独打包成镜像倒出来,我们最需要的目前是elasticsearch、kibana、logstash,如果还有其他需要的也可以倒出来。打包成镜像的命令为:

1
2
3
sudo docker commit xxxx:xxx //commit container to images
sudo docker save xxxx > xxx.tar //package the image to tar
sudo docker inspect xxx //details of image or container

然后把打包好的tar包保存起来,放到需要成为主控的地方重新转成container:

1
sudo docker load -i xxx.tar //import images from tar

这里要注意的是es的容器其使用了虚拟机本地的data目录,建议把data目录里的数据一并考出去然后使移植过的es容器的data目录挂载到这个目录上,类似于:

1
sudo docker run -d -p 59200:9200 -v /mnt/nas/honeyportdata:/data:rw --name tpotes tpotes /usr/share/elasticsearch/bin/elasticsearch

PS:建议在迁移的时候关注一下这几个容器的详细信息,里面会写着端口映射、目录映射、执行命令等,通过docker inspect命令。

0x02 sensor和主控

  1. 首先我们要先部署tpot,找一个可以支持自定义镜像上传的vps厂家,我使用的是vultr,虚拟机一定要选8G4核以上的配置,不然会出一堆问题。
  2. 然后进入到安装界面就没什么好说的了,省去不说了,在VPS上我们选择安装模式的时候记得选sensor,因为我们只需要VPS上具备探测器功能即可。
    1. 将之前分离出来的logstash镜像的tar包上传到sensor上,根据这个镜像起一个docker的容器实例。
    2. 主控这边使用之前提取出来的es和kibana镜像在本地创建实例,然后将复制出来的es的data目录映射到容器的es里,起来即可

      0x03 打通主控与sensor之间的日志传递

    3. 先来说说logstash,主要是负责收集sensor的日志并发送给es,直接通过docker exec进入到logstash容器中,修改其配置文件,将本地的es地址改为远程接收的地址,保存重启容器即可。
    4. 再来看看es,建议es先加个密码认证,密码认证直接在es容器里使用es自己的命令,里面有个生成password命令,敲一下跟着流程走就好,记录下密码后记得在logstash里也配上密码。其次确保ES的端口对外暴露,安全起见可以防火墙限制IP访问。es和logstash两边都通,logstash能正常推送给es就会在本地看到数据了。
    5. 如果ES在局域网内网,可能需要通过一些代理映射打通,如果通过花生壳之类的将ES映射到域名上,由于logstash不能配置域名,因此可以在sensor上在装个nginx进行反带处理,其他流程一致。
    6. 另外由于sensor与es之间可能网络不太好,建议配置nginx反带的超时时间长一些,logstash也配置一下超时时间,太短了容易一直报错

      0x04 目前存在的疑惑

      连续好几次挂了一晚上,sensor上的容器就全部丢失了,很奇怪没有查到原因。

      0x05 其他

      本文仅仅是一个思路的概括和一些坑的提示,具体ELK怎么操作和配置建议自行学习掌握,没那么复杂。