0X01 前言

本身需要对外有良好的服务能力,对内流程透明,有日志、问题排查简便。

这里的服务能力指的是系统层面的服务,将扫描器封装成提供给业务的业务服务能力不在该篇讲述范围内

0X02 简单的扫描

高端的漏洞往往用最朴实的扫描方法

最简单的扫描需求,只需要从数据库中读取数据,定期跑一遍所有规则就好了。

一个脚本更新资产,一个脚本定时读取数据、结合规则进行扫描、并把结果打到数据库里,一个脚本定时读取结果发邮件,这样就已经满足SRC自动化挖漏洞的需求了,而且效果还不错。

0X03 分布式扫描

随着扫描的资产变多,单个机器的龟速扫描令人着急,所以运行规则这一步加上分布式,即任务打到队列(redis/MQ/kafka等),再由多个节点运行扫描规则、输出漏洞结果

0X04 几个数据源扫描

这样很方便的可以扫描主机漏洞

再往后,不想只单单的扫描主机漏洞了,也想扫描注入/XSS/SSRF/XXE等基于url的漏洞,有了url类型数据。

甚至发现有的漏洞应该是针对域名的(单纯的IP+端口请求到达不了负载均衡),又有了domain类型的数据。

0X05 多任务扫描

这时候生产模块还能应付得过来,即读取各类型数据、绑定各类型插件。

但是有时候新增了规则,想单纯的扫描对着所有数据扫描这条规则,需要另外起脚本加一个临时的生产者。

有时候新增了一批资产,想单独对着这批资产扫描所有的规则,又需要临时写个生产者脚本。

由此代码变得冗杂,操作变得繁琐,于是有了任务的概念。

任务用于绑定数据与规则,一个任务就是一个生产扫描子任务的单位。

这样增量规则扫描全量数据,新增一个任务绑定这个规则和对应的数据;增量资产扫描全量规则,新增一个任务绑定这批资产和对应的规则。

而从数据库上操作任务与规则变得不太方便,于是加上了可视化平台,可在web端发布扫描任务、新增修改规则。

0X06 多数据源扫描

而在甲方内部,随着接入的数据源越来越多,url数据有镜像流量、爬虫流量、代理流量、nginx流量等等,host数据有hids agent流量、黑盒资产探测流量、cmdb/IT等流量,domain有域名爆破流量、内部运维系统获取的流量等。

每多一个数据源,都得加一段代码逻辑 : "当数据源是a的时候,从哪哪哪获取流量数据"。

当数据源数量超过十种,任务模块的数据源获取代码变得很冗杂,且并硬编码横行(从哪哪哪获取数据)、逻辑写死不通用(a的数据要从接口分页遍历、b的数据需要从redis读、c的数据是kafka、d的数据从数据库获取)。

某些数据不走中间的某段过滤匹配逻辑,于是又要加一个字段 is_xxx 标识 ,再在引擎里 if is_xxx=True, 代码通用性低、高度耦合,遇到bug时排查成本极高 ,比如遇到这个流量怎么会有这样的输出结果、怎么会报错这类问题时,往往花半天一天追踪流量。

故而需要对数据源进行改造,统一数据源输入格式,数据源分几种类型,url/host/domain,每种类型都有固定的格式,由外部按照这种格式进行输入。

在数据源过多时,外部的输入代码太多了,可额外抽象出来形成数据输入模块。

比如定义redis类型数据从哪里获取、接口怎么分页获取数据、数据库怎么迭代读取等,再一一配置数据格式转换方式。这样再遇到需要新增的流量类型,需要新增的代码就是可复用的某类数据获取方式。

0X07 系统间服务能力

但是又遇到一个问题,遇到跨部门或者跨项目需要调用扫描能力时,很不方便,输入上需要自己配置数据来源,还需要扫描开发人员添加这类数据,扫描结果还需要去数据库获取,有的没结果不知道到底是没扫描还是没漏洞。

对于业务方,需求增改、服务调用不方便。

所以需要提高服务提供的能力,对于调用方来说,扫描是一个黑箱子,只管传入数据、启动任务、获取结果,提供给调用方的是扫描服务能力。

对于扫描引擎开发方,对外进行引擎能力封装,服务与上下游拆分开, 也实现低耦合、高可维护、可扩展易扩展,不会因需求增改而频繁改动引擎代码、从而导致代码冗余、开发维护成本上升 。

实现方式:

数据接入时,调用方在管理平台注册数据标签,并在传入数据时标明数据标签(抽象数据配置步骤);

结果输出时,调用方注册回调接口(数据打往回调接口),扫描结果分有漏洞/无漏洞/没扫描这一类,回调接口选择接收的结果类型;或注册处置结果标签,扫描结果打给消息总线。

回调方式不知道对方接口设置的状态,可能接口报错了消息没有正确打过去,可能接口返回200的 status: false但无法判断是失败了,简单来讲就是无法保证数据一致性,扫描结果里有但接口因为报错没有这个结果。所以还是尽量使用消息总线的方式,由消费方对消费失败的数据进行记录、排查并作再消费,保证接收结果的接口不会丢数据。

再由注册方操作任务,绑定待扫描的流量的标签,需要扫描的规则,处置的方式即结果是打给某个回调或者是打上某个结果标签。

实现效果:

这样将引擎封装起来,基本可以保证引擎中不会因为过多的数据源,而东一块西一块,有很多的针对不同数据源读取的代码。

引擎本身只保证数据读取、按照规定的任务选择扫描规则、将扫描的结果打到结果队列或者打回给调用方。

0X08 全流程日志

但还有另外一个问题,排查问题成本比较大。

扫描器引擎逻辑相比部分产品会比较复杂,主要涉及到其中的存活检测、集群判断、白名单限制、QPS控制、任务调度等功能,有时候丢流量或者因为某个字段不对导致漏报、在插件运行前请求的内容有问题导致判断为不存活的流量从而漏报。

这些情况在以redis为队列的引擎中,排查起来比较麻烦。

所以需要全流程的日志:最好能知道几个关键步骤的中间结果是什么样的,遇到问题时排查方便。扫描器在去重后扫描中间过程数据量不如IDS大 (日百亿处理结果),大概也就上千万,可以全部记录下来,资源紧张可以只记录一段时间。

关于日志种类:我们溯源排查时一般需要的中间结果有数据源、扫描子任务、扫描结果。

关于日志实现:redis pop后数据就没了,引擎读后做双写比较麻烦。

所以选择可订阅的消息队列,比如kafka,引擎使用一个group进行消息消费,再起一个服务用另外的group对这批topic的数据进行存储,熟悉的ELK结构。

DAST 黑盒漏洞扫描器 第五篇:漏洞扫描引擎与服务能力相关推荐

  1. python 漏洞扫描器_SRCHunter Python开源漏洞扫描器

    运行环境 python2.6.x或者python2.7.x 依赖第三方库 pip install requests[security] 目前支持的功能 全自动扫描: python webmain.py ...

  2. web漏洞扫描器原理_知名Web漏洞扫描器Acunetix Web Vulnarability Scanner

    Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的Web网络漏洞扫描工具,它通过网络爬虫测试你的网站安全,检测流行安全漏洞.它包含有收费和免费两种版本,A ...

  3. 漏洞扫描器的扫描原理 ZZ

    1.漏洞扫描器的扫描原理   网络漏洞扫描器对目标系统进行漏洞检测时,首先探测目标系统的存活主机,对存活主机进行端口扫描,确定系统听开放的端口,同时根据协议指纹技术识别出主机的操作系统类型. ...

  4. python漏洞扫描模块_Hunter 是一款被动式漏洞扫描器

    招聘提示: 中通安全致力于支撑中通快递集团生态链全线业务(快递.快运.电商.传媒.金融.航空等)的安全发展.我们期待更多优秀小伙伴的加入,安全开发.安全合规.产品经理.架构师.数据安全等岗位持续招聘中 ...

  5. 5.5 漏洞扫描:Web安全漏洞扫描及审计

    目录 一.预备知识:Web漏洞的获取方法与w3af 1. 漏洞扫描 2. 漏洞扫描器 3.  w3af 二.实验环境 三.实验步骤 四.实验思考 一.预备知识:Web漏洞的获取方法与w3af 1. 漏 ...

  6. 漏洞复现 - - - 未授权访问漏洞Redis

    目录 一,未授权访问漏洞概述 二,常见的未授权访问漏洞 Redis历史漏洞 三,Redis未授权访问 漏洞信息 Redis 简介 四,环境搭建 漏洞环境搭建 五,漏洞利用方法 实验环境 方法一 ​编辑 ...

  7. 网络安全必备的五款免费网络漏洞扫描器

    尽管我们在电子设备上安装了安全软件,但这些安全软件并不能自主跟踪并捕获所有漏洞.这时候,我们就需要额外安装网络漏洞扫描器,它可以帮助您自动执行安全审查,在IT安全中发挥重要作用.在扫描网络和网站时,网 ...

  8. web漏洞扫描器原理_【技术分享】漏洞扫描技巧篇Web 漏洞扫描器

    0x00 前言 之前 我们简单介绍了一下扫描器中爬虫的部分,接下来将继续介绍扫描器中一些我们认为比较有趣的技巧. 0x01 编码/解码/协议 在很久以前有人提问 AMF 格式的请求怎么进行检测,或者有 ...

  9. web漏洞扫描器原理_漏洞扫描技巧篇 「Web 漏洞扫描器」

    0x00 前言 之前我们简单介绍了一下扫描器中爬虫的部分,接下来将继续介绍扫描器中一些我们认为比较有趣的技巧. 0x01 编码/解码/协议 在很久以前有人提问 AMF 格式的请求怎么进行检测,或者有什 ...

最新文章

  1. 9位AI教授总结2017年:技术变得平民化,但商业竞争在不断升级
  2. Javascript模块规范(CommonJS规范AMD规范)
  3. Keil中的警告的解决
  4. 数据解密2020年高考,志愿填报可以选这些
  5. 单向链表的 js 实现
  6. SAP UI5 事件通知技术的实现之Eventbus.subscribe
  7. 使用PHPExcel实现Excel文件的导入和导出(模板导出)
  8. 开源已经 20 年,改变世界的承诺有兑现吗?
  9. spark 算子实例
  10. Python 字符串格式化
  11. 【华为机试真题 JAVA】统计射击比赛成绩-100
  12. 微型计算机中既能作为输出设备,在微机的硬件设备中,有一种设备在程序设计中既可以当做输出设备,又可以当做输入设备,这种设备是ß...
  13. 2021年煤矿安全监测监控新版试题及煤矿安全监测监控
  14. 图元变形lisp源码_修改图元图层lisp
  15. 什么是Mycat?为什么要使用MyCat?
  16. 如何清除360网站服务器缓存,360浏览器怎么清除缓存 360浏览器打不开网页怎么办...
  17. MyBatis研习录(11)——MyBatis动态SQL
  18. Spring 整合 Apache Shiro 实现各等级的权限管理
  19. [Unsolved]Linux:Fontconfig warning:: unknown element “its:rules“ Fontconfig warning:unknown “descrip
  20. 宝塔 xdebug idea 调试 php

热门文章

  1. 华为HCIE-RS3.0论述题--BGP路由黑洞
  2. qq下载默认存放位置
  3. H265 CABAC学习笔记
  4. tushare股票列表mysql_用python获取tushare数据并存入mysql数据库(一)股票列表
  5. 408考研数据结构与算法之数组、链表、队列、栈知识点和算法详细教程(更新中)
  6. 开源ERP源码ASP.NET
  7. py几局代码能写出九九乘法表_Python 九九乘法表
  8. Matlab之索引图像转化为灰度图和真彩图
  9. php artisan migrate 指定表,Laravel 创建指定表 migrate的例子
  10. php eof 插入变量,php eof的用法