这篇文章总结了一些我在安全工作里见到过的千奇百怪的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的办法隐藏自己。

待续

转载于:https://www.cnblogs.com/bonelee/p/7464001.html

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

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

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

  2. 使用DOM方法实现多附件上传客户端

    有时候需要传多个附件,再次我用javascript的dom方式实现了次功能,很实用的. 功能呢就是用户可以添加多个附件,每次点击 添加 添加一个新的上传文本域,对于已经添加的上传文本域,用户可以 点击 ...

  3. 【OSS】服务端签名后直传实现阿里云存储上传文件

    文章目录 1.前言 2.阿里云OSS 2.1.开通服务 2.2.创建Bucket 2.3.创建子账户 3.服务端 3.1.依赖导入 3.2.配置文件 3.3.控制器编写 3.4.接口测试 4.前端联调 ...

  4. Java微信浏览器上传文件使用Base64方法(增加压缩上传方法)

            如果要兼容微信端的浏览器,需要将图片转化成Base64这种格式后,并传给服务器进行处理.如要注意一下几个方面.         1.只允许拍照的图片上传.     <input  ...

  5. 上传百度文库要掌握的方法技巧,这样上传百度文库通过率高

    很多人在上传百度文库时总会遇到各种各样的困难,但实际上只要掌握了上传百度文库的一些技巧方法,其实上传百度文库通过率也很高,下面洛希网络科技分享百度文库上传那些事. 1 准备优质的百度账号 发布上传百度 ...

  6. 微信服务号调用扫一扫接口和拍照上传接口

    一.引入js <script type="text/javascript" src="${path}/wechat/js/jweixin-1.2.0.js" ...

  7. transferto()方法,是springmvc封装的方法,用于图片上传时,把内存中图片写入磁盘

    //上传图片//1图片存储的路径String pic_path="";//2原名称String originalFilename = items_pic.getOriginalFi ...

  8. 架构设计:文件服务的设计与实现

    功能 文件服务器的核心功能就两个:「文件上传」和「文件下载」!其中上传可能需要支持断点续传.分片上传.而下载可能需要进行下载保护,例如非指定客户端无法下载.除了这两个核心功能,一般都会有一个额外功能, ...

  9. 前后端分离微服务管理系统项目实战SaaS-HRM项目(九)——文件上传与PDF报表入门

    文章目录 九.文件上传与PDF报表入门 1.图片上传 <1>.Data URL (1).概述 (2).入门 (3).基本原理 (4).优缺点分析 <2>.实现用户头像上传 2. ...

最新文章

  1. golang 解析php序列化,golang实现php里的serialize()和unserialize()序列和反序列方法详解...
  2. 微信小程序组件化 快速实现可用模态窗
  3. 第一行代码学习笔记第九章——使用网络技术
  4. 安卓+php推,使用 PHP 消息队列实现 Android 与 Web 通信
  5. MySQL基础day05_MySQL数据库的备份与恢复-1-MySQL 5.6
  6. [TimLinux] scrapy 在Windows平台的安装
  7. 洛谷1004方格取数
  8. Redis数据类型之字符串String
  9. Ionic2 分享(微信分享+QQ分享+复制到剪贴板+微博分享)
  10. python写界面c这算法_OpenCV算法精解:基于Python与C.pdf
  11. 计算机登录密码保存,怎么查看电脑浏览器中保存的密码
  12. iPhone系统关闭自动更新并去除设置上的红点
  13. MySQL 线程池[2021-06-26]
  14. 【操作系统】分页式虚拟存储系统
  15. pacman基本命令
  16. 同步传输与异步传输【转载】
  17. FormData对象用法
  18. 战争雷霆服务器无响应,战争雷霆:2021年夏活马拉松活动简易攻略(空战篇)
  19. ONNX 模型图优化
  20. linux中realplayer.rpm格式的软件安装,realplayer安装过程中出现的文件依赖问题

热门文章

  1. xssfsheet removerow 剩下空白行怎么处理_你看不上的农业会计!我却凭借其账务处理,过上你求之不得的生活...
  2. python libusb多线程_一些有助于理解libusb1.0和ctypes的异步USB操作
  3. python音频聚类_Python实现聚类算法AP
  4. xshell-6以及xftp-6家庭版,学校版免费下载(百度云盘)
  5. react native 中下拉列表FlatList组件的讲解以及实例demo
  6. linux下查找某个文件位置的方法
  7. 意外收获字节跳动内部资料,Android岗
  8. 【Linux入门到精通系列讲解】工具——make/Makefile
  9. python【力扣LeetCode算法题库】169-多数元素
  10. 算法提高 邮票面值设计