Author: elknot@360corpsec


0x00 前言

前一段时间memcache drdos攻击可谓是借着各种渠道火了一次,包括笔者所在的公司也被社会人反手抡了几次,可以预见这种类型的DDoS一旦发生起来非常的可怕。我们对这种情况往往都是看到流量异常之后选择封堵相关的协议和端口,或者有钱的方法直接上电信云堤(据说收费非常坑爹,5000块钱一次,现在不知道涨价没有),这样的话始终处于一个被动挨打的局面,那么有没有什么方法可以稍微减轻一下被动的局面呢?答案在下面。


0x01 DDoS背后的故事

现在的DDoS其实说白了,也就那么几种方式,杀敌一千自损八百的TCP-Based Flood比如说SYN Flood,四两拨千斤的反射型DDoS也就是DRDoS比如说UDP Flood,然后就是基于Botnet的僵尸网络发起的DDoS比如PerlBot、Mirai这种。接着就是一些来自于应用层攻击的DDoS比如说CC、HTTP SlowRequest这些。当然了还有其他种类的DDoS。根据DDoSMon的数据来看,我们发现UDP-Based Flood实际上是占比最多的DDoS类型。

紧接着我们用时间排序去看一下一段时间内的DDoS详细数据,我们发现了一件有趣的事情:基本上SYN-Flood和UDP-Based Flood处于一个此消彼涨的关系,所以我们觉得有必要去了解一下里面的猫腻。

我们通过对一些DDoS流量进行筛选和分析发现,很多的DNS Flood、SYN Flood还有一些其他的TCP-Based Flood都是由于Botnet引起的(这里需要强调一下,数据可能不严谨,大多数都是来自于我这边蜜罐的捕获到的样本,由于本人比较穷,所以蜜罐节点较少),而这些botnet的家族分布和最近一段时间的攻击数据如下图所示(大家请忽略那个和我id一样的botnet,真尴尬,等有时间解释一下为什么要用这个id)。

OK,既然这样的话,我们把问题集中到focus解决由Botnet引起的DDoS攻击事件,就可以解决一部分的DDoS预警的事情了。
这里插一句,笔者最近使用memcache服务在某云厂商的VPS上搭建了一个开放11211端口的memcache的服务,很遗憾,只有几个大黑客用我的节点打了人了,具体打了谁我们在第三部分说。


0x02 Botnet的养殖和数据获取

首先botnet的养殖设施,俗称养鸡厂或者养马场,已经不是个太新的概念了,很多地方都有,算是蜜罐的一个变种,主要是用来保证botnet的存活同时捕获指令。大概先说一下思路,用逻辑链条来表示的话是这样的:

获取Botnet样本——》逆向分析指令集——》分配容器——》载入Botnet——》存活性检测——》流量监控——》收集Flood Target

我再来用大白话说一下完整的流程:我们通过蜜罐也好,还是其他的手段也好来获取Botnet的样本。通过对样本的分析(沙箱、IDA什么的无所谓)可以获取到Botnet运行相关的指令数据包和传递方式。当我们完成了分析之后,我们在服务器上为其预制一个容器,加载Botnet,同时开启抓包功能(可以设置BPF过滤规则过滤指定的协议,同时设置好iptables防止攻击真正发生),抓到指令后预警,输出攻击的目标,完结。
其实通过上面的描述你会发现,获取样本这一部分可以通过主动交互式蜜罐进行获取,botnet分析部分可以通过自动化沙箱来完成分析,容器分配和管理可以使用Kubernate等调度工具进行分配,流量监控和存活性检测这一部分可以依赖Kernel-Based Agent来检测,所以从逻辑链条来说,这一套使用自动化完成理论上是没有难度的。
虽然说实现上没有难度,但是我们仍需要注意以下几个点:
攻击行为假戏真做:由于要养殖Botnet,所以Botnet必定是存活的,有两种方法可以对Botnet进行限制,也就是Botnet减毒处理也就是把一些功能阉割掉,还有一种就是流量限制,开启对应的流量限制可以防止DDoS假戏真做,当然如果没有办法的话,不处理也行,但是当心被人查到是你们家的东西打了人家。
魔改容器:因为我们要对Botnet的行为和流量进行长时间监测,所以容器应该是我们Hook掉一些函数之后的魔改容器,当然也可以使用Agent这种大后门来对Botnet的系统级API进行Hook。
虚拟化技术的选择:在这里会有人问我为什么不选择虚拟机而选择容器作为养殖环境,一方面是因为虚拟化对资源占用比较多,同时成本较大,容易被发现,另一方面主要是由于容器的灵活性,当然我使用的是微软Hyper-V Docker,相对于其他传统的Docker而言,一张图就能说明白Hyper-V Docker和其他的Docker差别在哪里(图源自于笔者去年参加Microsoft Build Tour的时候拍的一张ppt)。

这样的话我们大概就有了个系统雏形,方便理解我还是画个图吧:

图里面大体都很好理解,前面没说到的是主要是规则那里,设置邮件告警和FastnetMon监测异常流量的原因主要是怕引起的攻击打出去的能检测的的到,并且及时通知异常流量,这里的规则一般都是手动维护。
其实这套系统是我过年的时候研究tor的同时搭建的,目前由于样本的问题监测到的DDoS基本上两只手能数的过来(截止到12号,日志里面显示的是23次攻击),样本的数量也就10个左右,具体的数据分析后面再说。
我们在设置bot的数据结构的时候,建议设置成如下的方式:

{
    "type": "botnet_info",
    "data":
    {
        "botnet_name": "elknot.xor",
        "botnet_caught_type": "Honeypot"
        "botnet_caught": "2018-02-17 14:25:74",
        "botnet_antivm": False,
        "botnet_status": "Alive",
        "botnet_container": "bot_e74a1dc3",
        "botnet_commands": ["PONG", "HTTP"]
        "botnet_attack": 
        [{
            "attack_info": "TCP SYN_Flood",
            "attcack_pps": 185425,
            "attack_target": ["171.***.***.24", "114.***.***.95"],
            "attack_true": True
        },
        {
            "attack_info": "UDP NTP_Flood",
            "attcack_pps": 64229,
            "attack_target": ["221.***.***.15", "94.***.***.12"],
            "attack_true": True
        }]
    }
}

其实还是为了方便对botnet进行管理和收集相关的信息,至于问BPF是啥的,建议回去恶补一下计算机网络编程,里面对于BPF(Berkeley Packet Filter)解释的非常详细。
有关告警的问题其实不限于邮件,短信、微信、IM神马的其实都可以,关键是方便通知即可。


0x03 养殖场的成果

观察了这么几天botnet的动向,我发现botnet其实并不是打那些政府、银行、教育、能源行业的服务器,通过我这边非常少量的数据可以观察到攻击目标行业的分布(我并没有存目标IP的画像,相反我在选择的时候接入了riskiq的pdns服务,因为不要钱)如下:

果然还是利益驱动比较大,因为游戏行业尤其是搭私服的,往往因为某些原因确实被DDoS干的很惨,这个往往也是很多为游戏业务提供云服务的痛点。其次就是学校,果然炸学校这种事儿不是说说而已。金融政府这些,我觉得现有的法律制度约束你懂的。
再看下另外一项数据,就是botnet发起攻击的数据,主要是两项,一项是攻击时间分布,另外一项是攻击类型分布,下面的两个统计结果。

看来是过年也没怎么好好休息啊,其实黑产一般过年会休息几天,然后年后集中搞几天事情,可能是因为今年过年之后就是各种开会所有没什么太多的机会吧。

这个就有点意思了,黑产看来也是懂得NTP Flood是目前放大倍数比较高的(最近的memcache比ntp要高),所以以后没点文化估计连黑产也干不了


0x04 总结

养殖场这个东西我觉得还是成本上有点高,所以大家在研究时候注意严格的成本限制,(最近真的因为这个搞得比较穷了)但是呢这个东西在研究一些的数据的时候真的能发现一些经验上看不到的东西,所以说有条件的话大家可以试试看。


ref:

http://forum.huawei.com/enterprise//zh/thread-361461.html
https://ddosmon.net/insight/
https://docs.microsoft.com/zh-cn/windows-server/get-started/nano-server-quick-start
https://docs.docker.com/machine/drivers/hyper-v/#where-to-go-next

源链接

Hacking more

...