本文主要是介绍【C2架构】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
C2架构
C2 架构也就可以理解为,恶意软件通过什么样的方式获取资源和命令,以及通过什么样的方式将数据回传给攻击者
使用的通信方式:
传输协议层 TCP、UDP
网络协议层 icmp(ping)
应用协议层 HTTP/HTTPS、FTP、DNS、SMTP
应用服务层 社交平台,网盘,消息推送服务
传输协议层
使用这层协议的恶意软件,不打个人终端,主要目标是关键基础设施的服务器,尤以 linux 为甚。原因有两个:
- 设备必须暴露在公网,传输协议层的恶意软件,都是被动监听。为了隐蔽性,往往不进行主动链接。
- 个人终端上有更好的C2方案。
其实不只是TCP、UDP,自数据链路层上,都可用户进行C2命令传输,处于内网渗透通信,使用 ARP 也不是不可能。但是如果网际数据传输,必须要传输层以上协议才可以。
基于 TCP/UDP 自定义协议网络通信分析
上线数据包:上线数据包中 一般会包含受害主机的一些基本信息,例如计算机名称,硬件 ID,计 算机版本信息等等内容,在传输之前,可能使用一些比较简单的自定 义算法,或者 RSA、AES 这类成熟的算法进行加密。
对于加密数据的处理,需要确定的是是否有采用已知的算法,定 位一些关键函数是非常快速的方法,以 Windows 程序为例:需要确 定是否导入了 Crypt*系列的函数。如果有,查看 CryptGenKey、 CryptImportKey 函数来截获加密类型及加密密钥信息,查看 CryptEncrypt 函数来截获要加密的内容。如果没有导入这类函数,很有可能是采用了自定义的加密算法,最快的跟踪方法是定位到发送部 分的函数,向前追溯,找到加密函数。
当发现无法连接到僵尸网络的主控服务器上(即 C&C 服务 器),为了让程序正常执行,并且捕获数据包,你需要对 C&C 服务器 进行模拟
在分析恶意软件时,如果该恶意软件使用了域名作为连接的 途径,我们可以在调试的过程中发现 gethostbyname 函数,我们可以 修改其返回值为我们自己虚拟机的 IP 地址。在虚拟机 上,我们可以运行 TCP 监听软件或者是 netcat,监听恶意程序需要连接的端口,直到其连接即可获取上线数 据包中的内容。
根据 IDA 中解析命令数据包的代码来对整个命令包的数据格式进 行分析,是了解功能的最佳途径,采用这种方法能够获取完 整的指令表。
网络协议层
ICMP通信
应用协议层
C2 架构比较常用的:http/https、FTP、DNS、SMTP等等。
使用应用层协议进行C2通信最重要的是隐蔽性、其次才是传输效率和适用场景。
传输文件:
如果进行文件下发和数据上传,最常见的选择是http、ftp。为了增加隐蔽性,某些样本加上DGA.
指令下发:
指令下发,不需要太多的流量载荷。一些样本追求隐蔽性,使用DNS隧道技术。
网际通信:在一些隔离环境中,邮件服务器常常被列为白名单。可以使用SMTP协议,进行内外网的通讯。
局域网内通信:局域网内一般会有IDS进行检测,动作太大会被发现,除了常规使用的通信方法外,LPR、RAW网络打印协议也是比较好的选择。
以office 钓鱼为例,攻击者通过恶意宏或者漏洞利用,使用cscript、wscript或者powershell 从远端 HTTP 服务器拉取后门,进行安装执行。
HTTP是明文传输,恶意软件进行数据上传时,往往会对内容进行处理时,简单的如base64,xor;强度大一点的会使用非对称加密算法进行处理。
但是HTTP通信需要IP或者域名,如果资产被拉入黑名单,很容易被IDS检测出来。所以,某些APT 恶意软件使用了DGA生成算法。动态变化的域名。
应用服务层
社交平台,网盘,消息推送服务:
这些应用的域名和IP都被标注了白名单,并且多数都有 API 可以使用。针对特定平台,
其实实际运用也有一定的局限,社交平台和消息服务往往都有数据限制,因此常被用于指令下发。而网盘之类的服务,自带文件属性,常被用于数据上传、资源下发。
这篇关于【C2架构】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!