0x00 Background
概览
-
0x01 前置技能:一些简单基础知识 -
0x02 rad 如何参与解决网站资产关键点和难点 -
0x03 rad 在 Palm SIEM 中的落地实践 -
0x04 简单聊聊“资产” -
0x05 扩展话题:MITM 代理链的实现(简) -
0x06 结语
0x01 前置技能:一些简单的基础知识
-
Chrome DevTools Protocol:如果大家熟悉 F12 Chrome 自带的调试工具的话,也很容易能理解这个协议。这个协议是 Chrome 官方开放的调试 Chrome 的 API 协议,可以通过 --remote-debugging-ports
的 Chrome 启动选项来启动调试端口。实际效果可以使用外部操纵器通过 Chrome DevTools Protocol 来调试 Chrome 浏览器。 -
浏览器爬虫:爬虫概念本文就不过多介绍了。浏览器爬虫的难点并不是在于发现页面上的已经由后端渲染的 Url 或者其他资源链接,而是加载 JS;并且按照“人”的逻辑,触发 JS 对应的操作。然而这些操作会对页面产生一些“无法预料”的影响。所以,进行 Human-Like 的 JS 行为触发,并捕捉出发 JS 导致的变化和过程中产生的 HTTP 请求,其实才是实现浏览器爬虫的难点。 尽管我们发现,我们无法触发所有 JS 行为和函数,但是可以尽可能模拟 “人” 去点击页面中的各种元素。(通过 ChromeDP 协议触发) 如果你想要写一个属于自己的浏览器爬虫,并且偏爱 Go 语言,那么其实还是有一些资源可供使用的:https://github.com/chromedp/chromedp / https://github.com/go-rod/rod。
0x02 rad 如何参与解决网站资产收集中的痛点和难点?(集成思路)
思路分析
rad 本身是基于 chrome devtools protocol 进行开发的浏览器爬虫,浏览器爬虫的事情,我们暂且就全权交给 rad 来实现。
有得必有失
但是资产的收集和测绘比较关键的一个点是自动化、流程化、系统化。解放生产力,因为我们自然会放弃掉 rad 中的 wait-login 这个功能。这个和自动化、流程化其实是冲突的。同样,每个网站的特异性的配置,我们也需要主动放弃。毕竟”鱼和熊掌不可兼得“。
不会集成?别慌!有我在
在 rad 中并没有 webhook 相关的接口开放出来。那意味着,我们可能无法像 xray 一样容易收集 rad 吐出来的各种信息,但这并不表示没有办法集成了。
方式方法 |
优点 |
缺点 |
直接解析输出的文件 | 相对解析的结果比较全面,忠诚于 Rad 的输出意图。 | 实时性打折扣,依赖于 rad 的输出格式。 |
实时逐行解析 rad 的输出+输出文件 | 有实时输出 | 同上 |
我认为的比较理想的方式:为 rad 设置一个 mitm 代理 | 实时输出流量中的数据包,兼容性极强 | 丢失一些特定的组装的包 |
emm... https://github.com/google/martian 拿去吧
0x03 rad 在 Palm SIEM 中的落地实践
初级:我只集成爬虫可以吗?
显然没有!!!我们发现上面的代码中,其实还有很多很多更牛 x 的应用:比如利用代理链进行 rad + xray 全自动。
高级:rad + xray 全自动?
-
rad 输出的结果自动化录入数据库; -
xray 输出的漏洞结果自动录入漏洞库; -
xray 在扫描完 rad 的所有流量之后,自动退出结束扫描。
我们发现,针对第一点,我们在上一个 rad 在 Palm SIEM 的初级用法中已经实现了,就是使用一个 mitm 的普通代理来抓流量,存数据库。但是我们发现上述的操作又不能完全满足需求,我们没有办法把镜像流量接入 xray 扫描?
新朋友 mitm.Bridge
Let's do It!
-
启动 MITM 桥接代理链; -
启动 Webhook 等待处理 xray 输出的漏洞; -
启动 xray 等待接收 rad 的信息; -
为 rad 设置好 MITM 桥接代理。
0x04 简单聊聊“资产”
0x04.2 企业安全资产到底是什么?
-
没有对应 web 服务(也可能是没有扫描到的)的域名; -
挖掘网站结构时候产生的 HTTP 请求和响应; -
从网站相关的 HTTP 请求和响应中挖掘出的网站可能的信息: -
网站的开发语言 -
第三方开发组件 -
JS库等 -
网站暴露的一些手机号、邮箱等信息
仅仅这些吗?显然不止
-
HIDS Agent 的进程、监控的文件、用户信息、网络监控信息; -
关键服务日志信息等。
结论:你的场景决定了你的资产是什么!
-
对于远程安全评估系统来说:资产可能是一切能发现安全风险的地方。比如主机/端口/服务/域名/网站。 -
对 SDL 来说,代码/代码上游依赖/可信容器/运维资源甚至线上环境等都是资产。 -
对终端安全来说,终端上的更细粒度的,包括进程信息、网络信息、补丁信息等都是资产。 -
数据安全:.....
0x04.2 资产梳理与盘点仅仅是安全建设一个环节
重要目的:合规/流程支持类
当然这个合规并不是说要符合具体的 “ISO-xxx” 某个规。而是说,如果要构建流程化的系统/体系/规定来解决某个安全问题,我们需要相应资产进行参与、构建自动化流程。
想要构建流程自动化解决某些安全问题,比如:
1. 全自动化资产盘点与合规检查预警;
2. 企业内部资产定期巡检;
3. 应急响应快速梳理相关风险资产。
上述几个解决安全问题的例子,都是需要资产深度参与的。
很多人一直在说资产收集,但是并没有想自己要收集资产做什么。例如:xray 商业版(洞鉴)有资产收集模块,但是大家遇到的问题往往是,洞鉴扫描出来的资产摆在你的面前,你并不知道你要拿他来干什么?或者没有办法让他参与你的安全体系建设。如何理解这段话呢?
结论:落地安全流程并运营才能产生真正的价值,资产只是一个环节
0x05 扩展话题:如何编写一个 MITM 代理链?有哪些更有趣的玩法?
实现方法(略):
-
选用好用的基础库:martian(使用代码略)
-
服务器支持接收 downstream proxy 的设置:
-
镜像流量直接
httputil.DumpRequest
Dump 出来,以你自己喜欢的方式交给第三方解决:当然我个人更偏好 Callback,有朋友喜欢 limited chan *http.Request
-
里面涉及到了一些比较有趣的话题的点,比如说,request 与 response 构成 httpflow,如何正确匹配起来等等。大家在实现的时候,一定会遇到的。
扩展玩法
-
镜像流量审计 -
镜像流量敏感信息动态抓取 -
为 rad 编写一个真正的 webhook -
... 大家发挥想象力啦~
0x06 结语
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论