【电子数据取证】关于CoblatStrike的流量特征取证分析

文章关键词:电子数据取证、流量分析、流量取证

一、前言

近期,网络安全团队在对公司内部网络进行安全检查时发现,有五台电脑出现了不明的网络流量。这些电脑并没有执行任何明显的操作,但是网络流量却显示它们正在向外传输数据。

初步调查后发现,这些数据流都通往同一个外部地址,并发现所有这些被控制的电脑都执行了相同的操作,下载并执行了一个来自外部地址的恶意程序。

这起事件引发了公司的担忧,因为如果这些电脑被黑客控制,那么黑客就能够访问公司的内部网络,甚至可能获取到敏感数据。

为了明确事情的真相,公司决定进一步调查此事。截取了一段流量并对其进行取证,大致确定了黑客使用的工具名叫Cobalt Strike,并对这起事件进行了相关处理。

通过这个案例,我们可以了解到Cobalt Strike的一些主要特征和操作方式。

二、基本运行原理

Cobalt Strike的运行需要一个连接被控端和控制端的teamserver,在一个完整的指令传输以及运行中,主要的步骤有:

被控端向team server发送一个心跳包,心跳包默认每60秒发送一次(可以手动修改),作用主要是为了迷惑安全软件,防止因为持续连接并发送数据而被检测到。

心跳包的数据信息被team server记录后,被控端会再次向team server发送一个心跳包询问是否有需要执行的指令,Team server接收到第二次心跳包后会将控制端输入的指令传送给被控端,被控端执行指令(间隔同样是默认60秒),当知晓以上的基本信息后,遇见未魔改的CS后就可以快速识别出流量的来源是CS:

在上面的流量包中,两台主机之间的通信基本上是每隔60秒通信一次且上下行的数据长度固定,大致可以判断出是一个没有经过修改的CS与被控端之间交流的流量。

三、可执行和文件的下载(stage)

Stage是可执行文件在运行后会使用http协议向指定服务器下载stage,指定服务器通常是team server,请求http的路径有多个,但不管怎样,路径名都符合checksum8原则,请求的路径的ascii的和与256取余之后的值为92(x86位木马)或者93(64位木马)

使用checksum8的Java代码:

public class EchoTest {

public static long checksum8(String text) {

if (text.length() < 4) {

return 0L;

}

text = text.replace("/", "");

long sum = 0L;

for (int x = 0; x < text.length(); x++) {

sum += text.charAt(x);

}

return sum % 256L;

}

public static void main(String[] args) throws Exception {

System.out.println(checksum8("4Ekx")); // Yle2、cKTZ、wQPD等

}

}

3.1、控制端命令的下发

控制端在向被控端下发命令时,在流量中会有比较明显的submit.php同时后接id参数:

3.2、user-agent头

在4.0之前的CS版本中,使用CS的流量的user-agent头是固定的,不会变化特征比较明显,在4.0之后的版本中user-agent头开始随机生成,避免被检测到。

4.0之前的版本,每次user-agent头都相同。

四、总结

在对流量的取证过程中,应当先了解各种工具的各种基本特征,才能根据其特征来分析并确定其类型,需要充分了解取证的技巧以及具备充实的知识储备,才能在令人眼花缭乱的数据流中找出关键的证据。

今后的流量取证中仍然需要继续学习,加强技术能力,为网络安全贡献一份力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值