专栏名称: 聊聊架构
在这里煮酒聊架构。
目录
相关文章推荐
51好读  ›  专栏  ›  聊聊架构

携程的Web漏洞扫描系统实现细节

聊聊架构  · 公众号  · 架构  · 2017-07-10 18:00

正文

请到「今天看啥」查看全文


  • 如果是扫描单独的几个站点,主动扫描是够用的。但是在站点数量急剧增大的时候,主动扫描的效率、精准、速度都无法与被动扫描相比。

  • 最终我们选择基于被动扫描的形式去实现自研 web 漏洞扫描器。

    架构设计

    基于以上自动化的安全检测需求,由我们内部研发了 Hulk 项目,通过网络流量镜像等方式来实现分布式的实时 Web 漏洞扫描系统。整个项目按模块可分为数据源,数据处理,漏洞检测,漏洞管理等几大模块。

    如图所示,HTTP 请求数据从数据源发送至 RabbitMQ、Kafka 等队列。交由统计、去重、去静态资源模块利用 Redis 进行数据处理,处理后的 unique 请求存入 RabbitMQ 扫描队列,等待 Scan Engine 的消费。而 Scan Engine 则全权负责参数解析和变形,利用预先设置好的规则顺序进行请求重放和漏洞检测。最终,如果 Scan Engine 判断出某个请求含有漏洞,则落地到 MySQL 中,交由 Hulk 的运营人员进行漏洞的确认和复现。

    数据源

    数据来源主要有 2 种类型,即基于网络流量镜像的方式和基于 HTTP 代理的方式。

    基于网络流量镜像的方式中,需要在办公网到测试环境核心交换机上做流量镜像,通过 dpdk、pf_ring 等高速抓包模块进行流量获取,并按照五元组信息进行 TCP 流重组。然后通过 HTTP 解析器,将其中 HTTP 请求的请求方法、请求地址、请求域名、请求参数等数据提取成 JSON 格式,发送到 Kafka 中。

    当然,这其中还有一部分为 HTTPS 的请求,需要通过 rsa key 解密后才能交由 HTTP 解析器正常解析。随着 HTTP 2.0 时代的来临,大部分的 HTTPS 请求在进行秘钥交换时采用了更高安全性的 Diffie-Hellman 秘钥交换算法,我们的 HTTPS 解密模块也逐渐退出历史舞台,只能后移流量镜像模块,转向纯 HTTP 的流量捕获。







    请到「今天看啥」查看全文