当前位置: 首页 > news >正文

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

开放源代码安全基金会 ( 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 的权威书籍。它还在开发培训和认证计划。

相关文章:

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

开放源代码安全基金会 ( OpenSSF )总经理 Omkhar Arasaratnam 讨论了内存安全编程语言的演变及其为应对 C 和 C 等语言的局限性而出现的现象。 内存安全问题已存在五十多年,它要求程序员从内存管理任务中抽离出来。 Java、Rust、Python 和 JavaScript 等现代语言通…...

在Pycharm中安装Cv2

安装OpenCV: 在Terminal中,输入以下pip命令来安装OpenCV: pip install opencv-python pip install opencv-contrib-python 如果下载速度较慢,可以考虑使用国内的pip镜像源,如清华大学源: pip install openc…...

减少重复的请求之promise缓存池(构造器版) —— 缓存promise,多次promise等待并返回第一个promise的结果

减少重复的请求之promise缓存池 —— 缓存promise,多次promise等待并返回第一个promise的结果 背景简介 当一个业务组件初始化调用了接口,统一个页面多吃使用同一个组件,将会请求大量重复的接口 如果将promise当作一个普通的对象&#xff0…...

cdq+bitset处理高维偏序

高维偏序 CDQ分治 假设处理的区间为 [ l , r ] [l,r] [l,r] ,CDQ分治的过程: 如果 l ≥ r l\geq r l≥r ,返回。设区间中点为 m i d mid mid ,递归处理 [ l , m i d ] [l,mid] [l,mid] 和 [ m i d 1 , r ] [mid1,r] [mid…...

敏捷开发和传统开发,你更适合哪种?

时间:2024年 10月 03日 作者:小蒋聊技术 邮箱:wei_wei10163.com 微信:wei_wei10 音频:喜马拉雅 大家好,欢迎来到“小蒋聊技术”,我是小蒋!今天我们来聊聊两个开发模式的“对决”…...

python之with

with上下文管理是什么呢? 一般都是使用系统提供的一些with语句,列如我要去读取一些数据进行分析,就可以使用with open去读取某些数据,或者我要把一些图片给他保存到某些地方,可以用with给他写入。 上下午管理器with是…...

vue3 升级实战笔记

最近要将公司项目的移动端进行 vue3 的升级工作,就顺便记录下升级过程。 项目迁移的思路 我的想法是最小改动原则。 从 vue2.x 升级到 vue3,且使用 vue3 的 选项式 API。构建工具要从 vue-cli(webpack)升级到 vite。路由需要升级到…...

利用函数模块化代码实操 ← Python

【知识点】 ● 模块化可以使代码易于维护和调试,并且提高代码的重用性。 ● 函数可以用来减少冗余的代码并提高代码的可重用性。函数也可以用来模块化代码并提高程序的质量。 ● 在 Python 中,可以将函数的定义放在一个被称为模块的文件中,这种文件的后缀…...

Java高效编程(12):重写toString方法

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 尽管 Object 类提供了 toString 方法的默认实现,但它返回的字符串通常不是类的使用者想要看到的。默认返回的字符串格式是类名加上“”符号和哈希码的十六进制表示,例如 PhoneNu…...

谷歌给到的185个使用生成式AI的案例

很多公司从利用AI回答问题,进而使用AI进行预测,向使用生成式AI Agent转变。AI Agent的独特之处在于它们可以采取行动以实现特定目标,比如引导购物者找到合适的鞋子,帮助员工寻找合适的健康福利,或在护理人员交接班期间…...

程序员如何通过专业与软技能提升核心竞争力

一、引言  随着AIGC的兴起,AI辅助编程工具如chatgpt、midjourney、claude等接二连三地涌现,编程领域的变革正逐步深化。面对这一变革,程序员们对于未来工作的前景有着种种不同的担忧和期待。他们担心AI可能取代部分编程工作,同时…...

基于YOLOv8的智能植物监测机器人

摘要:针对传统的植物病害检测方法依赖专家的经验,耗时耗力,并且准确性受限于个人的水平等问题。文中提出无线通信模块采用HTTP协议来传输数据图片,采用SoC核心处理器实现了便携化,采用对射式红外避障传感器实现自动避障功能。以YOLOv8算法为控制核心,并添加注意力机制以提…...

2024年OpenAI DevDay发布实时 API、提示缓存等新功能

就在几天前,一些重要人物如前 CTO Mira Murati 离开了 OpenAI。因此,看到 Sam Altman 在 DevDay 上登台,讨论开发者的新产品,感觉有点奇怪。 随着公司内部的这些变化,你不禁会想:我们还应该信任他吗&#…...

Raspberry Pi3B+之安装bookworm+Rpanion系统

Raspberry Pi3B之安装bookwormRpanion系统 1. 源由2. 系统安装3. 系统安装3.1 烧录系统3.2 设备接线3.3 配置无线3.4 更新系统3.5 安装git3.6 克隆Rpanion3.7 安装Rpanion 4. 系统管理5. 附录问题1:error: externally-managed-environment问题2:bookworm…...

无人机专业除理论外,飞手执照、组装、调试实操技术详解

无人机专业的学习除了丰富的理论知识外,飞手执照的获取、无人机的组装与调试等实操技术也是至关重要的。以下是对这些方面的详细解析: 一、无人机飞手执照 1. 必要性 法规要求:根据《民用无人驾驶航空器系统驾驶员管理暂行规定》等相关法规…...

【网路通信基础与实践番外二】TCP协议的流量控制和拥塞控制以及二者区别和例题

TCP协议是端对端的协议,因此在数据进行传输的过程受发送方,数据通道,接收方三方状态的影响。我们用水龙头来比喻数据发送方,水管来比喻数据通道,水桶来表示数据接收方。 图(a)表示水桶太小,来不及接受注入…...

SpringBoot3+Vue3开发后台管理系统脚手架

后台管理系统脚手架 介绍 在快速迭代的软件开发世界里,时间就是生产力,效率决定成败。对于构建复杂而庞大的后台系统而言,一个高效、可定制的后台脚手架(Backend Scaffold)无疑是开发者的得力助手。 脚手架 后台脚…...

OpenFeign微服务部署

一.开启nacos 和redis 1.查看nacos和redis是否启动 docker ps2.查看是否安装nacos和redis docker ps -a3.启动nacos和redis docker start nacos docker start redis-6379 docker ps 二.使用SpringSession共享例子 这里的两个例子在我的一个博客有创建过程&#xff0c…...

【C语言】数组(下)

【C语言】数组(下) 6、二维数组的创建6.1二维数组的概念6.2二维数组的创建 7、二维数组的初始化7.1不完全初始化7.2完全初始化7.3按照行初始化7.4初始化时可以省略行,但是不能省略列 8、二维数组的使用8.1 二维数组的下标8.2二维数组的输入和…...

cGANs with Projection Discriminator

基于映射鉴别器的CGAN 模型中,判别器(Discriminator)不是通过将条件信息简单地与特征向量拼接(concatenate)来使用条件信息,而是采用一种基于投影的方式,这种方式更加尊重条件信息在底层概率模…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子&#xff08…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 ​ 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

GitHub 趋势日报 (2025年06月06日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...