0x00 前言
本文中SOAR代指火器中提供的策略集
功能,属于无代码扫描器,是一款功能强大的安全检测工具,是安全检测于SOAR(Security Orchestration, Automation and Response)可视化编排结合的一次尝试。更多信息请查看历史文章。
本文涉及到的SOAR应用为:【URL数据源】、【自定义变量】、【PoC扫描】、【CEYE】、【生成线索】
0x01 漏洞介绍
在近日,国外安全研究员爆出 gitlab 的CI Lint API 接口存在 SSRF漏洞,远程攻击者可以发送特制的 HTTP 请求并欺骗应用程序向任意系统发起请求。漏洞编号为:CVE-2021-22214。
0x02 漏洞复现
(1)找到Gitlab应用
在【火器】-【资产数据】中的服务数据页面中,可以通过筛选应用信息,找到需要的Gitlab网站:

注:应用信息为火器在收集信息时预先对网站进行的指纹识别信息。若指纹识别信息有误,欢迎大家一起纠正。
(2)构造POC请求
找到目标后,即可构造请求。从网上收集到PoC后,开始构造请求包。在此之前,由于该SSRF是无回显的SSRF,所以为了验证漏洞存在,需要借助DnsLog平台。
DnsLog平台可以使用火器中提供的【司马】工具,具有DnsLog的功能:

在司马中获取自己的dnslog地址。(也可以使用其他dnslog平台)
POC:
POST /api/v4/ci/lint HTTP/1.1
Host: ********
Content-Type: application/json
Content-Length: 114
{"include_merged_yaml": true, "content": "include:\n remote: http://soar.******/api/v1/targets?test.yml"}
上述的Host为目标地址。请求体中的*
号使用自己的dnslog地址替换。
(3)验证
发送PoC之后,得到响应状态为非200,则不存在该漏洞。若为200,那么去DnsLog平台查看是否收到请求:

至此,可以确认该Gitlab存在该漏洞。
0x03 使用SOAR自动化检测
上述过程可以借助SOAR来实现自动化检测。
概览
以下为笔者实现的策略图总览:

此流程图指明了SOAR扫描器的执行路径。首先从URL数据源
中获取所有Gitlab网站,然后使用PoC扫描
进行请求构造,最后使用CEYE
(CEYE为@404Team提供的DnsLog平台)进行验证。
接下来将对各应用按顺序进行一一介绍。
开始
标志着扫描程序的开始。一个策略中只允许拥有一个开始节点。
URL数据源

搜索所有URL数据源中应用信息
字段值包含gitlab
字符串的数据。上文中有提到应用信息
指的是网页数据的指纹信息。包含之一
接受一个数组参数,指的是指定的字段值(此处为应用信息)包含数组中的其中一个值即可。
举一个例子:比如,所选的关系为:【响应体】【包含之一】【password, secrectKey】,则代表响应体中包含"password"或者"secrectKey"即可。
去重策略
设置为默认值协议+主机名
即可。由于URL数据源中包含所有的网页爬虫数据,但我们检测该漏洞,只需要首页即可,所以为了提升检测效率,不重复发包,以协议+主机名
作为去重策略。
更多用法可该应用参数页中的【查看文档】中查看。
自定义变量

由于上一步获取了多个Gitlab地址,我们进行检测时,需要向DnsLog平台发送请求,为了区分不同的Gitlab,则在每次进行PoC扫描之前,都需要生成一个随机字符串。在DnsLog平台中,根据该随机字符串,即可唯一对应的Gitlab地址。
randomLowerString
为内置的函数,randomLowerString(4)
表示生成长度为4的小子字母的随机字符串。
更多用法可该应用参数页中的【查看文档】中查看。
PoC扫描

在该应用指明请求地址、请求方法、请求头、请求体。并配置好匹配规则,只有响应码为200的才可能存在漏洞。
由于司马暂未提供API接口,且暂未提供内置支持,所以此处笔者使用了CEYE平台。在参数body
中设置了DNSLOG地址为笔者的ceye地址,并且前缀使用了{{r1}}
,SOAR会自动替换成上个应用生成的随机字符串。
CEYE

此处按照CEYE的文档进行填写,API Token为自己的CEYE中的API Token。filter
设置为{{r1}}
,即之前生成的随机字符串。如果存在SSRF漏洞,则DnsLog平台会收到该随机字符串的请求记录。
如果存在请求记录则继续执行策略图中的下一步,否则就不再执行下一步。
生成线索
指明将上一步得到的结果保存到线索列表中,否则生成的线索无法保存下来。
结束
标志着扫描程序的结束。一个策略中只允许拥有一个结束节点。
0x04 验证
从日志中看到,已经有命中的结果:

并且在CEYE平台中确实看到了记录:

0x05 结语
SOAR仍在内测阶段,参与内测可扫描以下二维码进行申请:

申请通过之后,在火线平台中的【火器】页面将会多出【策略集】页面,希望各位师傅试用体验,并一起共同进步。

如果有其他问题可以联系火线小助手,也可加入SOAR讨论群,随时反馈使用上的意见或建议。
本文迁移自知识星球“火线Zone”