OWASP 主动控制2018

OWASP主动控制 |OWASP基金会

这是怎麽?

OWASP十大主动控制描述了每个架构师和开发人员绝对应该100%包含在每个项目中的最重要的控制和控制类别。

OWASP 10 年 2018 大主动控制

软件开发人员是任何应用程序的基础。为了实现安全的软件,开发人员必须得到他们为其编写代码的组织的支持和帮助。当软件开发人员编写构成 Web 应用程序的代码时,他们需要接受和实践各种安全编码技术。Web 应用程序的所有层、用户界面、业务逻辑、控制器、数据库代码等,都需要在开发时考虑到安全性。这可能是一项非常困难的任务,开发人员经常为失败做好准备。大多数开发人员在学校没有学习过安全编码或加密。开发人员用于构建 Web 应用程序的语言和框架通常缺乏关键的核心控制,或者在某种程度上默认不安全。当组织为开发人员提供规范性要求来指导他们走上安全软件的道路时,这种情况也非常罕见。即使他们这样做了,需求和设计中也可能存在固有的安全漏洞。在软件方面,开发人员往往会输掉安全游戏。

OWASP 2018年十大主动控制是每个软件开发项目中应包含的安全技术列表。它们按重要性顺序排序,其中控制编号 1 是最重要的。本文档由开发人员为开发人员编写,以帮助那些新手进行安全开发。

  • C1:定义安全要求
  • C2:利用安全框架和库
  • C3:安全数据库访问
  • C4:编码和转义数据
  • C5:验证所有输入
  • C6:实现数字身份
  • C7:强制实施访问控制
  • C8:随时随地保护数据
  • C9:实施安全日志记录和监视
  • C10:处理所有错误和异常

有关详细信息,请参阅右侧选项卡中的完整文档。

介绍

使用扩展文档中信息的广泛项目演示文稿。

C1:定义安全要求

描述

安全要求是对所需安全功能的声明,用于确保满足软件的许多不同安全属性之一。安全要求源自行业标准、适用法律和过去漏洞的历史记录。安全要求定义新功能或现有功能的附加功能,以解决特定的安全问题或消除潜在的漏洞。

安全要求为应用程序提供了经过审查的安全功能的基础。标准安全要求允许开发人员重用安全控制和最佳实践的定义,而不是为每个应用程序创建自定义安全方法。这些经过审查的安全要求为过去发生的安全问题提供了解决方案。存在防止重复过去的安全故障的要求。

OWASP ASVS的

OWASP 应用程序安全验证标准 (ASVS) 是可用安全要求和验证标准的目录。OWASP ASVS 可以成为开发团队详细安全要求的来源。

安全要求根据共享的高阶安全函数分类为不同的存储桶。例如,ASVS 包含身份验证、访问控制、错误处理/日志记录和 Web 服务等类别。每个类别都包含一系列要求,这些要求代表了该类别作为可验证声明起草的最佳实践。

通过用户故事和误用案例来增强需求

ASVS 要求是基本的可验证语句,可以通过用户情景和误用案例进行扩展。用户情景或误用案例的优点是,它将应用程序与用户或攻击者对系统执行的操作完全联系起来,而不是描述系统向用户提供的内容。

下面是扩展 ASVS 3.0.1 要求的示例。在 ASVS 3.0.1 的“身份验证验证要求”部分中,要求 2.19 侧重于默认密码。

2.19 Verify there are no default passwords in use for the application framework 
    or any components used by the application (such as "admin/password").

此要求既包含验证是否存在默认密码的操作,还包含不应在应用程序中使用默认密码的指导。

用户情景侧重于系统的用户、管理员或攻击者的角度,并根据用户希望系统为他们执行的操作来描述功能。用户故事采用“作为用户,我可以执行 x、y 和 z”的形式。

As a user, I can enter my username and password to gain access to the application.
As a user, I can enter a long password that has a maximum of 1023 characters.

当故事集中在攻击者及其行为上时,它被称为误用案例。

As an attacker, I can enter in a default username and password to gain access.

此故事包含与 ASVS 的传统要求相同的消息,并提供了额外的用户或攻击者详细信息,以帮助使要求更具可测试性。

实现

成功使用安全要求包括四个步骤。该过程包括发现/选择、记录、实施,然后确认在应用程序中正确实现新的安全特性和功能。

发现和选择

该过程从发现和选择安全要求开始。在此阶段,开发人员需要了解标准源(如 ASVS)的安全要求,并选择要为给定版本的应用程序包含哪些要求。发现和选择的重点是为此版本或冲刺 (sprint) 选择可管理数量的安全要求,然后继续迭代每个冲刺 (sprint),随着时间的推移添加更多安全功能。

调查和记录

在调查和记录文档期间,开发人员会根据一组新的安全要求审查现有应用程序,以确定应用程序当前是否满足要求,或者是否需要进行一些开发。这项调查的最终结果是审查结果的记录。

实现

在确定开发需求后,开发人员现在必须以某种方式修改应用程序以添加新功能或消除不安全的选项。在此阶段,开发人员首先确定满足需求所需的设计,然后完成代码更改以满足需求。

测试

应创建测试用例以确认新功能的存在或反驳以前不安全的选项的存在。

防止的漏洞

安全要求定义应用程序的安全功能。从应用程序生命周期的开始就内置更好的安全性,可以防止多种类型的漏洞。

C2:利用安全框架和库

描述

具有嵌入式安全性的安全编码库和软件框架可帮助软件开发人员防范与安全相关的设计和实现缺陷。从头开始编写应用程序的开发人员可能没有足够的知识、时间或预算来正确实现或维护安全功能。利用安全框架有助于更高效、更准确地实现安全目标。

实施最佳实践

将第三方库或框架合并到软件中时,请务必考虑以下最佳实践:

  1. 使用来自受信任来源的库和框架,这些库和框架被许多应用程序积极维护和广泛使用。
  2. 创建和维护所有第三方库的清单目录。
  3. 主动使库和组件保持最新状态。使用 OWASP 依赖项检查和 Retire.JS 等工具来识别项目依赖项,并检查所有第三方代码是否存在任何已知的、公开披露的漏洞。
  4. 通过封装库来减少攻击面,并仅将所需的行为公开到软件中。

防止的漏洞

安全框架和库有助于防止各种 Web 应用程序漏洞。按照 [使用具有已知漏洞的组件:2017 年十大风险] 中所述,使这些框架和库保持最新状态至关重要。

工具

  • OWASP 依赖关系检查 - 识别项目依赖关系并检查公开披露的漏洞
  • 停用 JavaScript 库的 .JS 扫描程序

C3:安全数据库访问​​​​​​​

描述

本节介绍对所有数据存储的安全访问,包括关系数据库和 NoSQL 数据库。需要考虑的一些方面:

  1. 安全查询
  2. 安全配置
  3. 安全身份验证
  4. 安全通信

安全查询

当不受信任的用户输入以不安全的方式(通常通过基本字符串连接)动态添加到 SQL 查询中时,就会发生 SQL 注入。SQL注入是最危险的应用程序安全风险之一。SQL 注入很容易被利用,并可能导致整个数据库被盗、擦除或修改。该应用程序甚至可以用于对托管数据库的操作系统运行危险的命令,从而让攻击者在您的网络上站稳脚跟。

为了缓解 SQL 注入,应防止不受信任的输入被解释为 SQL 命令的一部分。最好的方法是使用称为“查询参数化”的编程技术。这种防御应该应用于 SQL、OQL 以及存储过程构造。

ASP、ColdFusion、C#、Delphi、.NET、Go、Java、Perl、PHP、PL/SQL、PostgreSQL、Python、R、Ruby 和 Scheme 中的查询参数化示例列表可以在 http://bobby-tables.com 和 OWASP 查询参数化备忘单中找到。

查询参数化注意事项

数据库查询中的某些位置不可参数化。对于每个数据库供应商,这些位置都不同。在遇到无法绑定到参数化查询的数据库查询参数时,请务必执行非常小心的完全匹配验证或手动转义。此外,虽然使用参数化查询在很大程度上对性能有积极影响,但特定数据库实现中的某些参数化查询将对性能产生负面影响。请务必测试查询的性能;特别是具有广泛的类似子句或文本搜索功能的复杂查询。

安全配置

遗憾的是,数据库管理系统并不总是以“默认安全”配置提供。必须注意确保启用并正确配置数据库管理系统 (DBMS) 和托管平台提供的安全控制。有适用于大多数常见 DBMS 的标准、指南和基准。

有关提供安全配置的快速指南,请参阅数据库备忘单。

安全身份验证

对数据库的所有访问都应经过正确身份验证。对 DBMS 的身份验证应以安全的方式完成。身份验证应仅通过安全通道进行。凭据必须得到妥善保护并可供使用。

有关提供安全身份验证过程的快速指南,请参阅数据库备忘单。

你可能感兴趣的:(安全测试技术和标准,安全)