使用OWASP的AppSec入门
我们继续看到大数据泄露影响各种规模的组织。 随着网络安全问题的持续发生,甚至频率和严重性的增加,我们还想知道:“我们下一步?”和“我该怎么办?”这就是OWASP的用武之地。
什么是OWASP Top 10?
OWASP以OWASP Top 10最著名,它是Open Web Application Security Project,这是一个开放社区,提供免费的信息和有关应用程序安全性的培训。OWASP Top 10是Web应用程序的常见危险安全风险列表,并定期更新以保持最新状态。如果您在应用程序安全性方面做得不太好,或者您所做的只是临时的,则OWASP Top 10是一个很好的起点。
今天的OWASP十大漏洞是什么?
OWASP Top 10的最新更新于2017年,其中包括以下漏洞A1-A10:
- 大量资金的投入
- 认证失败
- 敏感数据暴露
- XML外部实体(XXE)
- 存取控制中断
- 安全配置错误
- 跨站脚本(XSS)
- 不安全的反序列化
- 使用具有已知漏洞的组件
- 记录和监控不足
OWASP提供了前十名的文档,并为每个漏洞专门提供了一个网页。该页面描述了每个漏洞是什么,并提供了风险评分,该评分用于帮助对可能的漏洞进行优先级划分和分类。请参阅下面的页面示例:
页面上的各个部分可帮助您了解每个漏洞的重要性和危险。
该应用程序容易受到攻击吗?
名为“应用程序易受攻击”部分解释了应用程序具有此漏洞的含义,以及哪种工具(DAST,SAST等)可用于发现该特定漏洞。
攻击场景示例
“攻击场景示例”部分显示了攻击者如何利用每个漏洞。此信息可用于帮助构建测试,以及就软件漏洞如何影响应用程序安全性向团队进行教育。
如何预防
“如何预防”部分是最有趣的恕我直言。安全测试很重要,但是构建安全代码是增强应用程序安全性的唯一坚实基础。本节概述了各种策略,这些策略不仅可以通过早期测试,而且可以通过构建从根本上不容易受到攻击的更好的代码来帮助您左移安全性。这是“设计安全性”方法的基础(例如,GDPR要求)。
参考文献
最后,每个Top-10项目都有一个部分,其中包含有关每个问题,避免问题的方法以及测试方法的更多信息。它还包含将导致您遇到相关问题的链接。在您不断提高软件安全性时,这将非常有用。
阅读OWASP Top 10文档时,您可能会发现其中一些仅从名称上就显而易见,而另一些则需要更深入地理解。例如,A1(“注入”)实际上是广泛的集合,例如SQL注入、命令注入、LDAP注入等等。此安全弱点的根本原因是,在应用程序使用用户输入之前,没有对用户输入进行充分的检查和清理。
为什么使用OWASP Top 10?
OWASP Top 10中提供了信息、培训和建议。您可以了解常见的安全问题以及检测甚至完全避免某些问题的策略。所有这些信息都是免费提供的,并且会不断更新和改进。
合规性还意味着我们需要确切了解工具包中的哪个特定项目支持标准的哪个特定部分。在静态分析的情况下,这意味着知道哪些检查者支持标准中的哪些项目,以及标准中是否存在需要静态分析之外的项目(即,对等代码查看或软件组成分析)。
从头开始
对于软件开发组织来说,从头开始进行安全性保护很容易(并且很危险),可以使用外部、后期周期的全系统测试(例如渗透测试)(我可能将其称为DevTestOpsSec)。当然,此测试非常适合证明应用程序/系统不包含OWASP中列举的任何漏洞。但是,这种黑盒测试并不是实际产生更安全的代码的最有效方法。我们不想依靠黑盒测试来保护我们的软件或发现错误,而是想要使用它来证明该软件是安全的。
因此,如果渗透测试发现漏洞,我们需要问自己为什么,并尝试解决导致该问题的根本原因。这是当我们从“测试安全性”转变为“设计安全性”的时候。为此,您将找到支持OWASP的静态应用程序安全测试(SAST)工具,例如静态代码分析。
不只是DAST和SAST
值得注意的一点是,OWASP Top 10中的A9项目与其余项目完全不同,并且不适合SAST或DAST,因为它是在寻找开源中的已知漏洞,而不是寻找新漏洞。
幸运的是,OWASP为此提供了一个免费的工具OWASP Dependency Check。该工具可识别项目依赖项并检查是否存在任何已知的、公开披露的漏洞,并可用于扫描应用程序及其依赖库以识别已知的易受攻击的组件。
(如果您使用的是Parasoft,我们实际上将OWASP Dependency Check集成到了我们的报告系统中,并使其成为OWASP Top 10仪表板的一部分。这使得通过扫描作为CI的常规部分来轻松处理开源组件中的问题。与SAST一起使用,并将结果与其他OWASP信息一起放入一个统一的仪表板中。通过这种方法,A9可以与前十名集成,而不必是一个单独的正交过程。
静态代码分析工具和技巧
静态分析的好处在于您不需要完成整个应用程序或系统,因此可以在周期的更早阶段开始检查安全问题(向左移动安全测试)。如果您要在开发的后期或即将结束(DevOpsSec)进行安全性保护,则可以在实际编写代码(DevSecOps)之前,甚至在测试开始之前,使用静态分析来推动安全性。
静态分析的丑陋一面是,它以非常嘈杂而著称,例如,当您以为可以发布时,就会产生数百甚至数千个违规。幸运的是,有一些非常好的策略可以解决这个问题。请记住以下几点:
- 直到最后才保存安全测试。开始编码后,立即开始运行静态分析。如果您等待并且仅将其作为CI/CD管道的一部分来运行,那么结果将堆积起来并使您的开发团队不知所措。在桌面上运行以查找问题,然后在CI/CD中运行以简单地验证代码是否正确构建
- 微调您的配置。在代码的上下文中,可能不需要某些静态分析检查器。检查您的应用程序,确定哪些安全风险对您很重要,然后再进行处理。永远不要寻找您不打算解决的问题。
- 代码的年龄很重要。“如果没有损坏,请不要修复”应适用于旧版代码。仅对最旧的代码运行最关键的安全扫描程序。小问题会浪费您的时间,而这些更改会带来新的风险。切勿检查您不打算修复的代码。
- 一切都与风险有关。SAST工具既可以发现实际漏洞,也可以发现潜在漏洞。并非所有发现都具有相同的潜在风险。OWASP通过根据漏洞利用的难易程度,发现漏洞的难易程度以及漏洞的实际影响来定义前十名中每个项目的风险,为您提供了帮助。使用以下有用信息来对SAST结果进行优先级排序和分类:
预防的力量
如果您想真正强化您的应用程序,我想强调一些重要的内容。进行安全性测试非常容易,但是要进行安全性测试则更加困难。幸运的是,静态分析检查器具有不同的风格。一些检查器会查找诸如污染数据之类的典型问题,并尝试找出应用程序中是否存在可能发生数据流的地方。这些是许多SAST工具中最常见的检查器。
但是在静态代码分析中,更大的价值在于执行两个特殊操作的检查器:
- 过去经常与问题相关的模式。尽管这看起来不像是针对漏洞利用的特定堆栈跟踪那样有趣,但仅修复比其本应弱的所有东西比仅修复具有可靠攻击向量的问题要彻底得多。
- 特定类型编码的要求,以确保正常运行。MISRA和JSF等汽车和飞机标准都依靠此技术来确保功能安全。除了标记错误代码之外,还需要良好代码的相同技术将帮助您构建更安全的应用程序。
具有讽刺意味的是,这是安全关键型行业数十年来一直在使用硬件和软件的方法,但是在网络安全方面,我们认为可以将安全性测试到应用程序中,而不必专注于构建安全代码。除早期检测检查程序外,还利用主动静态分析的全部功能来获得最大价值。
总结
如果您从未专注于安全性,那么获得OWASP Top 10并非易事,但这是可以实现的,并且是一个很好的起点。DAST是入门十强的一种简单方法,然后使用SAST将帮助您向左移动安全测试。如果实施得当,SAST甚至可以预防问题,而不仅仅是发现问题,因此,寻找具有检测和预防检查程序的完全符合标准的工具。
了解如何利用OWASP风险评分来帮助确定结果的优先级,并确保您的工具将风险信息与结果一起输出。这将帮助您专注于最重要的方面,这是成功实施OWASP的关键。
使用这些技巧,您应该准备开始消除当今最常见和最危险的Web应用程序安全风险。