过渡到内存安全语言:挑战和注意事项

开放源代码安全基金会 ( OpenSSF )总经理 Omkhar Arasaratnam 讨论了内存安全编程语言的演变及其为应对 C 和 C++ 等语言的局限性而出现的现象。

内存安全问题已存在五十多年,它要求程序员从内存管理任务中抽离出来。

Java、Rust、Python 和 JavaScript 等现代语言通过代替程序员处理内存管理来缓解这些问题,从而允许程序员专注于代码质量,而不必担心与低级内存管理相关的风险。

您能谈谈内存安全编程语言的演变吗?它们是如何应对 C 和 C++ 等语言在内存安全方面的限制的?

对内存安全的担忧已持续了50 多年。内存安全涉及将程序员从复杂的内存管理功能中抽象出来,而这些功能很难安全地执行。

例如,在 C 或 C++ 中,程序员必须分配和释放内存,这可能很难管理。

他们必须跟踪分配的内存量并确保仅使用适当分配的内存。

一旦不再需要该内存,程序员必须安全地处理它。Java、Rust、Python和 JavaScript 等语言可以防止程序员“内存不安全”,因为它们代表程序员处理内存管理的细微差别。

在软件开发中使用内存安全语言的主要优势是什么,特别是在系统编程或内核开发等高风险环境中?

操作系统内核对整个系统具有绝对的权限。这意味着诸如不安全的内存处理等安全问题可能会损害整个系统的安全。

虽然开发人员可以精确使用内存不安全的语言(如 C 或 C++)而不会导致内存安全问题,但历史告诉我们事实并非如此。

微软估计,其产品中 70% 的 CVE 都源于内存安全问题。谷歌进行了类似的研究,发现90% 的 Android CVE可能与内存安全有关。

Go、Python、Rust 和 Java 都是内存安全语言的优秀示例。

不幸的是,并非所有这些语言都可以用于内核开发。

Rust 即将成为 Linux 内核支持的第二种官方语言。

一旦完成,它将允许 Linux 内核开发人员用完全内存安全的语言重写内核的敏感部分。

开发人员和组织在过渡到内存安全语言时面临哪些挑战,特别是在遗留系统中?

当过渡到内存安全语言时,必须考虑几个问题:

1. 开发人员— 在过渡到新语言时,您需要培训现有的开发人员或找到熟悉该语言的开发人员。您可能还需要更改调试和构建系统以支持它。

2. 硬件支持— 像 C 和 C++ 这样的老语言在各种不同的平台上都受到支持,而像 Rust 这样的新语言则受到的支持比较有限。缺乏硬件支持可能会阻碍您过渡到这种新语言。

3. 监管要求——一些安全关键系统具有非常严格的技术或安全要求,由于缺乏保证或认证,可能会阻止切换到新的内存安全语言。

4. 错误— 将旧代码重构为新语言可能会引入错误。在某些情况下,虽然熟练的程序员可能会避免引入新的逻辑错误,但用新语言重写的旧代码可能会无意中表现出不同的行为,从而导致生产中出现意外错误。

从实际角度来看,如何逐步调整或重写 C/C++ 等语言的现有代码库,以利用内存安全语言的优势?

用 Rust 重写代码是一项艰巨的任务。去年 OpenSSF 回应ONCD 信息请求时,我们就意识到了这一挑战。我们认为答案并不是用 Rust 重写所有内容。

我们鼓励社区在开始新项目时考虑使用 Rust 编写代码。

我们还建议将 Rust 用于关键代码路径,例如通常被滥用或被破坏的区域或那些拥有“王冠上的宝石”的区域。

身份验证、授权、加密以及任何需要从网络或用户输入的内容都是不错的起点。

虽然采用内存安全并不能在一夜之间解决所有安全问题,但这是必不可少的第一步。

但即使是最好的程序员在使用并非天生内存安全的语言时也会犯内存安全错误。

通过使用内存安全的语言,程序员可以专注于编写更高质量的代码,而不是危险地与低级内存管理作斗争。

然而,我们必须认识到,不可能一夜之间重写所有内容。

OpenSSF 创建了一个C/C++ 强化指南,以帮助程序员在不显著影响现有代码库的情况下使遗留代码更安全。

根据您的风险承受能力,这是一条短期内风险较小的途径。

重写或重建完成后,还必须考虑部署。

许多关键基础设施工业控制系统不易被企业网络访问,因此重新部署重写的代码可能比重写本身花费的时间更长。

您对内存安全编程语言的未来有何看法?您是否预见到它们会成为特定领域的标准,还是传统语言将永远有一席之地?

在考虑特定行业或领域时,存在一个有趣的矛盾。

您不想急于将关键系统过渡到新语言,但具有讽刺意味的是,这正是其中一些安全属性最有价值的地方。

我们不知道内存安全语言是否会成为特定行业的标准,有些行业采用它们的速度会比较慢,因为它们出于安全或可靠性原因对过渡的要求更为保守。系

统稳定性与变化率之间存在反比关系。

使用内存安全语言开始新项目具有多种好处。

例如,Alpha-Omega 资助了 Rustls 的开发,这是 Prossimo 的一个项目,旨在在 Rust 中实现 TLS 和 QUIC。

通过用内存安全语言实现这些协议,我们可以避免 OpenSSL Heartbleed 漏洞等问题。

教育和社区支持在推动内存安全语言的采用方面发挥了多大作用?您会向寻求转型的开发人员推荐哪些举措或资源?

教育是我们拥有的最佳网络安全防御。许多小学已经开始教授 Python 作为第一门编程语言。

未来,我们希望看到其他内存安全语言(如 Rust)也能在早期引入。

此外,Rust 基金会还提供了一些工具和材料,包括《Rust 编程语言》——一本概述 Rust 的权威书籍。它还在开发培训和认证计划。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/886372.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

八大排序详解

文章目录 目录1. 排序的概念及其运用1.1 排序的概念1.2 排序的运用1.3 常见的排序算法 2. 常见排序算法的实现2.1 插入排序2.1.1 基本思想2.1.2 直接插入排序2.1.3 希尔排序 2.2 选择排序2.2.1 基本思想2.2.2 直接选择排序2.2.3 堆排序 2.3 交换排序2.3.1 基本思想2.3.2 冒泡排…

SSL VPN | Easyconnect下载安装使用 (详尽)

EasyConnect是一款远程连接工具,为用户提供简便、快捷的远程访问和控制解决方案。 目录 下载 安装 使用 卸载 下载 通过链接进入官网技术支持板块 深信服技术支持-简单、高效、自助化服务 (sangfor.com.cn)https://support.sangfor.com.cn/ 选择软件下载 在安…

【C语言】指针篇 | 万字笔记

写在前面 在学习C语言过程,总有一个要点难点离不开,那就是大名鼎鼎的C语言指针,也是应为有指针的存在,使得C语言一直长盛不衰。因此不才把指针所学的所有功力都转换成这个笔记。希望对您有帮助🥰🥰 学习指…

【2025】基于Hadoop短视频流量数据分析与可视化(源码+文档+调试+答疑)

文章目录 前言一、主要技术?二、项目内容1.整体介绍(示范)2.运行截图3.部分代码介绍 总结更多项目 前言 随着我国经济的高速发展与人们生活水平的日益提高,人们对生活质量的追求也多种多样。尤其在人们生活节奏不断加快的当下&am…

unix中的exec族函数介绍

一、前言 本文将介绍unix中exec族函数,包括其作用以及使用方法。当一个进程调用fork函数创建一个新进程后,新进程可以直接执行原本正文段的其他内容,但更多时候,我们在一个进程中调用fork创建新的进程后,希望新进程能…

杭州电子科技大学《2019年+2023年861自动控制原理真题》 (完整版)

本文内容,全部选自自动化考研联盟的:《杭州电子科技大学861自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2019年真题 2023年真题 Part1:2019年2023年完整版真题 2019年真题 2…

ubuntu 开启root

sudo passwd root#输入以下命令来给root账户设置密码 sudo passwd -u root#启用root账户 su - root#要登录root账户 root 开启远程访问: 小心不要改到这里了:sudo nano /etc/ssh/ssh_config 而是:/etc/ssh/sshd_config sudo nano /etc/ssh…

猫猫cpu的缓存

原题过长,放一下题目大意 题目大意 给你 m m m 个 1 1 1 到 n n n 之间的整数,你要找到若干个大小为固定的 k k k 的闭区间,使得所有这些数都在你找到的某个区间内。你需要最小化这些区间的并集的大小,并输出此大小。本题里…

基于单片机的两轮直立平衡车的设计

本设计基于单片机设计的两轮自平衡小车,其中机械部分包括车体、车轮、直流电机、锂电池等部件。控制电路板采用STC12C5A60S2作为主控制器,采用6轴姿态传感器MPU6050测量小车倾角,采用TB6612FNG芯片驱动电机。通过模块化编程完成了平衡车系统软…

calibre-web的翻译translations

calibre-web的翻译translations Windows安装calibre-web,Python-CSDN博客文章浏览阅读539次,点赞10次,收藏11次。pip install calibreweb报错:error: Microsoft Visual C 14.0 or greater is required. Get it with "Microso…

机器学习(5):机器学习项目步骤(二)——收集数据与预处理

1. 数据收集与预处理的任务? 为机器学习模型提供好的“燃料” 2. 数据收集与预处理的分步骤? 收集数据-->数据可视化-->数据清洗-->特征工程-->构建特征集和数据集-->拆分数据集、验证集和测试集 3. 数据可视化工作? a. 作用&…

深入理解 C 语言中的内存操作函数:memcpy、memmove、memset 和 memcmp

目录: 前言一、 memcpy 函数二、 memmove 函数三、 memset 函数四、 memcmp 函数总结 前言 在 C 语言中,内存操作函数是非常重要的工具,它们允许我们对内存进行直接操作,从而实现高效的数据处理。本文将深入探讨四个常用的内存操…

DC00022基于ssm高校社团管理系统web社团管理系统java web+MySQL项目web程序设计

1、项目功能演示 DC00022基于ssm高校社团管理系统web社团管理系统java web项目MySQL 2、项目功能描述 社团管理系统分为普通用户、管理员 2.1 普通用户功能 01 系统登录、系统注册 02 系统首页、新闻公告、规章制度、社团活动、互动交流 03 修改密码 04 个人信息修改 05 我的…

Win10鼠标总是频繁自动失去焦点-非常有效-重启之后立竿见影

针对Win10鼠标频繁自动失去焦点的问题,可以尝试以下解决方案: 一、修改注册表(最有效的方法-重启之后立竿见影) 打开注册表编辑器: 按下WindowsR组合键,打开运行窗口。在运行窗口中输入“regedit”&#x…

ECP 集成字段非必填配置

导读 INTRODUCTION 非必填设置:ECP主数据同步的时候,经常遇到一个问题,就是ECP报错,但是这个字段两边的ecp顾问与sf顾问都觉得没实际意思,觉得没有传输的必要性,这个时候我们就可以考虑非必输的字段不必输…

【机器学习】集成学习——提升模型准确度的秘密武器

【机器学习】集成学习——提升模型准确度的秘密武器 1. 引言 集成学习(Ensemble Learning)是一种通过结合多个弱模型来提升整体预测准确性的技术。通过将多个模型的预测结果进行组合,集成学习在复杂任务中展现了极强的泛化能力。本文将探讨…

Redis篇(面试题 - 连环16炮)(持续更新迭代)

目录 (第一炮)一、Redis?常用数据结构? 1. 项目里面到了Redis,为什么选用Redis? 2. Redis 是什么? 3. Redis和关系型数据库的本质区别有哪些? 4. Redis 的线程模型了解吗&#x…

C++ -引用-详解

博客主页:【夜泉_ly】 本文专栏:【C】 欢迎点赞👍收藏⭐关注❤️ C -引用-详解 1.引用基础1.1是什么1.2特点 2.引用的意义3.引用的应用场景3.1作为参数3.2作为返回值传值返回引用返回 4.权限问题5.与指针的区别6.总结 1.引用基础 1.1是什么 …

计算机网络期末复习真题(附真题答案)

前言: 本文是笔者在大三学习计网时整理的笔记,哈理工的期末试题范围基本就在此范畴内,就算真题有所更改,也仅为很基础的更改数值,大多跑不出这些题,本文包含简答和计算等大题,简答的内容也可能…

话术挂断之后是否处理事件

文章目录 前言联系我们解决方案方案一方案二 前言 流程:自动外呼进入机器人话术。问题:在机器人放音时用户挂断后,话术还会继续匹配流程,如果匹配上的是放音节点,还会进行放音,那么在数据库表conversation…