安全团队将威胁数据整合到其运营中的能力,可以通过使用其他威胁研究团队识别的指标来识别潜在的恶意端点和网络事件,从而大大帮助其组织。在本博客中,我们将介绍如何使用 Threat Intel Filebeat 模块采集威胁数据。在未来的博客文章中,我们将介绍如何使用 Threat ECS 字段集丰富威胁数据,以及如何使用 Elastic Security 来进行威胁数据的操作。
Elastic Filebeat 模块
Elastic Filebeat 模块简化了对常用日志格式存储的数据的采集、解析和可视化。Elastic 发布了各种 Filebeat 模块,这些模块专注于收集您希望在 Elasticsearch 中使用的数据。这些模块提供了一种标准化且“开箱即用”的方法,可将特定数据源采集到 Elastic Stack 中。
利用这些功能,Threat Intel Filebeat 模块可以:
- 从六个开源源中获取威胁数据
- 将威胁数据加载到 Elasticsearch 中
- 将威胁数据规范化为 Threat ECS 字段集
- 通过仪表盘和可视化实现威胁分析
分析师和威胁猎手可以使用这些数据进行原始威胁狩猎、富集、情报分析和制作以及检测逻辑。
![](/assets/images/ingesting-threat-data-with-the-threat-intel-filebeat-module/overview.jpg
7.13 Filebeat Threat Intel 模块包含的六个源如下(未来可能会添加其他源):
- Abuse.ch Malware
- Abuse.ch URL
- AlienVault Open Threat Exchange (OTX)
- Anomali Limo
- Malware Bazaar
- Malware Information Sharing Platform (MISP)
使用 Threat Intel Filebeat 模块,您可以从多个开源威胁源中进行选择,将数据存储在 Elasticsearch 中,并利用 Kibana 安全应用程序来辅助安全运营和情报分析。
Threat Intel Filebeat 模块
通常,无需任何配置即可启动 Filebeat Threat Intel 模块,以从 Abuse.ch 源、Anomali Limo 和 Malware Bazaar 收集日志。但是,可选的 AlienVault OTX 和 MISP 数据集需要令牌才能验证其源。幸运的是,获取令牌的过程很简单。
AlienVault OTX
Alien Labs® 团队创建了 Open Threat Exchange (OTX)®,作为一个开放的威胁情报社区。这个环境为研究人员和从业人员提供了一个多元化的社区。OTX 允许社区中的任何人讨论、研究、验证和共享威胁数据。此外,OTX 还具有一个提供只读源的应用程序编程接口 (API) 端点;Filebeat 模块就是通过这种方式来使用 OTX 威胁数据的。
要访问 OTX API,您只需创建一个账户。拥有账户后,您可以订阅特定的 OTX 社区报告和称为“脉冲”的威胁数据源。Filebeat 模块会检索这些脉冲并将其存储在 Elasticsearch 中。
脉冲会以各种节奏更新,但许多脉冲是每天甚至每小时更新。脉冲具有威胁摘要、指标和各种其他富集,可以帮助您在上下文中评估环境中的威胁。
要订阅脉冲,请选择“浏览”→“脉冲”,然后订阅您想要的任何脉冲。您可以按最近修改的排序来识别最活跃的脉冲。
现在您已经订阅了感兴趣的脉冲,我们需要收集您的 API 密钥。
检索您的 API 密钥
API 密钥用于安全地验证 OTX 并从脉冲获取指标。
要检索您的 API 密钥,请选择您的用户 ID →“设置”,然后复制您的 OTX 密钥。
现在我们有了您的 OTX 密钥,让我们设置 MISP。
MISP
恶意软件信息共享平台 (MISP) 是一个用于收集、存储、分发和共享有关威胁的指标的开源项目。
虽然 MISP 非常强大,并且具有各种各样的功能,但它的设置可能有点麻烦。如果您计划设置 MISP 进行生产,请查看 官方文档,了解如何在 Kali、RHEL(包括 CentOS 和 Fedora)或 Ubuntu 上安装 MISP。
如果您的组织没有 MISP 实例,您可以使用许多使用 Docker 来启动和运行 MISP 的项目。Jason Kendall (@coolacid) 有一个很棒且维护良好的项目,它是您所能要求的开箱即用的项目。
启动 CoolAcid 的 MISP Docker 容器
需要注意的是,这将介绍 MISP 的默认开发部署。不应将其用于生产。请参阅 官方 MISP 文档,了解如何正确部署安全的 MISP 实例。
作为一些先决条件,您需要安装 Docker Compose 和 Git
- Docker Compose 用于自动化容器的部署和配置。您可以查看 Docker 的文档,了解如何安装 Compose。
- Git 是一种版本控制框架,用于协调贡献者和社区成员之间的软件开发。您可以查看 Git 文档,了解如何安装 Git。
接下来,我们需要克隆 CoolAcid 的存储库并启动容器。
- git clone:将远程存储库复制到您本地计算机上一个名为“docker-misp”的文件中
- cd docker-misp:更改到“docker-misp”目录
- docker-compose up -d:使用“docker-misp”目录中的 docker-compose 文件下载、构建并启动所有相关的“分离模式”(在后台)容器
Code Block 1 - Starting MISP Containers
$ git clone https://github.com/coolacid/docker-misp.git
$ cd docker-misp
$ docker-compose up -d
Pulling misp (coolacid/misp-docker:core-latest)...
core-latest: Pulling from coolacid/misp-docker
a54cbf64e415: Pull complete
84e78d2508ee: Pull complete
433476aac54e: Pull complete
780a2dfa04f6: Pull complete
Digest: sha256:7f380ad0d858bdec2c4e220f612d80431b1a0b0cb591311ade38da53b50a4cc1
Status: Downloaded newer image for coolacid/misp-docker:core-latest
Pulling misp-modules (coolacid/misp-docker:modules-latest)...
modules-latest: Pulling from coolacid/misp-docker
cdd040608d7b: Pull complete
4e340668f524: Pull complete
a4501f203bb2: Downloading [=========================================> ] 166.1MB/201.3MB
2cdaa3afcfca: Download complete
99a18a4e84d6: Downloading [=============================> ] 130.8MB/218.3MB
...
启动所有容器后,只需浏览至 https://127.0.0.1 并使用 [email protected] 的默认凭据和 admin 的密码短语登录。您将立即被要求更改您的密码短语。
配置默认 MISP 源
启动 MISP 容器并更改默认凭据后,将鼠标悬停在“同步操作”上,然后选择“列出源”。
突出显示可用的源,选择“启用所选”以启用默认源,然后选择“获取并存储所有源数据”。
接下来,选择“事件操作”菜单项,选择“列出事件”,您将看到数据开始填充。这将需要一段时间。
在下载 MISP 威胁源提供的数据时,让我们获取您的 API 密钥。
收集您的 API 密钥
要收集您的 API 密钥,请选择“管理”,然后选择“列出用户”。您将看到您的账户。您的“身份验证密钥”旁边会有一个眼睛图标,选择它以显示您的 API 密钥并将其复制下来。
现在,我们已经设置并配置了 MISP,并检索了我们的 API 密钥,我们可以配置实际的 Filebeat 模块。
安装 Filebeat
获取 Threat Intel 模块与获取任何其他 Filebeat 模块没有区别。请查看快速入门指南,将 Filebeat 安装为独立二进制文件或 macOS、Windows 或 Linux 的软件包。
配置 Threat Intel Filebeat 模块
安装 Filebeat 后,我们只需启用该模块(确保 filebeat 在您的 $PATH 中)。
Code Block 2 - Enabling the Threat Intel Filebeat Module
filebeat modules enable threatintel
接下来,让我们配置源。我们将通过修改模块配置文件来完成此操作。根据您的操作系统和安装方法,配置文件将位于不同的位置
Windows
- C:\Program Files\Filebeat\modules.d\threatintel.yml
- 如果使用 Chocolatey 安装
- C:\ProgramData\chocolatey\lib\filebeat\tools\modules.d\threatintel.yml
macOS
- filebeat/modules.d/threatintel.yml
- 如果使用 Homebrew 安装
- /usr/local/etc/filebeat/modules.d/threatintel.yml
Linux
使用您最熟悉的任何文本编辑器,打开 threatintel.yml,我们将添加您的 OTX API 密钥、您的 MISP API 密钥,并验证 Anomali 的凭据对。
Abuse URL 源配置
默认情况下,“滥用 URL”源已启用,无需修改。该源包含域、URI 和 URL 指标,并提供重要日期、标签、提交者、状态等附加上下文信息。
Code Block 3 - Configuring the Abuse URL Feed
abuseurl:
enabled: true
# Input used for ingesting threat intel data.
var.input: httpjson
# The URL used for Threat Intel API calls.
var.url: https://urlhaus-api.abuse.ch/v1/urls/recent/
# The interval to poll the API for updates.
var.interval: 10m
恶意软件滥用源配置
默认情况下,“恶意软件滥用”源已启用,无需修改。该源包含文件哈希和主机信息,并提供重要日期、标签、状态等附加上下文信息。
Code Block 4 - Configuring the Abuse Malware Feed
abusemalware:
enabled: true
# Input used for ingesting threat intel data.
var.input: httpjson
# The URL used for Threat Intel API calls.
var.url: https://urlhaus-api.abuse.ch/v1/payloads/recent/
# The interval to poll the API for updates.
var.interval: 10m
MISP 源配置
默认情况下,MISP 源已启用,但需要配置。该源包含各种文件和网络数据,并提供重要日期、标签、状态、提交者等附加上下文信息。
需要配置 Filebeat 将查询的 API 端点。如果您在与 Filebeat 相同的系统上运行 MISP,可以使用 var.url:https://127.0.0.1/event/restSearch。如果您在其他地方运行 MISP,则需要输入该主机名或 IP 地址来代替 localhost。
API 令牌是在之前的 MISP 设置步骤中检索到的“Authkey”。您需要将其作为 var.api_token 的值输入。
如果您为 MISP 使用自签名 SSL 证书,您需要通过取消注释 var.ssl.verification_mode: none 行来禁用 SSL 验证模式。
Code Block 5 - Configuring the MISP Feed
misp:
enabled: true
# Input used for ingesting threat intel data, defaults to JSON.
var.input: httpjson
# The URL of the MISP instance, should end with "/events/restSearch".
var.url: https://127.0.0.1/events/restSearch
# The authentication token used to contact the MISP API. Found when looking at user account in the MISP UI.
var.api_token: MISP-Authkey
# Configures the type of SSL verification done, if MISP is running on self signed certificates
# then the certificate would either need to be trusted, or verification_mode set to none.
var.ssl.verification_mode: none
# Optional filters that can be applied to the API for filtering out results. This should support the majority of
# fields in a MISP context. For examples please reference the filebeat module documentation.
#var.filters:
# - threat_level: [4, 5]
# - to_ids: true
# How far back to look once the beat starts up for the first time, the value has to be in hours. Each request
# afterwards will filter on any event newer than the last event that was already ingested.
var.first_interval: 300h
# The interval to poll the API for updates.
var.interval: 5m
AlienVault OTX 源配置
默认情况下,AlienVault OTX 源已启用,但需要配置。该源包含各种文件和网络数据,并提供重要日期、标签等附加上下文信息。
API 令牌是在 AlienVault OTX 设置步骤中检索到的“OTX 密钥”。您需要将其作为 var.api_token 的值输入。
Code Block 6 - Configuring the AlienVault OTX Feed
otx:
enabled: true
# Input used for ingesting threat intel data
var.input: httpjson
# The URL used for OTX Threat Intel API calls.
var.url: https://otx.alienvault.com/api/v1/indicators/export
# The authentication token used to contact the OTX API, can be found on the OTX UI.
Var.api_token: OTX-Key
# Optional filters that can be applied to retrieve only specific indicators.
#var.types: "domain,IPv4,hostname,url,FileHash-SHA256"
# The timeout of the HTTP client connecting to the OTX API
#var.http_client_timeout: 120s
# How many hours to look back for each request, should be close to the configured interval.
# Deduplication of events is handled by the module.
var.lookback_range: 1h
# How far back to look once the beat starts up for the first time, the value has to be in hours.
var.first_interval: 400h
# The interval to poll the API for updates
var.interval: 5m
Anomali 源配置
默认情况下,Anomali 源已启用,但需要配置。该源包含各种文件和网络数据,并提供重要日期、标签等附加上下文信息。
Limo 源的默认用户名和密码是 guest:guest,但被注释掉了。如果您没有其他凭证对,您可以简单地取消注释 var.username 和 var.password。
在撰写本文时,Anomali 有 11 个集合作为其 Limo 源的一部分提供。var.url 变量定义了集合的位置。要获取集合列表,您可以查询 Anomali Limo 集合 API 端点(虽然不是必需的,但 jq 使集合更易于读取)。
Code Block 7 - Configuring the Anomali Limo Collections
$ curl -L -u guest:guest https://limo.anomali.com/api/v1/taxii2/feeds/collections | jq
{
"collections": [
{
"can_read": true,
"can_write": false,
"description": "",
"id": "107",
"title": "Phish Tank"
},
{
"can_read": true,
"can_write": false,
"description": "",
"id": "135",
"title": "Abuse.ch Ransomware IPs"
},
{
"can_read": true,
"can_write": false,
"description": "",
"id": "136",
"title": "Abuse.ch Ransomware Domains"
},
...
可以将集合 ID 插入到 Anomali 配置中。有几种方法可以做到这一点。您可以
- 手动更改 ID
- 输入所有 ID,并注释掉除您要定位的集合之外的所有 ID
- 为每个集合创建一个重复的 Anomali 配置部分
下面的示例展示了每个集合重复部分的方法;请注意每个部分中 var.url: 字段中的不同集合 ID(31、313、33)。
Code Block 8 - Configuring the Anomali Limo Feed
anomali:
enabled: true
# Input used for ingesting threat intel data
var.input: httpjson
# The URL used for Threat Intel API calls. Limo has multiple different possibilities for URL's depending
# on the type of threat intel source that is needed.
var.url: https://limo.anomali.com/api/v1/taxii2/feeds/collections/31/objects
# The Username used by anomali Limo, defaults to guest.
var.username: guest
# The password used by anomali Limo, defaults to guest.
var.password: guest
# How far back to look once the beat starts up for the first time, the value has to be in hours.
var.first_interval: 400h
# The interval to poll the API for updates
var.interval: 5m
anomali:
enabled: true
# Input used for ingesting threat intel data
var.input: httpjson
# The URL used for Threat Intel API calls. Limo has multiple different possibilities for URL's depending
# on the type of threat intel source that is needed.
var.url: https://limo.anomali.com/api/v1/taxii2/feeds/collections/313/objects
# The Username used by anomali Limo, defaults to guest.
var.username: guest
# The password used by anomali Limo, defaults to guest.
var.password: guest
# How far back to look once the beat starts up for the first time, the value has to be in hours.
var.first_interval: 400h
# The interval to poll the API for updates
var.interval: 5m
anomali:
enabled: true
# Input used for ingesting threat intel data
var.input: httpjson
# The URL used for Threat Intel API calls. Limo has multiple different possibilities for URL's depending
# on the type of threat intel source that is needed.
var.url: https://limo.anomali.com/api/v1/taxii2/feeds/collections/33/objects
...
现在我们已经配置了模块以使用威胁源数据,让我们将数据发送到 Elasticsearch 并使用 Kibana 进行可视化。
设置 Elasticsearch 和 Kibana
Filebeat 威胁情报模块会将配置的威胁源数据发送到 Elasticsearch,可以使用 Kibana 进行可视化。请参阅 Elastic 文档以了解如何设置 Elasticsearch 和 Kibana 生产环境。此外,如果您正在寻找一站式解决方案,您可以快速安全地设置一个 Elastic Cloud 帐户。
对于此非生产示例,我们将使用许多使用 Docker 快速启动和运行 Elasticsearch 和 Kibana 的项目之一。
启动 Elasticsearch 和 Kibana 容器
需要注意的是,这将涵盖 Elasticsearch 和 Kibana 的便捷默认开发部署。它不应在生产环境中使用。请参阅 Elastic 文档,了解如何正确部署安全的实例。
我们将简单地收集存储库并启动 Docker 容器。
- git clone:这将远程存储库复制到您的本地计算机上的一个名为“elastic-container”的文件夹中
- cd elastic-container:更改到“elastic-container”目录
- sh elastic-container.sh start:这将下载并启动 Elasticsearch 和 Kibana 容器
Code Block 9 - Starting Elastic Containers
$ git clone https://github.com/peasead/elastic-container.git
$ cd elastic-container
$ sh elastic-container.sh start
7.12.1: Pulling from elasticsearch/elasticsearch
ddf49b9115d7: Already exists
4df4d6995ad2: Pull complete
e180ce5d1430: Pull complete
b3801a448e4f: Downloading [====> ] 199.3MB/353.1MB
a3100bfb487c: Download complete
817ce7c869c7: Download complete
485f138f2280: Download complete
7.12.1: Pulling from kibana/kibana
ddf49b9115d7: Already exists
588c50b1b6af: Extracting [====================> ] 34.93MB/40.52MB
9d32826b6fa0: Download complete
01017880c9d9: Download complete
efcedd43b7be: Download complete
0887ad2a14e0: Download complete
625b277c1f7b: Downloading [=====> ] 52.27MB/320.4MB
68815bc8856d: Download complete
e9e0d8f8fa8c: Download complete
请查看存储库 文档,了解其他用法和配置选项(如果需要)。
一旦所有容器启动,只需浏览到 https://127.0.0.1:5601 并使用默认凭据 elastic 和密码 password 登录即可。
使用 Filebeat 使用威胁数据
Filebeat 有多种 输出选项,因此请使用对您来说最容易的选项。在此示例中,我们将使用本地 Elasticsearch 实例。使用本地 Elasticsearch 和 Kibana 实例无需修改 filebeat.yml 文件。
为了验证我们的配置,我们首先测试配置并访问 Elasticsearch。
- filebeat test config:这将测试以确保您的 filebeat.yml 配置正确(如果您修改了它以适应您的环境)
- filebeat test output - 这将测试以确保您可以访问 Elasticsearch
Code Block 10 - Testing Filebeat Configuration and Connection
$ filebeat test config
Config OK
$ filebeat test output
elasticsearch: https://127.0.0.1:9200...
parse url... OK
connection...
parse host... OK
dns lookup... OK
addresses: ::1, 127.0.0.1
dial up... OK
TLS... WARN secure connection disabled
talk to server... OK
version: 7.12.0
要加载仪表板、索引模式和摄取管道,让我们运行设置。
- filebeat setup:这将连接到 Kibana 并加载索引模式、摄取管道和保存的对象(标签、可视化和仪表板)
Code Block 11 - Setting Up Filebeat Index Patterns and saved objects in Kibana
$ filebeat setup
Overwriting ILM policy is disabled. Set `setup.ilm.overwrite: true` for enabling.
Index setup finished.
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead.
See more: https://elastic.ac.cn/guide/en/machine-learning/current/index.html
Loaded machine learning job configurations
Loaded Ingest pipelines
最后,让我们 启动 Filebeat 以开始收集!
接下来,浏览到 Kibana 并选择仪表板应用程序。为了使仪表板更容易查找,它们都使用了“威胁情报”标签。
每个源都有一个仪表板,还有一个概述仪表板显示模块的运行状况。
![](/assets/images/ingesting-threat-data-with-the-threat-intel-filebeat-module/overview.jpg
由于不同来源的轮询,可能需要几分钟才能检索到所有数据。
下一步是什么?
我们正在努力将现有的可视化转换为 Lens 并向每个可视化添加 向下钻取功能。
此外,正如我们在本文开头提到的,这是关于在 Elastic Stack 中运营威胁数据的三部分系列文章的第一部分。下一篇文章将介绍对威胁 ECS 字段集的增强,并使用本地端点和网络观察丰富威胁数据。
我们正在努力添加其他开源和商业源。如果您有希望优先考虑的源,请查看下面的贡献部分。
最后,我们正在寻找机会使用第三方来源为观察到的事件添加上下文和富化信息。
请继续关注 - 我们将继续努力帮助我们的客户防御他们的环境。能够对威胁数据采取行动是这一旅程的关键部分。
您如何贡献?
威胁情报 Filebeat 模块是在 Elastic 7.12 版本中发布的,这意味着它仍处于测试阶段。强烈建议测试源、配置、可视化等。我们乐于听取反馈。
除了威胁情报模块,还有一些与 TI 数据的收集、处理和分析相关的其他存储库
- Beats 存储库,您可以在其中贡献和增强威胁数据源
- Elastic Common Schema (ECS) 存储库,您可以在其中参与关于如何在 Elastic Stack 中描述威胁数据的讨论
- Kibana 存储库,分析师可以在其中与存储在 Elasticsearch 中的数据进行交互
- 检测规则 存储库,可以在其中创建和存储检测逻辑和规则
为社区做出贡献的最佳方式是探索功能、特性和 文档,并通过 Github Issue 告诉我们是否存在问题或您希望看到的内容。
如果您是 Elastic 的新手,请体验我们在 Elastic Cloud 上的最新版本的 Elasticsearch Service。此外,请务必利用我们的 快速入门培训,为您的成功做好准备。