安全团队能够将其操作中的威胁数据集成在一起,这极大地帮助其组织使用其他威胁研究团队识别出的指标来识别潜在的恶意端点和网络事件。在本博客中,我们将介绍如何使用 Threat Intel Filebeat 模块导入威胁数据。在以后的博客文章中,我们将介绍如何使用 Threat ECS 字段集丰富威胁数据,以及如何使用 Elastic Security 对威胁数据进行操作。
Elastic Filebeat 模块
Elastic Filebeat 模块简化了存储在常用日志格式中的数据的收集、解析和可视化。Elastic 发布了各种Filebeat 模块,专注于收集您希望在 Elasticsearch 中使用的数据。这些模块提供了一种标准化和“交钥匙”的方法,可以将特定数据源导入 Elastic Stack。
利用这些功能,Threat Intel Filebeat 模块可以:
- 从六个开源 Feed 中获取威胁数据
- 将威胁数据加载到 Elasticsearch 中
- 将威胁数据规范化为Threat ECS 字段集
- 通过仪表板和可视化实现威胁分析
分析师和威胁猎人可以使用这些数据进行原始威胁狩猎、数据丰富、情报分析和生产以及检测逻辑。
![](/assets/images/ingesting-threat-data-with-the-threat-intel-filebeat-module/overview.jpg)
7.13 Filebeat Threat Intel 模块包含的六个 Feed 如下(将来可能会添加其他 Feed):
使用 Threat Intel Filebeat 模块,您可以从多个开源威胁 Feed 中进行选择,将数据存储在 Elasticsearch 中,并利用 Kibana 安全应用程序来辅助安全运营和情报分析。
Threat Intel Filebeat 模块
通常,Filebeat Threat Intel 模块无需任何配置即可启动,即可从 Abuse.ch Feed、Anomali Limo 和 Malware Bazaar 收集日志。但是,可选的 AlienVault OTX 和 MISP 数据集需要令牌才能对其 Feed 源进行身份验证。幸运的是,获取令牌是一个简单的过程。
AlienVault OTX
Alien Labs® 团队创建了开放威胁交换 (OTX®) 作为开放威胁情报社区。此环境提供对各种研究人员和从业人员的访问。OTX 允许社区中的任何人讨论、研究、验证和共享威胁数据。此外,OTX 还有一个应用程序编程接口 (API) 端点,该端点提供只读 Feed;Filebeat 模块就是通过这种方式使用 OTX 威胁数据。
要访问 OTX API,您只需创建一个帐户。拥有帐户后,您可以订阅特定的 OTX 社区报告和称为“脉冲”的威胁数据 Feed。“脉冲”由 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 Feed
启动 MISP 容器并更改默认凭据后,将鼠标悬停在“同步操作”上,然后选择“列出 Feed”。
突出显示可用的 Feed,选择“启用已选”以启用默认 Feed,然后选择“获取并存储所有 Feed 数据”。
接下来,选择“事件操作”菜单项,选择“列出事件”,您将看到数据开始填充。这将需要一些时间。
在 MISP 威胁 Feed 提供的数据下载期间,让我们获取您的 API 密钥。
收集您的 API 密钥
要收集您的 API 密钥,请选择“管理”,然后选择“列出用户”。您将看到您的帐户。在您的“Authkey”旁边将有一个眼睛图标,选择它以显示您的 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的凭据对。
滥用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 Key”。您将其作为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在其Limo数据馈送中提供11个集合。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并注释掉除您要定位的集合以外的所有集合
- 为每个集合创建一个重复的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并选择仪表板应用程序。为了使仪表板更容易查找,它们都使用“threat intel”标签。
每个数据馈送都有一个仪表板,还有一个显示模块运行状况的概述仪表板。
![](/assets/images/ingesting-threat-data-with-the-threat-intel-filebeat-module/overview.jpg)
由于轮询不同的来源,检索所有数据可能需要几分钟的时间。
接下来是什么?
我们正在努力将现有的可视化转换为Lens,并为每个可视化添加钻取功能。
此外,正如我们在本文开头提到的,这是关于在Elastic Stack中操作威胁数据的三部分系列文章的第一部分。下一篇文章将介绍对威胁ECS字段集的增强以及使用本地端点和网络观测来丰富威胁数据。
我们正在努力添加其他开源和商业数据馈送。如果您希望看到优先处理的数据馈送,请查看下面的贡献部分。
最后,我们正在寻找机会使用第三方来源为观察到的事件添加上下文和丰富信息。
敬请关注——我们将继续努力帮助客户保护其环境。能够处理威胁数据是这一旅程的关键部分。
您如何贡献?
在Elastic 7.12版本中发布了威胁情报Filebeat模块,这意味着它仍处于测试阶段。强烈建议测试数据馈送、配置、可视化等。我们很乐意听到您的反馈。
除了威胁情报模块之外,还有一些其他存储库与TI数据的收集、处理和分析有关。
- Beats 存储库,您可以在其中为威胁数据馈送做出贡献并对其进行增强。
- Elastic公共架构(ECS) 存储库,您可以在其中参与关于在Elastic Stack中描述威胁数据方式的讨论。
- Kibana 存储库,分析师在其中与存储在Elasticsearch中的数据进行交互。
- 检测规则 存储库,在其中创建和存储检测逻辑和规则。
参与社区的最佳方式是探索功能、特性和文档,如果遇到问题或希望看到某些内容,请通过Github Issue告知我们。
如果您不熟悉Elastic,请在Elastic Cloud上体验最新版本的Elasticsearch服务。还要充分利用我们的快速入门培训,从而获得成功。