蜜罐系统通过在网络中部署感应节点,实时感知周边网络环境,同时将感应节点日志实时存储、可视化分析,来实现对网络环境中的威胁情况感知。网上的开源蜜罐很多,种类不一,不可枚举。有针对单个服务的蜜罐,也有多个服务整合在一起的。Github上有个项目,收集汇总了免费和开源的蜜罐,项目地址:awesome-honeypots,该项目按照蜜罐类型做了分类,包括Web蜜罐、各种服务蜜罐以及一些蜜罐相关组件(包括网络分析工具、前端和可视化工具等),收集的很全面。
但是一个好的蜜罐,应该做到:能模拟大多数常见协议、能够模拟影响面广泛的应用协议和漏洞、能够在TCP/UDP全端口捕获未知的恶意扫描、蜜罐便于协议扩展、蜜罐结果的数据格式简单便于分析。
有大佬将一些开源蜜罐本地搭建试用,做了对比分析,详见《开源蜜罐测评报告》。作者分析了四十几个蜜罐,其实不用看文章,很多蜜罐由于年久没有更新维护,易用性不高。根据文中作者试用后的描述,感觉效果还不错的一些蜜罐如下:
web蜜罐
服务蜜罐
其他蜜罐
作者文章未描述到且讨论较多的蜜罐/蜜罐平台还包括:Kippo(一款强大的中等交互的SSH蜜罐)、Dionaea(低交互蜜罐,可视化方便,捕获对服务的攻击数据,记录攻击源和目标 IP、端口、协议类型等信息,以及完整的网络会话过程,自动分析其中可能包含的 shellcode 及其中的函数调用和下载文件,并获取恶意程序)、T-POT(将很多开源蜜罐整合在一起的蜜罐平台)、Hfish(扩展企业安全测试主动诱导型开源蜜罐框架系统,记录黑客攻击手段)、MHN(一个用于管理和收集蜜罐数据的中心服务器。通过MHN,可以实现快速部署多种类型的蜜罐并且通过web可视化界面显示蜜罐收集的数据,目前支持的蜜罐类型有Dionaea, Snort, Cowrie, glastopf等)等。另外还有针对漏洞的蜜罐,例如Drupal RCE 、Struts2 RCE( CVE 2017-5638)等。
在谈到蜜罐与内网安全时,不得不提sosly师傅的硕士论文(蜜罐与内网安全从0到1,共七篇)。很详细的介绍了蜜罐对于内网安全的意义以及使用MHN的实践。
对于内网来说,常见的攻击手段包括网络嗅探、资产探测/端口扫描、暴力破解、拒绝服务、ARP攻击、DNS劫持、漏洞利用(redis未授权访问、jboss配置不当导致的rce等)等,且内网的攻击手段是随着服务种类的增多不断增加的。我们需要做的,是发现内网中的异常行为/攻击行为。相比外网来说,无需收集0day、无需分析恶意ip、对接威胁情报等,所以我们不需要高交互类型的蜜罐,在内网中低交互的蜜罐能满足我们的需求。所谓低交互蜜罐,就是通过模拟服务,监听端口连接并记录数据包,可以实现端口扫描和暴力破解的检测等。
企业内部的业务繁杂,且安全性较薄弱。且内网的安全相对外网更加被动,所以打造一款适合企业内部使用的低交互蜜罐有其价值和意义。去年公司有几台机器中了勒索病毒,因为内网机器/个人PC多,查了很久无法确认内网是否还有其他机器被感染,后来部署了个OpenCanary,那阵子OpenCanary的日志非常多,排查到好几台的内网中毒机器。
根据公司自身情况,试着分析下一个好的并适用于自身的内网低交互蜜罐,应该满足以下几个条件:
前文提到的蜜罐,我们挑选几个蜜罐平台(支持多种服务)在内网搭建测试并对比,看是否满足我们的基本要求。本次测试选择OpenCanary、T-POT、MHN、Artillery、Heralding和HFish。
OpenCanay是一种基于命令行式的蜜罐服务系统,没有UI页面,基本操作都是通过命令行,配置通过改写配置文件。其基本实现原理也是通过设置各种监听的端口,模拟各种流行的服务,而底层实现端口监听。
去年pirogue师傅基于OpenCanary实现了个web端后台管理:opencanary_web,系统实现基于nginx和tornado,数据库系统使用的是mysql,前端使用的是vue。适用于内网多节点部署,架构图如下:
该蜜罐支持16种协议,内网多个节点部署后,日志统一发送到web端,入库存储,界面展示。
后台可统计的信息如下:
作者将OpenCanary蜜罐框架分析的日志和服务(协议)做了记录,可依照进行二次开发:opencanary二次开发(1)-日志格式。
Python, 依赖于twisted的python库实现。
部署方法参照github上的方法就可以,尽量使用centos7的系统,在centos6.x上装过两次都有一些报错。
部署完成后,OpenCanary服务端开放端口如下:
对该机器ip进行nmap扫描,web端收到攻击日志:
首页两个简单的图表:
总体来说使用起来还是比较便捷,使用python开发,二次开发起来比较方便。后台展示比较直观,也支持邮件告警。作者的思路很棒,将各个节点的日志通过web请求统一发到web端,然后进行入库展示。但是测试过程中,感觉日志量很大,nmap扫描一下,就有七八页的日志,配置邮件告警后,收到的邮件非常多。
T-Pot是一个比较成熟的蜜罐平台,2016年推出的,目前最新版本是19.03。T-Pot最大的特点是集成了很多款开源蜜罐以及流量检测项目(Suricata),并集成了威胁情报,且做了统一管理和统一日志收集展示。目前版本基于docker, docker-compose并且包括以下蜜罐的docker镜像:
T-Pot集成蜜罐 | 说明 |
---|---|
ADBHoney | 一个计语TCP/IP的Android调试桥的低交互蜜罐 |
ciscoasa | Cisco ASA防火墙的低交互蜜罐,能够检测CVE-2018-0101、DoS和远程代码执行漏洞 |
citrixhoneypot | 检测和记录CVE-2019-19781(Citrix ADC的RCE)扫描和攻击尝试 |
conpot | 一个低交互式的工业控制系统的蜜罐 |
cowrie | 一个中等交互式的 SSH / Telnet 蜜罐 |
dionaea | 一个基于 Python 开发的低交互蜜罐,设计目的是诱捕恶意攻击,获取恶意攻击会话与恶意代码程序样本 |
elasticpot | 一个 Elasticsearch 的蜜罐 |
glastopf | 一个 Python 语言开发的 Web 蜜罐,能提供各种基于漏洞类型的模拟 |
glutton | 一款低交互蜜罐 |
heralding | 一款可收集凭证的蜜罐(下文有详细介绍) |
honeypy | 一款低交互的蜜罐,但是具有更多的中等交互蜜罐的能力 |
honeytrap | 一个低交互式的蜜罐,通过监听 NFQUEUE 用户态数据包,相当与就监听了所有其他未监听的端口 |
mailoney | 一个 SMTP 蜜罐 |
medpot | 也是一款SMTP蜜罐 |
rdpy | 一个用 Python 实现的 RDP 和 VNC 协议,可以用作服务端以及客户端,也提供 RDP 的蜜罐,用于记录 RDP 过程 |
tanner | 一种远程数据分析和分类服务,用于评估HTTP请求和组合响应,然后由snare事件提供服务 |
同时集成的其他非蜜罐的工具有cyberchef(一个用于加密、编码、压缩和数据分析的web应用程序)、evs(从多个蜜罐源收集信息,并将其发布到中央收集服务,如DTAG预警系统和hpfeed)、fatt(用于从pcapfile和实时网络通信中提取网络元数据和指纹)、heimdall(Web应用程序的仪表板)、hyfeeds(蜜网项目通用认证数据路由协议)、p0f(利用一系列复杂的流量指纹识别,被动的来识别 TCP/IP 通信的对方信息)、spiderfoot(开源的足迹和情报收集工具)、Suricata(一个网络IDS、IPS和网络安全监控引擎)和Nginx等。
其官方架构图如下所示(通过架构图能很直观的看明白T-Pot的架构):
T-Pot 19.03运行在Debian上,官方文档说支持三种安装方式:裸设备安装(基于iso镜像)、基于现有系统安装和云部署。刚开始用的第一种方法,用官方提供的iso在Vmware安装,安装都是自动化的,但是安装完成后服务一直无法启动,可能是因为源的问题,导致很多依赖包没有下载下来。试了很多次,无奈国外的源实在是太慢,第一种方法“夭折”~
试了第二种方法,先在Vmware装了个Debian 9.9.0的虚拟机,然后再进行安装。参考这篇文章:开源蜜罐T-pot 19.03安装和使用中基于现有系统安装的方法。文中很多修改源的操作一定要修改,不然真的好慢好慢......
但是,漫长的等待过后,虚拟机重启了,以为装完了,但是打开发现镜像全是down的,启动不起来。心力交瘁,懒得折腾了,盗张官方的图吧:
T-Pot很强大,是个很棒的项目。但是无奈搭建起来较麻烦。其次,T-Pot集成的蜜罐项目太多,再加上Suricata、ELK,整个项目太庞大了,可视化的Kibana面板是很炫,但是运营起来需要花费的精力很大,在中小型互联网企业,运营起来有难度。
MHN(Modern Honey Network):开源蜜罐,支持快速部署传感器并立即收集数据,可以从整洁的Web界面查看。用ThreatStream来部署,数据存储在MOngoDB中,安装了入侵检测系统的部署传感器Snort、Kippo、Conpot和Dionaea。收集的信息可以通过Web接口进行展示。据官方说法,目前经测试支持部署MHN服务器的系统有Ubuntu 14.04, Ubuntu 16.04, Centos 6.9。MHN是一个Flask应用,为蜜罐提供HTTP的api,各个蜜罐可通过api下载部署脚本,连接,下载snort规则,发送检测日志等。其架构图如下所示:
MHN的搭建不难,官方提供了自动化的安装脚本install.sh。但是碍于很多依赖被qiang,下载起来也很慢。搭建的时候注意,官方说支持在Ubuntu 18.04, Ubuntu 16.04和Centos 6.9上搭建部署,自动化脚本里对版本有校验,最好选择这三个版本的机器进行搭建。运行install.sh,安全速度很慢,然后睡觉去了,第二天早上起来发现装完了。
详细的安装、配置和操作可以参考backlin师傅的这篇文章:MHN蜜罐系统建设。
搭建完成后,是没有传感器(蜜罐节点)的,页面里内容都是空的。在Deploy里可以选择蜜罐的,对应会有该蜜罐的部署脚本,可以选择性安装部署。
比如选择Dionaea(捕蝇草),显示出的脚本如下所示:
去安装蜜罐的机器上运行该脚本部署就行,部署完成后,Sensors那边就会有一个连接成功的蜜罐节点:
对该蜜罐节点进行nmap扫描,界面上就会有攻击行为的记录,如下图所示:
当然,MHN也可以跟ELK和Splunk进行集成。
MHN也是个很强大的蜜罐平台,集成了很多个不错的蜜罐。各个蜜罐部署起来很方便,基本可以一键部署。但是在管理蜜罐的时候不是很方便,页面上只能将对应的节点删除,停止和删除蜜罐要去对应的节点上操作,收集的日志也非常多,nmap扫描了一下,200条的日志。
Artillery这个项目的介绍是:旨在通过多种办法保护 Linux 和 Windows 操作系统。蜜罐只是这个项目其中的一个功能,其他功能还有监控服务器目录和系统重要文件、对攻击ip进行封禁、邮件告警、对端口开启Dos保护等等。其中蜜罐功能开放的TCP和UDP端口如下:
Python
安装也很简单,把项目git clone下来,直接python ./setup.py
就ok了。安装完成就自动运行了,查看该蜜罐ls开放的端口如下,跟配置文件中的一致:
当然,这些端口是可以修改的,也可以增加。所有的配置都是在/var/artillery/config
中进行配置的,包括配置邮件告警、对端口进行开启Dos保护等。
Artillery我搭在外网测试机上,本地nmap扫描了一下,Aetillery记录的攻击日志如下:
还有个封禁ip的功能,监控SSH和FTP爆破的,可以在配置文件中开启,改成"ON"。
开启后,会将所有爆破次数大于4次的ip封禁掉,被封禁的ip存储在/var/artillery/banlist.txt
中。测试的时候,外网测试机搭建好,几分钟就有上千个ip:
搭建很简单,测试了一下,效果还可以。python开发的,做二次开发也比较容易。不过服务的模拟就直接是开放对应的端口,部署在外网很容易被识破。部署在内网使用还是ok的。
Heralding是一款支持捕捉凭证的蜜罐。目前支持的协议:ftp,telnet,ssh,http,https,pop3,pop3s,imap,imaps,smtp,vnc,postgresql和socks5。
Python
安装过程不难,但是有点小坑,故简单记录下安装过程。刚开始在Centos 6.x上搭,死活装不上psycopg2库,各种报错,后来换了个Ubuntu的虚拟机,就装成功了。
# 安装相关依赖 sudo yum -y install python3-pip python3-dev python3-venv build-essential libssl-dev libffi-dev git clone https://github.com/johnnykv/heralding.git cd heralding # 建立虚拟环境 python3 -m venv heralding-env source heralding-env/bin/activate # 根据官方文档的安装方法,会报错,还需装如下的依赖 sudo apt-get install postgresql python-psycopg2 libpq-dev python3-setuptools python3-wheel pip install -r requirements.txt pip install heralding # 拷贝配置文件(一些设置都是在这个配置文件中配置) cp heralding/heralding.yml . # 运行 sudo ./heralding-env/bin/heralding &
Heralding运行后,本地监听的端口如下图所示(端口和服务可在heralding.yml配置文件中进行配置,我运行Heralding时,开启ssh服务报了错,所以我直接在配置文件里把ssh服务关掉了,故下图看到的22端口是我本地的,不是Heralding开启的):
对该机器进行nmap扫描,端口识别如下:
Heralding记录的数据保存在log_session.json、log_auth.csv和log_session.csv三个文件中。
log_session.json:该文件记录所有的与蜜罐的交互信息,包括时间戳、source_ip、source_port、destination_ip、destination_port、协议、尝试登陆次数等,算是个蜜罐日志汇总。
log_auth.csv: 该文件记录所有尝试身份验证的用户名和明文密码(我这边只用nmap探测了下端口,所以没记录什么用户名和密码)。
log_session.json: 该文件存储与蜜罐的所有连接的条目。数据包括时间戳、持续时间、IP信息和身份验证尝试次数(跟log_session.json差不多,只是数据格式不同)。
这个蜜罐搭建起来有点小坑,建议Ubuntu系统,Python版本大于3.5。这个蜜罐最大的特点是可以记录用户名密码,日志记录仪比较直观详细,也是个学习二次开发不错的项目。
HFish 是一款基于 Golang 开发的跨平台多功能主动诱导型开源蜜罐框架系统,为了企业安全防护做出了精心的打造,全程记录黑客攻击手段,实现防护自主化。目前HFish支持的蜜罐如下:
Golang
搭建很简单,docker大法一分钟就能搞定。详细搭建方法可以参考HFish的使用文档。
部署完成后,监听端口如下:
搭建完成后,局域网内尝试对该ip进行nmap扫描,nmap扫描完成后,HFish记录了攻击日志(Telnet和Mysql),后台如下图所示:
还有个很炫的态势图(不过我部署在内网,效果一般):
试用了下,HFish挺不错的,页面做的很赞,也支持分布式部署。很适合内网分布式部署、运营。如果不用HFish,选择自己开发的话,HFish的设计思路也很值得借鉴。其他更详细的使用心得参考这篇文章:HFish蜜罐使用心得。
对于中小型企业来说,可选型OpenCanary或HFish在内网部署,因为这两款蜜罐都支持基本的异常行为发现、有前端页面、可支持分布式部署、可支持邮件告警,这几点就能满足大部分企业的需求。
喜欢自己折腾的可以考虑如下的架构:
同时蜜罐在内网部署也需关注自身的安全,做好基本的安全基线(比如修改SSH端口,可以改成一个不常用的大端口,这样假设攻击者已进入内网,在攻击者扫描和爆破SSH的时候我们的蜜罐机器不至于第一时间暴露)。
如果选择二次开发,文中提到的各个蜜罐项目都是很好的参考。
蜜罐没有孰好孰坏,理应尊重开源人员的心血。最主要的是真正使用运营起来,实现蜜罐在内网部署的意义。