写点什么

CWE/SANS 评出 25 种最危险的编程错误

  • 2010-03-31
  • 本文字数:2767 字

    阅读完需:约 9 分钟

一般弱点列举( Common Weakness Enumeration CWE)是由美国国家安全局首先倡议的战略行动,该行动的组织最近发布了《2010 年CWE/SANS 最危险的程序设计错误(PDF)》一文,其中列举了作者认为最严重的25 种代码错误,同时也是软件最容易受到攻击的点。

曾在 InfoQ 中发布过 OWASP Top 10 列表,它所关注的是 web 应用程序的安全风险,而 CWE 的 Top 25 的覆盖范围更广,包括著名的缓冲区溢出缺陷。CWE 还为程序员提供了编写更安全的代码所需要的更详细的内容。

这个列表是 SANS 学院 MITRE 以及“美国和欧洲很多顶级软件安全专家”共同合作的成果。在 CWE 站点上列有 800 多个编程、设计和架构上的错误,CWE 文档首先列举的是针对程序员最重要的 25 项,从而帮助他们编写更安全的代码。同时文档还适用于软件设计师、架构师、甚至 CIO,他们应该了解这些可能出现的弱点,并采取恰当的措施。

根据 CWE 的列表,跨平台脚本攻击(XSS)和 SQL 注入被认为是软件最薄弱的环节,而位于第三位的是缓冲区溢出:

作者并不认为这个列表是放之四海而皆准的,他建议每个组织都应该基于自身的标准来创建自己的列表。文档提出了大量“关注热点”,其中之一是“语言的弱点”:

C/C++ Java PHP Perl CWE 条目 高 一般 高 高 CWE-22 : 不当地将路径名限制为受限的目录(路径穿透) 与语言无关,但是一般是在模拟环境中存在 高 一般 高 高 CWE-78 : 对 OS 命令中使用的特定元素处理不当(操作系统命令注入) 一般 高 高 高 CWE-79 : 网页架构保持失败 (跨平台脚本攻击) 高 高 高 高 CWE-89 : 对 SQL 命令中使用的特定元素处理不当(SQL 注入) 高 CWE-98 : 在 PHP 程序中,对 Include/Require 声明的文件名控制不当(PHP 文件包含漏洞) 从技术上来说这种问题会在大多数解释型语言中发生,但似乎在 PHP 中最为流行 高 有限 有限 有限 CWE-120 : 在没有检测输入大小的情况下就对缓冲区进行复制(经典的缓冲区溢出) 解释器和本地代码通常是使用 C/C++ 创建的,当我们可以使用更高级别的语言对其进行操作时,就很容易受到缓冲区溢出的影响,否则就显得比较“安全”。 高 有限 有限 有限 CWE-129 : 对数组索引验证不当 从技术上来说,这在很多不同的语言中都会发生,但是在 C/C++ 程序中最容易导致安全问题。 高 有限 有限 有限 CWE-131 : 对缓冲区大小计算错误 当更简单的缓冲区溢出情况被排除的时候,这个问题就会出现。解释器和本地代码通常是使用 C/C++ 创建的,当我们可以使用更高级别的语言对其进行操作时,就很容易受到缓冲区溢出的影响,否则就显得比较“安全”。 高 有限 有限 有限 CWE-190 : 整型溢出和环绕 从技术上来说这可能会在多种不同语言中出现,但是在 C/C++ 程序中最容易导致安全问题。 高 高 高 一般 CWE-209 : 通过错误消息透漏信息 这与语言无关,但经常会出现在基于 Web 的环境,或是出现在在外部自动执行错误报告的语言中。 高 高 高 高 CWE-285 : 不当的访问控制(授权) 一般 一般 一般 一般 CWE-306 : 对重要的资源赋权不当 在基于 Web 的环境中比较流行。 高 高 高 高 CWE-311 : 缺少对敏感数据的加密 高 高 高 一般 CWE-327 : 使用被破解或者有风险的加密算法 某些语言中没有内建的加密机制或者已经良好地确立了的库,开发者不得不创建或者集成他们自己的加密算法。 高 高 高 高 CWE-352 : 跨站点伪造请求(CSRF) 这是基于 Web 的问题,与语言无关。 高 高 一般 有限 CWE-362 : 竞争条件 这在所有语言中都是潜在的问题,它支持线程处理或者与操作系统资源交互。 有限 一般 高 有限 CWE-434 : 对危险类型文件的上载不加限制 有限 一般 一般 有限 CWE-494 : 下载代码却不做完整性检查 对于手机应用的代码最为普遍,尽管在任何管理自己的更新的软件中都可能存在。 一般 一般 一般 一般 CWE-601 : 重定向到不受信任站点的 URL(开放重定向) 这是基于 Web 的问题,与语言无关。很多 web 应用程序都不会使用重定向功能。 高 高 高 高 CWE-732 : 对重要的资源赋权不当 高 有限 高 高 CWE-754 : 对非正常或异常的条件检查不当 对于异常处理会强迫检查的语言,不容易出现此类问题。 高 一般 一般 高 CWE-770 : 分配资源,却不做限制和调节 对于内建资源管理的环境,不同意出现此类问题。 一般 一般 一般 一般 CWE-798 : 使用硬编码的证书 高 CWE-805 : 使用错误的长度值访问缓冲区 解释器和本地代码通常是使用 C/C++ 创建的,当我们可以使用更高级别的语言对其进行操作时,就很容易受到缓冲区溢出的影响,否则就是“安全的”代码。 高 高 高 高 CWE-807 : 在安全决策中信赖不被信任的输入 与语言无关,但在 web 应用中非常普遍。

对于每个弱点,作者都提供了大量信息,包括:排名,得分摘要,防止和缓解措施、相关的攻击模式、攻击频率、是否易于检测、修正成本等等。文档很大的一部分集中于对每个弱点细节的描述,包括技术细节、代码示例以及在架构、设计、实现或者操作级别上可以采取的预防措施。例如,对于列表中第一位的弱点,作者提供的信息摘录如下:

网页架构保持失败(跨站点脚本攻击)——在用户可控的输入被放在输出(这些输出会被用作为其他用户服务的网页)中之前,软件没有对其进行充分地验证、过滤、替换和编码。

弱点流行程度结果 绕过安全措施执行代码 矫正成本检测难易度攻击频率 经常 攻击者了解程度详细的技术细节包括三种主要的跨站点脚本攻击(XSS):反射 XSS(或被称为非持续的)、存储 XSS(或被称为持续的)以及基于 DOM 的 XSS。

下面是 JSP 的代码样例

<% String eid = request.getParameter(“eid”); %> …

Employee ID: <%= eid %>

检测方法,类似于自动静态分析和黑盒检测。

针对每个弱点,作者都列举了多种防止措施,如下所示:

你要了解你的数据会被用于何种环境,以及应该以何种方式对其进行编码。当在不同的组件之间传送数据的时候,或者生成可以同时包含多种编码的输出时尤为重要,比方说,web 页面或者由多个部分组成的邮件信息。你需要研究所有预期的通信协议以及数据表现方式来决定所需要的编码策略。 对于所有将被输出到另一 web 页面的数据,特别是所有从外部输入接收的数据来说,要在所有非字母数字的字符上使用编码。

相同输出文档的部分可能需要不同的编码格式,那会根据输出是否位于下列位置而不同:

HTML 体

元素属性(像 src=“XYZ”)

网址

JavaScript 脚本部分

层叠样式表(CSS)和样式属性

等等。注意 HTML 实体编码仅适用于 HTML 体。

你可以查阅 XSS 防骗部分(REF-16)来获取更多关于编码类型以及所需要的换码的细节。

2010 CWE/SANS 最危险的编程错误文档还描述了选择最危险的 25 项弱点所使用的标准,与 2009 年生成的相同列表的比较,与 OWASP 最危险的十项错误 2010 RC1 的比较,此外还有十项 web 应用中最危险的安全弱点。 查看英文原文: CWE/SANS Top 25 Programming Errors

2010-03-31 07:067153
用户头像

发布了 340 篇内容, 共 129.7 次阅读, 收获喜欢 13 次。

关注

评论

发布
暂无评论
发现更多内容

走进 Tokio 的异步世界

lipi

rust 异步 tokio

LeetCode 数据库刷题 - 596. 超过5名学生的课

小马哥

七日更 二月春节不断更

为您收录的操作系统系列 - 进程管理(加餐)

鲁米

线程 进程 同步 生产者与消费者

Elasticsearch 分词器

escray

elastic 七日更 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

12周架构

FreeOcean

hadoop mapreduce YARN

手摸手Go 深入剖析sync.Pool

Leo叔叔

Go Concurrency Patterns sync.pool Go 语言

千行百业中的我们,数字山河间的中国速度

脑极体

这段时间学习机器学习的感受

Nydia

8. ㊙ Python 集合三板斧,滚雪球学 Python

梦想橡皮擦

Python 2月春节不断更 python入门

【LeetCode】找到所有数组中消失的数字Java题解

Albert

算法 LeetCode 2月春节不断更

Ray 1.0 架构解读

lipi

分布式计算 Apache Arrow ray

微信限量纪念版code封面来啦,速看领取方式

孙叫兽

视频号 2月春节不断更 孙叫兽 微信红包封面 纪念版

定投,积沙成塔的财富增长方式

boshi

理财 七日更

聊聊金钱

熊斌

2月春节不断更

备战春招/秋招,开源社区系统 Echo,基于目前主流 Java Web 技术栈,并提供详细的开发文档和配套教程

飞天小牛肉

Java 开源 后端 springboot 2月春节不断更

翻译:《实用的Python编程》01_02_Hello_world

codists

Python

职场心得

时间是一个人最好的证明

职场

【STM32】5分钟了解STM32的串口通信

AXYZdong

硬件 stm32 2月春节不断更

日记 2021年2月12日(周五)

Changing Lin

2月春节不断更

Elasticsearch query string 分词

escray

elastic 七日更 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

第四周笔记

Ashley.

7. ✎会查新华字典不?会。Python字典已经掌握了

梦想橡皮擦

Python 爬虫 2月春节不断更 python入门

GitHub 上的优质 Linux 开源项目,真滴牛逼!

JackTian

GitHub Linux 开源 运维工程师 2月春节不断更

【LeetCode】杨辉三角Java题解

Albert

算法 LeetCode 2月春节不断更

Python优化机制:常量折叠

Python猫

Python

并发编程系列:阻塞队列的实现原理

程序员架构进阶

jdk 阻塞队列 七日更 28天写作 2月春节不断更

前端冲刺必备指南-this/call/apply/bind(万字长文)

我是哪吒

学习 程序员 面试 大前端 2月春节不断更

写一个用例(第四周)

mas

程序员成长第六篇:如何选择公司?

石云升

职业发展 2月春节不断更 选择公司

【STM32】stm32f407 + DS18B20 碰出不一样的火花

AXYZdong

硬件 stm32 2月春节不断更

第四周作业

Ashley.

CWE/SANS评出25种最危险的编程错误_Java_Abel Avram_InfoQ精选文章