NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:066965
用户头像

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

关注

评论

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

2021 全球技术领导力峰会 融云布道技术领导力进阶之路

融云 RongCloud

获得业内一致好评!华山版Java性能优化全栈手册“登场”

Java架构追梦

Java 阿里巴巴 架构 性能优化 华山版

Vue-1-初识

Python研究所

签约计划

鸿蒙轻内核M核源码分析:数据结构之任务排序链表

华为云开发者联盟

鸿蒙 数据结构 任务排序链表 双向链表数组 鸿蒙轻内核

博睿数据2021战略发布巡展,开辟IT运维创新路径

博睿数据

博睿数据 数据链DNA 服务可达

工业4.0加速实现“数物相合”,可视化工厂节省时效高达85%

一只数据鲸鱼

人工智能 数据可视化 工业互联网 智慧工厂 智能生产

答应我,别再学Swing框架了好吗?

北游学Java

Java spring swing

🔎【Java源码探索】深入浅出的分析HashMap(JDK8)

洛神灬殇

Java 源码 源码分析 hashmap 5月日更

现在已经卷到需要问三色标记了吗?

艾小仙

活动预告 _ 即构×火山引擎:泛娱乐社交音视频技术实践沙龙

ZEGO即构

我厂与张家港市达成全面战略合作,共推数据中心和城市智能化转型

百度大脑

数据中心 城市智能化

如何评估 Serverless 服务能力?这份报告给出了 40 条标准

Serverless Devs

云计算 云原生 Forrester Wave #Serverless

论证:iOS安全性,为什么需要审核?

37手游iOS技术运营团队

ios SIP Sandbox iOS Developer ios安全

【玩转PDF】贼稳,产品要做一个三方合同签署,我方了!

牧小农

JVM

1小时内被全网疯转 29.8w 次,最终被所有大V协力封杀!

Java架构师迁哥

公安局重点人员研判分析系统解决方案

MySQL事务处理特性的实现原理

华为云开发者联盟

MySQL 数据库 innodb 事务 隔离

用Python在树莓派上播放音乐

IT蜗壳-Tango

5月日更

Bugless 异常监控系统 (iOS端)

37手游iOS技术运营团队

ios iOS Developer 崩溃分析 bugless

ARM和X86云服务器的算力对比

Python研究所

签约计划

面阿里P7,竟问这么简单的题目?

Java架构师迁哥

量化网格策略交易软件,马丁倍投策略机器人

appium 入门参考

37手游iOS技术运营团队

ios 测试 自动化测试 iOS Developer

🍃【SpringCloud基础使用】Nacos与Gateway实现动态路由

洛神灬殇

nacos SpringCloud Gateway 5月日更 自定义配置

编曲新手可以用什么编曲软件?

奈奈的杂社

编曲 编曲宿主 编曲软件

40K成功入职:六年开发终获小米Offer(附面经+面试题+答案详解)

Java架构师迁哥

MeterSphere | 超好用的开源测试平台

Python研究所

签约计划

服务可达,达者为先,产品发布会嘉宾精彩观点分享!

博睿数据

博睿数据 数据链DNA 服务可达

走向机器智能时代:移动机器人的困局与创新

晨山资本

机器人 移动机器人 AMR

中国呼叫中心与卓越客服产业峰会,百度智能客服再提行业创新

百度大脑

解决方案 行业创新

从零开始学习ThingJS之创建App对象

ThingJS数字孪生引擎

可视化 3D可视化 数字孪生

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