这篇文章总结了一些我在安全工作里见到过的千奇百怪的C&C控制服务器的设计方法以及对应的侦测方法,在每个C&C控制服务先介绍黑帽部分即针对不同目的的C&C服务器设计方法,再介绍白帽部分即相关侦测办法,大家来感受一下西方的那一套。这里的白帽部分有一部分侦测方法需要一些数据和统计知识,我也顺便从原理上简单讨论了一下用数据进行安全分析的方法,从数学和数据原理上思考为什么这么做,可以当作数据科学在安全领域的一些例子学习一下。

0x00 什么是C&C服务器

C&C服务器(又称CNC服务器)也就是 Command & Control Server,一般是指挥控制僵尸网络botnet的主控服务器,用来和僵尸网络的每个感染了恶意软件(malware)的宿主机进行通讯并指挥它们的攻击行为。每个malware的实例通过和它的C&C服务器通讯获得指令进行攻击活动,包括获取DDoS攻击开始的时间和目标,上传从宿主机偷窃的到的信息,定时给感染机文件加密勒索等。

为什么malware需要主动和C&C服务通讯?因为多数情况下malware是通过钓鱼邮件啊等方法下载到感染宿主机,攻击者并不能主动得知malware被谁下载,也不能主动得知宿主机的状态(是否开机是否联网等),除非malware主动告诉他,所以malware都会内置一套寻找C&C主控服务器的方法以保持和C&C的联络和断线重连。C&C控制服务的攻防要点在于,攻击者能不能欺骗防御者成功隐藏C&C服务:如果防御者侦测到了隐藏的C&C服务,通过一些技术(封禁域名和IP等)或者非技术手段(汇报给安全应急中心等)切断malware和C&C之间的联系,就可以有效的摧毁botnet

寻找到C&C之后malware和C&C之间的通讯方式并不是本文攻防重点,它可以是SSH文件传输也可以是简单的HTTP GET和POST,技巧性不是很大,不多的几个靠传输来隐藏的技巧比如用DNS隧道隐藏流量这类方法如果有需要以后再来一发详细阐述。

0x01 IP地址:难度低,易被抓

这是最常见的一类C&C服务器。攻击者在恶意软件的代码里硬编码写上C&C服务器的IP地址,然后在需要和C&C通讯的时候用HTTP拉取需要的攻击指令或者上传从宿主感染机上盗取的信息等等。

这并不是一个高级的办法,因为如果malware的二进制代码被获取,这种用IP的方法很容易被安全人员通过反向工程二进制代码或者检测蜜罐流量得到C&C服务器的地址,从而汇报给服务提供商封禁IP。所以这种方法并不能有效隐藏C&C服务,IP被抓了被反毒软件更新病毒库以后整个botnet就被摧毁了。现在国内的多数malware的主控服务器都是以这种拼运气不被抓的方式存在,他们靠的是malware数量多,今天抓一个当天就再出来三个,市场竞争很激烈。

国外用IP的C&C服务器一般是在Amazon AWS之类的云服务器上,通知了服务提供商很容易封禁IP。国内的云服务商态度暧昧,不过也算还行吧。有机智的国内malware作者在东南亚地区租用云服务IP,可以有效避开国内监管而且速度不错(我并不是教你这么做啊)。

安全人员也不要以为这个方法低级就以为能轻易有效防御,比如说如果感染机不能安装防毒软件或者根本你就不知道中毒了。最近的一个例子是最近比较火的植入路由器的Linux/Xor.DDOS,它的C&C控制就是在AWS上面的IP,造成的影响很大,因为多数人并不知道路由器会被大规模植入恶意软件,路由器本身也很少有防护,正好适合用IP做C&C,还省去了复杂的域名算法和DNS查询的代码保证了软件本身的轻量化。也由于路由本身常开的特性,路由木马也不用担心失去链接,一次C&C的通讯可以保持连接很久,降低了木马被发现的机会。技巧虽然不华丽,但是用的好还是威力强大。该木马的详细分析参见http://blog.malwaremustdie.org/2015/09/mmd-0042-2015-polymorphic-in-elf.html 。

0x02 单一C&C域名:难度较低,易被抓

因为硬编码的IP容易通过在二进制码内的字串段批量regex扫描抓到,一个变通的办法就是申请一些域名,比如idontthinkyoucanreadthisdomain.biz代替IP本身,扫描二进制码就不会立刻找到IP字段。这是个很广泛使用的方法,通常C&C域名会名字很长,伪装成一些个人主页或者合法生意,甚至还有个假的首页。即使这么用心,这种方法还是治标不治本,侦测的方法也相对简单,原因是:

安全厂商比如Sophos等的资深安全人员经验丰富,他们会很快人工定位到恶意软件可能包含C&C域名的函数,并且通过监测蜜罐的DNS查询数据,很快定位到C&C域名。这些定位的域名会被上报给其他厂商比如运营商或者VirusTotal的黑名单

新的C&C域名会在DNS数据的异常检测里面形成一些特定的模式,通过数据做威胁感知的厂商很容易侦测到这些新出现的奇怪域名,并且通过IP和其他网络特征判定这是可疑C&C域名。

所以常见的C&C域名都在和安全厂商的黑名单比速度,如果比安全研究员反向工程快,它就赢了,但是最近的格局是随着基于数据的威胁感知越来越普遍,这些C&C域名的生命周期越来越短,运气不好的通常活不过半个小时。攻击者也会设计更复杂的办法隐藏自己,因为注册域名需要一定费用,比如带隐私保护的.com域名需要好几十美元,寻找肉鸡植入木马也要费很大功夫,本来准备大干一场连攻半年结果半个小时就被封了得不偿失。

在这个速度的比赛里,一个低级但是省钱方便技巧就是用免费二级域名,比如3322家族啊vicp家族等不审查二级域名的免费二级域名提供商,最著名的例子就是Win32/Nitol家族,搞的微软靠法院判来3322.org的所有权把他们整个端了(虽然后来域名控制权又被要回去了)。这个方法是国内malware作者最喜欢的一个方法,数据里常见一些汉语拼音类的C&C域名,比如woshinidie.3322.org等喜感又不忘占便宜的二级域名,可能因为在我国申请顶级域名麻烦还费钱容易暴露身份,不如闷声发大财。你看,这也不是我在教你这么做啊。

真正有意思的是技术是,比较高级的C&C域名都不止一个,通过一个叫做fast flux的办法隐藏自己。

待续

C&C控制服务的设计和侦测方法综述——DDoS攻击,上传从宿主机偷窃的到的信息,定时给感染机文件加密勒索等。的更多相关文章

  1. php后端控制可跨域的域名,允许图片跨域上传

    跨域问题经常需要面对,前端需要做的比较直接要么选择ajax异步提交,XML或者jsonp,要么表单提交前端常见跨域解决方案 jsonp基本可以搞定大部分跨域问题,但问题也比较明显,只能通过get方式提 ...

  2. java实现服务端守护进程来监听客户端通过上传json文件写数据到hbase中

    1.项目介绍: 由于大数据部门涉及到其他部门将数据传到数据中心,大部分公司采用的方式是用json文件的方式传输,因此就需要编写服务端和客户端的小程序了.而我主要实现服务端的代码,也有相应的客户端的测试 ...

  3. WEB服务端安全---文件上传漏洞

    1.简述 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务端命令的能力.这种攻击方式是最直接和有效的,而且互联网中我们经常会用到文件上传功能,它本身是没有问题的,正常的业 ...

  4. 以寡治众各个击破,超大文件分片上传之构建基于Vue.js3.0+Ant-desgin+Tornado6纯异步IO高效写入服务

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_218 分治算法是一种很古老但很务实的方法.本意即使将一个较大的整体打碎分成小的局部,这样每个小的局部都不足以对抗大的整体.战国时期 ...

  5. angulaijs中的ng-upload-file与阿里云oss服务的结合,实现在浏览器端上传文件到阿里云(速度可以达到1.5M)

    2015-10-26 angularjs结合aliyun浏览器端oos文件上传加临时身份验证例子 在服务端获取sts 源码: public class StsServiceSample { // 目前 ...

  6. 构建基于阿里云OSS文件上传服务

    转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50710132 <构建基于阿里云OSS文件上传服务> <构建基于OS ...

  7. Ali OSS服务端签名直传并设置上传回调

    服务端签名直传并设置上传回调 背景 请参考 Web端直传实践 里的背景介绍. 当采用服务端签名后直传方案后,问题来了,用户上传数据后,很多场景下,应用服务器都要知道用户上传了哪些文件,文件名字,甚至如 ...

  8. UMeditor控制多张图片上传顺序

    多张图片上传的顺序,受到用户使用习惯.插件上传和插件插入页面顺序的影响. 估计是考虑到上传性能,官方没有提供UMeditor控制展示顺序的配置.在上传过程中,用户点击拖动的第一张图片,将作为文件数组中 ...

  9. Struts2控制文件的上传与下载

    Struts2控制文件上传与下载的几个注意事项: (1)必须将表单的method设置为post,将enctype设置为multipart/from-data.只有这样,浏览器才会把用户选择文件的二进制 ...

随机推荐

  1. jquery-layer.closeAll不执行的错觉

    在使用ajax.form提交的时候,弹出了layer插件的页面,于是我想使用layer插件提供的layer.closeAll()方法讲这个弹出的页面关闭,但是尝试了很久不行,到底是为什么呢? 过了一段 ...

  2. Android高级控件(一)——ListView绑定CheckBox实现全选,添加和删除等功能

    Android高级控件(一)--ListView绑定CheckBox实现全选,添加和删除等功能 这个控件还是挺复杂的.也是项目中应该算是比較经常使用的了,所以写了一个小Demo来讲讲,主要是自己定义a ...

  3. 用LayerDrawable实现两个图片的叠加效果

    Drawable[] layers = new Drawable[2]; layers[0] = new ColorDrawable(primaryColor); layers[1] = new Co ...

  4. glove入门实战

    前两天怒刷微博,突然发现了刘知远老师分享的微博,顿时眼前一惊.原Po例如以下: http://weibo.com/1464484735/BhbLD70wa 因为我眼下的研究方向是word2vec.暗自 ...

  5. 我是怎么从项目中的lib加JAR更换为maven管理的

    原来我对maven的使用应该还是去年的时候吧,当时对maven并不感冒(请不要吐槽哈),认为为什么一定要用maven来管理呢,我自己管理jar不是一样么,当时还认为自己管理jar还各种方便还对mave ...

  6. CoreData 从入门到精通 (一) 数据模型 + CoreData 栈的创建

    CoreData 是 Cocoa 平台上用来管理模型层数据和数据持久化的一个框架,说简单点,就是一个数据库存储框架.CoreData 里相关的概念比较多,而且初始化也非常繁琐,所以对初学者的学习还是有 ...

  7. 超便携式截屏录屏软件FastStone Capture

    超便携式截屏录屏软件FastStone Capture

  8. string的一些操作

    //str.insert(1, "bbb"); //str.erase(5);//删除5以后的数字 //str.erase(str.begin()+2);//删除某个字符 //co ...

  9. JavaScript学习记录二

    title: JavaScript学习记录二 toc: true date: 2018-09-13 10:14:53 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

  10. 解决django.db.utils.InternalError: (1049, "Unknown database 'exam_db'")

    先检查seeting数据库配置DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'eaxm_db', ' ...