一、安装Debian10 虚拟机
1. 版本说明
目前最新版T-Pot项目基于Debian10构建,本文采用Debian 10 作为实验环境
2. 下载
Debian镜像(清华大学)下载源:https://mirrors.tuna./#
3. 安装
环境说明
虚拟机软件:VMware Workstation Pro 15.5(需选择14.x版本以兼容公司环境)Debian镜像:debian-live-10.6.0-amd64-standard.iso虚拟机安装(略)
配置要求:参考T-Pot安装配置需求 /telekom-security/tpotce#system-requirements安装指导:参考 /p/73122221Note:Debian系统的账户密码详情如下
二、预备知识
1. 蜜罐定义
蜜罐是一种软件应用系统,作为一种入侵诱饵,引诱攻击者前来攻击。攻击者入侵后,通过监测与分析,就可以知道他是如何入侵的,随时了解针对组织服务器发动的最新的攻击和漏洞。
2. 蜜罐分类
按交互方式分类,蜜罐可以分为三类,低交互式蜜罐,中交互式蜜罐,高交互式蜜罐。
低交互式蜜罐 :通常是指与操作系统交互程度较低的蜜罐系统,仅开放一些简单的服务或端口,用来检测扫描和连接,这种容易被识别。
中交互式蜜罐 :介于低交互式和高交互式之间,能够模拟操作系统更多的服务,让攻击者看起来更像一个真实的业务,从而对它发动攻击,这样蜜罐就能获取到更多有价值的信息。
高交互式 :指的是与操作系统交互很高的蜜罐,它会提供一个更真实的环境,这样更容易吸引入侵者,有利于掌握新的攻击手法和类型,但同样也会存在隐患,会对真实网络造成攻击
三、T-Pot安装
1. 前期准备
更换系统镜像源
参考: /developer/article/1590080
$ sudo vi /etc/apt/source.list
推荐163源
deb /debian/ buster main non-free contribdeb /debian/ buster-updates main non-free contribdeb /debian/ buster-backports main non-free contribdeb /debian-security/ buster/updates main non-free contribdeb-src /debian/ buster main non-free contribdeb-src /debian/ buster-updates main non-free contribdeb-src /debian/ buster-backports main non-free contribdeb-src /debian-security/ buster/updates main non-free contrib
中科大源
deb https://mirrors./debian/ buster main contrib non-freedeb https://mirrors./debian/ buster-updates main contrib non-freedeb https://mirrors./debian/ buster-backports main contrib non-freedeb https://mirrors./debian-security/ buster/updates main contrib non-freedeb-src https://mirrors./debian/ buster main contrib non-freedeb-src https://mirrors./debian/ buster-updates main contrib non-freedeb-src https://mirrors./debian/ buster-backports main contrib non-freedeb-src https://mirrors./debian-security/ buster/updates main contrib non-free
安装网络工具
$ sudo apt install net-tools
设置网卡为混杂模式
混杂模式
非混杂模式,网卡只接受来自网络端口的目的地址指向自己的数据。 当网卡工作在混杂模式下时,网卡将来自接口的所有数据都捕获并交给相应的驱动程序。 网卡的混杂模式一般在网络管理员分析网络数据作为网络故障诊断手段时用到,同时这个模式也被网络黑客利用来作为网络数据窃听的入口。
ifconfig查看网卡信息
使用putty连接虚拟机,执行
$ ifconfig
更改网卡为混杂模式(Promisc)
$ ifconfig ens33 promisc
2. 下载开源项目
安装git工具
$ sudo apt install git
使用git克隆项目到本地
$ git clone /telekom-security/tpotce
3. 开始安装
安装步骤
执行安装脚本
cd tpotce/iso/installer/sudo ./install.sh --type=user
期间脚本会进行
检查root权限校验安装依赖校验其他资源,开始安装
可用性校验
选择STANDARD版本
设置tsec用户密码“******”
设置web用户名称为“gfadmin”
设置web用户密码“******”
开始安装,安装过程需要下载大量依赖包,需要开启代理
安装完成后,系统会自动重启
四、部署到内部网络
1. 桥接模式
更改虚拟机连接方式为桥接模式,使得蜜罐系统类似于一台真正的主机运行
2. 网卡配置
配置虚拟机网卡为静态IP
$ vi /etc/network/interfaces
3. 导出虚拟机
将虚拟机导出为OVF用于迁移
五、T-Pot使用
1. T-Pot组件总览
系统架构图
蜜罐组件简介
2. 操作指南
打开浏览器,输入网址 https://【IP】:64297/ ,进入登陆页面
username: gfadmin
password: ******
输入前面设置的web用户登录名和密码进入系统页面
Cockpit
Cockpit是一个轻量级的web图形操作界面,让用户在Web浏览器中查看服务器,然后用鼠标执行系统任务。包括启动容器,管理存储,配置网络和检查日志等。
进入Cockpit,进行登录
username: tsec
password: ******
系统
监控系统运行情况
容器
普通用户登录没有访问docker的权限,需要为其授权
后台以root登陆,将tsec加入docker组并重启docker服务
sudo usermod -aG docker tsecsudo systemctl restart docker
终端
进入root,运行脚本
dps.sh
显示T-Pot组件运行情况
Tools
CyberChef
CyberChef是一个用于加密、编码、数据分析的开源web应用
Elasticsearch Head
Elasticsearch Head是一个用于查看Elasticsearch(企业级搜索引擎)的运行状态以及数据,进行rest请求模拟,数据检索的web插件
Spiderfoot
Spiderfoot是一个开源的情报搜集工具,它使用了一系列数据分析方法,使数据易于追踪
可扫描类型:域名、IPv4/v6、Email、Phone Number、Human Name…
Kibana
Kibana是用于Elasticsearch的开源数据可视化仪表板。它在Elasticsearch集群上建立索引的内容之上提供了可视化功能。用户可以在大量数据的基础上创建条形图,线形图和散布图,或者饼图和地图等。
选择Kibana模块,进入Dashboard
列表列出了TPot所有包含的蜜罐服务,提供了总面板(T-Pot),以及各个蜜罐分别的监控面板
进入T-Pot面板
进行ssh/telnet暴力登录,nmap端口扫描等基本攻击,面板会更新所有捕捉到的攻击
并展示ssh/telnet登录用户密钥对,攻击IP等信息
SecurityMeter
T-Pot项目提供了所有必要的工具和文件,以建立自己的蜜罐系统,并贡献给Sicherheitstacho
在Sicherheitstacho可以实时看到全球正在发生的网络攻击
默认情况,T-Pot将上传捕获的攻击到社区,可以按照以下步骤设置不分享到Sicherheitstacho社区
(1) 首先停止T-Pot服务
$ systemctl stop tpot
(2) 然后修改配置文件:
$ sudo vi /opt/tpot/etc/tpot.yml
把Ewsposter service移除,删除/注释以下几行并保存
(3) 重启T-Pot服务
$ systemctl start tpot
六、企业微信自动告警
1. 说明
所有运行的蜜罐程序都会在根目录~/data/下生成与其名称相同的文件夹,用于存放各自监控所产生的日志记录
本文告警将实现cowrie蜜罐暴力破解、dionaea(FTP协议)、honeytrap tcp/udp服务攻击、tanner web漏洞扫描为例
2. 告警脚本(Shell)
cowrie_alert.sh
(1)在 /root目录下创建脚本文件cowrie_alert.sh,内容如下
$ vi /root/cowrie_alert.sh
#! /bin/bashgrep 'login.failed' /data/cowrie/log/cowrie.json > /data/cowrie/log/cowrie.json.newif [ ! -e /data/cowrie/log/cowrie.json.old ] ; thentouch /data/cowrie/log/cowrie.json.oldfidiff /data/cowrie/log/cowrie.json.new /data/cowrie/log/cowrie.json.old > /data/cowrie/log/cowrie_diff.jsonif [ $? == "0" ] ; thenecho '[T-Pot] Cowrie monitoring...'elsesed -i '/^ *$/d' /data/cowrie/log/cowrie_diff.jsonsed -i '1d' /data/cowrie/log/cowrie_diff.json sed -i "s/< //g" /data/cowrie/log/cowrie_diff.json#value="$(</data/cowrie/log/cowrie_diff.json)"path='/data/cowrie/log/cowrie_diff.json'echo '[T-Pot] Cowrie monitoring exception...'#echo "$value"# send message by python code in /root/wechat.pypython /root/wechat.py $pathcp /data/cowrie/log/cowrie.json.new /data/cowrie/log/cowrie.json.oldfi
(2)添加执行权限
$ chmod +x /root/cowrie_alert.sh
dionaea_alert.sh
(1)在 /root目录下创建脚本文件dionaea_alert.sh,内容如下
$ vi /root/dionaea_alert.sh
#! /bin/bashgrep '"ftpd"' /data/dionaea/log/dionaea.json > /data/dionaea/log/dionaea.json.newif [ ! -e /data/dionaea/log/dionaea.json.old ] ; thentouch /data/dionaea/log/dionaea.json.oldfidiff /data/dionaea/log/dionaea.json.new /data/dionaea/log/dionaea.json.old > /data/dionaea/log/dionaea_diff.jsonif [ $? == "0" ] ; thenecho '[T-Pot] Dionaea monitoring...'elsesed -i '/^ *$/d' /data/dionaea/log/dionaea_diff.jsonsed -i '1d' /data/dionaea/log/dionaea_diff.jsonsed -i "s/< //g" /data/dionaea/log/dionaea_diff.json#value="$(</data/dionaea/log/dionaea_diff.json)"path='/data/dionaea/log/dionaea_diff.json'echo '[T-Pot] Dionaea monitoring exception...'#echo "$value"# send message by python code in /root/wechat.pypython /root/wechat.py $pathcp /data/dionaea/log/dionaea.json.new /data/dionaea/log/dionaea.json.oldfi
(2)添加执行权限
$ chmod +x /root/dionaea_alert.sh
honeytrap_alert.sh
(1)在 /root目录下创建脚本文件honeytrap_alert.sh,内容如下
$ vi /root/honeytrap_alert.sh
#! /bin/bashgrep -v "127.0.0.1" /data/honeytrap/log/attackers.json > /data/honeytrap/log/attackers.json.newif [ ! -e /data/honeytrap/log/attackers.json.old ] ; thentouch /data/honeytrap/log/attackers.json.oldfidiff /data/honeytrap/log/attackers.json.new /data/honeytrap/log/attackers.json.old > /data/honeytrap/log/honeytrap_diff.jsonif [ $? == "0" ] ; thenecho "[T-Pot] Honeytrap monitoring..."elsesed -i '/^ *$/d' /data/honeytrap/log/honeytrap_diff.jsonsed -i '1d' /data/honeytrap/log/honeytrap_diff.json sed -i "s/< //g" /data/honeytrap/log/honeytrap_diff.jsonpath='/data/honeytrap/log/honeytrap_diff.json'#value="$(</data/honeytrap/log/honeytrap_diff.json)"echo '[T-Pot] Honeytrap monitoring exception...'#echo "$value"python /root/wechat.py $pathcp /data/honeytrap/log/attackers.json.new /data/honeytrap/log/attackers.json.oldfi
(2)添加执行权限
$ chmod +x /root/honeytrap_alert.sh
tanner_alert.sh
(1)在 /root目录下创建脚本文件honeytrap_alert.sh,内容如下
$ vi /root/tanner_alert.sh
#! /bin/bashcp /data/tanner/log/tanner_report.json /data/tanner/log/tanner.json.newif [ ! -e /data/tanner/log/tanner.json.old ] ; thentouch /data/tanner/log/tanner.json.oldfidiff /data/tanner/log/tanner.json.new /data/tanner/log/tanner.json.old > /data/tanner/log/tanner_diff.jsonif [ $? == "0" ] ; thenecho '[T-Pot] Tanner monitoring...'elsesed -i '/^ *$/d' /data/tanner/log/tanner_diff.jsonsed -i '1d' /data/tanner/log/tanner_diff.json sed -i "s/< //g" /data/tanner/log/tanner_diff.json#value="$(</data/tanner/log/tanner_diff.json)"path='/data/tanner/log/tanner_diff.json'echo '[T-Pot] Tanner monitoring exception...'#echo "$value"# send message by python code in /root/wechat.pypython /root/wechat.py $pathcp /data/tanner/log/tanner.json.new /data/tanner/log/tanner.json.oldfi
(2)添加执行权限
$ chmod +x /root/tanner_alert.sh
3. 企业微信告警(Python)
在/root目录下创建脚本文件wechat.py
$ vi /root/wechat.py
#!/usr/bin/env/ python# -*- coding: utf-8 -*-# @Time : -10-26# @Author : zb# @File : wechat.pyimport timeimport requestsimport jsonimport sysreload(sys)sys.setdefaultencoding('utf8')class WeChat:# Class constructordef __init__(self):self.CORPID = 'corpid'self.CORPSECRET = 'corpsecret' self.AGENTID = 'agentid'self.TOUSER = "user" # 接收者用户名# request access token of corp wechat application def _get_access_token(self):url = 'https://qyapi./cgi-bin/gettoken'values = {'corpid': self.CORPID,'corpsecret': self.CORPSECRET,}req = requests.post(url, params=values)data = json.loads(req.text)return data["access_token"]# request access token of corp wechat application (with cache)def get_access_token(self):try:with open('./tmp/access_token.conf', 'r') as f:t, access_token = f.read().split()except:with open('./tmp/access_token.conf', 'w') as f:access_token = self._get_access_token()cur_time = time.time() f.write('\t'.join([str(cur_time), access_token]))return access_tokenelse: cur_time = time.time() if 0 < cur_time - float(t) < 7200: return access_tokenelse: with open('./access_token.conf', 'w') as f:access_token = self._get_access_token()f.write('\t'.join([str(cur_time), access_token]))return access_token# get alert msg from cowrie honeypot(ssh/telenet)def get_cowrie_msg(self, path):lines = open(path, 'r').readlines()msg = "[T-Pot] Warning: Cowrie monitoring exception......\nPath: /data/cowrie/log/cowrie.json\n"for line in lines:data = json.loads(line)for key in data.keys():curr_line = key + " : "+ data[key] + "\n"msg = msg + curr_line msg = msg+"\n"return msg# get alert msg from dionaea honeypot(ftp)def get_dionaea_msg(self, path):lines = open(path, 'r').readlines()msg = "[T-Pot] Warning: Dionaea monitoring exception......\nLog path: /data/Dionaea/log/cowrie.json\n"for line in lines:data = json.loads(line)curr = json.dumps(data,sort_keys=True,indent=4,separators=(',',':'))msg = msg+curr.replace("{","").replace("}","")return msg# get alert msg from honeytrap honeypot(ports scaning)def get_honeytrap_msg(self, path):lines = open(path, 'r').readlines()msg = "[T-Pot] Warnning: Honeytrap monitoring exception......\nPath:/data/honeytrap/log/attackers.json\n"ips = {}for line in lines:data = json.loads(line)ip = data['attack_connection']['remote_ip']if ip in ips:cnt = ips[ip]ips[ip] = cnt+1else:ips[ip] = 1for key in ips.keys():cnt = ips[key]msg = msg+"attacker ip: "+key+", attack counts: "+str(cnt) + "\n"#print ("honeytrap: ",msg)return msg# get alert msg from tanner honeypot(Vulnerability scanning)def get_tanner_msg(self, path):lines = open(path, 'r').readlines()msg = "[T-Pot] Warnning: Tanner monitoring exception...\nPath:/data/tanner/log/tanner_report.json\n"ips = {}for line in lines:data = json.loads(line)ip = data['peer']['ip']if ip in ips:cnt = ips[ip]ips[ip] = cnt+1else:ips[ip] = 1for key in ips.keys():cnt = ips[key]msg = msg+"attacker ip: "+key+", attack counts: "+str(cnt) + "\n"return msg# resolve messages to be sentdef msg_process(self, path):if "cowrie" in path:return self.get_cowrie_msg(path)elif "dionaea" in path:return self.get_dionaea_msg(path)elif "honeytrap" in path:return self.get_honeytrap_msg(path)elif "tanner" in path:return self.get_tanner_msg(path)else:return "No error log"# send alets through corp wechat apidef send_data(self, path):msg = self.msg_process(path)#print(msg)send_url = 'https://qyapi./cgi-bin/message/send?access_token=' + self.get_access_token()send_values = {"touser": self.TOUSER,"msgtype": "text","agentid": self.AGENTID,"text": {"content": msg},"safe": "0"}send_data = '{"msgtype": "text", "safe": "0", "agentid": %s, "touser": "%s", "text": {"content": "%s"}}' % (self.AGENTID, self.TOUSER, msg.encode('utf-8'))requests.post(send_url, send_data)if __name__ == '__main__':wx = WeChat()wx.send_data(sys.argv[1])
4. 定时器脚本(shell)
(1) 在 /etc/init.d/ 目录下创建定时器脚本timer.sh(每隔10s钟运行一次告警脚本)
$ vi /etc/init.d/time.sh
#!/bin/sh### BEGIN INIT INFO# Provides: T-POT ALERT# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: T-POT ALERT### END INIT INFO# Description:alert_timer auto start script,placed in /etc/init.d/### END INIT INFOwhile [ 10 ]do# use "& wait" to concurrently execute each script"sleep 10s/root/cowrie_alert.sh &/root/dionaea_alert.sh &/root/honeytrap_alert.sh &/root/tanner_alert.sh &waitdone
(2) 设置脚本执行权限和自启动
$ chmod +x ./etc/init.d/timer.sh$ update-rc.d /etc/init.d/timer.sh defaults 95
5. 实验效果
运行定时器脚本
$ /etc/init.d/timer.sh start
Cowrie蜜罐:SSH/Telnet攻击
(1)使用putty进行ssh连接,并故意输入错误用户/密钥对
(2)T-Pot的cowrie面板更新,看到告警
同时还记录了攻击者使用的用户名和密码
(3)企业微信账号收到对应告警消息
Dionaea蜜罐:FTP文件传输
(1)使用ftp对目标主机进行连接
(2)Dionaea面板更新,看到告警
同时在下方列出攻击者使用的ftp账号密码以及IP地址
Honeytrap蜜罐:TCP/UDP攻击探测
(1)使用nmap工具扫描目标IP
(2)Honeytrap面板更新,看到告警
(3)企业微信收到告警消息
Tanner蜜罐:web漏洞扫描
(1)使用nikto扫描工具进行web漏洞扫描
使用另一台主机/虚拟机安装nikto,并扫描目标IP
git clone /sullo/niktocd nikto/program./nikto.pl -h 【IP】:【Port】
(2)Tanner面板更新,看到告警
记录了攻击者IP以及扫描的资源(URI)
(3)企业微信收到告警消息
七、资源下载
如果你安装频频出错,或者不想安装,只想体验,博主也提供安装好的T-POT虚拟机下载。
请关注公众号【考拉技术研究所】
–>“资源分享”