大家好,我是阿萨。昨天简单介绍了安全测试的相关概念,今天看看具体的安全测试操作。
什么是安全测试?
安全测试检查软件是否容易受到网络攻击,并测试恶意或意外输入对其操作的影响。安全测试提供证据,证明系统和信息是安全可靠的,并且它们不接受未经授权的输入。
安全测试是一种非功能测试。与功能测试不同,功能测试关注的是软件的功能是否正常工作(“软件做了什么”),而非功能测试关注的是应用程序是否被正确设计和配置(“如何”进行)。
安全测试的主要目标:
1.识别资产——需要保护的东西,比如软件应用程序和计算基础设施。
2.识别威胁和漏洞-可能对资产造成损害的活动,或一个或多个资产中可能被攻击者利用的弱点。
3. 识别风险-安全测试旨在评估特定威胁或漏洞将对业务造成负面影响的风险。风险是通过识别威胁或漏洞的严重程度以及利用的可能性和影响来评估的。
4. 执行补救—安全测试不仅仅是对资产的被动评估。它为修复发现的漏洞提供了可操作的指导,并可以验证漏洞是否已成功修复。
安全测试的关键原则
安全测试旨在确保组织的系统、应用程序和数据遵循以下安全原则:
1. 机密性—限制对系统管理的敏感访问的访问。
2. 完整性——确保数据在整个生命周期内是一致、准确和可信的,并且不能被未经授权的实体修改。
3. 身份验证——确保敏感系统或数据受到一种机制的保护,这种机制可以验证访问它们的个人的身份。
4. 授权-确保敏感系统或数据根据身份验证用户的角色或权限正确控制访问。
5.可用性——确保关键系统或数据在用户需要时可用。
6.不可抵赖性——通过使用可证明的时间戳交换身份验证信息,确保发送或接收的数据不会被拒绝。
安全测试的类型
渗透测试(道德黑客)
渗透测试是在安全条件下对应用程序、软件、系统或网络进行真实网络攻击的过程。它可以帮助评估现有的安全措施在真实攻击中的表现。最重要的是,渗透测试可以发现未知的漏洞,包括zero-day威胁和业务逻辑漏洞。
渗透测试传统上是由被称为道德黑客的受信任和认证的安全专业人员手动完成的。黑客在约定的范围内工作,试图在不造成损害的情况下,以可控的方式侵入公司的系统。近年来,自动化渗透测试工具正在帮助组织以更低的成本和更高的测试频率获得类似的好处。
应用程序安全测试(AST)
应用程序安全测试描述了组织可以用来发现和消除软件应用程序中的漏洞的方法。这些方法包括在整个软件开发生命周期(SDLC)中测试、分析和报告软件应用程序的安全状况。
AST的主要目标是在应用程序发布到市场之前防止软件漏洞,如果做不到这一点,则在生产中快速识别并修复它们。成功的AST会带来更健壮、更安全的源代码、对应用程序安全问题的更大可见性,以及对内部和外部威胁的更好保护。
Web应用程序安全测试
web应用程序安全测试的目标是确定web应用程序是否容易受到攻击。它涵盖了各种自动和手动技术。
Web应用渗透测试旨在收集Web应用的相关信息,发现系统漏洞或缺陷,调查利用这些漏洞或缺陷的成功程度,并评估Web应用漏洞的风险。
开放Web应用程序安全项目(OWASP)是一个致力于发现和报告Web应用程序中的安全漏洞的社区。
API安全测试
API安全测试有助于识别应用程序编程接口(API)和web服务中的漏洞,并帮助开发人员修复这些漏洞。api提供了对敏感数据的访问,攻击者可以将它们用作内部系统的入口点。严格和定期地测试api可以保护它们免受未经授权的访问和滥用。
API特别容易受到中间人(MiTM)攻击(攻击者可以窃听API通信并窃取数据或凭据)、API注入(攻击者可以向内部系统注入恶意代码)和拒绝服务(DoS)等威胁的攻击,在这种威胁中,攻击者用假流量淹没API以拒绝向合法用户提供服务。
为了减轻这些威胁,API必须经过验证,以对用户请求进行强身份验证,根据最小权限原则对用户进行授权,使用SSL/TLS对所有通信进行加密,并对用户输入进行消毒以防止代码注入和篡改。
漏洞管理
漏洞管理是一个持续的过程,使组织能够跨端点、工作负载和网络识别、评估、报告、管理和修复安全漏洞。安全团队通常使用漏洞扫描工具来检测漏洞,并实现手动或自动流程来修复漏洞。
健壮的漏洞管理程序使用威胁情报并利用IT运营知识来了解漏洞的实际业务影响,确定风险的优先级,并尽快修复高优先级的漏洞。
配置扫描
安全扫描,也称为配置扫描,是识别软件、网络和其他计算系统的错误配置的过程。这种类型的扫描通常根据研究机构或遵从标准指定的最佳实践列表检查系统。
自动配置扫描工具识别错误配置,并提供关于每个错误配置的更多详细信息的报告,以及如何解决这些错误配置的建议。
安全审计
安全审计是根据定义的标准审查/审计应用程序/软件的结构化过程。审计通常包括根据安全需求审查代码或体系结构,分析安全漏洞,并评估硬件配置、操作系统和组织实践的安全状况。它还评估法规和标准的遵守情况。
风险评估
风险评估允许组织识别、分析和分类其业务关键资产面临的安全风险。风险评估可以帮助了解对组织基础设施最重要的威胁是什么,并确定系统补救的优先级。它还有助于安全投资的长期规划和预算编制。
安全情况评估
安全态势评估结合了安全扫描、道德黑客和风险评估,不仅可以确定组织面临的风险,还可以确定其当前的安全控制及其有效性。它可以识别当前安全态势中的漏洞,并提出将提高受保护资产安全性的变更或改进建议。
安全测试用例和场景
身份验证
认证系统的安全测试应包括以下内容:
检查密码规则—测试站点要求的密码安全级别和质量。
识别用户名枚举漏洞—检查错误是否因是否有用户而不同。
测试密码强度—创建密码的最低要求。
识别帐户恢复漏洞—检查攻击是否可以恢复帐户(即通过更改电子邮件或密码)。
检查用户名强度—确保用户名是唯一的。
识别fail-open身份验证-检查即使身份验证失败,系统是否仍提供开放访问。
验证cookie作用域—检查cookie的作用域是否在域中,或者攻击者是否可以窃取它们。
输入验证
输入验证测试应包括以下内容:
模糊请求参数—检查反射参数和打开重定向。
识别SQL注入漏洞—检查系统是否将参数作为SQL处理。
识别SOAP注入漏洞—检查应用程序是否响应SOAP。
识别LDAP注入漏洞—测试是否无法清除输入。
识别XML注入漏洞—检查注入的XML是否影响应用程序。
识别XXE注入漏洞—检查攻击者是否可以注入外部实体。
应用程序和业务逻辑
这些测试用例对于安全测试很重要,并且需要人工干预(考虑到每个应用程序逻辑的唯一性,它们太复杂而无法自动化)。测试应包括以下内容:
确定应用程序逻辑攻击面——应用程序做什么。
检查来自客户端的数据传输—查看应用程序之间的信息传输是否不同。
在应用程序基于其逻辑的客户端检查中确定输入验证。
识别多步骤流程中的逻辑缺陷—检查是否可以绕过步骤。
测试不完整的输入处理—检查应用程序是否处理错误的输入。
检查信任关系——例如,用户是否可以访问管理功能。
其他测试
还有其他各种测试来帮助确保应用程序的安全性并识别以下漏洞:
DOM漏洞,如XSS。
缺少HTTP安全标头。
本地隐私漏洞。
弱且持久的cookie。
弱SSL密码。
包含敏感信息的URL参数。
安全测试方法
黑盒测试
在黑盒测试中,安全测试人员从外部评估系统的安全性,而不知道生成响应的内部进程。黑盒是一个不透明的系统,这意味着只有输入和输出是可观察的。在某些情况下,测试人员忽略了系统的内部结构,即使有可能理解它。
黑盒测试确保了测试人员和代码创建者之间的分离。它迫使测试人员采用局外人的视角来测试软件,因为攻击者可能会接近它。测试和软件开发过程之间的社会和技术分离使测试人员能够挑战创建者——例如,通过以开发人员没有考虑到的方式操纵应用程序。
白盒测试
在白盒测试中,测试人员根据软件的源代码设计测试用例和测试。测试人员知道并理解代码结构,而不是黑盒测试或灰盒测试(测试人员对代码结构的知识有限)。由于这种可观察性,它也被称为透明、透明或玻璃盒测试。
白盒测试技术侧重于应用程序的内部工作和软件组件,从内部测试其设计和结构。测试团队可以将此技术应用于系统、集成和单元测试。
灰盒测试
灰盒测试是白盒测试和黑盒测试的混合体——黑盒测试涉及一个内部结构未知的测试对象;白盒测试要求完全了解应用程序的内部结构。在灰盒测试中,测试人员有系统内部结构和工作方式的部分视图。
测试人员可以基于对应用程序底层架构和代码的有限理解来进行测试。因此,测试对象是半透明的或“灰色的”。这种方法结合了白盒和黑盒测试技术,从两者中提取出最好的。灰盒测试人员将白盒测试的代码目标与黑盒测试的各种创新方法(如功能测试和回归测试)合并在一起。测试人员可以同时评估软件的用户界面和内部工作。
什么是DevSecOps?
DevSecOps是一种软件开发和项目管理策略,它融合了开发、安全和运营流程。它将这些与基础设施即代码(IaaS)结合起来,以创建自动化的、持续的交付管道。
DevSecOps管道的中心目标是在整个软件开发生命周期中实现自动化、监控和其他安全流程。它将安全性纳入每个阶段,包括计划、开发、构建、测试、发布、交付和部署阶段。
将安全性集成到开发过程的每个部分对于持续集成(CI)和降低遵从成本非常重要。它还使团队能够更快地交付安全软件,同时降低代价高昂的错误和回滚的风险。在DevSecOps框架中,每个团队成员从一开始就分担安全责任——员工必须做出明智的决定,并在每一步都考虑到安全问题。
数据安全测试
对于大多数组织来说,数据安全是一项具有挑战性的任务。大多数公司都将很大一部分安全预算用于保护敏感数据免受攻击。业务数据是大多数关键业务流程的核心部分,数据泄露可能会使组织面临合规和法律风险、声誉损害和财务损失。
为了保护数据,组织必须测试其安全控制,以确保它们满足组织的安全需求,以及符合政府法规和行业标准。在许多情况下,遵从性标准明确要求进行安全测试,以向审核员证明数据得到了适当的保护。
数据安全审计
组织应至少每隔几个月进行一次数据安全审计。这使得识别数据安全机制中的风险和弱点成为可能。虽然审计可以由内部安全或合规团队执行,但与第三方审计人员或渗透测试人员签约也是有价值的。自愿审计可以发现重要的安全问题,并在组织遭受有风险、有压力的外部审计之前对其进行补救。
数据安全审计的主要输出是一份安全报告,其中详细说明了数据安全模型中的弱点和缺失部分。必须努力优先考虑这些弱点,并对其进行补救,以提高数据安全准备程度。
遵从性测试
合规性测试是监控和评估系统、设备、网络和云环境的过程,以确保符合监管要求和行业网络安全标准。
跟踪合规情况并不总是容易的,特别是在高度监管的行业和部门。法规和标准经常变化,并且可能具有影响IT环境的各个方面的非常详细的需求。如今,大多数组织都在将工作负载迁移到云中,而云环境的动态特性可能会使遵从性更具挑战性。
遵从性测试可能涉及跟踪敏感资产、检查个人身份信息,以及执行演练或渗透测试,以验证组织是否为攻击做好了准备。遵从性测试的一个关键部分是数据发现和分类——理解敏感数据所依赖的位置,然后确认适当的安全措施已经到位。
云原生安全测试
云原生是一组设计原则和技术,用于创建能够充分利用云环境的应用程序。云原生开发模型,包括容器化和无服务器计算,旨在提高可伸缩性和弹性,并实现更快的开发和部署。
原生云环境的挑战之一是低可见性。云原生应用程序可以有大量的活动部件,其中大多数是短暂的。云原生安全测试包括发现云原生应用程序的元素并识别安全弱点,例如错误配置、缺少安全最佳实践和漏洞。
云原生安全测试的两个重要重点领域是容器图像扫描和基础设施即代码(IaC)扫描。IaC模板是一个重要的攻击面,因为它们用于大规模自动创建云原生资源。
数据库安全测试
数据库安全包括保护Oracle、Microsoft SQL Server、MySQL等数据库服务器不受未经授权的访问和网络攻击。数据库通常保存关键业务信息,因此是攻击者有价值的目标。
数据库安全测试
数据库安全包括保护Oracle、Microsoft SQL Server、MySQL等数据库服务器不受未经授权的访问和网络攻击。数据库通常保存关键业务信息,因此是攻击者有价值的目标。
数据库安全测试旨在测试数据库关键元素的安全状况,包括底层数据库管理系统(DBMS)、其托管服务器、存储在数据库中的数据、连接到数据库服务器的应用程序以及用于访问数据库的网络基础设施。
数据库安全测试的一个重要方面是检查常见的数据库威胁向量,如SQL注入、NoSQL注入和本地文件注入(LFI)。数据库安全测试旨在识别数据库中的安全弱点,并提供可操作的见解,以帮助保护数据库免受入侵、滥用和破坏。
云数据测试
云测试是测试以IaaS (infrastructure as a service)模式部署在云计算资源上的软件应用程序,或以PaaS (platform as a service)或SaaS (software as a service)模式由第三方服务提供商提供服务的过程。
云数据测试可以确保最佳的数据性能、可用性和安全性,并最大限度地减少相关基础设施或平台的停机时间。
云数据测试的核心重点是确保云和SaaS提供商的承诺得到实现。例如,云数据测试可以验证提供商是否满足性能sla,测试数据是否实际复制到多个位置,以及验证灾难恢复流程是否正常运行。
安全测试工具
静态应用安全测试(SAST)
SAST工具在静止时评估源代码。SAST的目的是识别可利用的缺陷,并提供包括发现和建议在内的详细报告。
您可以运行SAST来检测源代码中的问题,检测输入验证、数值错误、路径遍历和竞争条件等问题。SAST也可以用于已编译的代码,但这需要二进制分析器。
动态应用安全测试(DAST)
DAST工具在运行时检查应用程序。DAST的目的是在应用程序运行时检测应用程序中可利用的缺陷,使用各种攻击。
DAST工具通常使用模糊法向应用程序抛出大量已知的无效错误和意外的测试用例,试图检测应用程序可能被利用的条件。
您可以运行DAST检查来检查广泛的组件,包括脚本、会话、数据注入、身份验证、接口、响应和请求。
交互式应用安全测试(IAST)
IAST工具利用静态和动态测试来创建混合测试过程。目标是确定在运行时期间是否可以利用已知的源代码漏洞。IAST工具通常用于减少假阳性的数量。
一个IAST工具结合了各种测试技术来创建多个高级攻击场景,使用关于数据流和应用程序流的预收集信息。然后,这些工具递归地执行动态分析。
动态分析周期确保IAST工具根据应用程序对每个测试用例的响应方式,继续了解更多关于应用程序的信息。根据解决方案的能力,工具可以使用分析来创建新的测试用例,以获得关于应用程序的更多见解。
软件依赖项分析(SCA)
软件依赖项分析(SCA)是一种用于管理和保护开放源码组件的技术。开发团队可以使用SCA快速跟踪和分析项目中部署的开源组件。
SCA工具可以检测所有相关组件、支持它们的库以及直接和间接依赖项。在每个组件中,他们可以识别漏洞并建议补救措施。扫描过程创建一个材料清单(BOM),它提供了项目软件资产的完整列表。
安全测试最佳实践
下面是一些最佳实践,可以帮助您实现安全测试并成功地进行实践。
安全测试左移
随着转向devsecops(开发人员、安全和运维团队之间的更紧密协作),组织正在开发过程的早期添加安全实践。将安全测试工具集成到持续集成/持续交付(CI/CD)周期中是很常见的。
将安全测试向左移动可以帮助开发人员理解安全问题,并在软件开发过程中实现安全最佳实践。它还可以帮助测试人员在软件投入生产之前及早发现安全问题。最后,操作和安全团队可以在生产中使用安全测试来发现问题,并与其他团队合作解决问题。
测试内部接口,而不仅仅是api和ui
安全测试通常侧重于外部威胁,例如来自公开可用的web表单的用户输入。然而,攻击者利用内部系统中的弱点越来越常见。您应该使用安全测试来验证内部系统之间存在安全接口,并且内部威胁或受损帐户不能用于升级特权。这使您的组织更接近零信任安全模型。
经常做自动化测试
虽然执行手动安全测试(如全面渗透测试或安全审计)很重要,但组织必须自动化安全测试并经常执行它——最好是在应用程序或计算基础设施的每次更改时执行。
企业应用程序使用大量组件,这些组件可能需要安全更新,或者软件供应商可能不再支持这些组件。经常测试业务关键系统,对影响它们的安全问题给予高度优先级,并紧急投入资源来修复它们。
第三方组件和开源安全
组织必须对其应用程序中使用的第三方代码进行安全测试,尤其是开源组件。
信任商业软件是不明智的,测试开放源码组件同样重要,因为这些组件可能需要更新,或者可能没有得到适当的保护。您应该像扫描自己的代码一样扫描和修复第三方代码,并确定更新、修复或替换不安全组件的优先级。
使用OWASP Web安全测试指南
Web安全测试指南(WSTG)是一个在线网络安全测试资源,为安全专业人员和Web应用程序开发人员提供信息。它由网络安全专业人员和热心的志愿者创建,旨在为验证web服务和应用程序的安全性提供最佳实践框架。