我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

本文总结了我在安全工作中见过的一些稀奇古怪的C&C控制服务器设计方法和相应的检测方法。在每一个C&C控制服务中我都先介绍黑帽部分,也就是针对不同用途的C&C服务器设计方法,然后再介绍白帽部分,也就是相关的检测方法,让大家体会一下西方的套路。这里的一些白帽检测方法需要一些数据和统计学知识。我也在原理上简单讨论了利用数据进行安全分析的方法。从数学和数据原理的角度思考为什么这样做,可以作为数据科学在安全领域的一些例子。

0x00 什么是 C&C 服务器

C&C服务器(又称CNC服务器)一般是指挥和控制僵尸网络的主要服务器,用于与僵尸网络中各感染恶意软件的主机进行通信,指挥其攻击行为。各实例与其C&C服务器进行通信,获取攻击活动的指令,包括获取DDoS攻击的开始时间和目标、上传从主机窃取的信息、定期加密受感染机器上的文件以勒索赎金等。

为什么需要主动与C&C服务进行通信?因为大多数情况下,恶意软件都是通过钓鱼邮件等方式下载到被感染主机的,攻击者无法主动知道是谁下载的,也无法主动知道主机的状态(是否开机、是否联网等),除非被感染者主动告知。因此,内置了一种查找C&C主服务器的方法,可以与C&C保持联系,断线后重新连接。C&C控制服务攻防要点在于攻击者能否欺骗防守方,成功隐藏C&C服务:如果防守方检测到隐藏的C&C服务,则可以通过一些技术手段(封禁域名和IP地址等)或者非技术手段(上报安全应急中心等)切断与C&C的连接,从而有效破坏C&C服务。

找到之后与C&C之间的通讯方式不是本文的重点,可以是SSH文件传输,也可以是简单的HTTP GET和POST,技术含量不高,有少数依靠传输来隐藏的技术,比如利用DNS隧道来隐藏流量,如果有需要,后面我会详细讲解这些方法。

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

这是最常见的C&C服务器类型,攻击者将C&C服务器的IP地址硬编码在恶意软件代码中,然后在与C&C通信时使用HTTP拉取所需的攻击指令或上传从受感染主机窃取的信息。

这并不是什么先进的手段,因为如果获取到二进制代码,这种利用IP的方法很容易被安全人员利用逆向二进制代码或者检测蜜罐流量获取C&C服务器地址,然后上报给服务商封禁该IP。所以这种方法并不能有效隐藏C&C服务,如果抓到IP,杀毒软件更新病毒库,那么就彻底被毁掉了。现在国内大部分主控服务器都是这种靠运气不被抓到的方式存在的,他们靠的是数量多,今天抓到一个,当天就会出现三个,市场竞争非常激烈。

使用IP的国外C&C服务器一般都在AWS等云服务器上,一旦通知服务商,很容易封掉IP,国内云服务商态度暧昧,不过还是可以的。聪明的国内作者在东南亚租用云服务IP,可以有效避开国内监管,速度也不错(我不是教你这么做的)。

安全人员不要以为这种方法低级,可以轻易有效防御。比如被感染的机器无法安装杀毒软件或者你根本不知道被感染了。最近的一个例子就是最近比较流行的路由器植入Linux/Xor.DDOS,它的C&C控制就是AWS上的IP,影响很大,因为大多数人不知道路由器会被大规模植入恶意软件,路由器本身也很少受到保护。用IP做C&C正好,也省去了复杂的域名算法和DNS查询代码,保证了软件本身的轻量级。还有由于路由器本身是一直开着的,路由器木马不用担心丢失连接,C&C通信可以长时间维持连接,降低了木马被发现的几率。虽然手法并不花哨,但用得好还是很厉害的。关于这个木马的详细分析,请参见。

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

因为硬编码的 IP 很容易通过对二进制代码中的字符串段进行批量正则扫描来检测,所以一个变通的办法是申请一些域名,比如 .biz,而不是 IP 本身,这样在扫描二进制代码时就不会立即发现 IP 字段。这是一种广泛使用的方法。通常 C&C 域名会很长,伪装成一些个人主页或合法企业,甚至有虚假主页。即使付出这样的努力,这种方法也只是治标不治本,检测方法也比较简单。理由是:

等安全厂商都有经验丰富的安全人员,他们会快速定位到可能包含C&C域名的恶意软件的功能,并通过监控蜜罐的DNS查询数据来快速定位到C&C域名,并将这些定位到的域名上报给运营商或者黑名单等其他厂商。

新的C&C域名在DNS数据异常检测中会形成一些特定的模式,利用数据进行威胁感知的厂商可以很轻松地检测到这些新出现的陌生域名,并根据IP等网络特征判断其为可疑的C&C域名。

因此常见的C&C域名都在和安全厂商的黑名单竞争,谁比安全研究人员的逆向速度快,谁就赢了。但最近的情况是,随着基于数据的威胁感知越来越普遍,这些C&C域名的生命周期越来越短,倒霉的通常活不过半个小时。攻击者也会设计更复杂的方法来隐藏自己,因为注册一个域名需要一定的金钱,比如一个带隐私保护的.com域名就要几十块钱,而寻找僵尸主机植入木马又需要花费不少功夫,原本准备半年后再发起大规模攻击,结果半个小时就被封了,得不偿失。

在这种速度竞争中,一个低级却方便又省钱的招数就是使用免费的二级域名,比如3322家族,vicp家族等不审核二级域名的免费二级域名提供商,最著名的例子就是被微软利用法院授予的所有权关停的Win32/Nitol家族(虽然后来又收回了域名控制权)。这个方法是国内作者最喜欢的方法,资料里经常看到一些中文拼音类型的C&C域名,这种搞笑又占别人便宜的二级域名。可能是因为在我国申请顶级域名麻烦又贵,还容易暴露身份,还不如悄悄发财。你看,这不是我在教你怎么做。

真正有趣的是技术。更先进的 C&C 域名不止一个,它们通过一种称为 Fast Flux 的方法隐藏自己。

0x03 快速通量、通量和通量

攻击者应对传统蜜罐和二进制分析的方式并不是依赖单一的C&C,而是使用快速变化的C&C域名列表(fast flux 技术):攻击者控制几个到几十个C&C域名,这些域名都指向同一个IP地址,每隔几小时或几天该IP地址对应的域名的DNS就会发生变化,然后将这些C&C域名散布在代码中。对于传统的二进制分析来说,如果不能将整个C&C域名列表内的所有域名都放入黑名单,就无法有效销毁恶意软件。这是攻击者隐藏代码的能力与防御者的逆向工程、蜜罐监控能力的较量。这种方法被称为Fast flux,专门用来应对安全人员的人工分析。

防御Fast Flux的方法在流量数据中比较容易看到,例如威胁感知系统只需要对每次域名解析指向的IP地址的历史数据进行简单的分组即可,利用数据并不困难,因此出现了更加先进的flux和流量方法。

如果攻击者财大气粗,租用了多个IP地址,那么在轮换C&C域名的同时,还可以轮换IP地址。这样一来,M个C&C域名和N个IP地址的组合就有M*N种。如果轮换时间设计的稍微分散一些,蜜罐流量分析就会缺乏足够的数据支撑。检测流量的方法需要一些简单的图谱知识(请系好安全带,和家长一起观看):

如果把每个域名和 IP 地址看作图中的一个节点 V,把一条有效的域名-IP 记录看作两个节点对应的边 E,那么整个流量数据就可以表示为一个从 V_域名到 V_IP 的二分有向图。流量图就是这个巨大的二分有向图中的互射完全二分图。也就是说,存在这样一个子图,其中每个 V_域名节点都指向同一组 V_IP 节点,每个 V_IP 节点又被同一组 V_域名节点指向。示意图如下:

域名-IP 有向二分图

当然,被感染的IP是可以访问其他域的,如图所示。实际情况中,由于数据收集时间的限制,可以放宽每个IP节点必须访问所有C&C域的规定。

当攻击者得知安全人员可以利用图论打败他们的 flux 这样先进的设计方法时,更加疯狂的 flux 出现了:不仅可以在每个域名的记录中添加 A,也就是 IP,还可以选择不同的命名服务器 Name 来解析域名。如果攻击者足够有钱(并且有时间和精力),他可以控制 K 个名称定期或不定期轮换,这样可以得到 M*N*K 个组合。

flux 的方法看上去很巧妙,看上去比谁都运行得快,但实际上在实现上太巧妙了。漏洞在于名称设置:大多数正常的服务名称都是专有服务,而大多数 C&C 都设置在免费服务器等免费名称上。如果攻击者可以控制一系列名称用于 fast flux,那么这些都不是常用名称。任何不常见的服务器域名都会在流量数据异常检测中被检测到。上一节提到的通过异常检测检测 C&C 域名的方法也适用于 flux 中的名称。你看,攻击者很天真。

还有一种基于数据和机器学习的方法来监控fast flux的具体方法:如果我们仔细思考fast flux就会发现攻击者试图创造出一种巧妙的方法,但是这种方法本身有一个致命的缺陷,那就是追求快速,它的域名到IP记录转换速度过快,导致每个域名记录的TTL被迫设计得很短,而大多数正常服务都没有这样快速的域名到IP记录转换。大型网站的负载均衡、CDN服务的IP记录转换与fast flux有着完全不同的特点,这些特点可以很容易地被机器学习算法用来识别fast flux僵尸网络。相关研究可以参考fast flux早期的论文。

0x04 使用随机DGA算法:难度较大,不容易被抓

DGA域名生成算法( )是当今先进C&C方法的主流,在国外各大活跃恶意软件中都经常见到。如果你看到那些看似随机的C&C域名,都属于这一类。它的基本设计思想是域名字符串从来不写进代码里,而是写一定的随机算法,按照一个约定的随机数种子计算出一系列候选域名。攻击者用同样的算法和约定的种子计算出同样的列表,注册一个到多个域名。这样,代码里就不需要写任何字符串了,只是去掉约定而已。这种方法的厉害之处在于,随机数种子的约定可以在不需要沟通的情况下完成,比如当天的日期,比如当天的头条新闻等等。这种方法在密码学中叫做,即控制端和被控制端约定一个有很多答案的数学题,控制端选择一个,被控制端把它们全部算出来,总有一个答案。

一个简单的例子(引自)例如,这段代码可以使用今天,2015年11月3日作为种子,生成这个随机字符串作为今天的备用C&C域名:

def generate_domain(year, month, day):
“””Generates a domain name for the given date.”””
domain = “”
for i in range(16):
year = ((year ^ 8 * year) >> 11) ^ ((year & 0xFFFFFFF0) << 17)
month = ((month ^ 4 * month) >> 25) ^ 16 * (month & 0xFFFFFFF8)
day = ((day ^ (day << 13)) >> 19) ^ ((day & 0xFFFFFFFE) << 12)
domain += chr(((year ^ month ^ day) % 25) + 97)
return domain

DGA方法的代表作是,其分析论文可以在这里找到:它的基本思想是用每天的日期作为随机数种子生成数百到数千个伪随机字符串,然后从.com .cn .ws等可选的域名后缀中选取后缀生成候选C&C域名。攻击者使用同样的算法和种子得到同样的列表,然后从中选取一个注册为有效的C&C。即使安全人员已经捕获了二进制代码,用汇编语言逆向随机数生成算法比搜索字符串要困难得多,所以DGA是防止人工破解的有效方法。近年来使用DGA算法的恶意软件中,该方法被研究人员成功逆向,Zeus则因源代码泄露被破解,其他破解DGA算法的案例并不多。

如果某个DGA算法被破解,安全人员可以通过方法抢在攻击者之前把所有可能的域名都注册下来,并指向一个无效的IP。这种方法虽然是安全公司使用的,但是费时费力,绝对是雷锋的做法,因为注册一个域名是需要花钱的,而且每天都会出现很多备选域名,而且都是以非常昂贵的价格注册的,现在常见的C&C域名比如。还有一种更便宜有效的方法就是和DNS厂商合作,比如服务器上的服务可以实时推送DGA列表,禁止对这些域名的解析,使用的服务商就不会解析这些C&C域名,从而阻断恶意软件与C&C域名的通信。

从数据分析中我们可以看出,DGA 的另一个致命缺陷是会生成大量的替代域名。为了更快速地发动攻击,比如攻击者在客户要求付款后半小时内就发起 DDoS 攻击,那么对 C&C 的查询频率至少为每半小时一次,这就导致对 C&C 的查询过于频繁。虽然 DGA 本身看起来隐藏在很多其他合法流量中,但针对 DGA 的特性,目前已经有很多算法。比如我使用机器学习来识别随机生成的 C&C 域名,就是利用 DGA 的随机性和其他特性来进行识别的。安全研究人员可以使用类似的算法来筛选疑似 DGA,然后根据频繁访问这些 DGA 域名的 IP 地址等其他特征,使用图论或其他统计学方法识别 C&C 服务和被感染的 IP。

0x05 高级变形 DGA:如果 DGA 看起来不是随机的

基于DGA检测的方法大多利用了DGA的随机性,所以现在先进的DGA一般采用字典组合,比如etc.,看起来可疑性远没有那么大。攻击者用这种方法来对付威胁感知和机器学习检测方法。最近在思科的一篇博客中出现了一个例子,文中提到的DGA是硬编码在代码中的小字典文件,通过单词组合来生成C&C域名。这些字典组合DGA看起来并不随机,而大多数关于随机DGA机器学习方法的论文和博客都是没用的。

该类DGA目前还没有成熟有效的检测方法,因为词典是未知的,可以是英文单词、人名,也可以是任意语言的单词。常用的方法还是基于随机DGA中使用的n-gram方法,比如利用已知DGA的n-gram分布来判断未知DGA,同时结合解析后的IP等其他特征,或者利用DGA的频繁查询特征与n-gram特征进行聚类。可以使用“ ”等关键词搜索相关论文。

0x06 多层混合C&C,跟我左手右手慢动作:最难,不容易被抓

正如DGA部分所说,DGA的致命缺陷是被动查询,如果想快速发起攻击,必须频繁查询C&C,这就导致C&C查询数据相较于正常查询流量而言异常。多层混合C&C可以有效避免这个问题,是一种牺牲小兵保全大王的策略,这种手段在亚洲地区已经见过几次了。

例如攻击者设计一个两层的C&C网络,Boss级C&C使用一级域名列表,比如.com域名,级C&C使用免费的二级域名列表。例如每天查询一次Boss级C&C,拉取当天的 C&C域名列表,然后每分钟查询一次 C&C域名,接收攻击指令。示意图如下:

两层混合C&C示意图

检测和阻断此类高级混合 C&C 的难点在于:

数据中Boss级C&C出现的概率很低,可以是不定期的,也可以是一周一次。如果使用一些很早以前就注册的域名,或者通过入侵别人的服务器来使用无辜的域名,Boss级C&C很容易逃避异常检测。

数据中能检测到的都是经常被查询的低级C&C域名,如果屏蔽这些域名,那么在下一轮更新C&C列表后,这种屏蔽方式就失效了,C&C的域名都是主动上来找死的,反正二级域名都是免费的。

更高级的做法是,如果Boss级C&C列表里的域名用完了,它可以通过这个二层网络实时推送新的Boss级C&C列表,你看他们不需要经过DGA的麻烦。

检测和防御方法需要一定的数据和图论知识,具体可以参考检测通量的模型。同样是二层网络,但不同之处在于两个节点都是域名节点,我就当做作业留着,这里就不细说了。实现的另一个特点是域名的主要用途就是死,它们的价格往往不高,比如免费的二级域名或者免费的 ccTLD 或者 gTLD 后缀。可以利用这个特点缩小二层网络的规模,从而显著提高图数据库的计算速度。

0x07 使用论坛:难度低,被抓要看运气

上面说的方法多为攻击者自己架设服务器,如果攻击者的C&C域名被发现并封杀,这便会遭到破坏。聪明的攻击者想到了在论坛发帖,比如在特定的冷门话题下发包含C&C指令的推文,或者在非常冷门的话题上发包含控制指令的帖子。这样,即使被运营商或者安全研究团队发现,他们也无法封杀推特(我的意思是美国政府无权这么做)。去年被抓获的名为Mac..iWorm的恶意软件就是用它作为C&C控制服务器的,详情可以参考。还有一些方法可以将C&C信息隐藏在看似正常的文章中,防止被发现,比如这个来自MIT的有趣演示,在论文中隐藏加密信息。不过,在实际工作中,我还没见过如此高科技的C&C做法(看吧,我不是在教你这么做)。

这种方法不适合国内环境,因为在国外论坛不举报不删帖很容易发财,但水能载舟,亦能覆舟。在国内由于发帖身份管控严格,如果用这种方法,很有可能被眼尖的版主发现,然后报警。而且新浪微博发C&C控制微博也不现实,微博必须登录才能防爬虫,而且你也知道微博API有多麻烦。所以这种方法只是开开眼界,顺便写个笑话而已。

这里不得不插入一个笑话。一个真实的故事是,我们抓到一个bot在做DDoS攻击,我们的模型告诉我,攻击流量和访问流量是强相关的。经过仔细研究,我们发现这个bot可能使用关键词作为随机数种子,生成攻击DGA域名。但奇怪的是,在同一个bot感染的IP列表中,中国IP的随机数种子好像初始化有问题,每次的种子都一样。我们巧妙地抓住了这一点,以中国地区作为对比组,对DGA算法进行了逆向:因为特殊原因,中国地区的感染IP无法访问。如果我们假设中国地区的DGA种子永远是空字符串,我们几乎可以通过对比中国地区的DGA和其他地区的DGA,猜出它的DGA方法,从而逆向他们的DGA算法。这里要感谢国家。

0x08 其他一些高级技巧

限于篇幅,这里只简单介绍一些现阶段还不常用的C&C技术,感兴趣的看官可以自行搜索。

利用P2P网络的C&C。如果僵尸网络中所有被感染的IP都成为对方的C&C控制服务器,似乎很难摧毁所有C&C。检测的关键点是在网络初始化的时候,就像其他BT下载必须从种子或磁力链接开始一样。当被感染IP访问初始化C&C时,仍然需要使用上面提到的C&C方法,但频率很低。

IRC 通讯。这是一种历史悠久的传统 C&C 控制方式。由于 IRC 在日常生活中已经被微信等一些即时通讯服务所取代,普通人很少会使用 IRC,年轻的安全人员可能会忽略 IRC 这种老方法。虽然方法古老,但应用广泛,就像 T-800 机器人一样,“老而弥坚”。

你知道吗,你也可以使用手动C&C?我见过一个2003年遗留在某个乡镇政府内网的后门,都是手动一个个输入激活的,完全没有PS的痕迹,嗯。

0x09 结论

说了这么多,主要目的还是介绍一下国际上在恶意软件C&C设计和检测方面的先进经验。我们不能总是执着于易语言、VC6.0等中国特色,也需要向国际水平靠拢。同样,我们的安全研究人员也需要国际上的先进经验,才能领先于攻击者。C&C设计和防御从来都是猫捉老鼠的游戏,时不时就会出现一些谁也想不到的非常巧妙的方法。在检测C&C服务的过程中,数据科学和机器学习是非常重要的工具。C&C检测现在越来越多地使用数据方法。正如文章中看到的,攻击者已经设计了一些更先进的C&C设计方法来对抗数据分析和机器学习。足以看出数据科学在安全领域的重要作用,就连攻击者也亲身体验过。很多C&C服务看似随机、分布广泛,但在统计分析中它们会表现出一些特定的模式,让安全人员发现它们。没有人能欺骗统计规律,对吧?

二维码
扫一扫在手机端查看

本文链接:https://by928.com/4509.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线