ATT&CK 用于探测和分析
   不同于传统「检测恶意行为 - 阻断」的探测方式,基于 ATT&CK 的分析器还可以从日志和 event 中感知系统发生了什么事情,并由此检测 ATT&CK 中记录的可疑行为。

Level 1 - 利用 SEIM

数据收集和 SEIM 的使用

  对于每个 technique,ATT&CK 提供了 Data Sources 信息,通过收集这些信息,可以探测到一些 technique 的使用。
  纵观 ATT&CK 的 technique,有几个 Data Source 是很常见的:
  • 进程信息、进程命令行的监测。可以由 Sysmon、Windows Event Logs 以及 EDR(终端检测与响应系统)采集。
  • 文件和注册表的监测。采集方式同上。
  • 账户认证日志。可以通过 Windows 的 domain controller 日志获得。
  • 网络抓包。例如 Zeek。
  在收集完数据之后,应该把数据导入安全信息与事件管理软件(Security Information and Event Management,SEIM),以便分析。例如 Sysmon 检测到的数据可以用 ELK 来分析。ATT&CK 认为,收集、组织数据往往是系统中最困难的部分
有一些数据集可以用于测试。例如 Boss of the SOC (BOTS) 数据集, 以及 BRAWL 数据集。这些数据都有大量不同种类的来源。BOTS 包含了大量的真实数据以及噪音,而 BRAWL 仅包含攻击流量。
  我们以 CAR-2016–03–002 来演示上述的步骤。阅读文档可知,这个恶意行为是利用 wmic.exe 进行远程代码执行,可以用于 move laterally(横向移动)战术。它的特征是:命令行指令形如 wmic.exe /node:"\<hostname\>" process call create "\<command line\>",其中 hostname 可以替换为 IP 地址。
  更进一步,我们可以阅读文档,得知可以通过 osquery 和 Sysmon 这两种 sencor 去探测到它的 command line。于是,如果有攻击者利用此项技术进行横向移动,我们可以从 Sysmon 的日志里面通过 cmdline 特征检索到攻击行为。
   CAR 条目给出了一段伪代码,指引我们检索这种攻击方式(同时还提供了 Splunk、EQL、Logpoint 的代码)。如下:
1
processes = search Process:Create
2
wmic = filter processes where (exe == "wmic.exe" and command_line == "* process call create *" and command_line == "* /node:*")
3
output wmic
Copied!
  我们可以将之翻译成各种 SEIM 的语法,从而在任意 SEIM 中检索。
ATT&CK 的网站上给出了使用 Sigma 工具将其自带的规则转换为 ELK 的 KQL 格式的指引。但笔者尝试之后,发现 Sigma 转换出来的规则,直接放到 ELK 上会报错。例如 Sigma 转换的结果里面包含 winlog.event_data.CommandLine.keyword:*process*,但事实上我们的 BRAWL 数据集文件中没有 winlog 这个键。正确的 KQL 表述如下: data_model.fields.command_line.keyword: *process*
  接下来,我们在数据集中利用这条规则进行检索。数据集采用 BRAWL,其中的 sysmon-brawl_public_game_001.json 以 json 格式给出了大量的日志。格式形如:
1
{
2
"@timestamp": "2017-05-01T19:13:15.570Z",
3
"host": "platten-pc.brawlco.com",
4
"type": "sysmon",
5
"data_model": {
6
"fields": {
7
"log_name": "Microsoft-Windows-Sysmon/Operational",
8
"log_type": "Microsoft-Windows-Sysmon",
9
"fqdn": "platten-pc.brawlco.com",
10
"record_number": "3304386",
11
"keywords": "0x8000000000000000",
12
"severity": "Information",
13
"hostname": "platten-pc",
14
"event_code": "1",
15
"op_code": "0",
16
"user": "NT AUTHORITY\\SYSTEM",
17
"utc_time": "2017-05-01 19:13:15.570",
18
"uuid": "{6C70CE0A-88CB-5907-0000-0010B9651200}",
19
"process_guid": "{6C70CE0A-88CB-5907-0000-0010B9651200}",
20
"pid": "964",
21
"image_path": "C:\\Program Files\\SplunkUniversalForwarder\\bin\\splunk-netmon.exe",
22
"command_line": "\"c:\\Program Files\\SplunkUniversalForwarder\\bin\\splunk-netmon.exe\"",
23
"current_directory": "C:\\windows\\system32\\",
24
"logon_guid": "{6C70CE0A-7D69-5907-0000-0020E7030000}",
25
"logon_id": "0x3e7",
26
"terminal_session_id": "0",
27
"integrity_level": "System",
28
"parent_process_guid": "{6C70CE0A-7D7A-5907-0000-001038B40100}",
29
"ppid": "436",
30
"parent_image_path": "C:\\Program Files\\SplunkUniversalForwarder\\bin\\splunkd.exe",
31
"parent_command_line": "\"c:\\Program Files\\SplunkUniversalForwarder\\bin\\splunkd.exe\" service",
32
"hash": {
33
"SHA1": "AD0E97DECE3B040108E48BBA4EA9E67B9D08BE7D",
34
"MD5": "7FFB2D663D89892D3CAC89CFA909E997",
35
"SHA256": "FB0841D14787D3A5D5C019DA211F27672701C0B38E56A0C495D1E526F5A3275C",
36
"IMPHASH": "73E3DA6D7978644A85F1211293419094"
37
},
38
"exe": "splunk-netmon.exe",
39
"parent_exe": "splunkd.exe"
40
},
41
"action": [
42
"create"
43
],
44
"object": "process"
45
},
46
"game_id": "BRAWL_public_game_001",
47
"@uuid": "775055e5-abef-40e1-ba8d-3b309843c7c5"
48
}
Copied!
  创建一个 Elastic Cloud 的实例,导入数据:
把 BRAWL 的 Sysmon 日志数据导入到 ELK
  接下来进行检索。由于 Sigma 给出的规则是错误的,笔者自己把 CAR 条目上的伪代码翻译成了 KQL。KQL 的语法可以在官方文档查阅。
1
data_model.fields.command_line.keyword: (
2
*wmic*
3
AND *process*
4
AND *call*
5
AND *create*)
6
AND data_model.fields.command_line.keyword: */node*
Copied!
在 ELK 上根据制定规则检索恶意行为
  于是我们可以很清晰地看到,攻击者用账户名和密码登录,然后创建了一个任务 C:\and.exe -d -f
用于接下来的行动。

关于误报的处理措施

  由于我们的检索规则是字符串子串匹配,不可避免地会产生误报(假阳性)结果。当规则集越来越大,误报也会越来越多,极大干扰我们的分析工作。我们应该尽量细化规则,使误报尽可能少。当误报少到一定程度的时候,可以在报警时进行自动响应,也可以报警时交由人工复核。

Level 2 -

Last modified 6mo ago