威胁狩猎语言 Kestrel 使用——也是支持Python api的,todo实际测试下

Kestrel 提供了一个抽象层来阻止网络威胁搜寻中涉及的重复。

  • Kestrel 语言:一种威胁狩猎语言,供人类表达要狩猎的内容

    • 表达的知识,什么花样,分析和狩猎流动。

    • 从各个狩猎步骤组成可重复使用的狩猎流程。

    • 使用人性化的基于实体的数据表示抽象进行推理。

    • 考虑异构数据和威胁情报源。

    • 应用现有的公共和专有检测逻辑作为分析。

    • 重复使用和共享个人狩猎步骤和整个狩猎书籍。

  • Kestrel 运行时:处理如何寻找.

    • 根据特定的狩猎平台说明编译什么

    • 在本地和远程执行编译后的代码。

    • 将原始日志和记录组装到实体中以进行基于实体的推理。

    • 缓存中间数据和相关记录以实现快速响应。

    • 预取相关日志和记录,用于实体之间的链接构建。

    • 为数据源和分析执行定义可扩展接口。

威胁狩猎语言 Kestrel 使用——也是支持Python api的,todo实际测试下

架构

整个 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 3pip。安装 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实例来存储受监控的数据。

  1. 在主机上安装 Sysmon 以对其进行监控。

  2. 将 Elasticsearch 安装在受监控主机和运行 Kestrel 和 STIX-Shifter 的猎人机器都可以访问的地方。

  3. 将 Sysmon 摄取设置到 Elasticsearch,例如,使用Logstash

  4. 在 Elasticsearch 中为数据源选择一个索引,例如,host101。这允许您区分存储在同一 Elasticsearch 中但来自不同受监控主机的数据。

  5. 在 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-e5aOxui2lp2axTNmsyakw9tvNnw

查询 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自动完成从环境变量加载的可用数据源:

威胁狩猎语言 Kestrel 使用——也是支持Python api的,todo实际测试下

你可以建立一个简单的模式来搜索 Sysmon 数据源的实体池:

威胁狩猎语言 Kestrel 使用——也是支持Python api的,todo实际测试下

[空回]您可能会得到空回。那还不错!没有错误意味着数据源连接设置正确。返回空的原因是默认情况下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'STARTSTOPtab

[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 服务的工作进程(例如nginxNodeJS)与不是 Web 服务的二进制文件相关联。当工作进程被利用时会发生这种情况,并且要执行的常见二进制文件是 shell,例如bash.

威胁狩猎语言 Kestrel 使用——也是支持Python api的,todo实际测试下

将 TTP 置于 STIX 模式中,将其与Sysflow数据源进行匹配,并从中提取被利用的进程。指定时间范围,当WHERE 子句中没有引用的 Kestrel 变量时,强烈建议使用此范围。如果未指定时间范围,STIX-Shifter 可能会应用默认时间范围,例如,最近 10 分钟。GET语言规范中阅读更多信息。

威胁狩猎语言 Kestrel 使用——也是支持Python api的,todo实际测试下

了解你的变量

执行每个单元格后,Kestrel 将给出新变量的摘要,例如与其关联的实体和记录的数量。有关实体和记录的定义,请参阅语言规范。摘要还显示从数据源返回并由 Kestrel 缓存以备将来使用的相关记录数,例如,查找连接的实体。例如,当询问上面的 TTP 模式时,Sysflow 数据源还会返回一些与返回变量中的进程相关联的网络流量 exp_node。Kestrel 缓存它并在摘要中提供信息。

现在您已经从数据源返回了一些实体,您可能想知道exp_node. 您需要执行一些搜索步骤来检查 Kestrel 变量。最基本的是INFODISP,分别显示变量的属性和统计信息以及显示其中的实体。在语言规范中阅读更多关于它们的信息。

连接搜寻步骤

狩猎的力量来自于将狩猎步骤组合成大而动态的狩猎流程。通常,您可以在同一笔记本或同一 Kestrel 会话中的任何以下命令中使用 Kestrel 变量。有两种常见的方法可以做到这一点:

寻找连接的实体

您可以在 Kestrel 中轻松找到连接的实体,例如,进程创建的子进程、进程创建的网络流量、进程加载的文件、拥有进程的用户。为此,请将该FIND命令与先前创建的 Kestrel 变量一起使用,该变量存储了可从中查找连接实体的实体列表。请注意,并非所有数据源都具有关系数据,并且并非所有 STIX-Shifter 连接器模块都足够成熟以转换关系数据。已知可以工作的数据源是sysmonSysflow,它们都通过elastic_ecsSTIX-Shifter 连接器。在语言规范中阅读更多内容。

威胁狩猎语言 Kestrel 使用——也是支持Python api的,todo实际测试下

在 GET 中引用 Kestrel 变量

在寻线流中链接实体的另一种常见方法是编写一个GET 带有引用变量的新命令。您可以GET在现有变量(类似于实体的数据源池的实体池/实体列表)中新建实体,也可以在 的WHERE子句中引用变量GET。前者显示在hello world 搜索中。请参阅它的另一个示例以及后一种情况的示例。

威胁狩猎语言 Kestrel 使用——也是支持Python api的,todo实际测试下

在第一台笔记本电池,你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

威胁狩猎语言 Kestrel 使用——也是支持Python api的,todo实际测试下

此分析首先使用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 教程。

要了解有关用于编写可组合搜索流的语言术语、概念、语法和语义的更多信息,请参阅语言规范

 

上一篇:Linux使用.net core


下一篇:AnalyticDB for MySQL 3.0基础版重磅发布