加密恶意流量发现
- 背景:加密流量
- 基础知识:TLS
- 恶意软件流量特征:TLS特征、会话特征、心跳等
- 加密恶意流量发现思路:基于基础知识和恶意软件流量特征
- 工具介绍和使用:Wireshark / tshark
- 案例分析:经典赛事题目
心跳包:恶意软件每个一段固定时间向C&C服务器发送一个心跳包,以告知C&C服务器自己是否存活
背景
为了保护传输的数据,加密传输已经成为现有广泛应用的方式。然而,这也给了恶意应用开发者可乘之机,他们开始大量使用加密流量来逃避检测。Cisco 预测到 2020 年,将有 70%的恶意软件将使用某种类型的加密来隐藏恶意软件的传递、远程控制以及数据泄露等恶意行为。
- TLS协议
保密(message privacy):通过加密所有传输信息,使得第三方无法嗅探;
完整性(message integrity):通过MAC(消息验证码),以防传输信息被篡改;
认证(mutual authentication):双方认证, 防止身份被冒充;
握手过程会产生三个随机数:
- 客户端随机数(公开)
- 服务端随机数(公开)
- pre-master(服务器公钥加密)
client-random + server-random + pre-master , 生成主密钥master-key, 然后客户端和服务器端都会向对方发送一个用该密钥加密后的握手数据摘要,服务器端和客户端验证都通过后就可以开始通信了(这步是为了检验握手过程中数据是否被篡改过)。最后客户端和服务器端用该主密钥进行对称加密通信
- 恶意软件流量特征
(1)TLS协议特征
由于大部分恶意软件会复用同一个恶意软件的代码,因此许多恶意软件的 Client Hello 消息在一些特征上十分相似,如加密套件、扩展等。
1)Cilent Hello:
建立 TLS 连接的第一步是客户端向服务器端发送明文 Client Hello 消息,并将自己所支持的按优先级排列的加密套件信息和扩展列表发送给服务器端,这一消息的生成方式取决于构建客户端应用程序时所使用的软件包和方法。服务端反馈 Server Hello 消息,包含选择使用的加密套件、扩展列表和随机数等,这一消息基于服务器端所用库和配置以及 Client Hello 消息中的详细信息创建。
由上图可知:
客户端提供的加密套件标识号中,19、50、56、5、4,这几个标识号在恶意流量中比较常见,正常流量中比较少见。
服务器端选择的加密套件标识号中,49200、47、53、49161,这几个标识号在恶意流量中比较常见,正常流量中比较少见。
客户端提供的加密套件个数中,12个、28个,在恶意流量中比较常见,正常流量中比较少见
2)扩展:
恶意加密会话客户端所使用的扩展数目多为 5 个,而正常会话的客户端扩展数目较为多样。
3)服务器证书:
恶意证书与正常证书一个区别较大的特征是证书是否是自签名证书,大部分恶意软件为了方便会选择使用自签名证书。约 48%的恶意加密会话为自签名证书,而正常会话中约 12%的会话采用自签名证书。
4)域名信息:
恶意会话域名在 Alexa 排名如图 10 所示,可以看出,恶意会话所用域名有85%以上不在前一百万排名内,与之相反,正常会话中85%以上都位于前一百万排名内。换句话说,恶意会话使用的域名一般不太常见。
(2)会话统计特征
流级特征:流持续时间,流平均包长等特征。
包级特征:包长,包数量等特征。
(3)心跳
恶意软件可能具有报活机制,恶意软件每隔固定时间会向C&C服务器发送心跳包,来证明失陷机器和C&C的连接还在。一般服务器是不会对心跳包进行响应的。
- 加密恶意流量发现思路
流量审计:
- 会话统计特征:统计和观察源ip和目的ip之间的包数量
- TLS特征: 1. 域名是否可靠可用,使用第三方平台Alexa2. 加密套件是否是弱加密套件,加密套件的数量是否可疑3. 证书是否存在自签名的情况,certificate中issuer字段和subject字段是否一致,如一致则为自签名
- 心跳特征:源ip和目的ip之间的通信是否存在规律,比如每间隔一个固定时间来进行通信,这种非常可疑。
主动探测:
主动访问C&C服务器,或许可以获取更详细的信息。
- 工具介绍及使用
(1)wireshark:
1)过滤表达式:
协议过滤:
TCP : 只显示TCP协议的数据流 HTTP : 只显示HTTP协议的数据流 TLS : 只显示TLS协议的数据流 DNS : 只显示DNS协议的数据流
IP过滤:
ip.addr = x.x.x.x : ip为x.x.x.x有关的数据流 ip.src = x.x.x.x :源IP地址为x.x.x.x的数据流 ip.dst = x.x.x.x :目标IP地址为x.x.x.x的数据流
端口过滤:
tcp.port == 80,只显示80端口TCP数据流 udp.port == 67,只显示67端口UDP数据流 tcp.srcport == 80,只显示源地址80端口的数据流 tcp.dstport == 80,只显示目的地址80端口的数据流
连接符:
and, or tcp.port == 80 and ip.addr =x.x.x.x
tip:如果不清楚过滤数据包的表达式,可以尝试以下方法:
打开数据包
根据自己的过滤需求,找到数据包上对应的字段
右键点击该字段,选择 作为过滤器应用 -> 选中 ,这样就能自动生成过滤表达式了
2)协议分级:
统计 - 协议分级
3)会话:
统计 - 会话
4)I/O图标(做心跳分析):
统计 - I/O图标
添加过滤表达式过滤出想要查看的ip
使用I/O图标观察通信是否存在规律
(2)tshark(wireshark命令行版),以及常用的一些命令:
命令:
-r:要解析的pcap文件
-T fields:解析出的结果要以何种方式呈现
-e:要提取的字段
**_ws.col.Protocol** : 协议 **tls.app_data** :加密的应用数据 **tls.handshake.type** : 握手阶段 ** tls.handshake.ciphersuite **: 握手时选择的加密套件 **tls.handshake.extensions_length** : 拓展长度
:要写入的文件
示例:
"D:/Wireshark/tshark.exe" -r ./example.pcap -T fields -e ip.addr -e _ws.col.Protocol > out.txt
- 案例分析
导出所有client hello包,用wireshark的过滤器,然后导出csv
统计一下涉及到的所有的域名(host),并按照数量排序
对排名前20的域名在Alexa上进行搜索,观察他们的排名
找到可能的恶意域名后,使用tls.handshake.extensions_server_name == 恶意域名这个过滤表达式将相关数据包找到
使用I/O图标进行分析,发现有明显心跳
根据提示,攻击者喜欢玩cs(Cobalt Strike),使用checksum校验码(如KeVV)来下载恶意载荷,访问恶意域名/KeVV这个网站来获取payload
分析该payload(可以从github上找一找有没有现成的分析工具),获得flag
加密恶意攻击指令识别
- 背景:定位失陷机器和C&C后需要进一步分析
- 恶意流量指令特征:Cobalt Strike流量中不同指令的特点
- 加密恶意流量发现思路:基于恶意流量指令特征
- 工具介绍和使用:Wireshark
- 案例分析:经典赛事题目
背景
在经过恶意加密流量发现过程之后,我们能够定位到失陷主机和C&C服务器,此时能够进一步分析恶意行为,比如尝试分析恶意软件使用了哪些指令来执行恶意行为。恶意软件可以选择不同的协议作为通讯载体。常见的通信载体如(HTTP,HTTPS),常见的指令比如(beat,sleep,file,shell,hash,screen)
beat:心跳指令
sleep:改变心跳的频率
file:获取失陷主机的文件目录结构,类似于ls指令
shell:执行失陷主机上的一些系统命令
hash:将失陷主机上的登录密码(hash加密)转储,攻击者可以对这些密码进行hash解密
screen:攻击者使用截图的形式将失陷主机当前屏幕截图,将截图回传给C&C服务器
- HTTP恶意流量攻击指令:虽然是以明文的形式传输,但是会模拟正常流量且隐藏恶意特征
- HTTPS恶意流量攻击指令:有效载荷被加密,难以直接分析
- 恶意流量指令特征
(1)攻击环境搭建:
恶意软件,Cobalt Strike是一款团队作战渗透测试神器,分为客户端及服务端,一个服务端可以对应多个客户端,一个客户端可以连接多个服务端。
kali上安装方法:
apt install openjdk-17-jdk
apt install openjdk-17-jdk-headless
update-alternatives --config java
java -version
运行前,执行chmod 777 teamserver改变权限
CobaltStrike集成了端口转发、服务扫描,自动化溢出,多模式端口监听,windows exe 木马生成,windows dll 木马生成,java 木马生成,office 宏病毒生成,木马捆绑。钓鱼攻击包括:站点克隆,目标信息获取,java 执行,浏览器自动攻击等等强大的功能!
注:例子中的192.168.230.136充当的是CS(CS可理解为C2服务器)的角色;客户端可以使用其他的主机来连接192.168.230.136,作为攻击者(比如192.168.230.138)
- CS(C2服务器):192.168.230.136(linux kali)
- 攻击者:192.168.230.138(linux kali)
- 失陷主机:****192.168.230.134(window 10)
第一步:服务器运行teamserver命令 ./teamserver server_ip password
注:这里的server_ip为CS的服务器端,连接攻击者(一般为本机外网ip或域名);
password为攻击者连接需要的密码,可自设。
例如:./teamserver 192.168.230.136 123456
第二步:攻击者客户端连接 ./cobaltstrike
Host:CS的服务器端ip(第一步中的server_ip)
Port:默认50050
User:用户名
Password:连接密码(第一步中的password)
第三步:HTTP载荷生成
(1)添加HTTP Listener(用于攻击者监听C2服务器上的某一个端口,看看是否有失陷主机与C2服务器连接)
(2)生成后门
(3)运行后门并执行命令
将artifact.exe移植到失陷主机(192.168.230.134)上,双击运行。
(4)抓包分析
beat命令
在攻击者主机(192.168.230.138)上运行wireshark进行抓包,由于设置的心跳时长为10s,可以发现失陷主机(192.168.230.134)与C2服务器(192.168.230.136)每隔10s进行一次
通信(可以查询到192.168.230.136的流量是因为设置了HTTP Listener)
特点:时间上有规律;无POST包
sleep命令
sleep 5:修改心跳时间为5s
特点:改变时间规律;无POST包
screenshot命令
screenshot:屏幕截图
特点:双向大content-length
hashdump命令
hashdump
特点:POST回传包比响应包1要小得多,单向大content-length
file命令
右键explore -> file browser
特点:回传包length相对较大
shell命令
shell whoami
特点:回传包length相对较小
(2)HTTP-C2通信原理
由于失陷主机(右)与攻击者(左)间通过 CS TeamServer间接通信,因此CS的命令控制信道中,存在心跳请求、拉取指令 和 回传响应 的通信模式。如图所示是Beacon(失陷主机)与Teamserver(C2服务器)的通信特征,可以直观的看到Server下发任务,获取失陷主机POST响应的通信行为。
流程为:
失陷主机首先向CS发送心跳包,告知攻击者该失陷主机存活情况
攻击者通过CS向失陷主机发送GET请求,给失陷主机发送任务
失陷主机将结果返回给CS,再由CS传给攻击者(根据指令决定是否有第三步,如beat、 sleep指令就没有第三步)
(3)HTTP指令特点
1)beat
特点:
- 报活包具有明显的时间规律
- 心跳包过程中没有post回传数据
2)sleep
特点:
- 执行完sleep命令后,心跳间隔会随之变化
- 没有post回传数据
3)screenshot
特点:
- 响应包1和回传包的content-length都很大;即双向大content-length
4)hashdump
特点:
- 响应包1的content-length比回传包的content-length大很多,即单向大content-length
5)file
特点:
- 回传包的length较大
6)shell
特点:
- 回传包的length较小
length:数据包整体长度
content-length:数据段的长度
- 案例分析
案例描述:
现提供了一段时间的失陷主机的HTTP通讯流量(pcap文件),需要通过分析恶意软件通讯流量,从而在通信流量中得出下发的指令序列。
提示:
- 已定位到C2服务器的域名是 (d2o3aua148svqq.cloudfront.net);
- 指令包括(sleep,file,shell,hashdump,screenshot);
- 共包含50个指令;
用wireshark打开数据包
根据C2服务器域名,使用规则过滤出与之相关的流量
http.host == d2o3aua148svqq.cloudfront.net
使用上面的表达式过滤之后,只能显示目的地址为d2o3aua148svqq.cloudfront.net,即只能看到失陷主机向C2服务器发送的请求包,看不到C2服务器向失陷主机的返回包,这样不利于分析,因此可以根据过滤出来的流量包中显示的ip地址进行进一步过滤。
ip.addr == 18.65.190.184 and http(18.65.190.184是C2服务器的ip地址)
将筛选出来的流量包导出为csv文件以供分析(文件 -> 导出分组解析结果 -> As csv)
流量分析
(1)因为前面的数据包都是没有POST包的,因此有可能是beat和sleep包,所以首先关注时间信息,发现前面的数据包都是以5s为间隔的beat包
(2)然后根据上面统计的那几种指令的特点对流量进行分析即可。
加密代理流量分析
- 背景:加密代理流量
- 加密代理流量特征:包级特征、流级特征、TLS阶段特征等
- 加密代理流量分析思路:特征提取+模型训练+效果评估
- 工具介绍和使用:python、sklearn、tensorflow
- 案例分析:经典赛事题目
- 背景
- 不同恶意家族可能使用不同的恶意软件通过加密代理进行通信,访问恶意网站或正常网站,因此不同的恶意软件在通信流量上的特点呈现出多样性;
- 分析不同的加密代理产生的流量特点有助于识别不同的恶意家族,对于追踪溯源、恶意家族画像有重要作用;
- 现有研究多基于包级特征、流级特征、TLS信息特征等多维度特征进行分析,通过特征提取、训练模型的方式构建分类器,来达到加密代理分类的目的。
- 加密代理流量特征
包级特征:由于数据分组大小与网络服务有关且不受加密技术的影响,因此可以根据数据分组的分布对加密流量进行识别;可以关注包长分布特征;
包长分布特征:最大包长、最小包长、平均包长、中位数包长等信息;
流级特征:通过五元组(源IP,目的IP,源端口,目的端口,协议)确定数据流;加密流量只是对数据包的载荷进行加密,对流的特征属性的影响较小,因此可以根据流量的属性如传输速率、流中包数量、持续时间等提取相应的流量特征;
总体:传输速率,持续时间等;
前向:前向传输速率,前向包数量等;
后向:后向传输速率,后向包数量等;
TLS特征:
域名:域名信誉度
证书:是否自签名、有效期等
- 加密代理流量分析思路
- 工具介绍和使用
环境基础工具:Python,Anaconda ,(jupyter,colab);
特征提取工具: Wireshark导出, python下dpkt库,Zeek工具;
构建模型工具:python下sklearn库,tensorflow库,或其他分类器库,如pytorch;
wireshark导出csv文件:统计 -> 端点/会话 -> 点击复制,作为csv -> 复制到txt文件中 -> 修改文件格式为csv文件
- 案例分析
案例分析:
本赛题提供的日志数据为两种不同的加密代理产生的流量,并对加密代理类别进行了标注。请根据提供的已标注的训练样本(samples.csv)进行分析和模型训练,使得模型可从有效区分样本属于哪一种加密代理。
分析思路:
特征分析与提取;构建模型;评估效果;
特征分析:
IP信息特征:
- 可以通过将srcIP和dstIP拼接,使用空格符号替换‘.’符号,将srcIP和dstIP分为8个单独的部分,如(172 16 107 162 10 69 135 33);
- 然后使用gensim库下的word2vec算法将8个单独的部分分别转为N维的特征向量,最终对这8个N维的特征向量求平均,得到一个8维的IP信息特征;
- 使用word2vec的好处是,相似的输入通过word2vec后会输出相似的向量,最终通过求平均的方式,综合考虑了IP特征信息;
协议信息特征:
TLS版本信息,可以根据TLS版本提取一维向量,比如值为1代表TLS 1.1,值为2代表TLS 1.2, 值为3代表TLS 1.3;
证书信息特征:
C :国家 CN :公司名称 O:单位名称
** L :城市 OU :显示其他内容 ST:地址**
我们可以基于tlsSubject内容进行信息富化,比如单独分析C,L,O,CN,OU,ST这些信息以及tlsSubject和tlsIssuerDn中分别有多少个字段。针对C,L,O,CN,OU,ST,我们可以用6维特征表示,每一维特征分别对应每个字段的值在整体流量中出现的次数;针对tlsSubject和tlsIssuerDn中分别有多少个字段,我们可以用2维特征表示;
流级信息特征:
我们可以根据已有的流级信息,如bytesOut,bytesIn,pktsIn,pktsOut作为四维特征,同时进行信息富化,我们可以根据以上信息计算出进出字节以及进出包数量的一个比值,对应2维特征;
版权归原作者 过动猿 所有, 如有侵权,请联系我们删除。