研究报告:C语言竟然最不安全!来辩么?

可以说,技术从头到脚“千疮百孔”。我们见识了最底层的硬件错误如英特尔公司“出品的”Spectre 和 Meltdown 漏洞,而往上看,则会发现编程语言漏洞,而且多得“就像那天上的星星”。

研究人员的数据来源是WhiteSource的综合数据库,有点类似NVD数据库。该数据库中包含200多种语言,研究人员主要关注过去10年最常用的7种编程语言的安全性分别是,C、C++、Java、PHP、python、JS、Ruby。

每天晚上20:00我偶尔会开直播给大家分享C/C++游戏编程学习知识和路线方法,我会不定期更新最新的教程和学习方法,大家都是学习C/C++的,或是转行,或是大学生,还有工作中想提升自己能力的前端党,如果你是正在学习C/C++的小伙伴可以加入学习。最后祝所有程序员都能够走上人生巅峰,让代码将梦想照进现实,非常适合新手学习,有不懂的问题可以随时问我,工作不忙的时候希望可以给大家解惑。c/c++学习群:825414254

哪种语言的漏洞总量最多?

结果不出意外,这七大流行语言是 C、Java、JavaScript、Python、Ruby、PHP 和C++。

而漏洞最多的语言是:C,且以绝对优势胜出。在所报告的漏洞中,几乎近50%位于C语言中。

这些开源语言中最常见的漏洞分别是XSS,输入有效性验证,权限、特权和访问控制,信息泄露。

使用自动化工具和赏金计划进行漏洞扫描革新了整个行业,2017年报告的漏洞量大幅增长。

过去两年间虽然漏洞的数量增长了,但是大多数语言中暴露的漏洞的严重程度降低了。

图:各语言漏洞数量占比

就像谷歌 Linux 内核安全工程师 Kees “Case” Cook 最近所说的那样,“C 是一种迷人的汇编语言,它几乎可以算作是机器代码。”但是,“C具有一些令人担忧的未明确行为以及其它一些弱点,最终导致安全缺陷和易受基础设施的情况出现。”

不过 WhiteSource 公司表示,“这并不是说 C 语言的安全性不及其它语言。C语言中存在如此多的开源漏洞的原因是:首先,C语言要比其它语言的使用时间要长,而且编写的代码数量最多;C语言同时是主流基础设施如 OpenSSL和 Linux 内核使用的语言之一。数量之多和集中程度之高是C语言中出现最多开源漏洞的原因。”

图:各语言漏洞数量对比情况

他们说的倒也有道理。但是,在使用C语言并和它斗智斗勇的十年期间,在 C 语言中搞出糟糕的安全问题也过于容易。例如,C语言中含有大量不确定行为,导致各种恶意之徒趁虚而入。

哪种语言的高危漏洞数量最多?

不过,C++ 在过去的五年中“喜得”最多数量的高危漏洞。长期折磨C语言的缓冲区错误现在也开始频繁现身于 C++ 中。

图:各语言高危漏洞数量

话虽如此,可能是最流行的语言 JavaScript也是唯一一个在过去十年间漏洞数量在持续增长的语言。

报告指出,在嘲笑 JavaScript 之前,得首先说明一点,这些结果容易引起误解。JavaScript语言中最常见的 CWE 漏洞是很少被使用、维护或支持的 JavaScript 包中的路径遍历漏洞和加密问题。那么,为什么出现的是这两种漏洞问题呢?因为发现漏洞的是新型的自动化程序。

另外一种在安全漏洞方面“颇有建树”的是 Python。对,就是经常被群嘲的 Python。

研究人员通过分析不同语言的CWE漏洞数量来分析编程语言的安全性。研究人员发现每种语言的top 3的CWE漏洞中,XSS和输入有效性验证漏洞占了70%。

七大语言的几种“最”

C 语言可以说是当之无愧的漏洞老大。十年来漏洞总量都稳居霸主宝座。不过,C语言的低危漏洞数量也相对较低,2018年仅为7%。它也是唯一一种含有严重程度高的内存损坏漏洞的语言。

Java 是唯一一种在去年开源漏洞数量见涨的语言。令人吃惊的是,2018年Java 的漏洞数量几乎是2017年的两倍。Java 语言的中危漏洞占比稳定在75%,不过在过去两年中其高危漏洞数量也在增加。

JavaScript 是当前的“流量小生”,也是过去十年来唯一一种漏洞总量持续上涨的语言。2017年的漏洞总量是2016年的16倍。尽管 JS 的漏洞数量在2018年上涨了50%,但高危漏洞所占比例和2017年持平。

PHP 的漏洞总量排名第二,也是唯一一种 SQL 漏洞在所含漏洞中排名如此靠前(第二)的语言。虽然PHP的热度有所下降,但它在2017的漏洞数量猛增。

Python 与众不同的一点是,2015年的漏洞总量达到峰值,之后逐年下降。而其它语言则是2017年见涨,2018年下降。按年份来看,Python 在2017年以前的高危漏洞数量相对较少。

C++ 和 C 遭受的 CWE 漏洞类型一致。由于这两种语言在 web 应用中的流行度不高,因此它们也较少遭受其它语言饱受的 CWE 漏洞折磨。

Ruby 的漏洞总量垫底。十年来,Ruby 中所含的开源漏洞像过山车一样高低起伏不定,不过2015年以来它的流行度也一再放缓。

C 最坏 Python 最好?

但是,C语言真的是最糟糕的语言、Python 是最佳语言么?WhiteSource 公司认为做出这样的结论太过武断:“虽然长期以来,我使用的语言要比你的安全这种说法颇有戏谑成分,但找到答案对你创建最具创新性或最安全的软件很可能并没有什么用。”

正确的做法是,应当“保持对已知开源漏洞的警觉,并了解你和团队所使用语言的优劣势。”

一句话结尾:安全无关语言,使用方式才至关重要。

猜你喜欢

转载自blog.csdn.net/weixin_41986518/article/details/89608839