摘要:本页面描述了安全标准,其CAST支持通过标准的CAST AIP质量模型。
简介
CAST AIP支持广泛的安全规则,这些规则由领先的行业研究和安全漏洞标准建立。这些安全规则源自下列既定标准:
- Open Web Application Security Project (OWASP) Top 10——OWASP Top 10列出了10个最关键的Web应用安全风险。
- Common Weakness Enumeration (CWE) Top 25 —— CWE/SANS Top 25 Most Dangerous Software Errors是最广泛和最关键的错误,这些错误可能导致软件中的严重漏洞。
- Payment Card Industry Data Security Standard (PCI DSS)——PCI DSS为开发健壮的支付卡数据安全流程提供了一个可操作的框架。
- Consortium for IT Software Quality (CISQ) / OMG Automated Source Code Security Measure Standard ——MITRE参与了CISQ方案,为其指定了一个自动化的源代码安全度量标准,该标准源自CWE Top 25,主要关注可自动化的度量。另请参考MITRE与CISQ的工作沟通:
下表解释了这些安全标准的CAST AIP覆盖情况:
CAST AIP coverage for OWASP Top 10 - 2013
有关每个漏洞的更多细节,您可以查看OWASP 网站。
OWASP 漏洞 | 说明 | CAST AIP 覆盖 |
---|---|---|
A1-注入 | 注入攻击漏洞,例如SQL注入、OS命令注入、LDAP注入等,会在攻击者向应用服务端发送以分隔符作为命令或者查询的一部分时就会发生。攻击者的有害数据中分隔符造成的陷阱,会执行攻击构造的未预知的命令或者访问未授权数据。 | 在CAST AIP中预先构建的规则——检查CAST AIP OWASP 覆盖 - 细节说明获得规则列表及更多细节。 |
A2-错误的认证和会话管理 | 与身份认证和会话管理相关的应用功能往往得不到正确的实现,这就导致了攻击者破坏密码、密匙、会话令牌或攻击其它的漏洞去冒充其它用户的身份。 | 这将在未来的版本中发布。 |
A3-跨站脚本(XSS) | 当应用收到含有不可信的数据,在没有进行适当的验证和转义的情况下,就将它发送给一个网页浏览器,这就会产生跨站脚本攻击(简称XSS)。XSS允许攻击者在受害者的浏览器上执行脚本,从而劫持用户会话、危害网站、或者将用户转向至恶意网站。 | 在CAST AIP中预先构建的规则——检查CAST AIP OWASP 覆盖 - 细节说明获得规则列表及更多细节。 |
A4-不安全的直接对象引用 | 当开发人员暴露一个对内部实现对象的引用时,例如,一个文件、目录或者数据库密匙,就会产生一个不安全的直接对象引用。在没有访问控制检测或其他保护时,攻击者会操控这些引用去访问未授权数据。 | 正如OWASP文档中描述的,使用源代码分析无法检查这些漏洞。 |
A5-安全错误配置 | 好的安全需要对应用、框架、应用程序服务器、web服务器、数据库服务器和平台定义和执行安全配置。由于许多设置的默认值并不是安全的,因此必须定义、实施和维护这些设置。这包含了对所有的软件保持及时的更新,包括所有应用的库文件。 | 应用安全策略应该由应用架构级别的领域专家进行评审,以确保遵循最佳实践。 CAST支持应用/安全架构师,提供有关应用结构的信息,允许使用架构检查器定义自定义规则,并在后续应用开发中跟踪和控制这些规则。 |
A6-敏感数据泄露 | 许多Web应用没有正确保护敏感数据,如信用卡,税务ID和身份验证凭据。攻击者可能会窃取或篡改这些弱保护的数据以进行信用卡诈骗、身份窃取,或其他犯罪。敏感数据值需额外的保护,比如在存放或在传输过程中的加密,以及在与浏览器交换时进行特殊的预防措施。 | 敏感的密码程序应该由应用架构级别的领域专家进行评审,以确保遵循最佳实践。 CAST支持应用/安全架构师,提供有关应用结构的信息,允许使用架构检查器定义自定义规则,并在后续应用开发中跟踪和控制这些规则。 |
A7-功能级访问控制缺失 | 大多数Web应用在功能在UI中可见,验证功能级别的访问权限。但是应用需要在每个功能被访问时在服务器端执行相同的访问控制检查。如果请求没有被验证,攻击者能够伪造请求以在未经适当授权时访问功能。 | AIP目前能够检查访问控制系统是否适合某些表示框架,比如Struts。 |
A8-伪造跨站请求(CSRF) | 一个跨站请求伪造攻击迫使登录用户的浏览器将伪造的HTTP请求,包括该用户的会话cookie和其它认证信息,发送到一个存在漏洞的web应用。这就允许了攻击者迫使用户浏览器向存在漏洞的应用发送请求,而这些请求会被应用认为是用户的合法请求。 | 在CAST AIP中预先构建的规则——检查CAST AIP OWASP 覆盖 - 细节说明获得规则列表及更多细节。 |
A9-使用具有已知漏洞的组件 | 组件,比如:库文件、框架和其它软件模块,几乎总是以全部的权限运行。如果一个带有漏洞的组件被利用,这种攻击可以造成更为严重的数据丢失或服务器接管。应用使用带有已知漏洞的组件会破坏应用防御系统,并使一系列可能的攻击和影响成为可能。 | 一个项目所使用第三方(库、框架和工具)的完整清单应该准备就绪。版本应该保持最新,并且应该监视当前版本,以发现安全缺陷。 使用静态分析不可能发现这些漏洞。CAST与SCA领域的供应商集成,这些供应商跟踪已知的漏洞,并将其与CAST AIP结果一起显示。 |
A10-未验证的重定向和转发 | Web应用经常将用户重定向和转发到其他网页和网站,并且利用不可信的数据去判定目的页面。如果没有得到适当验证,攻击者可以重定向受害用户到钓鱼软件或恶意网站,或者使用转发去访问未授权的页面。 | 正如OWASP文档中描述的,使用源代码分析无法检查这些漏洞。 |
CAST AIP coverage for CWE Top 25
所有类别、规则和相关描述都引用来自CWE/SANS和CWE/SANS前25个最危险的软件错误。
组件之间不安全的交互
这些弱点与在独立组件、模块、程序、进程、线程或系统之间发送和接收数据的不安全方式有关。
等级 | CWE ID | 名称 | 建议/缓解/评论 | CAST AIP覆盖 |
---|---|---|---|---|
[1] | CWE-89 | SQL命令中使用特殊元素的不正确中和(“SQL注入”) | 检查SQL注入 | 在AIP中预先建立的规则——2663——避免SQL注入漏洞 |
[2] | CWE-78 | 操作系统命令中使用特殊元素的不正确中和(“OS系统命令注入”) | 检查OS命令注入 | 在AIP中预先建立的规则——2661——避免OS命令注入漏洞 |
[4] | CWE-79 | Web页面生成过程中输入的不正确中和(“跨站点脚本编制”) | 检查跨站点脚本 | 在AIP中预先建立的规则——2284——避免跨站点脚本漏洞 |
[9] | CWE-434 | 无限制上传带有危险类型的文件 | 输入验证 | 在CAST AIP 8.0中,我们通过路径操作触发这个规则。插件有以下现有规则——
|
[12] | CWE-352 | 伪造跨站请求(CSRF) | 确保应用没有跨站点脚本问题(CWE-79),因为大多数CSRF防御可以使用攻击者控制的脚本绕过。 | 在AIP中预先建立的规则 ——2284——避免跨站脚本漏洞 |
[22] | CWE-601 | URL重定向到不受信任的站点(“Open Redirect”) | 检查跨站点脚本 | 在AIP中预先建立的规则 ——2284——避免跨站脚本漏洞 |
风险资源管理
这类弱点与软件不能正确管理重要系统资源的创建、使用、传输或销毁有关。
等级 | CWE ID | 名称 | 建议/缓解/评论 | CAST AIP覆盖 |
---|---|---|---|---|
[3] | CWE-120 | 不检查输入大小的缓冲区复制(“经典缓冲区溢出”) | 对任何数字输入执行输入验证,确保它在预期范围内。确保输入同时满足预期范围的最小和最大需求。 | 此规则是通过以下列出的关于内存处理的现有质量规则的组合
|
[13] | CWE-22 | 路径名对受限目录的不适当限制(“路径分析”) | 检查文件路径操作。 | 在AIP中预先建立的规则——2659——避免文件路径操作漏洞 |
[14] | CWE-494 | 下载没有完整性检查的代码 | 检查下载代码的完整性。 | 使用输入验证方法来管理它——
|
[16] | CWE-829 | 包含来自不可信控制域的函数 | 当可接受的对象集有限或已知时,如文件名或url,创建从一组固定输入值(如numericid)到实际文件名或URL的映射,并拒绝所有其它输入。 | 这是通过检查每个internet库的漏洞和维护一个白名单来处理的。通常可以检查HTML代码并解析URL来验证域。 扩展现有的规则2660—避免XPath注入漏洞。 |
[18] | CWE-676 | 使用有潜在危险的函数 | 检查编程最佳实践。 | 在AIP中预先建立的规则
|
[20] | CWE-131 | 缓冲区大小不正确计算 | 对任何数字输入执行输入验证,确保它在预期范围内。确保输入同时满足预期范围的最小和最大需求。 | 这是通过以下列出现有质量规则的组合来处理:
|
[23] | CWE-134 | 不受控制的格式字符串 | 检查编程最佳实践。 | 检查编程最佳实践 在CAST AIP规则中预先建立。扩展以下现有规则——
|
[24] | CWE-190 | 整数溢出或包围 | 对任何数字输入执行输入验证,确保它在预期范围内。确保输入同时满足预期范围的最小和最大需求。 | 这些规则要求在算术中使用DF。这将通过扩展现有的规则2282来处理——避免使用getopt()函数 |
有效防御
这类弱点与防御技术有关,这些技术经常被误用、滥用,或者干脆被忽视。
等级 | CWE ID | 名称 | 建议/缓解/评论 | CAST AIP覆盖 |
---|---|---|---|---|
[5] | CWE-306 | 缺少关键功能的身份验证 | 避免实现自定义身份验证程序,并考虑使用周围框架、操作系统或环境提供的身份验证功能。 | 这一要求是通过使用DF和用户输入安全性以及扩展现有规则来实现的
|
[6] | CWE-862 | 缺少授权 | 用户不能通过简单的请求直接访问该页面来访问任何未经授权的功能或信息。 | 这一要求是通过使用DF和用户输入安全性以及扩展现有规则来实现的
|
[8] | CWE-311 | 丢失敏感数据加密 | 定期确保您没有使用过时的加密。避免使用旧的加密技术,使用MD4、MD5、SHA1、DES和其它曾经被认为强大的算法。 | 检查加密可以处理使用自定义规则,检查已知的加密函数和/或库的使用
|
[10] | CWE-807 | 在安全决策中依赖不可信的输入 | 认为getcookies是不安全的。 | 在AIP中预先建立的规则——2284——避免跨站脚本漏洞 |
[11] | CWE-250 | 使用不必要的特权执行 | 根据场景/使用案例检查是否正确实现了特权。执行扩展的输入验证和规范化,以最小化引入单独漏洞的机会。 | 这更多的与动态分析相关,而不是由CAST AIP直接处理。可以扩展现有的规则来涵盖这一要求的一部分
|
[15] | CWE-863 | 错误的授权 | 认为getcookies是不安全的。 | 在AIP中预先建立的规则——2284——避免跨站脚本漏洞 |
[17] | CWE-732 | 关键资源的权限分配错误 | 路径操作。 | 在AIP中预先建立的规则——2659——避免文件路径操作漏洞 |
[19] | CWE-327 | 使用损坏或有风险的密码算法 | 验证加密算法。 | 这将创建一个认为有风险或破坏功能的黑名单(通过维护众所周知的和加密算法的黑名单来处理)和应用自定义架构规则来检查适当功能的使用。 |
[21] | CWE-307 | 过度验证尝试的不适当限制 | 检查实现登录。 | 这将通过扩展以下现有规则来处理
|
[25] | CWE-759 | Use of a One-Way Hash without a Salt | Checking for programming best practices. Best practice, always use initialises that contain salt for Hash. Instead of calling Hashlib with just one parameter use additional parameters for salt. | 这将通过不包含良好初始化参数的黑名单方法来解决。扩展以下现有规则
|
通过OWASP和CWE识别其它安全漏洞CAST AIP覆盖
等级 | CWE ID | N名称 | 建议/缓解/评论 | CAST AIP覆盖 |
---|---|---|---|---|
CWE-20: | 输入验证不当 | 检查最佳编程实践 | 在AIP中预先建立的规则
| |
CWE-116: | 输出的不正确编码或转义 | 检查最佳编程实践 | 在AIP中预先建立的规则
| |
CWE-90 | LDAP 注入 | 检查LDAP注入 | 在AIP中预先建立的规则——2662——避免LDAP注入漏洞 | |
CWE-91 | XPATH 注入 | 检查XPATH注入 | 在AIP中预先建立的规则——2662——避免XPath注入漏洞 | |
CWE-73: | 文件名称或路径的外部控制 | 检查文件路径操作 | 在AIP中预先建立的规则—— 2659——避免文件路径操作漏洞 | |
CWE-99: | 资源标识符控制不当(“资源注入”) | 检查最佳编程实践 | 在AIP中预先建立的规则—— 2659——避免文件路径操作漏洞 | |
CWE-117: | 不正确的日志输出中和 | 检查日志伪造 | 在AIP中预先建立的规则——2141——避免伪造日志漏洞 | |
CWE-252: | 该软件不检查方法或函数的返回值,这可以防止它检测到意外状态和条件。 | 检查函数的返回值通常就足够了,但是要注意并发环境中的并行条件(CWE-362)。 | 从CAST AIP 8.0 开始支持 | |
CWE-681: | 当从一种数据类型转换为另一种数据类型时,例如long转换为integer,可以省略数据或以产生意外值的方式转换数据。 | 避免在数值类型之间进行转换。始终检查允许的范围。 | 从CAST AIP 8.0 开始支持 |
PCI DSS的CAST AIP覆盖率
PCI DSS 需求 | CAST AIP覆盖 |
---|---|
6.2 建立一个流程来识别和分配新发现的安全漏洞的风险等级。 | CAST AIP可以在构建阶段或测试阶段之前无缝集成到现有的开发过程中。 CAST AIP还通过结合漏洞的严重程度(由行业标准确定)和特定漏洞作为一个整体呈现给应用的风险(尽管传播风险分析和事务风险分析),自动为漏洞分配等级。 除了识别漏洞之外,CAST AIP还提供了关于如何使用示例代码修复漏洞的详细指导。 |
6.3 根据PCI DSS(例如安全认证和日志记录)以及行业最佳实践开发软件应用(内部和外部,包括基于web应用的管理访问),并在整个软件开发生命周期中集成信息安全。 6.3.2 在发布到产品或客户之前检查自定义代码,以识别任何潜在的代码漏洞。 | CAST AIP开箱即用包括300多个安全最佳实践,涵盖了50多种带有AIP插件的编程语言。此外可以将CAST AIP集成到SDLC中,利用自动化代码分析过程来识别这些漏洞。 CAST AIP还提供了诸如“架构检查器”之类的附加工具来创建特定应用的自定义规则。 |
6.4 对系统组件的所有变更遵循变更控制流程和程序。 | CAST 发现门户,创建整个系统依赖项的自动蓝图,并特别标识添加、修改和删除的代码。这些信息可以加速以下变更控制程序的过程。 |
6.5 根据安全编码准则开发应用,并检查自定义应用代码以识别编码漏洞。遵循最新的行业最佳实践来识别和管理漏洞(即、OWASP指南、SANS CWE Top 25、CERT安全编码等)。必须为这些需求使用当前的最佳实践。 6.5.1 注入缺陷,特别是SQL注入。6.5.2缓冲区溢出 。 6.5.7 跨站点脚本(XSS)。 6.5.9 伪造跨站请求(CSRF)。 | CAST AIP解决了大部分需求。 请参阅OWASP和CWE Top 25的CAST AIP覆盖。 |
6.6 对于面向公众的web应用,通过手动或自动的应用漏洞安全评估工具或方法审查面向公众的web应用,不断处理新的威胁和漏洞,并确保这些应用程序免受已知的攻击。 | CAST AIP提供了最全面的静态分析、自动化应用漏洞安全评估工具。 |
11.2.1 执行季度内部漏洞扫描。 | CAST AIP已配置为定期或系统有任何变更后自动运行。 |
CAST AIP OWASP覆盖——详细描述
所有的规则和相关描述都是从OWASP中引用的。
OWASP 2013 - A1 – Injection Flaws
”注入缺陷,尤其是SQL注入,在web应用中很常见。注入有很多种类型:SQL、LDAP、XPath、XSLT、HTML、XML、OS命令注入等等。当用户提供的数据作为命令或查询的一部分发送给解释器时,就会发生注入。攻击者通过提供精心设计的数据来欺骗解释器执行非预期的命令。”
CAST AI平台集成了一个基于数据流技术的用户输入安全分析器。数据流用户输入安全分析器是嵌入在代码分析器中的一种技术,它使用受污染的变量分析,并通过源代码跟踪输入数据找到一条路径,在此路径中,输入数据被发送到目标服务器,而无需事先进行清理/编码。
用户输入安全分析器直接支持以下类型的注入缺陷,这些注入缺陷被分组到称为“安全编码-输入验证”的技术标准度量中:
- SQL 注入缺陷
- LDAP 注入缺陷
- OS 命令注入缺陷
- XPath 注入缺陷
- 文件路径操作缺陷
用户输入安全分析器可根据具体需要进行自定义交互,为特定类型的缺陷添加特定的处理、输入或目标方法。数据流用户输入安全分析器为管理人员和开发人员提供了精确路径的视图,其中漏洞直接存在于CAST仪表盘中查看调用路径。
除了数据流搜索的质量规则外,CAST AI平台还提供了以下框架规则,这些框架规则也被分组到称为“安全编码-输入验证”的技术标准度量中:
- ASP.NET:始终使用请求变量验证用户输入
- Struts Validator:避免关闭操作映射验证器
- Struts Validator:避免没有验证器的字段形式
- Struts Validator:避免多个具有相同名称的验证形式
- Struts Validator:避免未使用的验证形式
- Struts Validator:避免验证器字段没有字段形式
- Struts Validator:启用Struts验证器插件
- Struts Validator:形式Bean必须扩展验证器类
- Struts Validator:验证器表单validate()方法必须调用super.validate()
对于遵循OWASP建议实现对象关系映射(ORM)库(如Hibernate)的应用,CAST提供了一个特定的规则,检查只有Hibernate用于访问数据库:
- Hibernate:只使用Hibernate API访问数据库
CAST还提供了13条规则来检查Hibernate架构和性能最佳实践是否到位。
OWASP 2013 - A3 – 跨站脚本 (XSS)
”跨站点脚本也就是XSS,实际上是HTML注入的一个子集。XSS是最普遍和最有害的web应用安全问题。当应用接收来自用户的数据并将其发送到web浏览器而没有首先验证或编码该内容时,就会出现XSS缺陷。”
作为一种特殊的注入形式,来自于检查A1注入缺陷的保护措施(参见A1)用于消除XSS威胁的部分解决方案。实际上除了A1保护(验证所有输入数据)之外,OWASP Top Ten文档还建议“对所有输出数据进行适当的编码”。
CAST支持检查是否使用与注入缺陷相同的技术:通过源代码跟踪输入数据对数据流和受污染的变量进行分析,以便找到一个路径,在没有预先处理/编码的情况下在此路径中输入数据返回给用户。用户输入安全分析器直接支持跨站点脚本缺陷,这些缺陷可以在“安全编码-输入验证”技术标准度量中找到。对于A1-注入漏洞,用户可以交互自定义分析以满足特定需求:直接通过GUI为给定类型的瑕疵添加特定的处理、输入或目标方法。XSS结果显示在仪表盘中,仪表盘提供了精确路径视图,其中漏洞直接存在于CAST仪表盘的调用路径视图中。
OWASP 2013 - A8 – 伪造跨站请求 (CSRF)
”CSRF攻击迫使登录受害者的浏览器向脆弱的web应用发送伪造的HTTP请求,包括受害者的会话cookie和任何其它自动包含的身份验证信息。这允许攻击者强制受害者的浏览器生成脆弱的应用,其认为是来自受害者的合法请求。”
大多数CSRF防御可以使用攻击者控制的脚本绕过,因此防止A8的必要步骤是实现适当的跨站点脚本保护。参见上面A3的描述。
OWASP 2007 - A6 – 信息泄漏和错误处理不当
OWASP前10个版本的规则,在最近的版本中没有类似的规则。保存于此以供参考。
“应用可能会无意中泄露有关其配置、内部工作方式的信息,或者通过各种应用问题侵犯隐私。应用还可以通过处理某些操作所需的时间或对不同输入的不同响应,例如显示具有不同错误编号的相同错误文本。Web应用经常通过详细的或调试错误消息泄漏关于其内部状态的信息。通常这些信息可以用来发动甚至自动化更强大的攻击。”
CAST通过使用技术标准度量“编程实践-错误和异常处理”中集成的以下规则,支持对“A6 -信息泄漏和错误处理不当”的保护:
- .NET:避免捕获异常类型的异常
- .NET:避免空捕集块
- .NET:避免最后空块
- .NET:避免抛出异常类型的异常
- ABAP:避免在他人陈述时遗漏
- ABAP:避免在打开SQL或READ语句后返回未检查的代码(SY-SUBRC)
- ABAP:避免在事件中结合使用AT循环AT…WHERE构造
- ASP:使用错误处理页面
- COBOL:避免显示……在控制台
- COBOL:避免使用HANDLE
- COBOL: 避免使用HANDLE条件
- COBOL:避免使用忽略条件
- COBOL:在使用EVALUATE时包含WHEN OTHER子句
- COBOL:访问关系数据库的程序必须包含SQLCA 复本
- Java:避免使用断言捕获块 Avoid catch blocks with assertion
- Java:避免捕获异常类型为Exception、RuntimeException或Throwable的异常
- Java:避免声明抛出异常而不抛出异常
- Java:避免直接继承Java .lang. Throwable中的类
- Java: 避免空的catch块
- Java:避免空的finally块
- Java:避免在switch语句中丢失默认值
- Java:避免在finally块中使用return语句
- Java:避免在没有链接的情况下在catch块中抛出异常
- Java:避免抛出异常类型的异常
- Java:避免使用“Java .lang. error”
- Java:避免使用“Java . system .exit()”
- Java:避免使用'System.err' 和'System.out'试接区外面
- Java:避免使用'System.err'和'System.out'试接区内
- Java:避免在try catch块之外使用'System.printStackTrace()'
- Java:避免在try catch块中使用'System.printStackTrace()'
- JSP:页面应该使用错误处理页面
- PL-SQL:用于异常管理中的其它对象
- T-SQL:避免在不包含错误管理的情况下执行插入、更新或删除操作的函数和程序
- T-SQ:避免存储过程不返回状态值
- VB: 避免在类事件终止中使用“On error Resume Next”。
- VB:使用单一的错误处理方法
CISQ/OMG覆盖CAST AIP
请参阅以下网页: 支持CISQ/OMG自动化源代码测量标准