0x01 架构
配置
wazuh version 4.9
OpenSearch Dashboards 2.13.0
系统版本
center: rocky os
agent: centos 7/ windows/macos
index: rocky os
1、thehive
TheHive 提供全面的四合一安全事件响应平台,它由一套强大的功能组成,旨在简化事件响应工作流程、加强协作,并增强信息安全从业人员有效调查和缓解安全威胁的能力。TheHive 与 MISP 无缝集成,具有任务管理、证据处理和威胁情报集成等高级功能,是现代 SOC不可或缺的工具。
主要特点:
与 MISP 集成: 与 MISP(恶意软件信息共享平台)紧密集成,实现无缝协作和信息共享。
实时协作: 多名分析师可同时协作,以实时流方式更新case、task、IOC
高效的任务管理: 特殊的通知功能可实现高效的任务处理和分配,并可从电子邮件报告、SIEM 等各种来源进行预览和导入。
可定制模板: 使用灵活的模板引擎创建case和task,允许自定义指标和自定义字段,以推动团队活动并确定自动化领域。
证据管理: 分析人员可以记录进度、附加证据或文件、添加标签,以及导入包含可疑数据的受密码保护的 ZIP 档案。
Observables管理: 通过直接从 MISP 事件或警报中导入选项,可轻松添加和管理单个或批量Observables。
威胁情报集成: 利用 Cortex 及其分析器和响应器获得能力、加速调查并遏制威胁。利用标签、标记 IOC 和识别以前看到过的可观察性来丰富威胁情报。
2、cortex
Cortex 解决了 SOC、CSIRT 和安全研究人员在威胁情报过程中经常遇到的两个常见问题,数字取证和事件响应:
如何通过查询单个工具而不是多个工具来大规模分析他们收集的数据?
如何主动应对威胁?
TheHive 可以利用 Cortex 响应程序对alert、case、task和在调查过程中收集的结果:向相关用户发送电子邮件、在代理级别阻止 IP 地址、通知团队成员需要紧急处理警报等等。
Cortex 包含许多功能:
管理多个组织(即多租户)
为每个组织制定分析器和响应配置
缓存:特定时间内相同case不会重复执行响应
3 MISP
misp一个威胁情报平台,用于共享、存储和关联目标攻击的妥协指标、威胁情报、金融欺诈信息、漏洞信息甚至反恐信息。不仅可以存储、共享、协作进行网络安全指标、恶意软件分析,还可以使用 IoC 和信息来检测和防止针对 I基础设施、组织或人员的攻击、欺诈或威胁。
可以用来存储关于恶意样本、事件、攻击者的相关信息的ioc数据库
自动关联查找来自恶意软件、攻击活动或分析的属性和指标之间的关系。关联引擎包括属性之间的关联和更高级的关联,例如模糊哈希关联(例如 ssdeep)或 CIDR 块匹配。还可以根据属性启用关联或禁用事件。
灵活的数据模型,可以表达复杂的对象并将其链接在一起以表达威胁情报。
内置共享功能。 MISP可以自动同步不同MISP之间的事件和属性。高级过滤功能可用于满足每个组织的共享策略,包括灵活的共享组容量和属性级别分配机制。
直观的用户界面,供最终用户创建、更新事件和属性/指标并进行协作。
导出:生成IDS(默认支持Suricata、Snort和Bro)、OpenIOC、纯文本、CSV、MISP XML或JSON输出等格式
导入:批量导入。支持OpenIOC、GFI 沙箱、ThreatConnect CSV 或 MISP 格式导入。
数据共享:使用MISP与其他信任组自动交换和同步。
feed 导入:用于导入和集成 MISP feed 以及来自第三方的任何威胁情报或 OSINT feed 的灵活工具。标准 MISP 安装中包含许多默认源。
4 wazuh
日志收集模块:此模块可以读取系统日志文件和 Windows 事件,从而收集操作系统和应用程序日志消息。它支持用于 Windows 事件的 XPath 过滤器,并识别多行格式,如 Linux 审计日志。支持使用其他元数据来丰富 JSON 事件。
命令执行模块:定期运行授权命令,收集命令执行结果并将其报告给 Wazuh 服务以进行进一步分析。(这个功能可玩性较高,可用于扩展检测,但是也存在威胁)
文件完整性监控模块(FIM):该模块通过指定需要实时监控的文件目录,通过监控文件系统,在创建、删除或修改文件时进行报告。它跟踪文件属性、权限、所有权和内容的更改。当事件发生时,它会实时捕获用户、内容和时间的详细信息。FIM 模块使用受监视文件的状态构建和维护一个本地数据库,允许远程运行查询。
基线评估模块(SCA):提供持续的配置评估,默认配置CIS 基线检查功能,支持创建自己的 SCA 检查来监控和执行其安全策略。
基础信息采集模块:定期运行采集系统基础信息数据,包括主机信息(主机名、操作系统版本、内核信息、补丁信息)、硬件信息(cpu、内存、磁盘的容量、使用信息)、网络信息(接口、连接、路由)进程信息、服务信息、已安装软件信息。扫描结果存储在本地SQLite数据库中,支持远程查询。
Rootcheck检测:支持检测被rootkit创建的隐藏进程,该模块利用
rootkit_files.txt
和rootkit_trojans.txt
这两个文件中定义的模式和特征来进行检测。这些文件包含了已知rootkit文件的名称和路径,以及特定的rootkit特征。恶意软件检测模块:集成yara做恶意软件检测,支持集成实时完整性监控(FIM),在文件创建或者修改时出发yara检测。办公终端可以选择关闭恶意检测模块,使用defender
响应模块:支持自动化响应和事件驱动响应,响应方式包括:IP加入防火墙、禁用账户、终止进程、自定义脚本。无法通过管理界面进行主动下发(使用API可以调用API reference · Wazuh documentation),可以通过绑定规则ID实现自动化响应。
容器安全监控模块:支持和 Docker Engine API 集成,用于监视容器化环境中的更改。支持监控容器(创建、运行、销毁)、支持容器环境基线检查、支持监控网络配置或数据卷的更改
云安全监控模块:支持Amazon、Microsoft和Google三家云厂商的API,能够检测云基础设施的更改(例如,创建新用户、修改安全组、停止云实例等)并收集云服务日志数据。
Wazuh 服务功能介绍
Wazuh 服务主要包含两个功能:agent 管理、规则引擎,规则引擎支持接入威胁情报和上下文检测功能。整体上包含5个模块,包括:Agent注册模块、Agent通信模块、规则引擎、RESTful API、信息输出模块(Filebeat)。
Agent 注册模块:用于注册新的Agent,该服务为每个Agent提供和分发唯一的身份验证密钥,支持通过 TLS/SSL 证书或提供固定密码进行身份验证。
Agent通信模块:此模块从agent接收数据,它使用注册服务共享的密钥来验证每个agent身份,并加密 Wazuh agent和 Wazuh 服务之间的通信。此外,此服务还提供集中配置管理,支持远程推送新的Agent配置。
规则引擎模块:规则引擎使用解码器来识别正在处理的信息类型(Windows 事件、SSH 日志、Web 服务器日志等),通过解码器将数据标准化。然后,基于规则通过规则引擎识别解码事件中的异常。
RESTful API:提供了一个接口用于与 Wazuh 基础结构进行交互,用于管理Agent和服务的配置设置,监视基础结构状态和整体运行状况,管理和编辑Wazuh解码器和规则,以及查询受监视端点的状态。Wazuh 仪表板也是使用这个API。
信息输出模块(Filebeat):用于向 Wazuh 搜索服务发送事件和警报。读取 Wazuh 分析引擎的输出并实时传送结果。
Wazuh 搜索服务功能介绍(opensearch)
Wazuh 搜索服务是一个高度可扩展的全文搜索和分析引擎。用于存储 Wazuh 服务生成的警报,并提供实时的数据搜索和分析功能。wazuh搜索服务存储4种索引:
wazuh‑alerts:存储Wazuh服务生产的警报
wazuh‑archives:存储Wazuh服务接收的所有事件
wazuh‑monitoring:存储wazuh agent 状态
wazuh‑statistics:存储wazuh 服务性能相关数据
0x02 安装
1 快速安装indexer
安装系统 rocky os 9
配置要求: hardware requirements of 4Gb of RAM and 2 CPU cores
根据官方文档下载安装脚本和配置模板
curl -sO https://packages.wazuh.com/4.9/wazuh-install.sh
chmod +x wazuh-install.sh
curl -sO https://packages.wazuh.com/4.9/config.yml
修改配置模板
nodes:
# Wazuh indexer nodes
indexer:
- name: node-1
ip: "192.168.162.82"
#- name: node-2
# ip: "<indexer-node-ip>"
#- name: node-3
# ip: "<indexer-node-ip>"
# Wazuh server nodes
# If there is more than one Wazuh server
# node, each one must have a node_type
server:
- name: wazuh-master
ip: "192.168.162.80"
# node_type: master
#- name: wazuh-2
# ip: "<wazuh-manager-ip>"
# node_type: worker
#- name: wazuh-3
# ip: "<wazuh-manager-ip>"
# node_type: worker
# Wazuh dashboard nodes
dashboard:
- name: dashboard
ip: "192.168.162.82"
初始化indexer配置和密码
./wazuh-install.sh --generate-config-files
完成相关文件生成
后续执行命令的时候需要确保wazuh-install-files.tar
和wazuh-install.sh
在一个目录下
安装indexer
# 先开启防火墙
sudo firewall-cmd --permanent --add-port=9200/tcp
sudo firewall-cmd --permanent --add-port=9300/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
wazuh-install.sh --wazuh-indexer node-1
安装成功
启动服务
./wazuh-install.sh --start-cluster
验证服务
# 先获取管理员密码
tar -axf wazuh-install-files.tar wazuh-install-files/wazuh-passwords.txt -O | grep -P "\'admin\'" -A 1
indexer_username: 'admin'
indexer_password: 'R*cGOt4.+tx5GZ.3F.F.FBWQqtH5.d*c'
ps: 默认安装到目录为/usr/share/wazuh-indexer/
,查看版本如下
2 快速安装server
Wazuh 服务器分析从 Wazuh 代理收到的数据,在检测到威胁或异常时触发警报。它还用于远程管理代理的配置并监控其状态。
可以在单个主机上安装 Wazuh 服务器。或者可以将其分布式安装在多个节点中组成集群。多节点配置提供高可用性和改进的性能。
使用集群配置安装
安装master节点
将1中生成的wazuh-install-files.tar
和wazuh-install.sh
放在同一个目录下
安装server
chmod +x wazuh-install.sh
./wazuh-install.sh --wazuh-server wazuh-master
自动化安装了wazuh-manager、filebeat模块
测试filebeat是否安装成功
filebeat test output
查看server安装状态
systemctl status wazuh-manager
wazuh server默认安装到/var/ossec
目录下, 配置文件路径为:/var/ossec/etc/ossec.conf
filebeat配置文件路径为/etc/filebeat/filebeat.yml
使用脚本安装的程序,配置文件中默认是从环境变量中获取indexer的用户名和密码的。 wazuh的专属模块是存放在/usr/share/filebeat/module
目录下的.。 默认是采集/var/ossec/logs/alerts/alerts.json
文件(配置文件为/usr/share/filebeat/module/wazuh/alerts/manifest.yml
)的日志,这是wazuh产出的告警日志。
修改防火墙
# 1514, 1515, 1516, 55000
sudo firewall-cmd --permanent --add-port=1514/tcp
sudo firewall-cmd --permanent --add-port=1515/tcp
sudo firewall-cmd --permanent --add-port=1516/tcp
sudo firewall-cmd --permanent --add-port=55000/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
安装worker节点
将1中生成的wazuh-install-files.tar
和wazuh-install.sh
放在同一个目录下
安装server
chmod +x wazuh-install.sh
./wazuh-install.sh --wazuh-server wazuh-master
这里先按照装master的步骤进行安装,后续再调整配置文件将服务修改为worker模式
修改worker节点配置,开启集群
/var/ossec/etc/ossec.conf
<cluster>
<name>wazuh</name>
<node_name>node02</node_name>
<node_type>worker</node_type> <!--设置为worker类型 -->
<key>c98b62a9b6169ac5f67dae55ae4a9088</key> <!--与master节点保持一致 -->
<port>1516</port>
<bind_addr>0.0.0.0</bind_addr>
<nodes>
<node>192.168.162.80</node> <!--master节点ip -->
</nodes>
<hidden>no</hidden>
<disabled>no</disabled> <!-- 开启集群配置 -->
</cluster>
返回master节点,开启集群,修改master阶段配置
/var/ossec/etc/ossec.conf
<cluster>
<name>wazuh</name>
<node_name>node01</node_name>
<node_type>master</node_type> <!--设置为master类型 -->
<key>c98b62a9b6169ac5f67dae55ae4a9088</key>
<port>1516</port>
<bind_addr>0.0.0.0</bind_addr>
<nodes>
<node>192.168.162.80</node> <!--master节点ip -->
</nodes>
<hidden>no</hidden>
<disabled>no</disabled> <!-- 开启集群配置 -->
</cluster>
重启master服务
[root@wazuh-master-1162-80 etc]# systemctl restart wazuh-manager
修改work节点防火墙
# 1514, 1515, 1516, 55000
sudo firewall-cmd --permanent --add-port=1514/tcp
sudo firewall-cmd --permanent --add-port=1515/tcp
sudo firewall-cmd --permanent --add-port=1516/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
重启worker节点服务
[root@wazuh-node-162-81 etc]# systemctl restart wazuh-manager
确认是否完成集群配置(任何一台主机上都能查看)
/var/ossec/bin/cluster_control -l
ps: 错误日志可以参考路径/var/ossec/logs
3 安装dashboard
将1中生成的wazuh-install-files.tar
和wazuh-install.sh
放在同一个目录下
安装server
chmod +x wazuh-install.sh
./wazuh-install.sh --wazuh-dashboard dashboard
dashboard用户名密码
User: admin
Password: R*cGOt4.+tx5GZ.3F.F.FBWQqtH5.d*c
配置防火墙
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
在 wazuh-install-files.tar 存档内的 wazuh-passwords.txt 文件中查找 Wazuh 安装助手生成的所有密码。要打印它们,请运行以下命令:
tar -O -xvf wazuh-install-files.tar wazuh-install-files/wazuh-passwords.txt
[root@wazuh-index-162-82 ~]# tar -O -xvf wazuh-install-files.tar wazuh-install-files/wazuh-passwords.txt
wazuh-install-files/wazuh-passwords.txt
# Admin user for the web user interface and Wazuh indexer. Use this user to log in to Wazuh dashboard
indexer_username: 'admin'
indexer_password: 'R*cGOt4.+tx5GZ.3F.F.FBWQqtH5.d*c'
# Anomaly detection user for the web user interface
indexer_username: 'anomalyadmin'
indexer_password: 'wEdJK59.Yo3*rlxhmvslP7cy2SWD?U9v'
# Wazuh dashboard user for establishing the connection with Wazuh indexer
indexer_username: 'kibanaserver'
indexer_password: 'D2j+QCmFz+k6hcEWeunR*oRCN+fe63pg'
# Regular Dashboard user, only has read permissions to all indices and all permissions on the .kibana index
indexer_username: 'kibanaro'
indexer_password: 'Se6o7Gx6jKqL0aS+U5?UuzGjO0a2BNaf'
# Filebeat user for CRUD operations on Wazuh indices
indexer_username: 'logstash'
indexer_password: 'e.FLL*s7jUI*RWB.q6ki4I1FsNeIs?.S'
# User with READ access to all indices
indexer_username: 'readall'
indexer_password: 'nABi1.E8+bZp0l7tWTEj54.YtHv*q.Ny'
# User with permissions to perform snapshot and restore operations
indexer_username: 'snapshotrestore'
indexer_password: 'JZ.7Mp1qgSEKSLR.39aV3h10?RY9FLy*'
# Password for wazuh API user
api_username: 'wazuh'
api_password: 'X.sARaoBFLOLYLtQB4m?.LWOc2Ye1h12'
# Password for wazuh-wui API user
api_username: 'wazuh-wui'
api_password: '2Rg3krSRGzk8.wsEjwIvJPczMTRZ.cCN'
访问dashboard
User: admin
Password: R*cGOt4.+tx5GZ.3F.F.FBWQqtH5.d*c
4 Agent安装
CentOS安装
下载对应的安装包
https://documentation.wazuh.com/current/installation-guide/packages-list.html#linux
安装
需要在环境变量中指定连接的节点地址,这里我们指定worker节点
WAZUH_MANAGER="192.168.162.81" rpm -ivh wazuh-agent-4.9.0-1.x86_64.rpm
配置服务
systemctl daemon-reload
systemctl enable wazuh-agent
systemctl start wazuh-agent
ps: 生成环境可以通过systemctkl对服务进行内存和cpu限制,以Centos为例,打开wazuh服务的systemd配置文件/usr/lib/systemd/system/wazuh-agent.service
[Service]
Type=forking
ExecStart=/usr/bin/env /var/ossec/bin/wazuh-control start
ExecStop=/usr/bin/env /var/ossec/bin/wazuh-control stop
ExecReload=/usr/bin/env /var/ossec/bin/wazuh-control reload
KillMode=process
RemainAfterExit=yes
PUQuota=10%
MemoryLimit=256M
在上述示例中,CPUQuota 限制了该服务最多只能使用系统 CPU 的 10%,而 MemoryLimit 限制了该服务最多只能使用 256 MB 的内存。
启动agent服务
systemctl daemon-reload
systemctl enable wazuh-agent
systemctl start wazuh-agent
限制成功
windows安装
使用管理员权限的powershell安装
.\wazuh-agent-4.9.0-1.msi /q WAZUH_MANAGER="192.168.162.81"
启动
PS C:\Users\Administrator\Desktop> net start wazuh
Wazuh 服务正在启动 .
Wazuh 服务已经启动成功。
5 安装theHive
使用docker-compose进行测试
version: "3"
services:
thehive:
image: strangebee/thehive:5.2
depends_on:
- cassandra
- elasticsearch
- minio
- cortex
mem_limit: 1500m
ports:
- "9000:9000"
environment:
- JVM_OPTS="-Xms1024M -Xmx1024M"
command:
- --secret
- "mySecretForTheHive"
- "--cql-hostnames"
- "cassandra"
- "--index-backend"
- "elasticsearch"
- "--es-hostnames"
- "elasticsearch"
- "--s3-endpoint"
- "http://minio:9000"
- "--s3-access-key"
- "minioadmin"
- "--s3-secret-key"
- "minioadmin"
- "--s3-bucket"
- "thehive"
- "--s3-use-path-access-style"
- "--cortex-hostnames"
- "cortex"
- "--cortex-keys"
# put cortex api key once cortex is bootstraped
- "<cortex_api_key>"
cassandra:
image: 'cassandra:4'
mem_limit: 1600m
ports:
- "9042:9042"
environment:
- MAX_HEAP_SIZE=1024M
- HEAP_NEWSIZE=1024M
- CASSANDRA_CLUSTER_NAME=TheHive
volumes:
- cassandradata:/var/lib/cassandra
restart: on-failure
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.12
mem_limit: 1500m
ports:
- "9200:9200"
environment:
- discovery.type=single-node
- xpack.security.enabled=false
volumes:
- elasticsearchdata:/usr/share/elasticsearch/data
minio:
image: quay.io/minio/minio
mem_limit: 512m
command: ["minio", "server", "/data", "--console-address", ":9090"]
environment:
- MINIO_ROOT_USER=minioadmin
- MINIO_ROOT_PASSWORD=minioadmin
ports:
- "9090:9090"
volumes:
- "miniodata:/data"
cortex:
image: thehiveproject/cortex:3.1.7
depends_on:
- elasticsearch
environment:
- job_directory=/tmp/cortex-jobs
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /tmp/cortex-jobs:/tmp/cortex-jobs
ports:
- "9001:9001"
volumes:
miniodata:
cassandradata:
elasticsearchdata:
或者使用本地安装(4 core CPUs and 16GB of memory)
wget -q -O /tmp/install.sh https://archives.strangebee.com/scripts/install.sh ; sudo -v ; bash /tmp/install.sh
启动服务 http://<IP:9001>
docker-compose up -d
Login: admin@thehive.local
Password: secret
在thehive中创建用户和组织
创建组织
创建用户
创建一个api 用户,该用户帐户将用于将 TheHive 与 Wazuh 管理器集成。要创建 API 用户,请转至用户并单击添加。输入 API User 作为名称,输入 api@test.local 作为登录 ID,将帐户类型设置为 Service。创建 API 用户后,单击“显示”:
这里为APi创建key为tcwy1KGJERGgmQEWftAKHTWrR/1Kp+/H
复制 API 密钥并将其保存在某处。在将 TheHive 与 Wazuh 管理器集成时,我们将需要此 API 密钥
在cortex中创建组织和用户
获取apiKey之后,就可以在未来用于将misp整合在cortex中了。
6 安装misp
这里使用docker安装
curl --proto '=https' --tlsv1.2 -O https://raw.githubusercontent.com/NUKIB/misp/main/docker-compose.yml
文件内容如下
services:
mysql:
image: mariadb:11.4
restart: always
container_name: misp-mysql
tmpfs:
- /tmp
volumes:
- mysql_data:/var/lib/mysql
environment:
MYSQL_DATABASE: misp
MYSQL_USER: misp
MYSQL_PASSWORD: password # Please change for production
MYSQL_ROOT_PASSWORD: password # Please change for production
redis:
image: redis:7.2
restart: always
container_name: misp-redis
volumes:
- redis_data:/data
misp-modules:
image: ghcr.io/nukib/misp-modules:latest
restart: always
container_name: misp-modules
cap_drop:
- NET_RAW
- SYS_CHROOT
- MKNOD
- NET_BIND_SERVICE
- AUDIT_WRITE
- SETFCAP
misp:
image: ${MISP_IMAGE-ghcr.io/nukib/misp:latest}
restart: always
container_name: misp
depends_on:
- mysql
- redis
tmpfs:
- /tmp
cap_drop:
- NET_RAW
- SYS_CHROOT
- MKNOD
- AUDIT_WRITE
- SETFCAP
environment:
MYSQL_HOST: mysql
MYSQL_LOGIN: misp
MYSQL_PASSWORD: password # Please change for production
MYSQL_DATABASE: misp
REDIS_HOST: redis
MISP_BASEURL: http://192.168.162.150:8080
MISP_UUID: 0a674a5a-c4cb-491d-80cf-5adb48b5c1cd # Please change for production
MISP_ORG: Testing org # Please change for production
MISP_MODULE_URL: http://misp-modules
MISP_EMAIL: ahoj@example.com # Please change for production
SECURITY_SALT: PleaseChangeForProduction # Please change for production
ZEROMQ_ENABLED: "yes"
SYSLOG_ENABLED: "no"
ECS_LOG_ENABLED: "yes"
MISP_DEBUG: "yes"
volumes:
- misp_logs:/var/www/MISP/app/tmp/logs/
- misp_certs:/var/www/MISP/app/files/certs/
- misp_attachments:/var/www/MISP/app/attachments/
- misp_img_orgs:/var/www/MISP/app/files/img/orgs/
- misp_img_custom:/var/www/MISP/app/files/img/custom/
- misp_gnupg:/var/www/MISP/.gnupg/
ports:
- "0.0.0.0:8080:80"
- "0.0.0.0:50000:50000"
volumes:
mysql_data:
redis_data:
misp_logs:
misp_certs:
misp_attachments:
misp_img_orgs:
misp_img_custom:
misp_gnupg:
启动
docker compose up -d
启动后访问http://<IP>:8080
登录凭证为
admin@admin.test
admin
增加一个组织和用户
新增威胁情报订阅
Sync Actioin -》Feeds -》 import Feeds from JSON
内容可以从MISP/app/files/feed-metadata/defaults.json at 2.4 · MISP/MISP (github.com) 获取。 复制内容导入。
导入完成后,点击List Feeds 菜单激活订阅源
通过以上操作已完成基础环境的搭建。
参考
Overview - TheHive 5 Documentation (strangebee.com)
MISP features and functionalities (misp-project.org)
integration - Local configuration (ossec.conf) · Wazuh documentation