这篇文章中,主要讨论蜜罐和蜜罐网络,以及如何使用它们保护真实的系统,我们称之为这个系统为MHN(Modern Honey Network,现代蜜网),它可以快速部署、使用,也能够快速的从节点收集数据。
蜜罐是存在漏洞的,暴露在外网或者内网的一个虚假的机器,具有以下这些特征:
1.其中重要的一点机器是虚假的,攻击者需要花费时间攻破。在这段时间内,系统管理员能够锁定攻击者同时保护真正的机器。
2.能够学习攻击者针对该服务的攻击技巧和利用代码。
3.一些蜜罐能够捕获恶意软件,利用代码等等,能够捕获攻击者的0day,同时可以帮助逆向工程师通过分析捕获的恶意软件来提高自身系统的安全性
4.在内网中部署的蜜罐可以帮助你发现内网中其他机器可能存在的漏洞。
蜜罐是把双刃剑,如果不能正确的使用,有可能遭受更多的攻击,模拟服务的软件存在问题,也会产生新的漏洞。
蜜罐分为几下几类:
1.低交互式:低交互式模拟常规的服务,服务存在漏洞,但是模拟的这些漏洞无法被利用,开发和维护这种类型的蜜罐比较容易。
2.高交互式:高交互式使用的是真实的服务,有助于发现服务存在的新漏洞,同时能够记录所有的攻击,但是,部署困难、维护成本高,一旦服务上存在的漏洞被利用,容易引发新的安全问题。
3.粘性蜜罐(Tarpits):这种类型的蜜罐,使用新的IP来生成新的虚拟机,模拟存在服务的漏洞,来做诱饵。因此攻击者会花费长时间来攻击,就有足够的时间来处理攻击,同时锁定攻击者。
还有其他类型的蜜罐,比如专门捕获恶意软件的,数据库漏洞利用程序和垃圾邮件等等。当部署两个或者两个以上蜜罐时可以称之为蜜网。
MHN是一个开源软件,它简化了蜜罐的部署,同时便于收集和统计蜜罐的数据。用 ThreatStream(http://threatstream.github.io/mhn/)来部署,MHN使用开源蜜罐来收集数据,整理后保存在Mongodb中,收集到的信息也可以通过web接口来展示或者通过开发的API访问。
MHN能够提供多种开源的蜜罐,可以通过web接口来添加他们。一个蜜罐的部署过程很简单,只需要粘贴,复制一些命令就可以完成部署,部署完成后,可以通过开源的协议hpfeeds来收集的信息。
MHN支持以下蜜罐:
1.Sort:https://www.snort.org/
2.Suricata:http://suricata-ids.org/
+3.Dionaea:http://dionaea.carnivore.it/,它是一个低交互式的蜜罐,能够模拟MSSQL, SIP, HTTP, FTP, TFTP等服务 drops中有一篇介绍:http://drops.wooyun.org/papers/4584
*4.Conpot:http://conpot.org/
*5.Kippo:https://github.com/desaster/kippo,它是一个中等交互的蜜罐,能够下载任意文件。 drops中有一篇介绍:http://drops.wooyun.org/papers/4578
6.Amun:http://amunhoney.sourceforge.net/,它是一个低交互式蜜罐,但是已经从2012年之后不在维护了。
*7.Glastopf:http://glastopf.org/
*8.Wordpot:https://github.com/gbrindisi/wordpot
+9.ShockPot:https://github.com/threatstream/shockpot,模拟的CVE-2014-6271,即破壳漏洞
*10.p0f:https://github.com/p0f/p0f
MHN服务器:
4 GB Ram
Dual Core Processor
40 Gb Drive
蜜罐:
512 Mb – 1 Gb
Dual Core CPU
20 Gb Drive
具体部署时取决以蜜罐所在的位置,在防火墙后面或者在直接暴露在互联网上,被攻击次数不同,消耗的资源肯定也不同。如果只是测试着玩256M的内存就足够了。
因为ThreatStream有部署脚本,所以安装MHN很简单,我们在只安装了OpenSSH的Ubuntu 14.04 LTS (64 bits)上进行测试,安装步骤如下:
#!bash
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install git
cd /opt
sudo git clone https://github.com/threatstream/mhn
cd /opt/mhn/scripts
新版本中已经做了修改,安装前可以做一下检查
#!bash
sudo vim install_mnemosyne.sh
找到修改CHANNELS,添加shockpot.events 修改成下面的样子
#!bash
CHANNELS=’amun.events,conpot.events,thug.events,beeswarm.hive,dionaea.capture,dionaea.connections,thug.files,beeswarn.feeder,cuckoo.analysis,kippo.sessions,glastopf.events,glastopf.files,mwbinary.dionaea.sensorunique,snort.alerts,wordpot.events,p0f.events,suricata.events,shockpot.events’
sudo ./install_hpfeeds.sh
sudo ./install_mnemosyne.sh
sudo ./install_honeymap.sh
安装完成后执行sudo supervisorctl status看到四个服务起来了
机器位于公网,就可以跳过这一步,如果只是放在内网里面,则需要配置mnemosyne的配置文件
#!bash
sudo vim /opt/mnemosyne/mnemosyne.cfg
ignore_rfc1918 = False
允许节点使用私有地址和服务器进行通信
重启服务
#!bash
sudo supervisorctl restart mnemosyne
运行最后一个脚本,对MHN进行配置
#!bash
sudo ./install_mhnserver.sh
===========================================================
MHN Configuration
===========================================================
Do you wish to run in Debug mode?: y/n n
Superuser email: [email protected]
Superuser password:
Superuser password: (again):
Server base url [“http://1.2.3.4″]: http://192.168.5.3
Honeymap url [http://1.2.3.4:3000]: http://192.168.5.3:3000
Mail server address [“localhost”]:
Mail server port [25]:
Use TLS for email?: y/n y
Use SSL for email?: y/n y
Mail server username [“”]:
Mail server password [“”]:
Mail default sender [“”]:
Path for log file [“mhn.log”]:
这个过程需要比较长的时间,需要初始化数据库,同时还要插入Snort/Suricata规则,脚本运行结束后,直接访问配置中定义的base url,登录后就可以配置
一旦安装了基础的服务,就能够部署蜜罐节点了,通过web来展示相关数据等等,可以根据具体的境况做一些简单的调整。
例如要非匿名的将收集到得攻击数据回传到ThreatStream,要做以下操作
#!bash
cd /opt/mhn/scripts
sudo ./disable_collector.sh
执行enable_collector.sh可以开启
如果想修改smtp服务的配置,可以编辑config.py,
绝对路径
#!bash
/opt/mhn/server/config.py
cd /opt/mhn/server
sudo vim config.py
sudo supervisorctl restart mhn-uwsgi
尽量不要使用超级管理员来配置,可以从web页面中添加其他的用户,但是所有用户都是超级用户,没有任何区别,当你删除用户的时候,实际上并没有吧该用户删除,只是在数据库中标记为”not active”,同时该用户不能再次被使用,除非更改数据库。
也可以从终端去直接更改用户的密码
#!bash
sudo su
cd /opt/mhn/
source env/bin/activate
cd server
python manual_password_reset.py
deactivate
exit
如果发现服务不正常,你可以使用一些命令和排查一些日志来来判断问题出在哪里,第一个命令就是supervisorctl,可以看到那些进程出问题了,那些在正常的运行。
#!bash
supervisorctlv status
#列出所有进程的状态
supervisorctl restart [process|all]
#重启单个或者全部进程
supervisorctl start [process|all]
#开始单个进程或者全部进程
supervisorctl stop [process|all]
#停止单个进程或者全部进程
如果你发现一个进程的状态为ERROR或者FATAL,就需在 /etc/supervisor/conf.d/找到对应进程的配置文件,查看日志进行分析 https://github.com/threatstream/mhn/wiki/MHN-Troubleshooting-Guide,寻求帮助 遇到的问题:
1.honeymap在安装的时候报错
#!bash
hg clone http://code.google.com/p/go.net/
mv go.net/ /opt/honeymap/server/src/code.google.com/p/
go build
supervisorctl restart honeymap
MHN的web接口是很简洁明了的,第一次访问web截面时,需要输入账户名和密码,登录成功后会看见一个总结性的页面:
1.在最近24小时内有多少攻击着攻击
2.攻击次数排在前五的IP
3.被攻击端口排在前五的端口
4.top 5的攻击签名
还有一些菜单选项可以进行配置或者获取更多的攻击细节
Map:查看攻击者的IP在全球的分布
Deploy:添加,编辑和使用蜜罐的部署脚本
Attacks:所有攻击者的列表
Payloads:所有攻击的payload,其实只有三种蜜罐可以收集payload(snort,dionaea.glastofp)
Rules:所有的snort和suricata规则
Seneors:有安装蜜罐节点操作的相关记录
Settings:MHN服务的设置
攻击来源全球的分布图,运行在3000端口,是不需要验证就能看到的,可以做ACL开控制访问。
这一节中,主要讨论蜜罐,如何安装,多么容易操作,以及会出现的问题,是否需要在进行特殊的配置等等。也会进行一些测试,看攻击者如何攻击,蜜罐对攻击行为的记录。最后会讨论MHN如何收集信息,以及web所展现的数据。
安装蜜罐节点很容易,所有的节点都基于同样的平台,MHN上对每个蜜罐都有对应的安装脚本,所以安装起来是非常容易的,只需要一个服务器去安装。
我们在Ubuntu 14.04 LTS 上进行测试。建议通过ssh去访问,如果不可以,请安装ssh,修改对应的22端口,同时加防火墙保护
安装ssh
#!bash
sudo apt-get update && sudo apt-get upgrade && sudo apt-get install openssh-server
修改端口为2222
#!bash
vim /etc/ssh/sshd_config
Port 2222
重启服务
#!bash
sudo service ssh restart
定义的安装脚本在MHN服务器的web界面中,在”Deploy”这个选项下有所有蜜罐的安装脚本。
http://192.168.5.11/ui/manage-deploy/?script_id=11
安装完成后可以通过以下命令来检查
#!bash
sudo netstat –tunlp
#产看当前的网络连接情况
supervisorctl status
#查看运行状态
首先,安装一个wordpress蜜罐在Ubuntu 14.04 LTS上,安装完成后 sudo netstat –tunlp查看80端口是否打开, sudo supervisorctl status可以查看服务的运行状态。 访问后该ip,看到下图
如果想更改wp的插件和相关设置,
#!bash
vim /opt/wordpot/wordpot.conf
使用nmap扫描该80端口
#!bash
nmap -A -Pn -p80 192.168.10.21
通过nmap识别80看到的是wordpress 2.8,运行的http版本是0.96,识别出来的python 2.7.6的版本。这种端口扫描不会被记录,回传到MHN服务。
使用wpscan进行扫描
#!bash
wpscan –url http://ip/
p0f是一个被动的系统指纹识别工具,借助它可以快速识别操作系统的类型和其他的信息,它在MHN中部署也是很容易的,p0f有可以根据已有的指纹,能够快速的匹配,虽然不是一个精确计算,但是识别度很高。
通过netstat命令的输出可以看到没有p0f没有去新建新的进程来实现网络监听。
如果所要保护的ssh端口处于防火墙后或者前端有一个IPS/IDS,获取这些数据的时候就比较麻烦。
如果我们在安装了wordpot的机器上安装p0f,一个访问wordpot的80端口的请求不会触发wordpot的报警,但是p0f会触发,MHN只是能够显示攻击者攻击的端口,但是不能显示关于操作系统类型,uptime和其他的信息。p0f的日志是纯文本的,分析和收集数据不是太容易,还好p0f存在API,还有一些其他的工具,可以帮助我们快速分析。
如果需要正在进行攻击的系统系统的信息,可以从/var/log/p0f.out中提取,可以使用python、bash、sed、grep等来帮助你快速的获取想要的信息。 想要获取相关ip的系统信息,可以使用以下这个命令
#!bash
grep -n “\[ 192.168.10.151.*\(syn\)\|os\s*=” /var/log/p0f.out
如果想要获得更多关于p0f的信息,访问 http://www.sans.org/security-resources/idfaq/p0f.php,查看相关接口信息https://github.com/p0f/p0f/blob/master/docs/README,还有很重要的一点,p0f把攻击的信息保存在MHN服务的mongodb中,其他的一些信息,如操作系统类型等信息没有展现出来,有可能下一个版本会对这些信息进行展示。
kippo是一个中等交互式的ssh蜜罐,安装它很容易,但是要注意以下
1.ssh服务默认监听的是22端口,/etc/ssh/sshd_config为默认配置文件,要想正常运行,需要修改监听端口到2222。
2.安装完成后需要重启服务。
3.supervisor可以使kippo程序运行,但是不能够停止它,这需要修改部署脚本
进入web的deploy界面,选择kippo,在部署脚本后添加下面这些东西
#!bash
command=/opt/kippo/start.sh #modify this command for the line below
command=su kippo -c “authbind –deep twistd -n -y /opt/kippo/kippo.tac -l /opt/kippo/log/kippo.log –pidfile /opt/kippo/kippo.pid”
stopsignal=QUIT #Modify this line for the line below
stopasgroup=true
编辑完成后点击update保存,安装完成后就可以看到kippo监听在22端口,ssh服务在2222端口,下次ssh登录的服务器的时候需要指定ssh -p 2222 ip,否则登录的为kippo。
以下是一些关于kippo的介绍,包括如何配置以及工作原理:
1.默认的ssh登录账户名密码为root/12345,也可以进行配置,配置的路径在 /opt/kippo/data/userdb.txt,同时当攻击者登陆后,使用useradd和passwd添加账户和密码的时候也会保存在这个文件里面.
2.当攻击者下载文件时,下载的文件会被保存在/opt/kippo/dl
3.可以设置蜜罐中命令执行后的返回值,也可以添加命令.例如来修改ifconfig命令的输出,可以编辑/opt/kippo/txtcmds/sbin/ifconfig这个文本文件。
4.有一个特点就是,当攻击者输入exit想退出的时候,其实没有退出,只是显示退出,给攻击者一个假象,以为回到的他的本机,他接下来的操作还是会被记录到日志中。
5.你可以更改/opt/kippo/honeyfs,里面保存模拟的系统的文件等内容,使蜜罐更像真实环境。
6.log存储在/opt/kippo/log/kippo.log,你也可以修改配置,把log存储到数据库中,数据库的表结构在 /opt/kippo/doc/sql目录中。
7.每一次登录成功后的操作都会把日志单独再存储一份,存储的路径在/opt/kippo/log/tty,可以通过在/opt/kippo/utils中的playlog.py脚本,来重现这个操作过程。
安装和配置kippo后,如果有人尝试登录,会被记录登录所使用的用户名和密码。
我们用nmap来扫描,看到以下信息
根据nmap的输出,我们看到22端口已经被识别为ssh服务,其中输出的ssh版本能够在kippo.cfg中被修改,这种简单的扫描是不会在MHN服务上产生记录的 如果我们使用hydra(https://www.thc.org/thc-hydra/),去进行暴力破击(hydra -l root -P darkc0de.lst ssh://192.168.10.21),hydra在连接的时候 会出现一些问题,但是我们使用 medusa(http://foofus.net/goons/jmk/medusa/medusa.html)时,暴力破解的命令如下
#!bash
medusa -u root -P darkc0de.lst -M ssh -h 192.168.10.21
每进行一次尝试登录,都会产生一条扫描记录,如果想更了解kippo,可以参考http://edgis-security.org/honeypot/kippo/
Suricata的部署脚本没有问题,直接执行就好了,部署完成后需要重启服务。Suricata是一个IDS,监听的接口为eth0,规则是通过crontab中的/etc/cron.daily/update_suricata_rules.sh脚本,每天都从MHN服务更新的(可以开启或者关闭规则)
正如supervisor显示的,只有一个进程,没有生成其他的服务,因为他只是一个IDS,如果我们使用nmap进行扫描,只看到一个ssh服务,这侧扫描会被记录,同时在MHN中显示
Sensor Log:
MHN Server:
Suricata只会把攻击报告给MHN服务,但是攻击细节存储在Suricata的日志中,不会被显示
1./var/log/suricata.log:日志记录了Suricata进程相关的信息,如启动报错,错误的规则等等,这份日志由supervisor产生
2./var/log/suricata/:设计到suricata操作的输入日志,报警日志,http请求日志,dns请求日志等等
3./var/log/suricata/http.log:http请求,不是报警
4./var/log/suricata/fast.log:一行存储一个报警
5./var/log/suricata/eve.json:格式为json,包含报警和相关的事件
6./var/log/suricata/unified2.alert:报警文件为Barnyard2格式
(http://www.forensicswiki.org/wiki/Barnyard2)
Suricata的配置文件
1./opt/suricata/etc/suricata/classification.config :报警的优先级
2./opt/suricata/etc/suricata/reference.config :使用的漏洞数据库
3./opt/suricata/etc/suricata/suricata.yaml :suricata的配置文件
4./opt/suricata/etc/suricata/reference.config :通过配置来减少报警的数量,例如不想记录所有ICMP请求的来源为一样的IP
IDS/IPS配置是很复杂的,这里只是简单的说明,需要详细了解suricata的,访问这里http://suricata-ids.org/docs/
snort是像Suricata一样的IDS/IPS,和Suricata使用类似的规则,同时工作方式也很像,同样部署脚本没有问题,通过crontab.daily来更新规则库,不会其他用来监听连接的服务
它的配置文件和Suricata使用的suricata.yaml很像,它的配置文件为snort.conf,日志存储在/var/log/snort/alert目录下.
想更加了解snort,访问https://www.snort.org/
Amun蜜罐已经好久没有更新了,这里不做过多的讨论。
Shockpot是一个web蜜罐,用来模拟破壳漏洞,CVE-2014-6271 http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271,破壳漏洞是一个影响很广泛的漏洞,影响Mac OsX,Linux和Unix,这个漏洞产生在GNU Bash(shell)上,允许远程命令执行,虽然已经出现了补丁,但不是所有的机器都有更新。使用这个蜜罐,可以用来捕获这个漏洞的利用代码,
关于这个漏洞的详情https://shellshocker.net/
部署脚本有一些问题,进入Deploy页面,选择Shockpot对期做一点修改,在"#Config for supervisor. "和"EOF"中加入一下代码
[fetch_public_ip]
enabled = false
urls = [“http://api.ipify.org",”
http://bot.whatismyipaddress.com/”]
如果服务器有公网IP,就加入上面这一段.
安装完成后重启服务
看到以下运行的进程,有一个新的服务在80上监听
如果通过浏览器去访问http://ip ,会看到”It Works!”这个默认的Apache页面
telnet ip 80
GET / HTTP/1.0
返回以下头部
显示这是一个Debian服务器,使用了PHP和OpenSSL
nmap -A -p80 192.168.10.21
上面的这些操作MHN是不会记录的,下面我们来攻击蜜罐
#!bash
curl -H “User-Agent: () { :; }; /bin/ping -c 1 TARGET_HOST_IP” http://SHOCKPOT_IP
我看看到日志里输出/var/log/shockpot/shockpot.log report
MHN中的记录
更多关于破壳的利用https://blog.cloudflare.com/inside-shellshock/
Conpot是一个工业控制系统和Scada蜜罐,针对这些类型的攻击是在近几年快速增长,是因为安全在工业系统中要求较低,才造成了现在这种场面,安全专家们也在想办法保护这些脆弱的系统。
安装简单,安装完成后需要重启服务,使用supervisorctl status 可以看到一个进程,但是使用netsta 可以看到好几个监听的端口。
Conpot使用了一些模块,能够提供以下服务
MODBUS TCP —> tcp/502
HTTP —> tcp/80
SNMP —> udp/161
S7COMM —> tcp/102
使用nmap扫描
nmap -A -p1-1000 192.168.10.21
#!bash
nmap -sU -p161–script snmp-sysdescr 192.168.10.21
产生的记录
Glastopf是最好的web蜜罐,它模拟了很多漏洞,特别是远程文件包含漏洞,可以捕获到攻击只插入的文件.部署依旧很简单,安装完成后重启服务,你会看到一个进程
netstat 会有以下输出
模拟的http,mongodb只在本地监听.
#!bash
nmap -A -p80 192.168.10.21
你能看到模拟的是apache,我们使用web漏洞扫瞄器像niko(https://cirt.net/Nikto2) nikto -h 192.168.10.21
nikto报告了5536个项目,显然蜜罐对攻击者很有吸引力,我们到MHN的web界面上看到所有的攻击报告,但是如果我们点击Payload,选择glastopf.events,我们可以看到很多记录,在“Regex term”中输入”rfi”会看到下面这些
对于这些被下载的文件,我们能够看到它们的md5值,这些文件都保存在/opt/glastopf/data
Glastopf是很好配置的,/opt/glastopf/glastopf.cfg配置文件,日志/opt/glastopf/log/glastopf.log.
官网
https://www.honeynet.org/sites/default/files/files/KYT-Glastopf-Final_v1.pdf
dionaea将有漏洞的服务暴露出来,允许攻击者发送保存任何文件,安装简单
看到下面
暴露的服务
服务列表
#!bash
tcp/5060 —> SIP Protocol
tcp/5061 —> SIP Protocol over TLS
tcp/135 —> Remote procedure Call RPC
tcp/3306 —> MySQL Database
tcp/42 —> WINS Protocol
tcp/21 —> FTP Protocol
tcp/1433 —> MSSQL
tcp/445 —> SMB over TCP
udp/5060 —> SIP Protocol
udp/69 —> TFTP
nmap -sS -sV -p1-65535 192.168.10.21
在扫描结果中,我们看到ftp和smb服务的指纹是"Dionaea Honeypot",这种扫描产生的记录都被记录了,扫描UDP
#!bash
nmap -sU -sV -p69,5060 192.168.10.21
我们没有修改banner,会被nmap识别,如果需要修改,编辑 /usr/lib/dionaea/python/dionaea这个python文件,需要更加了解他,访问http://www.securityartwork.es/2014/06/05/avoiding-dionaea-service-identification/?lang=en,配置文件在 /etc/dionaea/dionaea.conf,日志保存在/var/dionaea/log/dionaea.log
使用nessus进行扫描,发现了53个问题,45个info,3个紧急
我们看到有MS04-007漏洞,这个漏洞能够执行任意代码,通过向主机发送ASN.1编码后的数据包,Metasploit中使用的模块是 “MS04-007 Microsoft ASN.1 Library Bitstring Heap Overflow”,使用Metasploit发起攻击,会返回“The SMB server did not reply to our request”,这种攻击会报告给mhn,攻击的细节保存在/var/dionaea/bistreams/.
我们已经大概了解了mhn的总体概况,怎么安装和怎么去部署蜜罐节点,还有这些蜜罐大概的一些情况。如果你清楚你想做的,部署蜜网是很有用的.可以获取攻击者更准确的信息,然后来做防御。
在部署蜜罐节点是,尽可能的根据具体情况来组合部署,这样可以是攻击者花费更多的时间,从中获取更多的信息,争取到更多的响应时间。
例如snort,Glastopf,Dionaea和kippo,在具体部署之前先要好好测试,避免在真实环境中出现意想不到的问题。
个人的看法: 曾经做过类似的一个东西,不过相比这个来说就有些粗糙了,MHN中支持的开源蜜罐种类很多,基本已经涵盖了现有所有的开源蜜罐,可以根据具体的业务场景来组合。也可以根据具体的场景来做二次开发,因为回传的数据有些简单了。如果是放置在内网中,报警功能就很有必要性,内网中得蜜罐只是为了能够延缓攻击的进度,以及及时发现入侵,从而切断入口。