0X01 前言

怎么衡量一个扫描器的好坏,扫描覆盖率高、扫描快、扫描过程安全

而最直接的效果就是扫描覆盖率高(扫的全)

怎么扫描全面,1 流量全面 2 规则漏报低

流量方面上篇已经讲过,这篇主要讲扫描规则。

扫描规则漏报率低,从整体考虑,一方面是规则全,广度上有保证;一方面是检测手段有深度,可以跨能力联动检测,有能力解决主要和旁枝末节处的漏报场景

0X02 规则来源

扫描器的规则主要有两种类型

针对接口的web漏洞,通常是通用型漏洞,OWASP TOP 10,sql注入、xss、ssrf、xxe等,以下简称web规则

针对主机(包括整个站点)的漏洞,通常是特定框架/应用/组件的0day/nday漏洞,以下简称主机规则。

2.1 主机规则

2.1.1 覆盖nday

针对nday,主要考虑的是企业内资产。

在资产方面获取到企业内所有IP与端口后,进行端口指纹识别(服务指纹识别/WEB应用指纹识别),根据每种指纹的数量排序,优先解决TOP100 / TOP 200 / TOP 500 的服务的历史高危漏洞。

2.1.2 覆盖新出的漏洞

针对0day漏洞,我们要解决的是新曝光的影响面较大的0day(很多情况下,新漏洞都是靠朋友圈/公众号,这部分是随人的,可能随着人员流动、发现的敏锐度会变化,所以尽量做成自动化运营流程)。

这里主要通过漏洞预警功能(或类似叫法)。

周期获取cve漏洞列表,匹配内网资产,再检测其他平台是否有对应cve编号。优先判断又有资产又有poc或exp的漏洞是否有影响,有较多资产代表影响范围较大,有poc或exp代表外部大概率已经有人在扫描与利用了。

然后再判断有资产的但没有poc与exp的是否影响范围较大,是否需要投入人力对漏洞进行研究(个人认为这是甲方的研究的一个需求,但是往往投入产出较低,所以需求较低)。

对应的功能是各家乙方的漏洞预警公告

阿里云漏洞库

腾讯云漏洞扫描服务情报中心

如果短期无法进行流程建设,定期由运营人员去看一下这些列表,判断资产匹配程度,有资产的漏洞编写成插件进行扫描,也可以有较好的收敛效果。

另外说一下资产指纹识别,理想情况下通过指纹识别打标,可以知道企业所有服务。但指纹识别有一个难点在于不知道有什么资产,就写不出对应的指纹规则。

所以需要有对应的打标流程,上文提过指纹打标,通过多特征组合成规则的形式,完成一个打标功能建设。

打标的需求源头,主要一方面就是漏洞预警,针对0day快速检测对应服务的资产数量,否则内网几十万的机器量级,每次都花费数小时全部扫描一遍来判断服务数量,影响漏洞响应时间(MTTR)。同时完善资产指纹,对资产较多的服务,历史漏洞也处理一遍。

2.2 web规则

2.2.2 覆盖场景全

web规则主要是针对通用型漏洞。

首先把场景保存下来,以靶场的形式,可以周期进行验证,验证每个漏洞类型是否每个场景都能检出。

靶场作为裁判员,安全产品作为运动员。

怎么能找出所有的web通用型漏洞呢?

a. 漏洞类型

寻找各种同类安全产品支持检测的扫描类型,从中排除掉危害较低的或者不存在于公司场景的

b. 每种类型的漏洞场景

常常有这样的情况,有检测sql注入、存储xss的插件,但是有些场景没有顾及到,比如header里的注入、post json中的注入等。

场景考虑齐全,需要针对每种漏洞抽取出维度,有一部分是公共维度,有一部分是私有维度,再进行维度相乘,得到最终各种场景。

举个例子:比如注入有哪些类型和场景?

维度可以是 不同来源/不同过滤与防御条件/不同执行方式/不同输出方式等,而这些是公共维度,类比到其他漏洞类型也可以按这样划分;私有维度比如数据库版本、数据库报错是否开启等(单独影响该漏洞场景)。

将每个维度的种种可能乘起来,得到各种场景,其中之一例如 来源于cookie+过滤了单引号+jdbc执行+无回显+mysql5.7。

2.2.2 覆盖新场景

主要是漏洞召回,来源如应急响应中心、等保测评、红蓝对抗等。

召回时排查全流程问题,流量有没有进入引擎、是否绑定了对应的检测规则、扫描过程的结果是什么、最后结果有没有入库等。如果是规则问题,需要新增靶场

召回会有一部分原因是固定的无法快速解决的,比如流量缺失(post/cookie等)、检测能力不足,召回一段时间后再重点推动解决导致漏报的大头问题。

2.3 准确率保障:靶场

另外说靶场,这里靶场是一个比较重要的安全产品

作为检测能力的裁判员,主要的作用是

a. 将各种漏洞场景持久化沉淀下来,随着召回不断进行,场景也会越来越多

随着人员流动,当初某个规则所用到的测试环境,可能会消失。交接人员对规则进行优化时,又需要重复测试环境搭建过程,成本较大。而把场景转换成web代码场景、或者docker file沉淀下来,极大减小了优化过程的成本。

b. 衡量各种漏洞检测安全产品的能力,给出准确率、漏报率等数据

规则的准确率,是提高且稳定漏洞产出的一个重要环节,在规则数达到几百上千的情况下,每个规则是否有效,往往是编写时候临时做了验证。

后期可能因为某些原因(比如造成了业务影响、导致引擎性能问题)下掉或者减少检出场景,而忘了加回来丢在记忆角落里。次数多了,整体场景检出率可能很低,只有内网渗透召回时才发现那么多漏报。所以准确率验证十分有必要

c. 测试安全防护代码的可用性、有效性

安全防护代码是否有效,能防护住所有认知里的场景,是否在压测情况下对业务性能没有过多影响,这是靶场的验证效果。

整体来说,辅助功能比较大,极大的保证了每个规则的准确率,但直接产出可能不是很明显,属于发展到较为成熟时的能力。

0X03 检测方式

3.1 跨能力联动检测

结合各种侧信道功能,增强扫描能力

比如最常见的dnslog,命令执行时在服务器上执行dns查询,dns请求经过dns服务器层层穿透到外网,再传回给扫描器;根据dns标识,判断具体的扫描任务触发了。dns的特点在于可穿透不通网但不禁dns的场景,但无法锁定触发IP(一般为dns服务器IP)。

再比如http log,curl/wget发起http请求,根据http请求中的标识判断漏洞,无法检测不出网的环境,但是可以锁定访问IP。部署在公网的http log,主要面对于存储型xss这类请求可能是在外网触发的。

针对命令执行类的,最好是用部署在内网的http log。dnslog偶尔会出现触发了、但是和流量关系不大的问题,比如路由器不定时触发、某业务收集镜像流量并做了异步流量处理的定时任务、某个测试收到请求后好奇请求了一次,会有溯源难的问题。http log刚好把内网IP锁定,且ssrf也得使用内网http log。

java agent 探针,获取执行层的函数与参数,像注入/任意文件读写(写crontab等命令执行来检测有危害)这种也可以检测出来。

或者是主机agent (HIDS) 监控主机特定文件内容来判断文件操作

或者是sql日志聚合汇总来判断sql注入

另外检测时避免造成业务影响,比如log4J的ldap链接不断开可能导致业务hang住。

3.2 单一漏洞检测能力深入

比如针对XSS,现有很多场景都是前后端分离。单纯的 requests.get获取页面内容再正则匹配已经有点古老的。

使用headless浏览器解析JS。

监听弹框事件,针对所有参数插入payload;或者作预处理,针对所有payload出现的位置构造特定的payload等。

3.3 丰富检测所需流量资源

3.3.1 登录态

大多数检测所需要的登录态,镜像流量方案,无法使用用户的cookie、header(业务自定义header可能带有用户登录凭证),所以得构造测试cookie。

在有所有业务统一接入passport的情况下(一个cookie或者token对所有业务生效),和passport申请接口更新cookie就好了。

有的业务接入passport会将passport认证映射到自己的用户体系,登录passport后根据获取到的token,在后端自己验证所属用户后、赋予业务自己的账号权限。这种情况最好能找到passport下游接入调用方,统一更新对应业务的登录凭证。

而业务比较复杂、存在多种认证场景的情况下,比较麻烦。不同的域名或者子域名,需要定期的更新cookie。

这种情况需要一套自动登录程序,填写账号密码,加上验证码自动填写,获取到cookie后到每个单位的验证地址去验证cookie有效性。通过不断召回运营,丰富登录态。

3.3.2 后缀

正常情况下,流量过滤的步骤会过滤掉 js/css/zip/jpg/png等静态资源后缀。

但是有部分漏洞需要这些后缀,得通过召回丰富待检测资源。

比如 xxx.jpg?height=100&width=100,可能后端会根据参数构造返回包,会有dos的风险。

有的js文件会泄露未授权的接口,WADL文件存在接口泄露等

召回过程,会遇到很多流量缺胳膊短腿、任务丢失、核心请求函数不支持、检测手段不足、检测ROI低所以放弃等情况,路漫漫

0X04 总结

通过覆盖现有的漏洞场景,建立未知场景运营流程,深入检测手法、检测资源,并使用靶场确保每个漏洞场景都可以有效检出,可以做到保证整体覆盖率。

且自研DAST在规则检测上更贴合企业自身业务,更细、更全、更快。

DAST 黑盒漏洞扫描器 第二篇:规则篇的更多相关文章

  1. DAST 黑盒漏洞扫描器 第六篇:运营篇(终)

    0X01 前言 转载请标明来源:https://www.cnblogs.com/huim/ 当项目功能逐渐成熟,同时需要实现的是运营流程和指标体系建设.需要工程化的功能逐渐少了,剩下的主要工作转变成持 ...

  2. DAST 黑盒漏洞扫描器 第三篇:无害化

    0X01 前言 甲方扫描器其中一个很重要的功能重点,就是无害化,目的是尽量降低业务影响到可接受程度. 做过甲方扫描器,基本上对于反馈都有所熟悉. "我们的服务有大量报错,请问和你们有关么&q ...

  3. DAST 黑盒漏洞扫描器 第四篇:扫描性能

    0X01 前言 大多数安全产品的大致框架 提高性能的目的是消费跟得上生产,不至于堆积,留有余力应对突增的流量,可以从以下几个方面考虑 流量:减少无效流量 规则:减少规则冗余请求 生产者:减少无效扫描任 ...

  4. DAST 黑盒漏洞扫描器 第五篇:漏洞扫描引擎与服务能力

    0X01 前言 转载请标明来源:https://www.cnblogs.com/huim/ 本身需要对外有良好的服务能力,对内流程透明,有日志.问题排查简便. 这里的服务能力指的是系统层面的服务,将扫 ...

  5. ref:【干货分享】PHP漏洞挖掘——进阶篇

    ref:http://blog.nsfocus.net/php-vulnerability-mining/ [干货分享]PHP漏洞挖掘——进阶篇 王陶然     从常见的PHP风险点告诉你如何进行PH ...

  6. XSS报警机制(前端防火墙:第二篇)

    XSS报警机制(前端防火墙:第二篇) 在第一章结尾的时候我就已经说了,这一章将会更详细的介绍前端防火墙的报警机制及代码.在一章出来后,有人会问为什么不直接防御,而是不防御报警呢.很简单,因为防御的话, ...

  7. web网络漏洞扫描器编写

    这两天看了很多web漏洞扫描器编写的文章,比如W12scan以及其前身W8scan,还有猪猪侠的自动化攻击背景下的过去.现在与未来,以及网上很多优秀的扫描器和博客,除了之前写了一部分的静湖ABC段扫描 ...

  8. [ 高并发]Java高并发编程系列第二篇--线程同步

    高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...

  9. 从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)

    从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

随机推荐

  1. h5页面跳转小程序

    2020年以前, 只能通过 web-view内嵌h5跳转小程序,现在  可以直接跳了!!!!!!  官方文档:https://developers.weixin.qq.com/doc/offiacco ...

  2. formdata收集数据

    通常在收集表单的时候我们都要涉及到绑定上传附件,这时候就可以用formdata的形式携带文件流上传给服务器. formData是ajax2.0(XMLHttpRequest Level2)新提出的接口 ...

  3. c语言实现双链表的基本操作—增删改查

    //初始化 Node*InitList() { Node*head=(Node*)malloc(sizeof(Node)); if(NULL==head) { printf("内存分配失败! ...

  4. Thinkphp设计模式和执行流程

    ThinkPHP设计模式 单例模式:数据库连接DB工厂模式:比如Db.class.php中的factory()方法适配器模式:驱动类,数据库观察者模式:Hook类 注册树模式:绑定容器外观模式:fac ...

  5. Codeforces Round #742 (Div. 2) B. MEXor Mixup

    题目链接 Problem - B - Codeforces 题意: 给出MEX 和 XOR(分别表示1. 本串数不存在的最小非负数  2. 本串数所有数异或后的结果) 求出这串数最少有几个数, 1 ≤ ...

  6. 我的树莓派 Raspberry Pi Zero 2W 折腾笔记,记录一些遇到的问题和解决办法

    0x00 前言说明 最近买了一块Raspberry Pi Zero 2W来玩,目的是想搭建一台远程运行的个人服务器,上面放个博客.点个灯啥的.于是就有了这篇文章. 树莓派官网地址:https://ww ...

  7. python学习番外篇——字符串的数据类型转换及内置方法

    目录 字符串的数据类型转换及内置方法 类型转换 内置方法 优先掌握的方法 需要掌握的方法 strip, lstrip, rstrip lower, upper, islower, isupper 插入 ...

  8. ImageView的scaleType属性 与 adjustViewBounds属性

    ImageView的scaleType的属性有好几种,分别是matrix(默认).center.centerCrop.centerInside.fitCenter.fitEnd.fitStart.fi ...

  9. IOC容器--1.12. 基于 Java 的容器配置

    用Java的方式配置Spring ,不使用Spring的XML配置,全权交给Java来做 JavaConfig是Spring的一个子项目,在Sring 4  之后成为核心功能 这种纯Java的配置方式 ...

  10. Docker极简入门:使用Docker-Compose 搭建redis集群

    为了构建一个集群,我们首先要让 redis 启用集群模式 一个简单的配置文件如下redis.conf # redis.conf file port 6379 cluster-enabled yes c ...