freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

使用Elasticsearch与TheHive构建开源安全应急响应平台
2019-05-30 07:00:01

概述

通过开源软件可以构建一个安全应急响应平台,该平台可以进行日志整合、告警生成、IoC 丰富与事件管理。

在上面的流程图中,作为 HIDS 的 Wazuh 将数据发送回 Wazuh Manager 与 Elasticsearch。ElastAlert 观测到新事件并在 TheHive 中相应生成告警。然后通过 Cortex 与 MISP 查询额外信息丰富该事件,之后自动关闭该事件或提交给分析师。

请注意,系统中的任何端点服务或者可以生成日志传送给 Elasticsearch 的 Agent 都可以被替代。该套系统的好处在于绝大多数的组件都可以替换。

Wazuh

Wazuh 是一个开源安全监控解决方案,用于收集、分析主机安全数据。Wazuh 是 OSSEC 项目的分支。Wazuh 组件与 Elasticsearch 和 Kibana 的整合度很高,可以用来执行许多与安全相关的任务,如日志分析、Rootkit 检测、监听端口检测、文件完整性检测等。

Elasticsearch

Elasticsearch 将充当整个系统的日志存储库。Elasticsearch 非常强大,具备很多功能。常与 Logstash(日志收集)和 Kibana(可视化)结合使用。Elasticsearch 为所有类型的数据存储都提供了一个强大的平台。

ElastAlert

ElastAlert 是由 Yelp 发起的项目,为 Elasticsearch 提供告警机制。ElastAlert 通过 REST API 查询 Elasticsearch 并有多个输出来匹配告警。

TheHive

TheHive 是一个可扩展的、开源、免费安全应急响应平台,旨在让任何安全从业人员能够轻松地处理安全事件,并快速地采取行动。本质上讲 TheHive 是一个告警管理平台,用于管理全部事件告警。

Cortex

Cortex 与 TheHive 是一个团队开发的产品。Cortex 使用分析器获取日志中有关指标信息的其他数据。允许在第三方服务中查询 IP、URL 与文件哈希等指标,并将第三方返回的结果作为附加信息丰富告警事件。

MISP

MISP 是 CIRCL 维护的开源威胁情报共享平台,其 Feed 可以是某个组织提供的付费订阅,也可以是社区维护的开源订阅,这也是数据丰富的主要来源。

Elasticsearch 安装

首先部署 Elasticsearch 集群,系统使用 Ubuntu 16.04(文章使用虚拟机安装,DHCP 为该虚拟机预留了地址,确保其始终使用相同的 IP 地址)。

作者提供了 Vagrantfile 帮助配置构建 Elasticsearch 虚拟机。

ELK 安装

注意:TheHive 正在进行一些后端重构,这会导致设置复杂化。TheHive 背后的开发团队认为 Elasticsearch 已经不再满足它们的需求了,4.0 版本后将在后端使用 GraphDB。当前稳定版本 3.2.1 版本以及我们在此使用的 beta 版本 3.3.0 都是用 Elasticsearch 5.6 作为后端。因此,在虚拟机中需要部署 Elasticsearch、Logstash 和 Kibana 6.6.1 作为日志存储仓库,另一个 Elasticsearch 5.6.15 部署在 TheHive 虚拟机中作为后端。

虽然我总结了安装步骤,但是如果需要进一步了解细节可以查看安装指南

# 首先安装 Java,选择使用 OpenJDK 安装
sudo apt-get install openjdk-8-jre
# 添加密钥与仓库
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
sudo apt-get update
# 为了防止更新破坏 SearchGuard,选择安装固定版本的 Elasticsearch
apt-cache policy elasticsearch
sudo apt-get install elasticsearch=6.6.1 logstash=1:6.6.1-1 kibana=6.6.1
# 阻止软件更新
sudo apt-mark hold elasticsearch logstash kibana
# 将 Elasticsearch、Logstash 和 Kibana 设置为自启动
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl enable logstash.service
sudo systemctl enable kibana.service
# 未来确定好兼容性,可以进行升级
sudo apt-mark unhold elasticsearch

优化

默认情况下,Elasticsearch 依赖的 Java 堆的大小为 1 GB。可以通过修改 /etc/elasticsearch/jvm.options 中的 Xms1g 与 Xmx1g 参数,将其增加到总内存的 50-80%。我的虚拟机只有 4GB 内存,所以我保留了默认值。

编辑配置文件 /etc/elasticsearch/elasticsearch.yml

取消 cluster.name 和 node.name 的注释,并设置为不同的名字

设置 bootstrap.memory_lock 为 True

设置 network.host 为 0.0.0.0

设置 discovery.type 为 single-node

编辑服务 sudo systemctl edit elasticsearch.service

[Service]
LimitMEMLOCK=infinity

然后继续执行:

# 重新加载
sudo systemctl daemon-reload

# 重新启动
sudo systemctl start elasticsearch.service

# 检查确保 Elasticsearch 可用
curl http://localhost:9200/_cat/health

应该可以看到类似的响应:

1551641374 19:29:34 demo-cluster green 1 1 0 0 0 0 0 0 - 100.0%

Kibana

编辑 Kibana 的配置文件:sudo nano /etc/kibana/kibana.yml

设置 Kibana 来响应外部接口:server.host: 0.0.0.0

启动服务:sudo systemctl start kibana.service

打开浏览器:http://<IP-OF-VM>:5601 应该可以看到 Kibana 控制台

Logstash

按照如下命令执行:

sudo apt install logstash
sudo systemctl enable logstash.service
sudo systemctl daemon-reload

注意:此时 Logstash 没有运行。

Wazuh 安装

这部分将讲述如何安装 Wazuh Manager,并将 Wazuh 与 Elasticsearch 进行集成。

使用 Wazuh 的 Agent 及其规则集来识别端点的行为并生成告警。这些告警从 Wazuh 的 Agent 转发到 Wazuh Manager 写入 /var/ossec/logs/alerts/alerts.json。Filebeat 的服务不断监视该文件的更改,然后转发给 Elasticsearch。

Wazuh Manager

# 为 Wazuh 仓库安装 GPG 密钥
curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | apt-key add -

# 添加仓库
echo "deb https://packages.wazuh.com/3.x/apt/ stable main" | tee -a /etc/apt/sources.list.d/wazuh.list

# 升级
sudo apt update

# 安装
sudo apt install wazuh-manager

详情请参见官方文档

Wazuh API

Wazuh API 是连接 Kibana 所必需的。Wazuh API 的默认账户密码是 foo/bar,如果想要变更可以查阅文档

# 安装 NodeJS
sudo curl -sL https://deb.nodesource.com/setup_8.x | bash -
sudo apt install nodejs

# 安装 Wazuh API
sudo apt install wazuh-api

# 取消自动更新
sudo apt-mark hold wazuh-manager
sudo apt-mark hold wazuh-api

Filebeat

curl -s https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -  
sudo echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | tee /etc/apt/sources.list.d/elastic-6.x.list  
sudo apt update  
sudo apt install filebeat=6.6.1

首先安装 Filebeat:

# 取消自动更新
sudo apt-mark hold filebeat

# 下载 Filebeat 配置文件
sudo curl -so /etc/filebeat/filebeat.yml https://raw.githubusercontent.com/wazuh/wazuh/3.8/extensions/filebeat/filebeat.yml

# 编辑配置文件
sudo nano /etc/filebeat/filebeat.yml

在末尾的 YOUR_ELASTIC_SERVER_IP 部分替换为 Elasticsearch 6.6.1 服务器的真实 IP。

启动 Filebeat 服务:

sudo systemctl daemon-reload
sudo systemctl enable filebeat.service
sudo systemctl start filebeat.service

加载 Wazuh 模版

为 Elasticsearch 加载 Wazuh 模板。在 Elasticsearch 主机上运行此命令:curl https://raw.githubusercontent.com/wazuh/wazuh/3.8/extensions/elasticsearch/wazuh-elastic6-template-alerts.json | curl -X PUT "http://localhost:9200/_template/wazuh" -H 'Content-Type: application/json' -d @-

加载 Logstash 配置

下载用于 Wazuh 远程安装的 Logstash 配置文件,在 Elasticsearch 主机上运行此命令:curl -so /etc/logstash/conf.d/01-wazuh.conf https://raw.githubusercontent.com/wazuh/wazuh/3.8/extensions/logstash/01-wazuh-remote.conf

确保使用新配置文件运行 Logstash 服务:sudo systemctl restart logstash.service

安装 Kibana

首先尝试运行 Wazuh 文档中提供的命令:sudo -u kibana NODE_OPTIONS="--max-old-space-size=3072" /usr/share/kibana/bin/kibana-plugin install https://packages.wazuh.com/wazuhapp/wazuhapp-3.8.2_6.6.1.zip

如果发现错误:

Plugin installation was unsuccessful due to error "Command failed: /usr/share/kibana/node/bin/node /usr/share/kibana/src/cli --env.name=production --optimize.useBundleCache=false --server.autoListen=false --plugins.initialize=false
Browserslist: caniuse-lite is outdated. Please run next command `npm update caniuse-lite browserslist`

之所以运行命令 npm update caniuse-lite browserslist 产生错误,是因为本机尚未安装 Node。

卸载了插件并在没有 NODE 选项的情况下运行命令:sudo -u kibana /usr/share/kibana/bin/kibana-plugin install https://packages.wazuh.com/wazuhapp/wazuhapp-3.8.2_6.6.1.zip。此时安装将会成功,然后重新启动。

安装 Wazuh Agent

根据你自己的系统情况按照说明进行安装,本文在 Linux 上进行安装。

安装后,需要在 ossec.conf 中编辑 Wazuh Manager 的 IP 地址。Debian 的 Agent 安装在 /var/ossec,编辑 sudo nano /var/ossec/etc/ossec.conf 改变 MANAGER_IP 即可。

Agent 注册

我们使用简单的,不安全的方法注册 Agent:

在 Manager 上,运行以下命令启动注册服务:/var/ossec/bin/ossec-authd

在 Agent 上,使用 Manager 的 IP 地址运行 agent-auth 程序

对于 Linux 来说:/var/ossec/bin/agent-auth -m <MANAGER_IP_ADDRESS>

对于 Windows 来说:C:\Program Files (x86)\ossec-agent\agent-auth.exe -m <MANAGER_IP_ADDRESS>

应该可以看到如下输出:

INFO: No authentication password provided.
INFO: Connected to xxx.xxx.xxx.xxx:1515
INFO: Using agent name as: xxxxxxx
INFO: Send request to manager. Waiting for reply.
INFO: Received response with agent key
INFO: Valid key created. Finished.
INFO: Connection closed.

Wazuh 仪表盘

此时连接到 Kibana,就会在左侧工具栏中发现 Wazuh 的图标,点击此按钮跳转到配置 API 的页面:

Username: foo
Password: bar
Server: http://<WAZUH_Server_IP> 
API Port: 55000

保存 API 配置,然后点击跳转到 Overview 页面。点击页面顶端的 Agent 即可查看 ID 为 001 的 Agent,即之前注册好的主机。它显示为 Active 状态即视为正常,否则可能需要在 Agent 上确保更改 MANAGER_IP 成功并重启 Agent 的服务。

测试

在 Kibana 中,深入到 Management > Elasticsearch > Index Management 应该可以看到名为 wazuh-monitoring-3.x 的索引。然后转到 Management > Kibana > Index Patterns,如果还没有定义默认索引模式,点击 wazuh-monitoring,然后点击右上角的星号将其设为默认值。

点击 Discover 查看已创建的事件,可能暂时还没有。返回 Elasticsearch Index Management 页面,等待名为 wazuh-alerts 的索引出现。我们试图通过生成告警让其出现。

作为测试,转到另一个主机并尝试使用虚假的用户通过 SSH 登录主机:ssh fakeuser@<wazuh_agent_IP>。这将会触发主机的 auth.log 出现无效的登录尝试,这将被 Wazuh Agent 获取,在新创建的 wazuh-alerts 索引中生成新条目。现在,我们就得到了一个存储告警的仓库。

MISP 部署

部署 MISP 可以允许 Cortex 或者任何能够发起简单 REST 请求的程序查询威胁指标,如 IP 地址、URL 与文件哈希。MISP 可以自主添加订阅与查询的源,返回的信息取决于订阅源提供的数据,而且订阅源之间的差异很大。有些只是提供了数据列表,有些提供了大量额外的信息。

将 MISP 通过 Docker 进行部署相比通过源码安装容易得多,哈佛安全小组提供了一个示例。请注意:如果将其部署到生产环境中,应该使用 build.sh,这样就可以在构建之前更改默认的 MySQL 密码与 MISP_FQDN。

初始化 MISP 数据库:docker run -it --rm -v /docker/misp-db:/var/lib/mysql harvarditsecurity/misp /init-db。这可以启动容器,运行脚本使用必要的数据库文件填充 misp-db 目录,最后删除容器。如果查看 misp-db 目录,可以发现已经新增了文件。

生成 SSL 证书

如果不生成 SSL 证书,Cortex 就不能请求 MISP,按照如下命令生成证书:sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /docker/certs/misp.key -out /docker/certs/misp.crt,如果没有特殊要求,可以接受所有默认选项。

运行容器

docker run -it -d \
    -p 443:443 \
    -p 80:80 \
    -p 3306:3306 \
    -v /docker/certs:/etc/ssl/private \
    -v /docker/misp-db:/var/lib/mysql \
    harvarditsecurity/misp

打开浏览器访问 https://localhost,使用 admin@admin.testadmin 作为用户名与密码。系统会要求更改密码,新的密码至少包含 12 个字符,其中包含大写字母和特殊字符。

配置 MISP

在 Administration > Server Settings 与 Maintenance > MISP Settings 中设置 MISP.live 为 TRUE、MISP.disable_emailing 为 TRUE。

在 Sync Actions > List Feeds 的列表中选择订阅源进行订阅。我选了 malwaredomainlist,选中复选框然后点击顶部的 Enable Feed 就可以了。在列表中可以看到该订阅源,点击向下箭头就可以拉取所有事件,可以在 Administration > Jobs 处查看正在执行的任务。

点击放大镜图标,可以显示 IP 的列表,复制其中任意一个,之后会用到。

Postman

我们使用 Postman 来测试 API,在 File > Settings 中将 SSL certificate verification 设为 OFF。

在 MISP 中,在 Administration > List Users 中拷贝用户的身份密钥。在 Postman 中设置 Header 中的三个字段:

Accept application/json
Contect-Type application/json
Authorization <API_Key>

将用户的身份密钥粘贴到 Authorization 字段中。

在顶部将 REST 命令从 GET 改为 POST,API 设置为: https://localhost/attributes/restSearch

换到 Body 选项卡,点击 Raw 按钮并粘贴以下 JSON,将值替换为之前复制的 IP 地址:

{
    "returnFormat": "json",
    "value": "8.8.8.8"
}

应该会接收到以下响应:

{
    "response": {
        "Attribute": [
            {
                "id": "15",
                "event_id": "1",
                "object_id": "0",
                "object_relation": null,
                "category": "Network activity",
                "type": "ip-dst",
                "to_ids": false,
                "uuid": "5c8550db-5314-4538-a0d8-0146ac110002",
                "timestamp": "1552240859",
                "distribution": "0",
                "sharing_group_id": "0",
                "comment": "",
                "deleted": false,
                "disable_correlation": false,
                "value": "23.253.130.80",
                "Event": {
                    "org_id": "1",
                    "distribution": "0",
                    "id": "1",
                    "info": "malwaredomainlist feed",
                    "orgc_id": "1",
                    "uuid": "5c8550db-2d90-425f-9bc5-0146ac110002"
                }
            }
        ]
    }
}

此时,MISP 现在已经可以响应查询请求,为 Cortex 的加入做好了准备。返回订阅列表可以添加更多订阅源,在 Administration > Scheduled Tasks 中可以将 fetch_feeds 设置为 24 并点击 Update All 就可以配置好定时拉取任务。

TheHive & Cortex

这篇文章部署的 TheHive 3.3.0 RC5 与 Cortex stable v2.1.2,而 TheHive 4.1 版本(预计在 2019 年第二季度发布)后将取消 Elasticsearch 作为后端,转而使用 GraphDB。

注:后续使用 3.3.0 稳定版安装也可以正常使用。

安装 TheHive & Elasticsearch 5.6

# 添加仓库与密钥
echo 'deb https://dl.bintray.com/thehive-project/debian-beta any main' | sudo tee -a /etc/apt/sources.list.d/thehive-project.list
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
curl https://raw.githubusercontent.com/TheHive-Project/TheHive/master/PGP-PUBLIC-KEY | sudo apt-key add -

# 更新并安装需要的 Java
sudo apt-get update
sudo apt-get install openjdk-8-jre

# 安装 Elasticsearch 5.6.15,这是仓库中最新的版本
sudo apt-get install elasticsearch

# 修改配置文件
sudo nano /etc/elasticsearch/elasticsearch.yml

cluster.name: hive
bootstrap.memory_lock: true
discovery.type: single-node

# 设置服务自启动
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

# 检查响应
curl http://localhost:9200

# 如果安装成功继续安装 TheHive
sudo apt-get install thehive=3.3.0-0.1RC5

# 阻止版本更新
apt-mark hold elasticsearch thehive

# 编辑配置文件
sudo nano /etc/thehive/application.conf

# 取消注释,并更改密码
#play.http.secret.key

# 设置服务自启动
sudo systemctl daemon-reload
sudo systemctl enable thehive
sudo systemctl start thehive

打开浏览器,查看网站:http://<TheHiveIP>:9000,应该可以看到数据库更新消息:

点击 Update Database,如果没有看到上面的消息而是看到了登录框,意味着与 Elasticsearch 的连接中断了,请检测日志 \var\log\thehive

更新完成后,仍然有机会为管理员账户更改用户名与密码。还可以检查 Elasticsearch 名为 the_hive_14 的索引:curl http://127.0.0.1:9200/_cat/indices?v

如果忘记了管理员的账户与密码,请删除此索引重新开始。

安装 Cortex

注:安装 Cortex 3.0.0-RC1 会遇到一些问题,安装 Cortex 2.1.3 则不会遇到。

在 TheHive 主机上安装 Cortex:

sudo apt-get install cortex=2.1.3-1
sudo apt-mark hold cortex

安装 Cortex 有一些依赖需要先安装:

sudo apt-get install -y --no-install-recommends python-pip python2.7-dev python3-pip python3-dev ssdeep libfuzzy-dev libfuzzy2 libimage-exiftool-perl libmagic1 build-essential git libssl-dev
sudo pip install -U pip setuptools && sudo pip3 install -U pip setuptools

安装 Cortex Analyzer

从 GitHub 拉取源代码,为每个 Analyzer 单独安装 requirements.txt 的依赖:

cd /etc/cortex
git clone https://github.com/TheHive-Project/Cortex-Analyzers

本文的下载位置在:/etc/cortex

# 更改文件夹权限
chown -R root:cortex Cortex-Analyzers

# 为所有 Analyzer 安装依赖(两行作为一条命令执行)
for I in $(find Cortex-Analyzers -name 'requirements.txt'); do sudo -H pip2 install -r $I; done && \
for I in $(find Cortex-Analyzers -name 'requirements.txt'); do sudo -H pip3 install -r $I || true; done

安装依赖不可避免地会出现一些错误,解决此类办法的好方法是挑选要安装哪些 Analyzer 防止依赖冲突。修改 Cortex 的配置文件 application.conf 指向 Cortex-Analyzers 目录:sudo nano /etc/cortex/application.conf。取消注释 #play.http.secret.key,并更改密码。找到 ## ANALYZERS 的位置,将其改为 /etc/cortex/Cortex-Analyzers/analyzers

启动 Cortex:

sudo systemctl enable cortex
sudo systemctl start cortex

打开浏览器检查安装是否成功:http://<TheHiveIP>:9001。更新数据库并创建管理员用户登录,就像安装 TheHive 时做的那样。

Cortex 中规定必须在组织账户下登录才能启用、管理 Analyzer,否则只能创建组织与用户。

点击 +Add Organization 创建一个新组织,切换到 Users 标签页点击 +Add User 创建一个新用户,并且将新用户分配给创建的组织并分配 OrgAdmin 角色。保存后,点击 New Password 为刚创建的用户设置密码,按回车键保存。然后注销账户,用新用户登录。点击顶部的 Organization 标签页,点击 Analyzers 子选项卡,而不是顶部蓝色的 Analyzers 选项卡。如果 Cortex 配置正确,应该可以看到 Analyzers,按照我的配置安装了 113 个可用的 Analyzer。

可以启用以下几个 Analyzer,接受默认配置:

Abuse_Finder_2_0
CyberCrime-Tracker_1_0
Cyberprotect_ThreatScore_1_0
DShield_lookup_1_0
MISP_2_0
URLhaus_2_0
Urlscan_io_Search_0_1_0

除了 MISP 之外,这些都不需要 API 密钥或者进行进一步的配置。 点击 Users 子选项卡并创建一个新用户和 TheHive 集成。该用户应该分配 read & analyze 角色,这次可以不用为其设置密码,点击 Create API Key 并且拷贝该密钥。

点击页面顶端的 +New Analysis

不用管 TLP 与 PAP

更改数据类型为 IP

添加 8.8.8.8

选中你启用的 Analyzer 旁边的框

点击开始

修改 TheHive 的 application.conf 来指向 Cortex:sudo nano /etc/thehive/application.conf。滚动到底部,找到 #Cortex 部分,取消注释 play.modules.enabled += connectors.cortex.CortexConnector

添加 API 密钥与 URL:

play.modules.enabled += connectors.cortex.CortexConnector

cortex {
  "CORTEX-SERVER-ID" {
    url = "http://127.0.0.1:9001"
    key = "wrXichGSPy4xvjpWVdeQoNmoKn9Yxnsn"
  #  # HTTP client configuration (SSL and proxy)
  #  ws {}
  }
}

重启服务器,两个服务再次启动的时候就可以使用了。在 TheHive 点击 +New Case 测试 Cortex:

给事件一个名称与描述,然后打开这个事件,点击 Observables 选项卡,点击 +Add Observable 设置 Type = IP、Value = 1.1.1.1、Tag 为 test。只需要提供 tag 或者 description,不必二者都填。

在 Observable 列表中点击该 IP 地址,这将打开一个新选项卡,包含相关数据,也可以在底部看到 Analyzer:

点击 Run All,如果返回 Cortex 将会看到 Analyzer 在 Job History 标签页中运行。回到 TheHive,现在 Analyzer 应该有了最后分析的时间与日期。返回 Observables 选项卡并刷新页面,应该可以在 Observables 下看到一个标签列表:

导入报告模版

https://dl.bintray.com/thehive-project/binary/report-templates.zip 下载报告模版包。使用管理员帐号登录 TheHive,点击 Admin > Report templates 选择 Import templates,在其中选择下载的包。

现在,在 Observables 中点击最后分析时间时将会获得包含分析结果的报告:

启用 MISP

在 MISP 的页面上点击 Administration > Add User:

给用户分配一个电子邮件,cortex@admin.test

将用户添加到 ORGNAME 组织

分配角色 user

取消底部所有复选框

拷贝用户 API 密钥

在 Cortex 的页面上点击 Organization > Analyzers,在搜索框中输入 misp,然后启用 MISP_2_0

为 MISP 服务器提供描述

URL = https://

key = AuthKey from MISP user you created

cert_check: False

现在回到 MISP 页面,点击 Sync Actions > List Feeds。找到其中一个订阅源,然后点击右侧放大镜,从列表中选择一个 IP 并复制。

在 Cortex 中点击 +New Analysis,添加 IP 的数据类型,然后粘贴复制的 IP 地址。选择 MISP_2_0 的 Analyzer 运行。在 Job History 页面点击 View 将会看到复制的 IP 列表名与其他信息。可以在 TheHive 中添加此 IP 为 Observables 进行测试。现在已经将 TheHive、MISP 与 Coretx 集成在了一起。

ElastAlert

最后一步是安装 ElastAlert 从 Elasticsearch 中的事件中生成警报。ElastAlert 当前版本要求 Python 2.7,本文安装在了 Elasticsearch 主机上:

sudo apt install python-pip
pip install elastalert

安装位置在:/home/username/.local/bin/elastalert,注:ElastAlert 也有 Docker 镜像提供。

配置 ElastAlert

创建一个目录来存储配置和规则:mkdir -p ~/elastalert/rules。可以拉取公开配置文件或者制作自己的配置文件,复制如下必要的设置,保存为 ~/elastalert/config.yaml

rules_folder: /home/username/elastalert/rules
run_every:
  minutes: 1
buffer_time:
  minutes: 15
es_host: x.x.x.x
es_port: 9200
use_ssl: False
writeback_index: elastalert_status
alert_time_limit:
  days: 2

运行 elastalert-create-index 在 Elasticsearch 中创建必要的索引。可以得到以下结果:

Elastic Version:6
Mapping used for string:{'type': 'keyword'}
New index elastalert_status created
Done!

创建规则

在 TheHive 页面中点击 Admin > Users,创建一个名为 elastalert 的用户,但不为其分配角色,并选中 elastalert。点击 Create API Key 并拷贝 API 密钥。TheHive 的管理指南指出:“为了更好地审计,一旦创建了用户,就无法删除该用户,只能锁定该账户”。

每条规则定义要执行的查询,触发匹配的参数与每个匹配触发的告警列表。本文中创建一个规则来识别失败的 SSH 登录,编辑规则文件 nano ~/elastalert/rules/failed_ssh_login.yaml

es_host: x.x.x.x
es_port: 9200
name: SSH Failed Login
type: frequency
index: wazuh-alerts-3.x-*
num_events: 2
timeframe:
    hours: 1
filter:
- term:
    rule.id: "5710"
alert: hivealerter
hive_connection:
  hive_host: http://x.x.x.x
  hive_port: 9000
  hive_apikey: <Paste API key for elastalert user here>

hive_alert_config:
  type: 'external'
  source: 'elastalert'
  description: '{rule[name]}'
  severity: 2
  tags: ['{rule[name]}', '{match[agent][ip]}', '{match[predecoder][program_name]}']
  tlp: 3
  status: 'New'
  follow: True

hive_observable_data_mapping:
    - ip: "{match[src_ip]}"

注意最后将 Observables 映射为 Types 的部分。尽管可以在标签字段使用嵌套的字段名({match[data][srcip]}),但对于 hive_observable_data_mapping 好像并不起作用。只能使用单个字段名('{match[srcip]}')。

我们需要修改 Logstash 主机上的 01-wazuh.conf 配置文件来解决这个问题。在 Logstash 主机上修改 01-wazuh.conf 文件 [data][srcip] 过滤器的部分,将 add_field => [ "@src_ip", "%{[data][srcip]}" ] 改为 add_field => [ "src_ip", "%{[data][srcip]}" ]。geoip 过滤器的部分,将 source => "@src_ip" 改为 source => "src_ip"

现在日志中应该已经有了 src_ip 字段,可以通过 Kibana 进行验证。在 Kibana 页面中选择 Management > Kibana > Index Patterns,选择 wazuh-alerts 索引模式,点击 Refresh 启用新字段:

# 测试规则
elastalert-test-rule ~/elastalert/rules/failed_ssh_login.yaml

# 运行 ElastAlert
elastalert --verbose --config ~/elastalert/config.yaml

针对运行着 Wazuh Agent 的主机生成一些告警:连续运行三次以下命令:ssh invaliduser@serverip

此时应该可以看到 Kibana 中显示了告警,ElastAlert 可以在下次运行时接收这些告警:

INFO:elastalert:Ran SSH Failed Login from 2019-03-31 18:21 UTC to 2019-04-02 15:01 UTC: 3 query hits (0 already seen), 1 matches, 1 alerts sent

在 TheHive 的 Alerts 下生成新告警:

点击右侧 Page 图标预览告警,可以为其分配一个模版,然后导入它:

这时已经完成了全部任务,Wazuh 生成的告警已经能在 TheHive 中显示为事件了。

*参考来源:Arnaud Loos,FB 小编 Avenger 编译,转载请注明来自FreeBuf.COM

本文作者:, 转载请注明来自FreeBuf.COM

# ElasticSearch # TheHive # 安全应急响应平台
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
评论 按时间排序

登录/注册后在FreeBuf发布内容哦

相关推荐
  • 0 文章数
  • 0 评论数
  • 0 关注者
登录 / 注册后在FreeBuf发布内容哦
收入专辑