How To Map Attack

Abstract:

要想还原出攻击图,需要想办法从日志或者流量(还有告警,但是告警可以从这里面生成)数据映射到战技术和攻击阶段;先在这里列出可能的难点,阅读论文查看方法,再对应难点进行解析。

  • 一个日志/流量数据,往往包含大量的正常记录,从正常检测出可能存在问题的记录。
  • 在一个网络拓扑环境中,可能存在多个攻击者,或者一个攻击者可能同时进行多个攻击活动;如何对可能存在的并行攻击活动进行聚合。
  • 可供判断的记录可能是从环境中不同位置收集的;如何融合和统一化表示这些多源(来自不同设备)异构(日志、流量、告警)的数据。

重复说明,当前的形式和任务是——找到可行的映射方法,暂时不关心是否有效或可能解决上述问题。

Content

LActDet: An Automatic Network Attack Activity Detection Framework for Multi-step Attacks

在背景阶段有一段表述是:

在网络入口部署网络入侵检测系统(NIDS)是针对中小型企业的公共wifi、移动网络和局域网的通用安全解决方案。NIDS生成警报,并将其发送到安全事件分析中心,如安全操作中心(SOC)。分析中心首先利用基于规则的工具对这些原始警报进行过滤、重复数据删除并关联,并依靠手动分析确定攻击活动的类型。传统的解决方案有两个限制。

基本流程为:网络入口流量->生成警报->基于规则过滤去重关联->手动分析确定攻击类型。文章给了一个SOC的研究:Matched and mismatched socs: A qualitative study on security operations center issues,但似乎没有提及具体的技术。

本文章的内容重点看IV. METHODOLOGY的C. Attack Event Extractor:

攻击事件提取器旨在从警报中提取攻击事件,该警报是对多个类似警报的中粒度描述,并将攻击事件映射到向量空间。为实现这一目标,实施了三个步骤。
(1) 重复数据消除。NIDS每天生成大量的警报,这些警报粒度太细,而且高度重复。例如,对于扫描局域网中主动主机的攻击尝试,攻击者以相同的方式扫描同一主机的m个不同端口,每个端口扫描动作都会触发扫描警报。如果攻击者扫描不同的主机,将生成警报。分析人员必须从大规模警报中提取有价值的信息,这是一个巨大的负担。因此,提取由同一攻击动作触发的多个类似警报的求和性描述是必要的。我们根据四元组信息(目标IP、源IP、时间戳和警报上下文中的消息字段)对相同的警报进行重复删除。
(2) 聚集。然后,我们根据攻击者和受害者主机的数量,将一个事件识别为一对一、一对多和多对一。对于一对多事件,我们将具有不同目标ip和相同的三个功能的警报抽象为一个警报,并使用相同的方法来删除多对一类型的重复警报。这样,我们就提取了攻击事件序列E。
(3) 映射。(暂不关心)

以及D. Attack Phase Embedder

我们利用一个基于LSTM的seq2seq模型,将攻击-事件-向量序列自动编码为攻击-阶段-向量序列。它由两个级联的LSTM网络组成。主LSTM作为一个编码器,将每个攻击事件向量转换为相应的隐藏向量,并将它们封装到潜在向量中。解码器反转该过程,将潜在向量转换为初始状态,并输出攻击相位向量序列。我们选择了少量的攻击活动来训练这个seq2seq模型。对于训练样本,我们根据专家经验确定每个事件的阶段,并根据$p’j=\frac{1}{m}\sum{e’_i\in P_j}e’_i$将具有相同阶段的攻击事件编码为攻击阶段向量.

下面结合源码进行说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
def event_extraction(sample_path, dv_model, np_path, log):
'''
alert去重, 获得attack event
输出: 按攻击阶段排序, 每一行表示一个event
'''

df = pd.read_csv(sample_path, low_memory=False)
#df = pd.read_excel(sample_path, engine='openpyxl')
df['timestamp'] = pd.to_datetime(df['timestamp'])
df['timestamp'] = df['timestamp'].dt.hour # 只保留小时

newdf = df.drop_duplicates(subset = ['timestamp', 'sig_id', 'ip_src', 'src_port', 'ip_dst', 'dst_port']) # 去重
#tmp = newdf.drop(columns = df.columns[[0, 1, 2, 3, 8, 9, 10, 11, 14]])
tmp = newdf[newdf.columns[4:5]]# .drop(columns = df.columns[[0, 1, 2, 3, 8, 9, 10, 11, 14]])

basename = os.path.basename(sample_path) # filename.xlsx
(filename, suffix) = os.path.splitext(basename)
phase_dict, event_vector_set = event_to_phaseDict(df)
phase_vector_sequence = obtain_activity_vector(phase_dict, filename, dv_model, log)
event_vector_sequence = obtain_event_vector(event_vector_set, filename, dv_model, log)
return phase_vector_sequence, event_vector_sequence

def event_to_phaseDict(df):
'''aggregate event from excel into attack phases'''

phase_dict = dict([(k, []) for k in attack_phase])
event_vector_set = []

for indexs in df.index:
# alert = df.loc[indexs].values[:-1] # attack_phase field is discarded
alert = df.loc[indexs]

line = "\t".join([str(al) for al in alert]) # fields in an event are seperated by '\t'

event_vector_set.append(line)

key = df.loc[indexs].values[-1]
if pd.isnull(key):
continue
else:
phase_dict[key].append(line)
return phase_dict, event_vector_set

源码给出的示例数据是ISCXIDS2012中的 Bruteforce 告警数据(对于一般日志文件文章建议使用开源软件Suricata 5.0.7生成),接下来一步一步看如何对应处理过程:

告警->事件:

  • 去重:经过去重处理后总量96->72,本身告警密度好像就不高。
  • 聚合:论文里的聚合是根据攻击者和受害者的对应数量进行的,对于1:n和n:1相同的警报类别和时间(小时)只保留一个(原文表述为alert as);而源码直接没有体现聚合过程,在event_to_phaseDict中的event_vector_set直接用alert聚合了,得到事件。

事件->阶段:

  • 比较明确,就是标注了数据训练一个LSTM。

KRYSTAL: Knowledge graph-based framework for tactical attack discovery in audit data

该文章广泛地基于规则、推理等方法,主组件分为溯源图构建->威胁检测告警->攻击场景还原。

  • 溯源图构建:没什么好说的,根据本体转成rdf,加入图压缩。

  • 威胁检测告警:原文表述如下:

    (i)改造和整合现有的威胁检测和警报技术(ii)通过转换策划的公共规则(例如Sigma规则)合并基于签名的威胁检测方法,(iii)将识别的攻击模式链接到高级攻击技术和策略(TTPs映射)。

    我们关注第三部分;前两部分简单说明如下:(i)来自Hossain的标签传播+标签衰减方法(ii)sigma规则:https://github.com/SigmaHQ/sigma (iii)sigma关键优势在于,标签元数据将规则链接到MITRE。
    所以sigma是怎么来的? https://sigmahq.io/ Sigma 是一种通用的开放签名格式,允许您以简单的方式描述相关的日志事件。规则格式非常灵活,易于编写,适用于任何类型的日志文件。Sigma 用于日志文件,就像 Snort 用于网络流量,YARA 用于文件。

HOLMES: Real-time APT Detection through Correlation of Suspicious Information Flows

我们关注IV. SYSTEM DESIGN中的B. TTP Specification部分。

TTP规范提供了低级审计事件和高级APT步骤之间的映射。因此,它们是我们的方法的一个中心组成部分。在本小节中,我们将描述TTP设计中的三个关键选择,以实现高效和精确的攻击检测。
具体来说,我们依赖于两种主要技术将审计日志数据提升到这个中间层: (a)以来源图的形式表示安全相关事件的中立表示,以及(b)使用ttp中涉及的实体之间的信息流依赖关系。

实际上,HOLMES仍然是基于规则的。
在图中,从左到右分别是攻击阶段、TTP(名称+实体)、事件族(我理解是可能会是该TTP的事件类别)、事件示例、严重等级(基于US-CERT和DHS共同定义的通用攻击模式枚举和分类(CAPEC)列表)、先决条件。

HSG的构造主要由先决条件驱动:如果满足了所有先决条件,则将TTP匹配并添加到HSG中。这个因素减少了数量。
下表为当前 HOLMES 实现中所使用的 TTP 规则规范的代表性集合。

说的也不是很明白,拿第一个举例,我怎么知道Trust_IP有哪些?