开源SOAR的初探
1.前言
最近工作涉及安全运营方面,工作中了解到SOAR,恰巧又看到了OctoMation SOAR,于是想着在网上搭建一套自己捣鼓下。
阿里云高校计划,可以领300无门槛优惠券,白嫖一波走起。
直接白嫖一个月
2. 相关硬件软件
3. SOAR 搭建
参考OctoMation安装部署手册进行搭建
3.1 操作系统及软件要求
- 操作系统:Redhat/Centos 7.8+/8+(9以下) OpencloudOS7/8
- Docker版本:不低于20.10.12
- Docker-compose版本:1.29.2(最优)
swap
分区空间不少于8GB- 系统防火墙
firewalld
需要处于运行状态 - 系统umask必须为022
3.2 安装方式
笔者这里使用的大文件,离线安装(这也是官方推荐的安装方法)
下载安装文件后,然后以root
身份执行离线安装脚本
1 |
|
这里安装时间比较长,可以使用screen,安装完毕如下
3.3 登录web管理界面
安装完成后,使用web浏览器访问https://
3.4 剧本Playbook
官方项目上有相关的OctoMation剧本包 ➡️OctoMation剧本包
以及 APP包
导入社区剧本和APP
APP
3.5 剧本尝试
导入了社区中的剧本,发现可以在“IP信息增强”剧本上进行调整更改
笔者在原有的基础上添加了协同办公-钉钉,并且做了简单测试
作战室执行结果
钉钉接收到的测试消息
4. 蜜罐搭建
笔者这里为了方便,试用docker安装
1 |
|
正常情况下返回如下内容
以root权限运行以下命令,确保配置防火墙开启TCP/4433、TCP/4434
⚠️ 笔者踩的坑,没有在防火墙开启端口,所以一直无法访问到web界面
1 |
|
5. 蜜罐+SOAR联动
思路:
蜜罐获取到攻击IP通过syslog发送到SOAR,通过SOAR进行剧本编排发送到飞书
5.1 流程图
5.2 开启四个web蜜罐
- Coremail仿真登陆蜜罐
- 通达OA系统仿真登陆蜜罐
- 齐治堡垒机仿真登陆蜜罐
- Weblogic蜜罐
5.3 新建一个事件类型
登录OctoMation后台,访问到【事件管理】|【事件类型】,点击【新建】即可创建新的事件类型。勾选【是否自动执行剧本】,选择【IP信息增强】
5.4 通过Kafka接收外部事件
5.4.1 事件接入添加
登录OctoMation后台,进入【事件管理】|【事件接入】菜单,新建接入规则。填写勾选基础信息,包括:
- 配置名:HONEYPOT_SIEM_ALERT
- 描述:SIEM蜜罐事件接入
- 接入方式:SYSLOG
- 协议:31514(这里的端口和蜜罐syslog服务器配置的端口一致)
- 勾选转发到KAFKA
- 消息队列:SIEM_HONEYPOT_ALERT
- 服务器:172.19.129.151:9092
5.4.2 示例事件
选择Grok正则表达式方式识别。在输入框填写一段日志样本,样本可以选择来自于蜜罐【系统配置】| 【通知配置】中【syslog告警示例】:
1 |
|
当然也可以选择kafka收到的告警日志。
5.4.3 事件字段提取与映射
点击【下一步】进入Grok正则匹配和字段映射,为了快速看到效果,此处选择【手动编辑】。根据本条告警事件类型所需要关注的信息字段。这里可以自己自定义提取。笔者手动用鼠标选取一个或多个值新建字段。具体操作可以查看官方的wiki。
5.4.4 关联事件类型
进入规则设置页面,此处针对已经格式化后的事件信息字段进行规则判断,以确定事件对应的事件类型。点击【新建关联规则】
- 设置条件
- 执行结果的事件类型名称设置为SIEM告警的蜜罐攻击事件,剧本所需字段需要选择日志字段中的Attacklp
5.4.5 蜜罐告警的测试
在蜜罐发送一个端口测试:
查看【事件列表】发现测试的事件已经生效。说明syslog和kafka接受日志都正常。
如果发现事件列表无数据,可能需要排查下kafka是否有接收到日志
5.4.6 模拟一个蜜罐攻击看效果
访问web蜜罐,如weblogic管理界面
查看事件列表
查看飞书告警
6. 踩坑点的总结
- OctoMation已经自带了kafka和syslog了,不用自己再安装了。笔者看wiki的时候没注意,花了一段时间捣鼓kafka和syslog。不过还算是熟悉了下kafka和syslog的基本使用了
- 蜜罐在配置通知处的syslog服务器配置修改端口后,一定记得在告警策略一定记得勾选Syslog服务器,一定记得!! 因为更换端口后,告警策略处的☑️syslog服务器的位置会默认取消掉!为此我花了1个小时排查,最开始以为是syslog和kafka出问题了,后来发现更改端口后,会自动取消勾选!!很多时候不经意的改动,最后排查起来会话费成倍的时间!
- 遇到问题,弄不明白的时候一定记得记得看官方的文档wiki….而且要仔细看和推敲。不仅能提高效率还能走避免走好多弯路。
7. 番外记录
以下内容中的配置因为部分原因在SOAR的应用中没有使用到,具体原因相应位置有写明。 仅本次blog的记录。
7.1 SOAR+阿里云云防火墙实现自动封禁
直接试用 云防火墙 500元 1000GB
7.1.1 放弃的原因
阿里云云防火墙(简称云防火墙)和阿里云web应用防火墙(简称阿里云waf)是不同的产品
这里是仅免费使用云防火墙,阿里云waf需要购买…就没使用
官方社区没有发布云防火墙的APP,所以没办法使用到…
7.2 雷池(社区版)+ SOAR
根据雷池官方文档安装即可
安装后如下
将站点添加到雷池,并测试防护效果
7.2.1 放弃的原因
雷池的攻击告警和Syslog需要使用到专业版…我的社区版本无法使用syslog发给SOAR,于是放弃。
下面的截图是雷池官方的demo网站。笔者的社区版已经卸载掉了,懒得重新装上去截图….
7.3 Rsyslog转发日志到Kafka (⚠️:这里不需要用户安装,系统自带的有syslog和kafka,这就是不认真看官方说明文档的后果….)
笔者这里选择了rsyslog。因为目前只需要基本的日志收集和转发,rsyslog将是一个较为轻量级的方案,对服务器资源要求较低。
安装rsysylog
1
yum install rsyslog -y
修改rsyslog的配置文件/etc/rsyslog.conf,启用接收日志的模块
1
2
3
4$ModLoad imudp
$UDPServerRun 514 # 开启UDP 514端口接收日志
$ModLoad imtcp
$InputTCPServerRun 514 # 开启TCP 514端口接收日志配置日志文件存储路径,例如:
1
$template RemoteHost,"/data/syslog/%$YEAR%-%$MONTH%-%$DAY%/%FROMHOST-IP%.log"
重启rsyslog服务使配置生效
1
systemctl restart rsyslog
查看rsyslog的运行状态
7.3.1 配置rsyslog
编辑
/etc/rsyslog.conf
文件,添加以下内容:1
2
3
4
5
6
7
8
9
10# 加载Kafka输出模块
module(load="omkafka")
# 设置Kafka代理地址和Topic
main_kafka.topic="rsyslog"
main_kafka.broker="locahost:9092"
main_kafka.confParam=[\"compression.codec=snappy\"]
# 发送所有日志到Kafka
*.* action(type="omkafka" topic="rsyslog" broker="locahost:9092" confParam=[\"compression.codec=snappy\"])重启rsyslog服务:
1
systemctl restart rsyslog
7.3.2 设置syslog服务器配置并测试
在服务器安装好rsyslog后,在蜜罐通知配置处填写服务器的syslog地址,并测试成功
查看服务器上的syslog日志,也能看到蜜罐的测试消息
7.3.3 添加告警策略
在系统配置-告警策略处添加将威胁告警发送到syslog服务器。
7.3.4 测试攻击看看效果
蜜罐识别到攻击
rsyslog收到消息,其中src_ip即攻击源IP。
7.4 kafka
笔者为了方便测试,安装的是docker版本,并且是单节点部署。
这里安装Kafka是为了接收外部事件。
安装并启动Zookeeper容器
1
docker run --name zookeeper -p 2181:2181 -d zookeeper
拉取Kafka镜像
1
docker pull wurstmeister/kafka
启动Kafka容器并链接Zookeeper
1
2
3
4
5
6docker run -d --name kafka --link zookeeper \
-p 9092:9092 \
-e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 \
-e KAFKA_ADVERTISED_HOST_NAME=<主机IP> \
-e KAFKA_ADVERTISED_PORT=9092 \
wurstmeister/kafka
其中需要替换<主机IP>
为实际主机IP。这将启动一个Kafka容器,并将其9092端口映射到主机。
验证Kafka版本
1
docker exec -it <kafka容器名> /opt/kafka/bin/kafka-topics.sh --version
进入kafka容器创建一个Topic用于接收日志数据
请将
<kafka_broker_host>:<kafka_broker_port>
替换为你的Kafka代理的主机名和端口号。1
kafka-topics.sh --bootstrap-server <kafka_broker_host>:<kafka_broker_port> --create --topic rsyslog --partitions 1 --replication-factor 1
验证Topic是否创建成功
发现rsyslog成功创建
1
kafka-topics.sh --bootstrap-server <kafka_broker_host>:<kafka_broker_port> --list
7.4.1 放弃的原因
OctoMation已经自带了kafka和syslog了,不用自己再安装了…直接在SOAR上配置就好了。