ExecSent:Mining for New C&C Domains in Live Networks with Adaptive Control Protocol Templates阅读笔记
一、概览
二、研究背景
2.1 基本假设
1.代码复用是恶意软件常用的构造方式。
恶意软件的源码在黑市上传播售卖是非常常见的情况。通常,新的恶意软件通过在原有样本的基础上新增一些功能来构造,于是许多恶意软件拥有相同的C2协议。
2.不同的网络有不同的流量特点。
例如,金融公司的局域网流量特点与技术公司有很大不同。这将导致,通过技术公司局域网的流量生成归纳的控制协议模版(CPT)在金融公司的局域网内会有一定的误报率。
3.受感染主机在局域网内占少部分。
现代技术中,恶意软件常用的传播方式以偷渡下载和社会工程学(垃圾邮件或各种诱骗下载技术)为主,导致恶意软件在局域网内的传播速度较慢,于是本文认为监控网络内受感染主机占少部分,大多数主机的通信都是正常的,异常流量占少数。
2.2 为什么需要适应背景流量
如基本假设2所述,不同的行业局域网流量具有不同的流量特点。于是CPT在一些网络中,如网络X,会有较大的误报率,而在其他网络中几乎没有误报。本文希望检测模型能够自动检测这样的情况,并相应的降低该CPT在网络X中的置信度,而在其他网络中保持该CPT的较高置信度。
在一个局域网中,每个CPT的置信度由两大因素决定:
- 相似性:衡量HTTP请求与控制协议模版 τ \tau τ的匹配程度;
- 特异性:控制协议模版 τ \tau τ的组件对于局域网流量的罕见程度。
如果一个HTTP请求与一个CPT匹配获得了较高的相似性与较高的特异性评价,则将该请求标记为C2流量。
2.3 为什么检测完整的HTTP请求包
恶意软件通常需要携带一些固定信息用于完成首次的C2通信,在C2服务器上注册自身的信息,这通常由URL中携带特定的参数名称和值来实现。以往关于URL签名自动生成技术的研究在这方面的检测上卓有成效,但是,随着远程控制技术的发展,恶意软件开始对这些数据进行加密、编码再嵌入URL中与C2服务器进行通信,或者将这些字符串信息嵌入例如user-agent这样的数据包头部字段中(一些恶意软件样本使用MD5编码作为user-agent的填充值),类似的还有其他数据包头部字段或者POST请求的正文部分。因此,仅考虑URL本身不足以很好地匹配C2通信的特点。
三、设计与实现
本文提出的模型先将HTTP请求进行预处理,以便于将请求数据的共性展现出来,用于聚类;聚类完成后每一簇流量生成对应CPT。在模型部署在局域网前,先捕获并配置与部署环境相适应的不同CPT的置信度,随后进行前期模型的动态调整,最终得到检测模型。
该模型在实时检测上的应用方法主要是检测网络的DNS请求,匹配返回的IP地址是否在前期部署时得到的C2 IP列表中。
3.1请求流量预处理
为了实现流量聚类,需要有一个衡量两个请求相似度的方法。以往的研究中通常使用的方法是使用URL字符串的距离来表示,但是URL包含的请求参数名称与类型能够更好的衡量两个URL的相似性,而不是简单的计算字符串之间的差距。于是本文提出了用数据类型及其长度来预处理请求数据的方法,如下所示。
定义数据类型有:整型integer,十六进制数hexadecimal(大写,小写,大小写混合),base64编码(基本型,URL安全型),字符串string(大写,小写,大小写混合)。
3.2请求流量聚类
流量聚类分两步进行:首先根据30天内访问的目标IP的前24位(同一C类网络,即共享同一DNS关系)进行粗粒度聚类,然后再在第一步聚类结果中根据流量内容的相似性进行第二次聚类。
其中,第一步聚类依赖一个大型本地DNS解析数据库;第二步聚类根据URL,user-agent,HTTP头字段与其相应的值使用层次聚类算法进行聚类。
3.3 生成CPT
在聚类结果中,每一簇对应可生成一个CPT。可以认为经过聚类之后,每一簇中包含的流量代表一种C2类型的请求,CPT高度概括了该簇C2控制的特点,并给出了流量过滤的正则表达式用于快速过滤。
τ 1 \tau_{1} τ1URL中位路径:尽管两个恶意软件的安装路径会有较大差异,但是我们观察到同一恶意软件家族或同一操作命令会有不变的路径部分。
τ 2 \tau_{2} τ2URL请求组件:每个URL请求中包含的参数名称、值的类型与长度。恶意软件经常使用URL参数来传递受感染主机的基本信息,如操作系统版本、唯一标识符等。
τ 3 \tau_{3} τ3user-agent:user-agent字段常被恶意软件滥用,用于进行与C2服务器的身份验证。
τ 4 \tau_{4} τ4其他头部字段:头部字段出现的顺序和值,有时是一些恶意软件所特有的。
τ 5 \tau_{5} τ5目标网络:在一些案例中,C2服务器可能会转移到同一网络(同一IP/24)中新的IP地址。
恶意软件家族:集群中C2通信关联的恶意软件家族名称。
URL正则表达式:用于在局域网中快速筛选出可能与该CPT匹配的流量。
背景流量特点:用于计算CPT对于部署局域网的特异性,调整该CPT的权值。
归纳出CPT后,检测一个HTTP请求属于哪一类,不再需要将其与所有的C2请求进行对比,只需要将其与CPT进行比较即可。CPT类似如下形式:
3.4适应部署网络
首先需要计算CPT中每个组件的特异性得分,这个特异性分数代表了CPT描述的流量在部署网络中的罕见程度。
例如,为了计算
τ
3
\tau_{3}
τ3的特异性得分,首先计算
τ
3
\tau_{3}
τ3中每个user-agent字符串
u
a
i
ua_{i}
uai的主机知名度得分
h
p
u
a
i
hp_{ua_{i}}
hpuai。统计过去W天内,部署网络中生成的包含
u
a
i
ua_{i}
uai的HTTP请求数量
h
n
u
a
i
hn_{ua_{i}}
hnuai,定义
h
p
u
a
i
=
h
n
u
a
i
m
a
x
j
{
h
n
u
a
j
}
hp_{ua_{i}}=\frac{hn_{ua_{i}}}{max_{j}\{hn_{ua_{j}}\}}
hpuai=maxj{hnuaj}hnuai。类似的,计算域名知名度得分
d
p
u
a
i
=
d
n
u
a
i
m
a
x
j
{
d
n
u
a
j
}
dp_{ua_{i}}=\frac{dn_{ua_{i}}}{max_{j}\{dn_{ua_{j}}\}}
dpuai=maxj{dnuaj}dnuai。这样计算是基于如果一个user-agent跨越许多主机和域名,则可以认为它是可信任的。相应的,如果一个user-agent有较高的主机知名度和较低的域名知名度,不能够说明该user-agent是可信的。
最后我们可以计算出
u
a
i
ua_{i}
uai的特异性得分
σ
3
,
u
a
i
=
1
−
m
i
n
(
h
p
u
a
i
,
d
p
u
a
i
)
\sigma_{3,ua_{i}}=1-min(hp_{ua_{i}},dp_{ua_{i}})
σ3,uai=1−min(hpuai,dpuai)。
其余CPT组件的特异性计算于此相似。
URL特异性得分的计算较为复杂,与其他组件的计算方法不同。本文提出使用SVM分类器来计算。
首先,在部署网络中收集流量数据,提取其中的URL,通过对URL分词,统计其中的词频。然后,对于给定URL,使用同样的分词方法分词,将其按照统计的字典转换为特征向量。最后,将捕获到的流量,转换成向量并标记为“常见”和“不常见”两种,将数据作为训练数据输入给SVM。
SVM将输出给定URL的常见指数
p
u
i
p_{u_{i}}
pui,于是URL的特异性得分
σ
u
i
=
1
−
p
u
i
\sigma_{u_{i}}=1-p_{u_{i}}
σui=1−pui。
3.5模版匹配
部署完成之后,对于局域网内大量的网络流量,先使用CPT内的正则表达式快速过滤流量,然后匹配CPT内的
τ
5
\tau_{5}
τ5,即IP前24位。如果两者都未能匹配,则认为该流量是正常流量。否则,计算流量的匹配度
S
(
r
,
τ
)
S(r,\tau)
S(r,τ)。
S
(
r
,
τ
)
=
∑
k
w
k
(
s
k
,
σ
k
)
⋅
s
k
∑
k
w
k
(
s
k
,
σ
k
)
σ
d
S(r,\tau)=\frac{\sum_{k}w_{k}(s_{k},\sigma_{k})·s_{k}}{\sum_{k}w_{k}(s_{k},\sigma_{k})}\sigma_{d}
S(r,τ)=∑kwk(sk,σk)∑kwk(sk,σk)⋅skσd
其中,
s
k
s_{k}
sk是相似度计算函数,
w
k
w_{k}
wk是一个动态权重函数。
s
1
s_{1}
s1:计算URL中位路径与CPT中URL中位路径的编辑距离。
s
2
a
s_{2a}
s2a:请求中请求的参数名称与CPT中记录的参数名称的Jaccard相似系数。
s
2
b
s_{2b}
s2b:如果请求中出现的数据类型在CPT中有记录,则记分加一,并将其长度与CPT记录长度的比值加到记分上。最后求出记分的平均值。
s
3
s_{3}
s3:计算user-agent与CPT记录中的user-agent的编辑距离。
s
4
s_{4}
s4:计算其他头部信息的CPT相似度得分。首先计算它们的Jaccard相似系数,然后考虑这些头部信息的出现顺序,如果顺序一致,设o=1,否则o=0,最后计算每个头部信息的值与CPT中记录的值的长度比值。最后,
s
4
s_{4}
s4等于上述三个相似度得分的平均值。
s
5
s_{5}
s5:如果目标IP的前24位与CPT中记录值匹配,则
s
5
s_{5}
s5设为1,否则为0。
w
k
(
s
k
,
σ
k
)
=
w
^
k
(
a
+
1
(
2
−
s
k
⋅
σ
k
)
n
)
w_{k}(s_{k},\sigma_{k})=\hat{w}_{k}(a+\frac{1}{(2-s_{k}·\sigma_{k})^{n}})
wk(sk,σk)=w^k(a+(2−sk⋅σk)n1),其中
w
^
\hat{w}
w^是一开始设置的固定权值。
四、实验数据
实验数据包含三个部分:恶意流量,局域网流量,基准数据。
- 恶意流量:恶意流量由知名安全厂商提供,每天大概收集到8000个恶意流量追踪数据。
- 局域网流量:分别在三个局域网内进行了实验,其中UNETA和UNETB是两个学术网,FNET是某金融机构局域网。
- 基准数据:基准数据用以评估我们的模型的准确率,其中包含
CCBL——人工审查过的,标记有恶意家族名称的数十万C2域名黑名单;
ATWL——过滤过的Alexa top 一百万域名。其中过滤掉不长期在名单内的域名,即过去一年中90%的时间不在top一百万名单内的域名;
PKIP——由注册上托管的IP;
威胁分析——安全审计人员人工审计。
五、思考
5.1过滤掉的Alexa top 百万中不常驻的数据,与PKIP中的域名使得噪声对检测结果的影响减小。本文中得到的启发:考虑噪声的时候应该从攻击者的角度进行考虑,得出噪声的特点。
5.2模型适应背景流量的思路非常关键,明显优于仅适用于特定场景的检测模型。
5.3数据预处理部分的variable name=<type;length>的处理方法非常有借鉴意义。对于base64编码的数据,是否应该可以考虑在预处理部分直接进行解码?
5.4对于网络中海量流量只含少数恶意流量的情况,检测器使用正则表达式进行过滤能够显著提升效率。
5.5在使用恶意流量聚类生成CPT时,本模型仅对通信行为进行聚类,为什么不像botminer一样将通信与活动作为两个聚类标准分别聚类,再联合分析两个聚类结果,得到最终的聚类?是因为关注活动信息涉及更多后续的流量,还是涉及流量内容/隐私信息,不方便获取相关流量?
5.6模型在计算URL特异性得分的时候使用了SVM分类器。众所周知,机器学习的算法的性能除了超参数的设置,还与数据处理类型有关。因为模型需要输入的数据格式是固定的,如何将事件描述成所需的格式是关键性问题。本文已经有了一个优秀的C2流量概括方式(CPT),能不能考虑基于CPT的思路,构造机器学习模型的输入,由训练机器学习模型直接作为分类器?在此猜想,作者不这么做,是因为机器学习在面临多分类问题,尤其是彼此相近可能行为上有相交的多个分类时,难以准确区分;如果不使用多分类方案,如文中使用的仅二分类方案则无法在检测结果中输出C2流量所属的恶意软件家族,二分类方案仅能判断流量是否远控流量。