在编码领域,除了我们用工具去检查问题,是不是能够从开发语言的本质上解决安全问题。
whitehouse 发布了一份关于过去十年来使用最广泛的七大语言中包含的开源安全漏洞状况:
按报告说,
目前有200+的语言,选了流行的:C、Java、JavaScript、Python、Ruby、PHP 和 C++作为分析;
在过去10年里,C占了安全问题的50%
编程语言安全漏洞随着时间的变化。过去的两年,编程语言的安全漏洞都出现了大幅的增加
各种语言的漏洞,可以看到各种语言的常见的漏洞类型是不一样的,当然这个和语言使用的场景有很大的关系。
C 语言安全漏洞:CWE, 缓冲区溢出是C的主要漏洞。
Java 安全漏洞:主要在信息泄露和输入校验
总结:
从这个分析报告来看,语言和适用的业务场景有较强的相关性,这个从语言的漏洞的类型来看,例如C语言因为是对内存的人为管理,存在较多的缓冲区溢出(CWE119)问题;而java则相对在信息泄露(CWE200)上较多;对于输入未校验(CWE20),则普遍存在各种语言中。
所以在报告的最后结论是 :In the end, security is not about the languages, but how you use them. (安全与语言无关,在于你怎么使用)。
但从个人观点来看,C 语言未提供对内存的自动管理,是造成很多缓冲区溢出的主要原因。
接下来我们再来看另一个来自微软的消息:
A proactive approach to more secure code
这篇博客来自微软安全响应中心。其指出:CVE漏洞中70%都是由于C的内存安全题造成的。
微软也花费了大量的人力投入到解决代码的安全问题。例如:开发人员可以使用大量工具:非常复杂的静态分析工具(需要一两个月才能学习),大规模模糊测试,污点分析和约束求解器。还有指导帮助开发人员采用安全实践:安全开发生命周期,编码指南百科全书,代码审查时间,大量培训和威胁建模指导。我们已经改变了编译器并创建了缓解措施,以保护开发人员免于错误。Visual Studio甚至还有波浪形的红线来突出潜在的缺陷! 这个似乎和我们采取了完全一致的措施去防止安全问题的发生。
于是他们提出了一个思考的问题: 开发人员的核心工作不是担心安全性而是要做功能工作。而不是投入到越来越多的工具,培训和漏洞修复,那么他们不能在一开始就将内存安全问题引入其功能工作中的开发语言呢? 这将有助于功能开发人员和安全工程师以及客户。我们应该努力防止开发人员首先引入缺陷,而不是提供解决缺陷的指导和工具。
他们认为:满足这些要求的最有前途的新系统编程语言之一是最初由Mozilla发明的Rust编程语言。他们会开始一个新的系列关于Rust的讨论。
本文系转载,作者:HW-SD






































苏公安网备 32011402010933号