网络攻击者可以利用Covenant C2工具进行C&C通信,攻击者可以将通信内容加密从而规避传统的针对明文流量进行安全检测。本文探讨通过对加密C2框架Covenant的流量分析来说明如何能够检测此类加密通信行为,从而实现对C&C攻击的检测与预警。
Covenant是一个基于.NET的开源C2服务器,可以通过HTTP/HTTPS 控制Covenant agent,从而实现对目标的远程控制。Covenant agent在与C2通信时,使用base64/AES加密载荷的HTTP隧道构建加密通道,亦可选择使用SSL/TLS标准加密协议,但需自行准备证书,此工具并没有C&C服务端默认SSL证书。
利用Covenant C2工具进行一次完整建联包含3个阶段,流程如下图所示:
• 阶段1:
被控制端主动连接控制端,并使用GET方法请求默认的url:/en-us/index.html、/en-us/docs.html、/en-us/test.html其中之一来判断控制端是否存活。
• 阶段2:
控制端会将特定内容”Hello World”返回给被控制端。
• 阶段3:
当建立连接成功后,被控制端会使用POST方法请求默认url:/en-us/index.html、/en-us/docs.html、/en-us/test.html其中之一,并将受控目标的GUID、Type、HMAC等数据加密发送给控制端。
相关固定配置如下图所示:
图1:DefaultHttpProfile.yaml配置文件
被控制端与控制端一次完整的上线通信相关流量分析如下:
• 阶段1:
图2:上线包
木马运行后,第一次请求的url是配置文件中默认提供的。
• 阶段2:
上线包中返回体中,控制端返回了特定内容Hello World给被控制端,特定内容Hello World也是配置文件中默认提供的。
• 阶段3:
图3:连接成功
连接成功后,被控制端主动将GUID、Type、IV、EncryptedMessage、HMAC一组固定的数据发送给控制端,并且数据经过加密后放在POST请求的data字段中,url同上线包一样是默认提供的;服务端返回的数据,同样加密后放到返回包body标签中,在第二个Hello World字符串后进行传输。对其进行解密,看到传输内容如下图所示:
图4:解密
上述解密内容中GUID为token;Type为生成木马时在木马样本中定义好的数值,当发送第一个POST请求包时Type为0,返回包Type为1,后续通信该值一直为1;Meta无特殊含义值为空;IV为AES加密的初始向量;EncryptedMessage为AES加密传输的消息;HMAC为消息验证码,对AES-key与EncryptedMessage进行消息验证,确保完整性。
其中AES的密钥AES-key在生成木马时随机产生,并硬编码在木马样本中,如下图:
图5:AES-key
加密过程如下图:
图6:加密过程
心跳包使用的url也是在配置文件DefaultHttpProfile.yaml中定义,默认为/en-us/index.html、/en-us/docs.html、/en-us/test.html其中之一,心跳时间与抖动时间在创建木马时可自定义设置,默认心跳为5秒、抖动时间为10秒,与阶段一中上线包区别为:心跳包会在Cookie中传递由服务端确定好的GUID(token值),如下图:
图7:心跳包
3. HTTPS流量分析
Covenant C2服务端提供了WEB服务,有前端界面,方便使用,其WEB服务界面如下:
图8:WEB前端界面
当启动服务端后,其WEB服务使用HTTPS协议,并且WEB服务使用固定TCP端口7443以及默认证书,如下图:
图9:WEB服务默认端口
图10:WEB服务默认证书
生成木马时,C&C通信方式也可以选择HTTPS加密,由于Covenant C2工具不提供agent与C2服务端之间通信的默认SSL证书,所以此工具的HTTPS模式需要自行生成并配置证书。
利用Covenant C2工具进行C&C通信,攻击者可以将通信内容加密从而规避传统明文流量设备的检测,但是基于人工智能、流行为特征和TLS限定域指纹检测的加密威胁智能检测系统能够检测此类加密通信行为。
虽然此工具的心跳是自定义的,但值是固定整数值,不能中途更改,其工具的心跳存在周期性,并且其web服务使用固定服务端口7443以及默认证书,可通过证书指纹、机器学习模型以及多流行为检测此工具的HTTPS模式C&C通信流量。
图11:Covenant C2检出结果
根据分析结果,观成科技的安全研究人员通过利用行为检测引擎,实现了对Covenant C2工具的有效检测。