蜜罐调研与内网安全
2020-03-04 10:20:52 Author: xz.aliyun.com(查看原文) 阅读量:368 收藏

谈谈蜜罐与内网安全

0x00 写在前面

蜜罐系统通过在网络中部署感应节点,实时感知周边网络环境,同时将感应节点日志实时存储、可视化分析,来实现对网络环境中的威胁情况感知。网上的开源蜜罐很多,种类不一,不可枚举。有针对单个服务的蜜罐,也有多个服务整合在一起的。Github上有个项目,收集汇总了免费和开源的蜜罐,项目地址:awesome-honeypots,该项目按照蜜罐类型做了分类,包括Web蜜罐、各种服务蜜罐以及一些蜜罐相关组件(包括网络分析工具、前端和可视化工具等),收集的很全面。

但是一个好的蜜罐,应该做到:能模拟大多数常见协议、能够模拟影响面广泛的应用协议和漏洞、能够在TCP/UDP全端口捕获未知的恶意扫描、蜜罐便于协议扩展、蜜罐结果的数据格式简单便于分析。

0x01 开源蜜罐调研

有大佬将一些开源蜜罐本地搭建试用,做了对比分析,详见《开源蜜罐测评报告》。作者分析了四十几个蜜罐,其实不用看文章,很多蜜罐由于年久没有更新维护,易用性不高。根据文中作者试用后的描述,感觉效果还不错的一些蜜罐如下:

web蜜罐

  1. snare: 一个Web蜜罐,该蜜罐可克隆某个网站,可捕捉到web攻击载荷。可以配合tanner(评估HTTP请求并组成snare事件服务的响应)一起使用。但是snare在克隆网站的时候可能会有报错;
  2. phpmyadmin_honeypot : 一个简单有效的phpmyadmin蜜罐;
  3. basic-auth-pot: http身份验证蜜罐(可以捕捉到账号和密码也有访问的日志);
  4. Shadow Daemon:一个不错的web蜜罐(需要二次开发把连接器弄进程序里面,这个过程有点麻烦),可以捕捉到web攻击载荷;
  5. django-admin-honeypot : 一个仿造Django管理员登陆页面的web蜜罐,用于记录未经授权访问的企图并通知管理员。

服务蜜罐

  1. RDPy :是Microsoft RDP远程桌面协议协议客户端和服务器端的纯Python实现,RDPY支持标准RDP安全层基于SSL的RDP和NLA身份验证通过ntlmv2身份验证协议。该蜜罐还支持RDP和VNC远程连接时截图。但是使用hydra爆破的时候会报错,如果做蜜罐的话会产生大量的rss文件很麻烦,比较适合内网钓鱼;
  2. Honeygrove : 一个基于Python的模块化蜜罐,基于BrokerTwisted Framework构建;
  3. honeytrap : 一个可扩展的开源蜜罐,用于运行、监控和管理蜜罐;
  4. Cowrie :一种中等交互式SSH和Telnet蜜罐,用于记录暴力攻击和攻击者执行的shell交互;
  5. sshlowpot :低交互式ssh蜜罐。接受给定端口上的SSH连接(默认为2222),记录身份验证尝试并告知连接客户端身份验证失败;
  6. sshhipot : 高交互性ssh蜜罐,这个蜜罐的高交互是因为它使用了代理模式,也就是说攻击者攻击蜜罐的时候,蜜罐就会连接真实机,以达到代理捕捉数据的功能;
  7. ssh-honeypot : 伪造 SSHD,可记录 IP 地址、用户名与密码;
  8. UDPot Honeypot: 一个DNS蜜罐,将所有请求记录到SQLite数据库并具有可配置的交互级别;

其他蜜罐

  1. DSHP : 一个简单的蜜罐,亮点是被扫描或攻击时,支持邮件告警;
  2. OpenCanary : 支持多种虚假服务,服务开启和关闭比较简单;
  3. Artillery : 开源蓝队工具,旨在通过多种办法保护 Linux 和 Windows 操作系统。;
  4. Heralding :目前支持以下协议:ftp,telnet,ssh,http,https,pop3,pop3s,imap,imaps,smtp,vnc,postgresql和socks5,日志会生成会话(SESSION)和验证(AUTH);

作者文章未描述到且讨论较多的蜜罐/蜜罐平台还包括:Kippo(一款强大的中等交互的SSH蜜罐)、Dionaea(低交互蜜罐,可视化方便,捕获对服务的攻击数据,记录攻击源和目标 IP、端口、协议类型等信息,以及完整的网络会话过程,自动分析其中可能包含的 shellcode 及其中的函数调用和下载文件,并获取恶意程序)、T-POT(将很多开源蜜罐整合在一起的蜜罐平台)、Hfish(扩展企业安全测试主动诱导型开源蜜罐框架系统,记录黑客攻击手段)、MHN(一个用于管理和收集蜜罐数据的中心服务器。通过MHN,可以实现快速部署多种类型的蜜罐并且通过web可视化界面显示蜜罐收集的数据,目前支持的蜜罐类型有Dionaea, Snort, Cowrie, glastopf等)等。另外还有针对漏洞的蜜罐,例如Drupal RCEStruts2 RCE( CVE 2017-5638)等。

0x02 蜜罐与内网安全

在谈到蜜罐与内网安全时,不得不提sosly师傅的硕士论文(蜜罐与内网安全从0到1,共七篇)。很详细的介绍了蜜罐对于内网安全的意义以及使用MHN的实践。

对于内网来说,常见的攻击手段包括网络嗅探、资产探测/端口扫描、暴力破解、拒绝服务、ARP攻击、DNS劫持、漏洞利用(redis未授权访问、jboss配置不当导致的rce等)等,且内网的攻击手段是随着服务种类的增多不断增加的。我们需要做的,是发现内网中的异常行为/攻击行为。相比外网来说,无需收集0day、无需分析恶意ip、对接威胁情报等,所以我们不需要高交互类型的蜜罐,在内网中低交互的蜜罐能满足我们的需求。所谓低交互蜜罐,就是通过模拟服务,监听端口连接并记录数据包,可以实现端口扫描和暴力破解的检测等。

企业内部的业务繁杂,且安全性较薄弱。且内网的安全相对外网更加被动,所以打造一款适合企业内部使用的低交互蜜罐有其价值和意义。去年公司有几台机器中了勒索病毒,因为内网机器/个人PC多,查了很久无法确认内网是否还有其他机器被感染,后来部署了个OpenCanary,那阵子OpenCanary的日志非常多,排查到好几台的内网中毒机器。

根据公司自身情况,试着分析下一个好的并适用于自身的内网低交互蜜罐,应该满足以下几个条件:

  1. 覆盖常见协议/服务,能在TCP/UDP全端口捕获未知的恶意扫描;
  2. 可支持分布式部署,覆盖生产内网和办公内网,且节点尽量覆盖面广;
  3. 日志记录准确、统一集中收集且数据格式简单,便于后续的日志分析和页面展示;
  4. 方便进行二次开发;
  5. 前端页面展示直观清晰,且支持邮件/钉钉告警;

前文提到的蜜罐,我们挑选几个蜜罐平台(支持多种服务)在内网搭建测试并对比,看是否满足我们的基本要求。本次测试选择OpenCanary、T-POT、MHN、Artillery、Heralding和HFish。

(1) OpenCanary
> 简介

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扫描一下,就有七八页的日志,配置邮件告警后,收到的邮件非常多。

(2) T-Pot
> 简介

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面板是很炫,但是运营起来需要花费的精力很大,在中小型互联网企业,运营起来有难度。

(3) MHN
> 简介

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条的日志。

(4) Artillery
> 简介

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的。

(5) Heralding
> 简介

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。这个蜜罐最大的特点是可以记录用户名密码,日志记录仪比较直观详细,也是个学习二次开发不错的项目。

(6) HFish
> 简介

HFish 是一款基于 Golang 开发的跨平台多功能主动诱导型开源蜜罐框架系统,为了企业安全防护做出了精心的打造,全程记录黑客攻击手段,实现防护自主化。目前HFish支持的蜜罐如下:

> 开发语言

Golang

> 本地搭建测试

搭建很简单,docker大法一分钟就能搞定。详细搭建方法可以参考HFish的使用文档

部署完成后,监听端口如下:

搭建完成后,局域网内尝试对该ip进行nmap扫描,nmap扫描完成后,HFish记录了攻击日志(Telnet和Mysql),后台如下图所示:

还有个很炫的态势图(不过我部署在内网,效果一般):

> 说明

试用了下,HFish挺不错的,页面做的很赞,也支持分布式部署。很适合内网分布式部署、运营。如果不用HFish,选择自己开发的话,HFish的设计思路也很值得借鉴。其他更详细的使用心得参考这篇文章:HFish蜜罐使用心得

0x03 总结

对于中小型企业来说,可选型OpenCanary或HFish在内网部署,因为这两款蜜罐都支持基本的异常行为发现、有前端页面、可支持分布式部署、可支持邮件告警,这几点就能满足大部分企业的需求。

喜欢自己折腾的可以考虑如下的架构:

同时蜜罐在内网部署也需关注自身的安全,做好基本的安全基线(比如修改SSH端口,可以改成一个不常用的大端口,这样假设攻击者已进入内网,在攻击者扫描和爆破SSH的时候我们的蜜罐机器不至于第一时间暴露)。

如果选择二次开发,文中提到的各个蜜罐项目都是很好的参考。

蜜罐没有孰好孰坏,理应尊重开源人员的心血。最主要的是真正使用运营起来,实现蜜罐在内网部署的意义。

0x04 参考连接

  1. awesome-honeypots: 精选的蜜罐清单集合和相关组件
  2. 通过Anglerfish蜜罐发现未知的恶意软件威胁
  3. 开源蜜罐测评报告
  4. 企业安全建设—模块化蜜罐平台的设计思路与想法;
  5. 开源蜜罐Opencanary的实践与扩展;
  6. 个人蜜罐Cowrie的运营分析;
  7. 构建一个高交互型的难以发现的蜜罐;
  8. 蜜罐与内网安全从0到1-共7篇
  9. opencanary二次开发(1)-日志格式
  10. HFish蜜罐使用心得
  11. 开源蜜罐T-pot 19.03安装和使用
  12. MHN蜜罐系统建设

文章来源: http://xz.aliyun.com/t/7294
如有侵权请联系:admin#unsafe.sh