
作为其专业活动的一部分,开发人员,渗透测试人员和安全专业人员必须处理诸如漏洞管理(VM),(安全)SDLC之类的流程。
尽管它们的使用者不同,但是在这些短语下隐藏着相互交织的不同的实践和工具集。
技术进步尚未达到用一种分析基础设施和软件安全性的工具代替一个人的地步。
了解为什么会这样以及您必须面对哪些问题很有趣。
流程
漏洞管理过程旨在持续监视基础结构安全性和补丁程序管理。
安全SDLC流程(“安全开发周期”)旨在支持开发和运营过程中的应用程序安全性。
这些过程的类似部分是漏洞评估过程-漏洞评估,漏洞扫描。
在VM和SDLC中进行扫描的主要区别在于,在第一种情况下,目标是检测第三方软件或配置中的已知漏洞。 例如,Windows的版本过旧或SNMP的默认社区字符串。
在第二种情况下,目标是不仅检测第三方组件(依赖项)中的漏洞,而且主要检测新产品的代码中的漏洞。
这导致了工具和方法的差异。 我认为,在应用程序中查找新漏洞的任务要有趣得多,因为它不能归结为指纹版本,收集标语,对密码进行排序等。
对应用程序漏洞进行高质量的自动扫描,需要使用考虑到应用程序的语义,其目的和特定威胁的算法。
正如
avleonov所说,基础结构扫描器通常可以用计时器代替。 关键是,从统计上看,如果您一个月没有更新,则可以认为您的基础架构易受攻击。
工具
扫描以及安全分析可以作为黑盒或白盒进行。
黑匣子
在进行黑盒扫描时,该工具应该能够通过用户使用该服务的相同界面来使用该服务。
基础结构扫描程序(Tenable Nessus,Qualys,MaxPatrol,Rapid7 Nexpose等)寻找开放的网络端口,收集“横幅”,确定已安装的软件版本,并在其知识库中查找有关这些版本中漏洞的信息。 他们还尝试检测配置错误,例如默认密码或对数据的开放访问,弱SSL密码等。
Web应用程序扫描程序(Acunetix WVS,Netsparker,Burp Suite,OWASP ZAP等)也知道如何确定已知组件及其版本(例如CMS,框架,JS库)。 扫描仪的主要步骤是爬行和模糊测试。
在爬网期间,扫描程序收集有关现有应用程序接口,HTTP参数的信息。 在模糊化过程中,所有检测到的参数都将替换为突变或生成的数据,以引发错误并检测漏洞。
此类应用程序扫描程序分别属于DAST和IAST类-动态和交互式应用程序安全性测试。
白盒
白盒扫描有更多差异。
在整个过程中,通常通过执行经过身份验证的扫描,使VM扫描程序(Vulners,Incsecurity Couch,Vuls,Tenable Nessus等)可以访问系统。 因此,扫描程序可以直接从系统下载软件包和配置参数的已安装版本,而无需在网络服务的横幅上猜测它们。
扫描更加准确和完整。
如果我们谈论应用程序的白盒扫描(CheckMarx,HP Fortify,Coverity,RIPS,FindSecBugs等),那么我们通常谈论静态代码分析以及SAST类的相应工具的使用-静态应用程序安全性测试。
问题所在
扫描有很多问题! 在提供用于构建扫描过程和安全开发以及进行安全分析工作的服务的框架中,我必须亲自处理大多数问题。
我将选出3个主要问题组,这些问题可以通过与多家公司的信息安全服务的工程师和经理的交谈得到证实。
Web应用程序扫描问题
- 实现的复杂性。 扫描仪需要针对每个应用程序进行部署,配置,自定义,为扫描分配测试环境,并在CI / CD流程中实施才能有效。 否则,这将是一个无用的正式程序,只会给出误报
- 扫描时间。 即使在2019年,扫描器在界面重复数据删除方面的表现也很差,并且考虑到它们的不同,尽管它们使用相同的代码,但可以扫描数千个页面,每个页面上有10个参数,为期10天。 同时,必须迅速做出在开发周期内部署到生产的决定
- 很少的建议。 扫描程序会给出相当笼统的建议,并且开发人员并非总是能够快速了解如何降低风险水平,最重要的是,是否需要立即进行此操作
- 对应用程序具有破坏作用。 扫描程序很可能会对应用程序进行DoS攻击,他们还可以创建大量实体或修改现有实体(例如,在博客上创建数以万计的评论),因此请不要在产品中随意启动扫描
- 低质量漏洞检测。 扫描程序通常使用固定的有效负载数组,并且可以轻松忽略与其已知的应用程序行为情况不符的漏洞。
- 扫描仪不了解应用程序的功能。 扫描程序本身不知道什么是“互联网银行”,“付款”和“注释”。 对于他们来说,只有链接和参数,因此,业务逻辑中的巨大漏洞都可以被完全发现,他们不会猜测是否可以通过ID进行重复写入,查看其他人的数据或通过舍入来平衡余额
- 扫描仪对页面语义的误解。 扫描程序不知道如何阅读常见问题解答,也不知道如何识别验证码,他们自己不会猜测如何注册,然后需要登录,无法单击“注销”以及更改参数值时如何对请求进行签名。 结果,大多数应用程序可能根本不会被扫描。
源代码扫描问题
- 误报。 静态分析是一项艰巨的任务,要解决这一问题,必须采取许多折衷措施。 通常,您必须牺牲准确性,甚至昂贵的企业扫描仪也会产生大量的误报
- 实现的复杂性。 为了提高静态分析的准确性和完整性,有必要完善扫描规则,编写这些规则可能会非常耗时。 有时,编写代码中的所有错误并进行修复会比编写规则来检测这种情况要容易得多。
- 缺乏依赖性支持。 大型项目依赖于可扩展编程语言功能的大量库和框架。 如果扫描仪的知识库中没有这些框架中有关“接收器”的信息,这将成为盲点,并且扫描仪甚至根本不了解代码
- 扫描时间。 就算法而言,查找代码中的漏洞是一项艰巨的任务。 因此,该过程很可能会延迟并且需要大量的计算资源。
- 低覆盖率。 尽管资源消耗和扫描持续时间长,但SAST工具的开发人员仍然必须采取折衷措施,并不能分析程序可能处于的所有条件。
- 发现的可重复性。 指向导致漏洞的特定线路和呼叫堆栈很好,但是实际上,扫描程序通常没有提供足够的信息来检查外部漏洞。 毕竟,无效代码中也可能存在缺陷,这对于攻击者而言是无法实现的
基础架构扫描问题
- 库存不足。 在大型基础架构中,尤其是在地理位置上分散的地方,通常最难理解需要扫描哪些主机。 换句话说,扫描任务与资产管理任务紧密相关。
- 优先顺序不佳。 网络扫描仪通常会产生许多结果,这些缺陷在实践中是无法利用的,但是从形式上讲,它们的风险级别很高。 消费者收到难以解释的报告,尚不清楚首先需要解决的问题
- 很少的建议。 扫描程序的知识库通常仅具有有关该漏洞及其修复方法的非常常规的信息,因此管理员必须与Google武装起来。 白盒扫描仪的情况要好一些,它可以发出特定的命令来修复
- 手工制作 基础架构可以有许多节点,这意味着潜在的许多缺陷,必须在每次迭代时手动分解和分析报告
- 覆盖不良。 基础架构扫描的质量直接取决于有关漏洞和软件版本的知识库的数量。 同时, 事实证明 ,即使市场领导者也没有全面的知识库,免费解决方案数据库中有很多信息,而领导者却没有
- 修补问题。 基础结构中最常见的漏洞修补程序是更新程序包或更改配置文件。 这里的最大问题是系统(尤其是旧系统)由于升级而无法正常运行。 本质上,您将必须对生产中的生活基础设施进行集成测试
方法
怎么样
在以下各部分中,我将向您详细介绍示例以及如何解决其中的许多问题,但现在,我将指出可以工作的主要领域:
- 各种扫描工具的汇总。 通过正确使用多个扫描仪,可以大大提高知识库和检测质量。 与单独启动的所有扫描仪相比,您发现的漏洞甚至更多,同时有可能更准确地评估风险水平并给出更多建议。
- SAST和DAST的集成。 您可以通过在两者之间共享信息来提高DAST覆盖率和SAST准确性。 您可以从源代码中获取有关现有路由的信息,并可以使用DAST从外部检查漏洞是否可见
- 机器学习™ 。 在2015年,我谈论了 ( 但至今 )关于使用统计信息使黑客了解扫描仪并加快扫描速度的信息。 这无疑是将来进行自动安全性分析的基础。
- IAST与自动测试和OpenAPI的集成。 在CI / CD管道的框架内,可以基于充当HTTP代理的工具和基于HTTP的功能测试来创建扫描过程。 OpenAPI / Swagger测试和合同将为扫描仪提供有关数据流的丢失信息,并使扫描各种状态的应用程序成为可能
- 正确配置。 对于每个应用程序和基础架构,您需要创建一个适当的扫描配置文件,其中要考虑到接口的数量和性质以及所使用的技术
- 定制扫描仪。 通常,不完成扫描程序无法扫描应用程序。 一个示例是支付网关,其中每个请求都必须签名。 如果不编写网关协议的连接器,扫描程序将以错误的签名无意识地打败请求。 还需要针对特定类型的缺陷编写专用的扫描仪,例如不安全的直接对象参考
- 风险管理。 使用各种扫描程序并将其与外部系统集成(例如资产管理和威胁管理),将使您可以使用许多参数来评估风险级别,以便管理层可以对开发或基础结构的当前安全状态有足够的了解。
请继续关注,让我们破坏漏洞扫描!