黑客大神总结:全端口蜜罐的部署过程与数据分析

一、引言在当前的网络环境中,存在着各种流量,包括网络空间扫描流量、搜索引擎爬虫流量、恶意软件的探测流量等等,例如mirai病毒在进行telnet爆破过程中,其目标IP就是随机生成的(排除内网IP及一些特殊IP) 。前段时间,本人对SSH蜜罐cowire的Docker部署及数据展示进行了介绍,有兴趣的读者可以查看文章《Cowrie蜜罐的Docker部署过程及Elasticsearch+Kibana可视化》 。本文将继续蜜罐这个方向,介绍一种全端口蜜罐 。
一般而言,大部分蜜罐都是针对某种服务来运行的,例如前文提到的ssh蜜罐cowrie 。通过模拟该种服务的正常协议交互,完成握手阶段,并进行数据传输,基于这种蜜罐可以记录攻击者的行为 。但前文提到,mirai病毒定位目标是通过随机的IP算法生成;同时每天云主机的SSH端口也收到各种爆破流量,由此本人萌生了一个想法,那么是不是还有其他端口也在受到扫描或者攻击 。要获取这些信息,显然使用tcpdump并不可行,虽然能收到各种扫描的流量,但没有系统协议栈的支撑,并不能得知连接的负载;而如果使用开启多个端口又不现实,毕竟端口数量这么多,管理起来也不方便 。要满足上述需求,需要一个能够接受全端口流量的蜜罐 。
本文基于上述背景,部署一款全端口蜜罐,并对半个月时间内收到的日志进行简单分析 。整体的文章结构如下:首先介绍使用tcppc-go及docker搭建一个可以记录连接信息的蜜罐,然后利用iptables将端口转发至特定端口,最后分析采集到的两周的数据 。
二、全端口蜜罐的部署2.1 需求分析首先来具体说明一下,对于这款蜜罐的具体需求 。
1. 能够接受客户端(攻击或扫描)的连接,不需要进行具体的某种协议的交互,能够接收并记录用户发送过来的数据,持续运行只要客户端还在发送数据;
2. 能够记录日志,包括连接信息,数据包内容等;
3. 能够接收系统的全端口流量 。
本着不重复造轮子的思想,在github上搜索"all port honeypot",找到了一款能够满足功能的程序tcppc-go 。除了能满足上述需求,同时还能支持UDP协议,甚至可以加载SSL证书,进行SSL握手 。本次部署过程中不考虑SSL及UDP 。其github主页上也介绍了如何能够捕获全端口的数据负载,通过iptables进行转发,但本文没有采用他的命令,请读者谨慎尝试 。
2.2 部署过程tcppc-go是一款使用Go语言编写的程序,虽然本人有一些go语言基础,但是不想折腾基础语言环境,就借助docker的方式来搭建这个蜜罐,这样也方便没有go基础的读者直接进行部署 。因此,本次部署过程中,与上一篇cowrie蜜罐相同,采用docker部署的方式,但不进行数据展示,直接输出原始日志,本次蜜罐部署的环境如下:

黑客大神总结:全端口蜜罐的部署过程与数据分析

文章插图
 
 
2.2.1 构造镜像
Dockerfile是构造镜像的模板,docker会根据Dockerfile的程序逐渐构造镜像,关于具体的指令,下面的Dockerfile已经添加了简单的注释,想深入了解命令使用的读者可以自行搜索 。
###使用golang作为基础镜像提供程序运行环境
FROM golang
#设置时区变量
ENV TZ=Asia/Shanghai
#调整时区,从github拉取相应源码,并编译
run ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone &&
go get github.com/md-irohas/tcppc-go &&
cd /go/src/github.com/md-irohas/tcppc-go &&
go build main.go
#跳转至生成的程序位置
WORKDIR /go/bin/
#执行命令
cmd ["./tcppc-go", "-T","86400","-w","log/tcppc-%Y%m%d.jsonl"]
上述Dockerfile的主要构造流程如下 。首先,拉取golang作为基础镜像,为程序提供go语言环境;然后,在设置了时区变量之后,将时区调整为上海市区,如果不调整,默认会比上海时间慢8个小时;其次,利用go命令获取程序源码;最后,进入相应路径进行编译 。
新创建一个文件夹docker


    推荐阅读