Kestrel 提供了一个抽象层来阻止网络威胁搜寻中涉及的重复。
-
Kestrel 语言:一种威胁狩猎语言,供人类表达要狩猎的内容。
-
表达的知识,什么花样,分析和狩猎流动。
-
从各个狩猎步骤组成可重复使用的狩猎流程。
-
使用人性化的基于实体的数据表示抽象进行推理。
-
考虑异构数据和威胁情报源。
-
应用现有的公共和专有检测逻辑作为分析。
-
重复使用和共享个人狩猎步骤和整个狩猎书籍。
-
-
Kestrel 运行时:处理如何寻找.
-
根据特定的狩猎平台说明编译什么。
-
在本地和远程执行编译后的代码。
-
将原始日志和记录组装到实体中以进行基于实体的推理。
-
缓存中间数据和相关记录以实现快速响应。
-
预取相关日志和记录,用于实体之间的链接构建。
-
为数据源和分析执行定义可扩展接口。
-
架构
整个 Kestrel 运行时由以下 Python 包组成:
-
kestrel
(在kestrel-lang存储库中):解释器包括解析器、会话管理、代码生成、数据源和分析接口管理器以及命令行前端。 -
firepit
(在firepit存储库中):Kestrel 内部数据存储从数据源中提取数据、缓存相关数据并根据每个 Kestrel 变量链接记录。 -
kestrel_datasource_stixshifter
(在kestrel-lang存储库中):STIX-Shifter 数据源接口,用于通过 STIX-Shifter 管理数据源。 -
kestrel_datasource_stixbundle
(在kestrel-lang存储库中):用于摄取已密封在 STIX 包中的静态遥测数据的数据源接口。 -
kestrel_analytics_docker
(在kestrel-lang存储库中):在 docker 容器中执行分析的分析接口。 -
kestrel_jupyter_kernel
(在kestrel-jupyter存储库中):在 Jupyter 笔记本中使用 Kestrel 的 Kestrel Jupyter Notebook 内核。 -
kestrel_ipython
(在kestrel-jupyter存储库中):用于在 iPython 中编写本机 Kestrel的 iPython魔术命令实现。
威胁狩猎教程
在本教程中,您将安装 Kestrel 运行时、编写您的第一个 hello world 搜索、调查数据源、应用分析并构建更大的搜索流。
安装
确保你已经安装了Python 3和pip。安装 Kestrel 的最简单方法是使用 pip:
$ pip install --upgrade pip $ pip install kestrel-lang
如果您需要更多控制,请查看以下安装指南以了解更多详细信息。
编写您的第一个狩猎流程
由于您尚未设置数据源来检索真实世界的监控数据,因此您将在 Kestrel 中创建一些实体以进行搜索。
# create four process entities in Kestrel and store them in the variable `proclist` proclist = NEW process [ {"name": "cmd.exe", "pid": "123"} , {"name": "explorer.exe", "pid": "99"} , {"name": "firefox.exe", "pid": "201"} , {"name": "chrome.exe", "pid": "205"} ] # match a pattern of browser processes, and put the matched entities in variable `browsers` browsers = GET process FROM proclist WHERE [process:name IN ('firefox.exe', 'chrome.exe')] # display the information (attributes name, pid) of the entities in variable `browsers` DISP browsers ATTR name, pid
复制这个简单的搜索流程,粘贴到您最喜欢的文本编辑器中,然后保存到一个文件中helloworld.hf
。
执行狩猎
在终端中使用 Kestrel 命令行实用程序执行整个寻线流程:
$ kestrel helloworld.hf
这就是 Kestrel 的批量执行模式。搜索流程将作为一个整体执行,并在执行结束时打印所有结果。
name pid chrome.exe 205 firefox.exe 201 [SUMMARY] block executed in 1 seconds VARIABLE TYPE #(ENTITIES) #(RECORDS) process* proclist process 4 4 0 browsers process 2 2 0 *Number of related records cached.
结果分为两部分:
-
DISP
(display) 命令的结果。 -
执行摘要。
寻找真实世界的数据
现在是寻找真实世界数据的时候了。在开始之前,您必须确定一个可用的数据源,它可以是主机监视器、EDR、SIEM、防火墙等。在 Kestrel 的第一个版本中,包含了STIX-Shifter 数据源接口。STIX-Shifter支持大量数据源连接到 Kestrel。在开始之前,请检查您的是否在受支持的列表中。
补充:
STIX-shifter is an open source python library allowing software to connect to products that house data repositories by using STIX Patterning, and return results as STIX Observations. 命令行的使用: $ stix-shifter translate <MODULE NAME> query "<STIX IDENTITY OBJECT>" "<STIX PATTERN>" "<OPTIONS>" Example: $ stix-shifter translate qradar query {} "[ipv4-addr:value = '127.0.0.1']" {} You can also use this library to integrate STIX Shifter into your own tools. You can translate a STIX Pattern: from stix_shifter.stix_translation import stix_translation translation = stix_translation.StixTranslation() response = translation.translate('<MODULE NAME>', 'query', '{}', '<STIX PATTERN>', '<OPTIONS>') print(response)
目前支持的数据源:Stix-shifter currently offers connector support for the following cybersecurity products. Click on a connector name in the following table to see a list of STIX attributes and properties it supports.
List updated: September 28, 2021
Connector | Module Name | Data Model | Developer | Translation | Transmission | Availability |
---|---|---|---|---|---|---|
IBM QRadar | qradar | QRadar AQL | IBM Security | Yes | Yes | Released |
IBM QRadar on Cloud | qradar | QRadar AQL | IBM Security | Yes | Yes | Released |
HCL BigFix | bigfix | Default | IBM Security | Yes | Yes | Released |
Carbon Black CB Response | carbonblack | Default | IBM Security | Yes | Yes | Released |
Carbon Black Cloud | cbcloud | Default | IBM Security | Yes | Yes | Released |
Elasticsearch | elastic | MITRE CAR | MITRE | Yes | No | Released |
Elasticsearch (ECS) | elastic_ecs | ECS | IBM Security | Yes | Yes | Released |
IBM Cloud Security Advisor | security_advisor | Default | IBM Cloud | Yes | Yes | Released |
Splunk Enterprise Security | splunk | Splunk CIM | IBM Security | Yes | Yes | Released |
Microsoft Defender for Endpoint | msatp | Default | IBM Security | Yes | Yes | Released |
Microsoft Azure Sentinel | azure_sentinel | Default | IBM Security | Yes | Yes | Released |
IBM Guardium Data Protection | guardium | Default | IBM Security | Yes | Yes | Released |
AWS CloudWatch Logs | aws_cloud_watch_logs | Default | IBM Security | Yes | Yes | Released |
Amazon Athena | aws_athena | SQL | IBM Security | Yes | Yes | Released |
Alertflex | alertflex | Default | Alertflex | Yes | Yes | Released |
Micro Focus ArcSight | arcsight | Default | IBM Security | Yes | Yes | Released |
CrowdStrike Falcon | crowdstrike | Default | IBM Security | Yes | Yes | Released |
Trend Micro Vision One | trendmicro_vision_one | Default | Trend Micro | Yes | Yes | Released |
Secret Server | secretserver | Default | IBM | Yes | Yes | Released |
One Login | onelogin | Default | GS Lab | Yes | Yes | Released |
MySQL | mysql | Default | IBM | Yes | Yes | Released |
检查数据源
描述了两个示例数据源。从以下选项中选择开始。
方案一:Sysmon + Elasticsearch
Sysmon是一个流行的主机监视器,但它不是一个完整的监控堆栈,这意味着它不存储数据或处理查询。要为 Kestrel 创建可查询堆栈,请设置一个Elasticsearch实例来存储受监控的数据。
-
在主机上安装 Sysmon 以对其进行监控。
-
将 Elasticsearch 安装在受监控主机和运行 Kestrel 和 STIX-Shifter 的猎人机器都可以访问的地方。
-
将 Sysmon 摄取设置到 Elasticsearch,例如,使用Logstash。
-
在 Elasticsearch 中为数据源选择一个索引,例如,
host101
。这允许您区分存储在同一 Elasticsearch 中但来自不同受监控主机的数据。 -
在 Elasticsearch 中设置用户名和密码或 API 密钥。测试对 Elasticsearch 的 API 查询。
选项 2:CarbonBlack
CarbonBlack 提供了完整的监控和数据访问堆栈,STIX-Shifter 和 Kestrel 可以直接使用。
唯一的任务是获取正在运行的 CarbonBlack Response 或 CarbonBlack Cloud 服务的 API 密钥。您还需要知道该服务是CarbonBlack Response 还是Cloud,分别对应不同的STIX-Shifter 连接器进行安装。
STIX-Shifter设置
安装 .STIX-Shifter 时会自动安装kestrel
。但是,您需要为每个特定数据源安装额外的 STIX-Shifter 连接器包。示例连接器:
-
Elasticsearch 中的 Sysmon 数据:
stix-shifter-modules-elastic_ecs
. -
Elasticsearch 中的 Sysflow 数据:
stix-shifter-modules-elastic_ecs
. -
CarbonBlack 响应:
stix-shifter-modules-carbonblack
. -
CarbonBlack:
stix-shifter-modules-cbcloud
。 -
IBM QRadar:
stix-shifter-modules-qradar
。
例如,要访问 Elasticsearch 中的 Sysmon 数据,请安装相应的连接器:
$ pip install stix-shifter-modules-elastic_ecs
假设您elastic.securitylog.company.com
使用默认端口设置了一个 Elasticsearch 服务器9200
。您可以将 Sysmon 监控的主机作为 index 添加到它 host101
。然后分别获取 Elasticsearch 服务器的 API ID 和 API key 为 VuaCfGcBCdbkQm-e5aOx
和ui2lp2axTNmsyakw9tvNnw
。
查询 STIX-Shifter 时,Kestrel STIX-Shifter 数据源接口将使用环境变量加载上述信息。您必须为每个数据源设置三个环境变量。有关更多详细信息,请参阅 STIX 移位器数据源接口。
$ export STIXSHIFTER_HOST101_CONNECTOR=elastic_ecs $ export STIXSHIFTER_HOST101_CONNECTION='{"host":"elastic.securitylog.company.com", "port":9200, "indices":"host101"}' $ export STIXSHIFTER_HOST101_CONFIG='{"auth":{"id":"VuaCfGcBCdbkQm-e5aOx", "api_key":"ui2lp2axTNmsyakw9tvNnw"}}'
用于连接 IBM QRadar 实例的另一个配置示例:
$ export STIXSHIFTER_SIEMQ_CONNECTOR=qradar $ export STIXSHIFTER_SIEMQ_CONNECTION='{"host":"qradar.securitylog.company.com", "port":443}' $ export STIXSHIFTER_SIEMQ_CONFIG='{"auth":{"SEC":"123e4567-e89b-12d3-a456-426614174000"}}'
可以直接在 STIX-Shifter 中测试配置,查看查询转换和传输是否有效。 有关更多详细信息,请参阅STIX-Shifter 文档。
与真实世界数据的模式匹配
现在从导出环境变量的同一终端重新启动 Jupyter Notebook:
$ jupyter notebook
编写第一个GET
命令以使用 STIX-Shifter 数据源接口。输入stixshifter://
URI 前缀后,按TAB
自动完成从环境变量加载的可用数据源:
你可以建立一个简单的模式来搜索 Sysmon 数据源的实体池:
[空回]您可能会得到空回。那还不错!没有错误意味着数据源连接设置正确。返回空的原因是默认情况下STIX-shifter在WHERE
子句中没有提供时间范围的情况下只搜索最后五分钟的数据,幸运的是数据源在最后五分钟没有匹配的数据。如果是这种情况,您可以通过在 GET 命令的末尾指定时间范围来获取数据,例如 搜索 2021 年 5 月 6 日当天的所有数据。您需要使用 ISO 时间戳和 both 和关键字。按时间戳的中间完成它。有关更多信息,请参阅语言规范中的 command:GET 部分 。START t'2021-05-06T00:00:00Z' STOP t'2021-05-07T00:00:00Z'
START
STOP
tab
[Python 版本问题] STIX-Shifter 与 Python > 3.6 存在兼容性问题。如果 Kestrel 遇到数据源问题并提出建议,请手动测试 STIX-Shifter。如果是 Python 版本问题,您可能需要安装 Python 3.6,例如,并从 Python 3.6创建Python 虚拟环境以重新启动。sudo dnf install python3.6
匹配 TTP 模式
编写一个模式来匹配战术、技术和程序 (TTP)。TTP 模式描述了一种 Web 服务漏洞利用,其中 Web 服务的工作进程(例如nginx
或NodeJS
)与不是 Web 服务的二进制文件相关联。当工作进程被利用时会发生这种情况,并且要执行的常见二进制文件是 shell,例如bash
.
将 TTP 置于 STIX 模式中,将其与Sysflow数据源进行匹配,并从中提取被利用的进程。指定时间范围,当WHERE
子句中没有引用的 Kestrel 变量时,强烈建议使用此范围。如果未指定时间范围,STIX-Shifter 可能会应用默认时间范围,例如,最近 10 分钟。GET
在语言规范中阅读更多信息。
了解你的变量
执行每个单元格后,Kestrel 将给出新变量的摘要,例如与其关联的实体和记录的数量。有关实体和记录的定义,请参阅语言规范。摘要还显示从数据源返回并由 Kestrel 缓存以备将来使用的相关记录数,例如,查找连接的实体。例如,当询问上面的 TTP 模式时,Sysflow 数据源还会返回一些与返回变量中的进程相关联的网络流量 exp_node
。Kestrel 缓存它并在摘要中提供信息。
现在您已经从数据源返回了一些实体,您可能想知道exp_node
. 您需要执行一些搜索步骤来检查 Kestrel 变量。最基本的是INFO
和DISP
,分别显示变量的属性和统计信息以及显示其中的实体。在语言规范中阅读更多关于它们的信息。
连接搜寻步骤
狩猎的力量来自于将狩猎步骤组合成大而动态的狩猎流程。通常,您可以在同一笔记本或同一 Kestrel 会话中的任何以下命令中使用 Kestrel 变量。有两种常见的方法可以做到这一点:
寻找连接的实体
您可以在 Kestrel 中轻松找到连接的实体,例如,进程创建的子进程、进程创建的网络流量、进程加载的文件、拥有进程的用户。为此,请将该FIND
命令与先前创建的 Kestrel 变量一起使用,该变量存储了可从中查找连接实体的实体列表。请注意,并非所有数据源都具有关系数据,并且并非所有 STIX-Shifter 连接器模块都足够成熟以转换关系数据。已知可以工作的数据源是sysmon和Sysflow,它们都通过elastic_ecs
STIX-Shifter 连接器。在语言规范中阅读更多内容。
在 GET 中引用 Kestrel 变量
在寻线流中链接实体的另一种常见方法是编写一个GET
带有引用变量的新命令。您可以GET
在现有变量(类似于实体的数据源池的实体池/实体列表)中新建实体,也可以在 的WHERE
子句中引用变量GET
。前者显示在hello world 搜索中。请参阅它的另一个示例以及后一种情况的示例。
在第一台笔记本电池,你GET
用名的进程tweet
从红隼变量act
(恶意活动作为变量的子进程nc
中查找关联单位)。然后你FIND
他们相关的网络流量并打印出信息。网络流量将代理服务器显示为目标 IP。
要获取真实的目标 IP 地址,您需要询问代理服务器或存储代理日志的 SIEM 系统,例如,在STIX-Shifter Setup 中提供给 Kestrel 的siemq (QRadar) 。这是一个跨主机/EDR 到 SIEM/防火墙的 XDR 搜索。
GET
在第二个笔记本单元格中写入。在该WHERE
子句中,指定源 IP 和源端口以识别网络流量。Kestrel 将导出 的时间范围GET
,这使得关系解析唯一。最后,使用DISP
.
应用分析
您可以应用任何外部分析或检测逻辑来向现有 Kestrel 变量添加新属性或返回可视化。Kestrel 将分析视为黑匣子,只关心输入和输出格式。因此,甚至可以在 Kestrel 分析中封装专有软件。在语言规范中阅读有关分析的更多信息。
Docker 分析设置
Kestrel 附带一个 docker 分析界面,以及 5 个示例分析,用于 通过 SANS API、可疑流程评分、 机器学习模型测试、地理定位可视化和数据绘图来丰富威胁情报。查看我们的kestrel-analytics
存储库以获取更多详细信息。
要通过 docker 界面使用分析,您需要 安装docker,然后为该分析构建 docker 容器。例如,要为地理定位可视化分析构建 docker 容器,请转到其源代码并运行以下命令:
$ docker build -t kestrel-analytics-pinip .
运行分析
套用您建立在变量的分析proxynt
来自于GET参考Kestrel的变量,以销的IP地址在变量上找到的地图。在您完成输入命令之前,您可以中途暂停并按下以列出来自 Kestrel 泊坞窗分析界面的所有可用分析。APPLY docker://
TAB
此分析首先使用GeoIP2 API获取网络流量中所有 IP 地址的地理位置。然后它使用Folium库将它们固定在地图上。最后,它将输出序列化为 Kestrel 显示对象,并将其移交给 Kestrel 运行时中的分析管理器。
创建您的分析
创建分析甚至分析界面都很简单(有关更多详细信息,请参阅语言规范的最后一部分)。要使用 Kestrel docker 分析界面(更多信息在Docker 分析界面)创建新的分析 ,您可以使用kestrel-analytics
存储库中的容器模板。在添加一些内容或将现有代码包装到分析中后,构建一个名称为 prefix 的 docker 容器kestrel-analytics-
。例如,pinip
我们在Run An Analytics部分中应用的分析的完整容器名称是 kestrel-analytics-pinip
.
分析在构建后立即可供 Kestrel 使用,并可在终端中列出:
$ docker image ls
分叉和合并狩猎流程
威胁猎手可能会不时提出不同的威胁假设进行验证。并且您可以通过使用先前使用的 Kestrel 变量运行命令来分叉搜索流程——在多个命令中使用的变量是分叉点。通过合并诸如. 在语言规范 中阅读有关可组合搜索流程的更多信息。newvar = varA + varB + varC
更多关于语言
恭喜!您完成了这个具有挑战性的完整 Kestrel 教程。
要了解有关用于编写可组合搜索流的语言术语、概念、语法和语义的更多信息,请参阅语言规范。