互联网可能会由于C和C ++之类的语言导致漏洞而出现严重问题

哈Ha! 我向您介绍了文章“ Internet的sérieux问题的语言,因为C和C ++有利于失败的语言 ”(法文)的翻译。

但是很少有开发者关心这一点。


一个错误会影响iPhone,另一个错误会影响Windows,而另一个错误会影响在Linux上运行的服务器。 乍一看,这些错误与无关的平台无关,因为它们涉及不同的平台:Android,iOS,macOS,Windows,Linux。 但是,实际上,一切都不同,根据Mozilla的软件安全工程师Alex Gaynor的说法,他以前曾在USDS(美国数字服务)工作。

[1]
更多详细信息-https://www.usds.gov ,以下为 翻译者。

在第三次最弱的链接期间,这是由主板副组织的年度活动,


在未来关于计算机黑客和网络安全的问题上,Alex Gaynor提出了一个严重的问题,他认为这可能威胁到Internet,但自相矛盾的是,这使开发人员完全无动于衷。

Gaynor解释说,存在前面提到的三个错误,因为它们在不同平台上影响的软件是使用编程语言编写的,这种语言不易引起诸如“内存不安全”之类的错误,从而允许访问未分配的内存区域。

[3]
最有可能的意思是,允许引用由5个元素组成的数组的第6个元素,尽管在其他更“安全”的编程语言中,至少会显示一条错误消息。

访问内存时,此类错误可能导致错误和安全漏洞。

通过允许发生诸如“内存不安全”之类的错误,多年来,诸如C和C ++之类的编程语言可以传播几乎无休止的关键安全漏洞流。 这些漏洞的一个示例是:

  • 类型不匹配
  • 缓冲区溢出
  • 整数变量溢出
  • 释放漏洞后使用

如果一段代码没有检查传递给它的对象的类型并盲目使用它,则可能发生类型不匹配。 这种情况可能很危险。 此外,伴随类型不匹配,错误的函数指针或错误的数据与错误的代码部分相关联,这在某些情况下可能导致其执行。

缓冲区溢出(或英文中的“缓冲区溢出”)是一个严重的安全漏洞,当用户输入将包含大小不足的字符数组的字符串时,就会发生此漏洞。 这导致数据被写入为该阵列分配的存储区域之外。 以HeartBleed为例,它影响了Internet上17%的安全服务器,它是一个缓冲区溢出漏洞,允许在列表结尾后读取60 KB,包括密码和其他用户数据。

整数溢出是很难检测到的漏洞,它利用数字不能超过某个值这一事实,该值取决于用于表示它们的位数和编码方法。

“释放后使用”漏洞通常在指针(或内存块)已释放时使用指针或内存中的数据时发生。

这些漏洞一起是流行软件(例如Firefox,Chrome,Windows,Android或iOS)中最常见的漏洞。 Gaynor已经计算出至少400个状态:“我已经对这些项目的安全性进行了一年以上的监视,并且在这些产品的几乎所有版本中,一半以上的漏洞是内存不安全的。 更加令人震惊的是,严重和严重漏洞几乎总是具有这种类型的。”

尽管它们支持的软件存在很大的安全风险,但是开发人员仍在使用内存不安全的友好编程语言(例如C或C ++),而可以考虑使用成熟的替代方法(例如Rust和Swift)。因为“内存安全”的语言很少见。

这可能是由于这样的事实,即对于新项目,开发人员通常会根据其团队知道的语言,性能以及可以从中选择的库系统选择编程语言。 盖诺说,在制定决策时,几乎从来没有考虑过与此相关的安全组件,或者至少考虑得不够。

另外,大多数软件项目,即使是最重要的Internet安全项目,也不是新鲜事物。 它们是十年前发射的,如果不是更多的话。 例如,Linux,OpenSSL和Apache Web服务器已有20多年的历史了。 对于像这样的大型项目,用新语言重写所有代码是不可行的。 它们必须逐步进行转换,这意味着必须以两种不同的语言而不是一种语言来编写和保存项目。 这也意味着需要组建一支庞大的团队,这需要大量的时间并且需要更多的资金。

最后,最大的问题是许多开发人员根本不认为该问题存在。 他们认为问题不在于诸如C或C ++之类的语言助长了漏洞,而是在于其他编写有错误代码的程序员。 他们认为这些所谓的“内存不安全友好”语言没有问题,因为没有完美的代码,只是人们不知道如何使用它们。

您如何看待?



我注意到,也欢迎对翻译提出批评。

感谢您的关注!

Source: https://habr.com/ru/post/zh-CN432502/


All Articles