SOAR资讯 W5 SOAR 使用体验

rain · 2023年05月23日 · 794 次阅读

背景

因公司需要定期使用 AWVS 进行 Web 漏洞扫描,而 AWVS 本身不支持周期性扫描,最简单的方式来实现是通过 Linux 的 cronjob 加 Python 脚本来实现。但是由于公司目前部署了 W5 SOAR 系统,而且扫描前需要在钉钉里进行通知,所以打算试用一下 W5 SOAR 系统的任务编排功能来实现。

W5 SOAR 本身自带的 APP(可以理解为系统的插件)并没有直接支持 AWVS 调用的,但是有 linux 远程命令调用的,可以通过这种方式来实现。本文打算直接开发一个 W5 SOAR 个人 APP 来支持 AWVS 的调用。

W5 SOAR 介绍

W5 是一个面向企业安全与运维设计的 低代码 自动化平台,可以让团队降低 人工成本,提升 工作效率。可以把代码 图形化、可视化、可编排。让不同的系统,不同的组件通过 APP 进行封装形成平台能力,通过剧本画出你想要的逻辑过程,利用多种 Trigger 去实现自动化执行。W5 适应用于多个方向,例:Devops、安全运营、自动化渗透、工作流程等

什么是 W5 SOAR | W5 SOAR 使用文档

W5 SOAR APP 开发介绍

Hello World | W5 SOAR 使用文档

开发

首先仔细阅读完官方提供的开发 APP 文档后,知道最简单的方式是复制官方提供的 Demo,在此基础上进行二次开发。

开发中碰到的几个问题如下:

1.压缩后上传,提示格式不正确。

修改 app.json 中的 name 字段后,直接压缩 Demo 的代码上传,还是提示格式不正确。 这个问题是由于 Demo 中的代码文件里 “README.md” 为大写字母,导致部署在 Linux 系统里的 W5 SOAR 在进行文件检查时由于大小写问题检查不到代码文件中存在 “readme.md”,所以需要将 “README.md” 改为小写 “readme.md”。

2.提示 “请使用正确的应用”。

上传成功后,执行时出现如下提示

警告 [Acunetix Scan] - 请使用正确的应用

由于提示比较模糊,不好定位问题,只能一步步来调试。可以下载 W5 SOAR 的代码,在其 apps 目录中找到 helloworld 文件夹,以此作为开发的模板进行调试。多次尝试均未解决问题,参照 github issue 里的提示改过参数等。后来发现是文件夹名称问题,我使用的 0.55 版本只支持原有(自带)APP 的名称,也就是锁了名称,我用自己的应用将 helloworld 替换掉,所有功能都正常,改为 helloworld1 就会有这个提示。查看官方文档中说已经不限制私有应用了,不清楚我这个版本为啥会锁。后续升级为 0.56 版本后,又正常了。因为核心代码是加密过后的,而且最新版本 0.56 没有这个问题,所以没有继续在这上面深究了。

3.不清楚 logger.info 输出的日志去哪里查看。

待解决…

开发代码

W5 的 APP 基本是 Python 语言写的,所以实质上来讲还是在写 Python 脚本。

W5 的 APP 主要需要修改两个文件,run.py 和 app.json。另外需要完善 icon.png 和 readme.md

run.py 内容如下:

1.from loguru import logger# 导入日记库,没有请先安装 pip install loguru 2.import requests 3.from requests.packages.urllib3.exceptions import InsecureRequestWarning

4.requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

7.# 为了保证性能,使用了 async await 开启异步,Python 3.7+ 的特性 8.async def scan(name, group_id):logger.info("[Acunetix Scan] 程序开始运行")# 输出日记,生产环境会输出到指定目录 logger.info("[Acunetix Scan] 该 APP 执行参数为: name={name},group={group_id}", name=name, group_id=group_id)# 返回值,格式为: 状态码,返回内容 url = f"https://xxx/api/v1/target_groups/group_id}/scan"headers{ = {"X-Auth": 'xxx', "Content-type": "application/json;charset=utf8"}data = {"profile_id": "11111111-1111-1111-1111-111111111119","incremental": False,"schedule": {"disable": False,"start_date": None,"time_sensitive": False},"report_template_id": "11111111-1111-1111-1111-111111111112"}r = requests.post(url=url, headers=headers, json=data, verify=False) return {"status": 0, "result": r.json()}

app.json 内容如下

1.{"identification": "w5soar","is_public": true,"name": "Acunetix Scan","version": "0.3","description": "W5 SOAR - Acunetix Scan","type": "安全扫描","action": [{"name": "扫描","func": "scan"}],"args": {"scan": [{"key": "name","type": "text","required": true},{"key": "group_id","type": "text","required": true}]} }

action 里的 func 对应函数名称。args 对应需要填写的参数。这里因为我们公司只对 group 进行扫描,而且扫描主机 ip 也是固定的。所以我只暴露出了两个参数,name 和 group_id。

如果需要做成通用形应用的话,建议改进项如下:

1.将 URL、X-Auth(AWVS 的 key) 也暴露出来。 2.区分一下是针对单个目标的扫描还是对组的扫描。

后记

此类系统一般被称为工作流系统,用好的话能够简化很多重复性工作。W5 本身内置了很多应用,但是还是不够多,希望作者能持续更新下去,或者后续开发第三方公开应用。

转载声明

版权声明:本文为 CSDN 博主「网络安全大菠萝」的原创文章

原文链接:https://blog.csdn.net/Candour_0/article/details/128679404

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册