由于可通过网络访问,Web 应用程序经常成为攻击目标。黑客通过跨站点脚本、注入或身份验证错误获取有价值的数据。我们对标准和定制软件进行渗透测试,发现未知漏洞。这不仅会为您提供保护,还会让客户更加信任您。
渗透测试现在已成为许多公司的常见做法,即使有些公司至今尚未进行过一次渗透测试。这些测试是从攻击者的角度进行的,由专业测试人员进行动态分析。
渗透测试可以有许多不同的目标和方法。
例如,通过端口和漏洞扫描对基础设施进行非常简单的测试,并进行手动评估。这是测试的最低级别,无论是从工作量还是从获得的知识来看。一种特定的测试形式是 Web 应用程序渗透。
渗透测试的定义
关于渗透测试的定义有很多种。例如,NIST 和 BSI 都发布了相应的文件。
如果缩短定义,则可得出以下公式:具有特定知识水平和特定权限的攻击者在特定时间内针对特定目标执行测试。
渗透测试的流程和结果:
准备:制定期望和目标后,明确法律和组织方面。例如,在这里,我们定义测试期和方法并界定目标系统。
分析:利用公开和非公开信息,我们详细概述了要检查的系统的当前状态。然后,我们评估潜在漏洞的风险,并确定有希望且经济高效的行动方案。
主动测试:我们使用主动测试来确定可疑漏洞在多大程度上代表实际风险。我们会非常谨慎地进行这些测试,以避免系统故障。即使我们已成功入侵系统,我们仍会全面执行其余测试。
结果报告:在结果报告中,您将收到对方法的全面描述以及根据风险对发现的漏洞的评估。我们将与您讨论具体的行动建议,并在检查后的后续程序中为您提供支持。
动机
“渗透测试只会带来麻烦。”安全经理的这句话在大多数情况下都是正确的。渗透测试人员经常会发现各种漏洞,尤其是在测试定制的 Web 应用程序时。
根据软件开发过程的成熟度以及选择正确框架的运气,开发人员在渗透测试后还有很多工作要做,以修复他们发现的漏洞。
根据客户反馈,渗透测试的主要动机不是公司自身的质量或安全要求,而是客户的合规要求或法律要求。
特别是,大型渗透测试的购买条件已成为购买软件和 IT 支持解决方案的标准。如果您想在此领域达成交易,独立第三方的审计是必不可少的。
规划阶段
为了投标渗透测试并在市场上提出要求,服务公司需要注意以下几点。首先,测试人员必须了解应用程序在内容方面的作用。
对于在线商店来说,这比较简单。业务案例一目了然。对于特殊应用程序,例如人力资源、物流、制药或金融领域的应用程序,部分应用程序的结构非常独特且针对特定主题。
有些甚至使用自己的协议,例如银行环境中的 EBICS。准备一个简短的演示文稿来解释应用程序最重要的方面和功能范围是个好主意。
权利模式
许多应用程序提供用户管理和不同的角色和权限模型。一项比较耗时的服务是检查权限提升,因为它只能手动执行。可以检查水平扩展(即在相同权限上下文中选择性地承担另一个用户的角色)和垂直利用(即用户自身权限的增加)。
一项测试是调用仅对用户 A 可用但由用户 B 调用的功能。这将是对用户自身权限的测试。然而,与功能测试相比,这不是通过使用用户界面来完成的,而是更深层次的。必须事先定义要检查哪些角色和权限,以及要特别检查角色和权限模型中的哪些功能。
特别是在复杂的环境中,对角色权限模型的完整检查是一项非常耗时的检查。因此,建议在面向风险的基础上选择一定数量的测试用例。
生产或测试环境
生产环境中的检查具有最高风险。举个简单的例子:生产环境中有一张联系表。此联系表以工单或电子邮件的形式导入到一级支持中。在渗透测试期间,会迭代变量以确定漏洞。
即使是像联系表这样只有几个输入字段的表单,这种表单也可能被访问数千次。如果不提前协调,一级支持、规划人员和测试人员都会表示感谢。
因此,产品所有者必须提前与业务方面的开发人员讨论哪些工作流程可能不会自动检查,或者只能在定义的框架内检查。
WAF 还是非 WAF
Web 应用程序防火墙 (WAF) 会干预数据流并使用签名来尝试抵御已知攻击。从作者的角度来看,渗透测试应该始终检查实际的 Web 应用程序。
例如,在测试中停用 WAF 或专门针对测试人员的地址将其切换为“开启”是有意义的。如果在检查过程中发现了应用程序中的特定漏洞,则可以重新激活 WAF。
现在,可以在激活 WAF 的情况下再次专门测试发现的漏洞。这意味着,只需付出最少的额外努力,您不仅可以获得有关应用程序中存在哪些漏洞的陈述,还可以了解 WAF 是否提供了针对已知漏洞的特定攻击的预期弹性级别。
由于存在大量潜在漏洞,变量通常会按描述进行迭代,并且表单会频繁发送。特别是敏感功能,例如登录屏幕,通常受到防止此类大规模测试的机制的保护。
对于主动操作,这是一个好主意。但是,它们也会阻止通过渗透测试进行高水平的测试深度,至少在合理的努力下是如此。
因此,必须提前考虑是否可以暂时停用相应的机制(例如验证码或速率限制)进行测试,至少在一个测试实例上停用。这增加了测试深度。
验证码只能使批量检查变得更加困难。但是,它无法阻止漏洞的利用。假设登录功能中存在 SQL 注入漏洞。
虽然验证码会使查找漏洞变得更加困难,因为测试工具本身会向应用程序发送许多查询来查找漏洞,但测试人员在手动测试中也是如此。
但是,如果测试人员在测试开始时就发送与漏洞匹配的攻击签名(有效载荷),他就会发现漏洞。因此,认真讨论暂时禁用是有意义的,尽管禁用安全测试的保护措施乍一看可能听起来很愚蠢。
那么,渗透测试的有效测试时间是多长呢?经验法则是:要测试的应用程序越复杂、功能越广泛,测试就越广泛。
然而,渗透测试不是一种确定性的测试方法。因此,项目通常会提供总执行期。我们假设这个期限是十天。
在这十个项目日中,需要多少时间进行测试,需要多少时间进行文档记录,在测试之前没人知道!文档的范围主要由发现的漏洞数量和描述强度决定。
就其本质而言,在测试之前无法得知这些。在这方面,测试人员在测试之前无法知道在项目周期内需要多少时间进行文档编制。
如果应用程序很快就出现大量漏洞,测试人员将在几天后停止测试,以记录迄今为止发现的漏洞。如果应用程序的弹性非常大,他将能够进行长时间的测试,因为文档编制时间将相应地短得多。
但是,测试声明在两种情况下都非常有用。对于第一种情况,很明显应用程序存在大量且广泛的漏洞,不容小觑。
在第二种情况下,在总体努力相同的情况下,很明显它是一个具有弹性的应用程序,在开发过程中显然做对了很多事情。
一旦做好所有安排并商定了测试期,就可以开始测试了。在测试期间,测试人员和客户双方都必须始终保持联系。
每日状态更新很有用。然而,实践表明,当发现高风险漏洞时,测试人员尽快联系客户通常是最有效的。
测试结束后,必须提供一份由测试人员自己编写的易于理解和透明的测试报告。这可以通过电话或个人会议进行讨论。
如上所述,渗透测试通常与知识的增长有关。知识的增长需要付出努力。但是,除了修复漏洞之外,还应该认真审视可以真正防止此类漏洞发生的流程。
开发人员是否需要充分关注安全问题,还是他们只是在追逐技术指南?是否有针对应用程序关键元素(例如密码存储和加密的所有方面)的全公司指南,这些指南是否与最新技术相对应?开发人员是否可以轻松高效地设置这些默认值?
如果只关注修复特定漏洞,组织就会错失良机。
尽管渗透测试原则上不能提供百分之百的安全声明,但它们是衡量 Web 应用程序弹性的良好指标。特别是对于包含大量自开发或委托代码的应用程序,渗透测试有助于避免成为下一个数据丑闻的一部分。
近几年来,网络应用一直非常受欢迎。 (微型) 计算机和互联网的高可用性和持续存在催生了各种各样的应用,无论是相册服务、租车预订服务、在线购买火车票,还是通过互联网上的网络应用预订整个行程。
由于功能受术语驱动,Web 应用程序中的安全性通常未得到充分考虑。因此,系统易受攻击,攻击可以触及目标。黑客攻击是每个公司的噩梦:客户数据被发布在互联网上,客户信心迅速下降,客户迁移,销售额暴跌。
针对 Web 应用的攻击是互联网上最常见的攻击之一。在测试的数百个 Web 应用中,62% 的身份验证存在缺陷,71% 的访问权限存在缺陷,94% 存在跨站点脚本 (XSS) 漏洞,78% 存在信息泄露,92% 存在跨站点请求伪造 (CSRF) 漏洞。
Web 应用程序渗透测试是提高安全性的最有效方法之一。Web 应用程序通过 IT 安全测试进行全面测试。这可以提高应用程序的安全性,确保信息的机密性,并防止黑客入侵。渗透测试可能需要几天到几周的时间。除了所选的模块和测试目标外,测试范围也会影响所需的工作量。