C&C控制服务思路浅析

0x00 前言

在前面的博客中写过一次用python实现的后门 http://next.uuzdaisuki.com/2018/06/17/%E5%9F%BA%E4%BA%8Epython%E7%9A%84%E7%9B%B4%E8%BF%9Eshell%E5%92%8C%E5%8F%8D%E5%B0%84shell/ 里面的代码用最简单的例子来实现了远程控制。

但是当我们想要构建大规模僵尸网络的时候,就会发现这类简单的后门很不方便,我们不可能有时间一个一个手动的进行控制。而且大部分的肉鸡ip都是一直在变动而且无法直接访问的,所以远控中基本都使用反弹式通信,反弹式通信需要肉鸡每隔一段时间对我们的控制机发送心跳包,但是我们自己的电脑,ip很多情况也都是一直在变动的,我们很难保证自己拥有一个不变的公网ip。为了避免这些问题,我们就需要一台能够集中统一控制僵尸网络的主机,也就是C&C服务器。

  • C&C服务器:command and control server(命令与控制服务器)。一般是指挥控制僵尸网络的主控服务器,用来和每个肉鸡进行通信并指挥它们的攻击行为。

当然我这篇并不打算写一个简单的主控脚本和远控脚本,然后把它部署到公网服务器中,毕竟这些步骤只需要稍微改一下最开始那个链接里面脚本的代码就可以了。这篇我想要对通过各种方法部署和隐藏C&C服务器的方法做一个总结。

0x01 通过IP地址访问C&C服务器

最简单的方法就是租用一台云服务器,将服务器ip直接写远控脚本中反弹的ip中,然后所有肉鸡都会每隔一段时间与这个ip进行一次通信,我们也就可以在服务器上用脚本控制僵尸网络发动攻击。

但是由于ip地址是直接写死在远控脚本或远控程序中的,如果对方捕获了远控脚本或者远控程序,进行简单的二进制逆向扫描就可以得到我们服务器ip地址,并且对方机器经常访问同一个ip也会增加被发现的几率。一旦被发现,对方直接将ip加入黑名单,并且将ip提交给我们购买云服务器的提供商,服务器被封禁就会使远控全部失效。

优点:简单易实现、耗费小(仅服务器开销)。

缺点:极易被发现、很容易大规模失效。

0x02 通过域名访问C&C服务器

通过域名再指向服务器比起直接指向服务器只是将反弹ip改为反弹的域名。如果注册一些较正常的域名并且做一个伪装的主页,被发现的几率就会降低,而且直接二进制扫描不会被发现。但是逆向程序或着搭建蜜罐进行动态测试,很容易就能追踪到这些域名,将域名丢给运营商的黑名单就会造成大规模的远控失效。

不过比起仅通过ip地址访问这种方式要多花去安全人员的一点时间,如果在这个时间内达成目的,也算是成功了。

优点:简单易实现、耗费小(服务器和域名开销)。

缺点:易被发现、很容易大规模失效。

0x03 Fast flux

如果一个域名很容易被蜜罐捕获的话,我们可以将几十个域名分散的写在代码中,这些域名都指向同一台服务器的ip地址,程序会对域名轮换访问,然后提供一个较短的ttl使域名对ip的解析记录也会不断的更换。

这样被捕获某一部分域名添加黑名单并没有办法阻止恶意软件。而且因为ip解析记录一直变更也无法直接举报服务器,所以需要安全人员很高的逆向能力将恶意域名全部找出来。

不过这个方式有两个缺陷,一个是将捕获的一部分恶意域名的ip解析历史记录进行统计、数据分析,也会很快找到服务器的ip地址。另一个缺陷是域名记录的TTL相比正常的过短,容易被抓住特征。

优点:被发现后较难快速处理、被屏蔽一部分域名不会造成僵尸网络失效。

缺点:实现需要足够的代码混淆和隐藏能力、耗费较大(多个域名的开销)、一旦服务器ip被发现仍然会大规模失效。

0x04 Double flux、Triple flux

既然Fast flux容易被捕获一部分恶意域名进行数据分析而发现ip,那域名能增加ip也能增加,Double flux就是在一般的fast flux过程中除了轮换域名,也让ip可以轮换,如果我们有M个域名和N个ip这样就产生了M*N组的C&C通道,还有更多的干扰项。

Triple flux在Double flux的基础上,增加一层Name Server通过CNAME方式解析,这样域名有可能指向ip也有可能指向别的域名,然后再指向ip,这些Name Server也会定期轮换,就增加了更多C&C通道和干扰项。

这两种方法都增加了安全人员分析的难度,而且不会因为个别的服务器或域名被封禁导致僵尸网络失效,但是仍然存在着和普通Fast flux一样的问题,那就是因为域名到ip的解析一直轮换导致TTL需要设置很短,很容易被抓取特征而捕获。

优点:被发现后较难快速处理、被屏蔽一部分域名、封禁一部分ip都不会造成僵尸网络失效。

缺点:实现需要足够的代码混淆和隐藏能力、耗费很大(多个域名和多个服务器的开销)。

0x05 使用论坛等作为C&C服务器

自己架设服务器很容易被封禁,然后丢失僵尸网络的控制权,有的攻击者想到一个绝佳的办法:通过在一些论坛的冷门区域发一些C&C控制指令,然后让恶意软件通过爬虫在访问这些论坛的时候获取指令,最开始主要是在twitter上进行C&C控制,这种情况一开始很让安全人员头疼,因为访问这些论坛的请求本就和正常数据包差不多很难被发现,而且就算发现了,总不能把twitter的域名或者服务器添加很名单吧,这会影响网络的正常使用。后来发现了这种情况可以进行举报,从而封禁对应的账号。

优点:耗费低、不是特别容易被发现。

缺点:被发现后会被直接封禁账号损失僵尸网络。

0x06 使用随机域名生成算法

比起注册一堆域名耗费巨大,更好的办法是使用DGA(Domain Generation Algorithm)算法,这种C&C控制方法的思路就是控制一个确定的随机域名生成算法,用约定好的随机数种子生成大量的随机域名(如当天日期时间),恶意软件对这些域名全部进行访问,我们只需要按照规律注册其中个别有可能的域名就可以进行控制。

这个方法的重点在于没有任何确定的域名写入到恶意软件里,即使逆向也找不到真正的域名,而且逆向出这个随机算法的难度非常大。并且生成的随机域名数量十分巨大对方无法得知究竟我们注册了哪个域名。由于随机算法(提前设定好)和随机种子(可以根据时间等生成)都是我们不需要通信就可以得知的信息,我们任何时候都可以知道该注册那种类型的域名可以进行控制。

除非源码泄露,安全人员要逆向出DGA算法是非常困难的,也很难用黑名单的方式屏蔽掉所有的域名。目前应对这种C&C的方法一般是利用机器学习算法去判定域名的随机性,然后筛选出有可能是恶意域名的域名进行分析找出ip,或者利用机器学习算法智能的屏蔽对这些域名的访问。

天下没有免费的午餐,这种方式比起前面的方法也有一个缺陷,产生的随机域名过多且访问频率有限的时候,想通过C&C服务器进行控制就需要等待较长的时间,所以在攻击时灵活度不足。强行减少等待的时间就得增加访问频率,就会增加被发现的概率。

优点:非常难被封禁、很难通过逆向的方式解决掉恶意域名、耗费低(只需一台服务器和几个域名)。

缺点:控制延迟很高、灵活度不足。

0x07 使用变形DGA算法

这个方法是为了对抗检测域名随机性的机器学习算法而产生的,大体步骤和上面相似,不同处是比起使用域名随机算法,添加一些英文单词作为字典构成域名,就比较接近正常的网页,不会被普通的机器学习算法检测出来。

还是那句话,天下没有免费的午餐,添加字典减少了随机性,必然会缩小产生域名的数量,很快就会用完所有的域名。

优点:非常难被封禁、很难通过逆向的方式解决掉恶意域名、耗费低(只需一台服务器和几个域名)。

缺点:控制延迟很高、灵活度不足。

0x08 总结

C&C的设计与防御是目前攻防中很重要的一部分,围绕着C&C,双方在攻防博弈中各显神通,完美的结合了机器学习、数据科学等知识,是非常有学习和研究价值的。

fork me on github