上一期说到在Wazuh中集成Sigma的相关规则,实现检测规则的快速导入,增强检测能力。接下来介绍告警通知工具,用于将检测到的告警快速通知到对应责任人。
Praeco介绍
Praeco是一款告警通知工具,用于统计Elasticsearch或者OpenSearch中异常统计数据,并将对应的告警信息通过各种通讯方式发出,支持Slack, MS Teams, Email, Telegram, an HTTP POST/HTTP POST 2 endpoint等。
Praeco工作逻辑
Praeco中重要的组件:ElastAlert 2。
ElastAlert 2针对Elasticsearch或者OpenSearch(Wazuh使用OpenSearch)中异常数据(使用者配置查询语句)进行告警,如果您希望在您实时写入Elasticsearch或者OpenSearch中的数据匹配特定模式时收到告警,那么ElastAlert 2适合你。
大致工作逻辑如下:Praeco对Elasticsearch中数据进行查询,并返回对应结果,如果匹配到需要告警内容则进行告警。
接下来安装Praeco并将其跟Wazuh进行联动对于异常统计数据进行告警。
安装Praeco
Praeco仓库地址:https://github.com/johnsusek/praeco
由于Praeco需要容器化部署,通过docker进行搭建,所以需要在安装Praeco之前安装docker。
根据官方文档进行安装:https://docs.docker.com/engine/install/centos/
安装完成查看docker服务相关状态:
systemctl status docker
接下来安装Praeco
git clone https://github.com/johnsusek/praeco.git
cd praeco
mkdir -p rules rule_templates
chmod -R 777 rules rule_templates
接下来修改配置文件,需要注意修改下图中红色框中内容,偷懒直接使用admin账号,生产环境中需要为Praeco专门创建一个账号用于查询。
vi config/api.config.json
复制以下内容并进行修改
{
"appName": "elastalert-server",
"port": 3030,
"wsport": 3333,
"elastalertPath": "/opt/elastalert",
"verbose": false,
"es_debug": false,
"debug": false,
"rulesPath": {
"relative": true,
"path": "/rules"
},
"templatesPath": {
"relative": true,
"path": "/rule_templates"
},
"dataPath": {
"relative": true,
"path": "/server_data"
},
"es_host": "*WAZUH-INDEXER*",
"es_port": 9200,
"es_username": "admin",
"es_password": "*YOUR_PASSWORD*",
"es_ssl": true,
"ea_verify_certs": false,
"opensearch_flg": true,
"writeback_index": "praeco_elastalert_status"
}
继续修改另一个配置文件
vi config/elastalert.yaml
复制以下内容并进行修改
# The elasticsearch hostname for metadata writeback
# Note that every rule can have its own elasticsearch host
es_host: 192.168.116.201
# The elasticsearch port
es_port: 9200
# This is the folder that contains the rule yaml files
# Any .yaml file will be loaded as a rule
rules_folder: rules
# How often ElastAlert 2 will query elasticsearch
# The unit can be anything from weeks to seconds
run_every:
seconds: 60
# ElastAlert 2 will buffer results from the most recent
# period of time, in case some log sources are not in real time
buffer_time:
minutes: 1
# Optional URL prefix for elasticsearch
#es_url_prefix: elasticsearch
# Connect with TLS to elasticsearch
use_ssl: True
# Verify TLS certificates
verify_certs: False
# GET request with body is the default option for Elasticsearch.
# If it fails for some reason, you can pass 'GET', 'POST' or 'source'.
# See http://elasticsearch-py.readthedocs.io/en/master/connection.html?highlight=send_get_body_as#transport
# for details
#es_send_get_body_as: GET
# Option basic-auth username and password for elasticsearch
es_username: admin
es_password: *YOUR_PASSWORD*
# The index on es_host which is used for metadata storage
# This can be a unmapped index, but it is recommended that you run
# elastalert-create-index to set a mapping
writeback_index: praeco_elastalert_status
# If an alert fails for some reason, ElastAlert will retry
# sending the alert until this time period has elapsed
alert_time_limit:
days: 2
skip_invalid: True
最后配置环境变量
export PRAECO_ELASTICSEARCH=192.168.116.202
启动praeco
docker compose up -d
使用浏览器登录praeco
http://192.168.116.202:8080
可以正常登录看到该页面代表部署完成。
使用以下命令查看Elasticsearch连接是否正常。
docker logs <3030端口容器对应的ID>
例如:
docker logs d725775a88cf
配置Praeco告警规则
点击Add rule创建新Rule
Name为socalert,Index为被查询的Elasticsearch中索引的名称,可以通过Grafana查看如下图所示,由于索引最后的数字值会随着日志量增加而增加,所以使用通配符进行模糊匹配,时间注意选择UTC时间,我这里date_@timestamp代表UTC时间。
配置完如下图所示
接下来需要编辑告警条件语句
既然要编辑告警语句,就要了解需要检测到什么行为或者日志后进行告警,比如以检测以下语句为例
SCHTASKS /CREATE /RU “NT AUTHORITYSYSTEM” /SC DAILY /TN “MyTasksNotepad task” /TR “C:WindowsSystem32notepad.exe” /ST 11:00
通过Graylog查看生成的日志
点击Praeco告警语句编辑页面的UNFILTERED
Builder引导你输入告警条件,类似新手模式,Manual类似专家模式,输入以下语句
(data_win_eventdata_parentImage:(*\powershell.exe) AND data_win_eventdata_commandLine:(*SCHTASKS*/CREATE*/RU*)
输入完点击Close,返回上级页面,接下来配置告警通知方式
同一告警重复通知次数选择0,告警通知方式选择Telegram
配置通知消息模板后,配置Telegram相关参数
配置使用Telegram进行告警通知
根据官方文档进行配置:https://elastalert2.readthedocs.io/en/latest/ruletypes.html#telegram
根据官方文档了解到需要两个参数,分别是:
telegram_bot_token: "bot_token"
telegram_room_id: "chat_id"
打开软件,找到BotFather这个账号,对话如下获取HTTP API
接下来寻找telegram_room_id
根据搜索引擎查找到对应方法:
https://stackoverflow.com/questions/32423837/telegram-bot-how-to-get-a-group-chat-id
https://api.telegram.org/bot1234567890:xxxxxxxxxxxxxxxxxxxx/getUpdates
配置完成后,点击Test测试告警发送。
测试通过后点击Save即可在首页看到刚才添加的Rule
对应告警推送工具Praeco写的较为简单,由于同类的工具较为丰富,就不做详细阐述,欢迎订阅收看开源SOC实现(十三)-事件响应平台IRIS。
精彩预告:后面为大家准备了情报联动以及自定义编排等内容,别走开
原文始发于微信公众号(Kali渗透测试教程):开源SOC实现(十二)-告警通知工具Praeco
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论