0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

NSA:建议从C/C++切换到内存安全语言

OSC开源社区 来源:OSC开源社区 作者:OSC开源社区 2022-11-14 15:28 次阅读

美国国家安全局(NSA)发布了一份指南,旨在帮助软件开发商和运营商预防和缓解软件内存安全问题。其鼓励组织将编程语言从 C 和 C++ 之类的语言转变为内存安全的替代语言 —— 即 C#、Rust、Go、Java、Ruby 或 Swift,以保护代码免受远程代码执行或其他黑客攻击。

“NSA 建议企业尽可能使用内存安全语言,并通过编译器选项、工具选项和操作系统配置等代码强化防御措施加强保护。”

361e566a-6357-11ed-8abf-dac502259ad0.jpg

NSA 方面表示,内存安全问题在可利用的漏洞中占比很大。并引用了微软的数据指出,该公司从 2006 年到 2018 年 70% 的漏洞是由于内存安全问题造成的;谷歌的 Chrome 在几年内也发现了类似比例的内存安全漏洞。

该组织认为,恶意的网络行为者会利用不良的内存管理问题来访问敏感信息、颁布未经授权的代码执行、以及造成其他负面影响,而这些通常会危及设备并成为大规模网络入侵的第一步。

“常用的语言,如 C 和 C++,在内存管理方面提供了很大的自由度和灵活性,同时严重依赖程序员对内存引用执行所需的检查,简单的错误就可能会导致可利用的基于内存的漏洞。软件分析工具可以检测到许多内存管理问题的实例,操作环境选项也可以提供一些保护,但内存安全软件语言所提供的固有保护可以防止或减轻大多数内存管理问题。

NSA 建议在可能的情况下使用内存安全语言。虽然使用非内存安全语言的附加保护措施和使用内存安全语言并不能对可利用的内存问题提供绝对的保护,但它们确实提供了相当的保护。因此,私营部门、学术界和美国政府的总体软件界已经开始倡议,推动软件开发文化向使用内存安全语言发展。”

不过 NSA 也指出,“内存安全” 有点用词不当,且这个概念也是相对的。并警告称,即使使用内存安全语言,内存管理也不完全是内存安全的。

“大多数内存安全语言承认,软件有时需要执行不安全的内存管理功能来完成某些任务。因此,有一些类或函数被认为是非内存安全的,并允许程序员执行可能不安全的内存管理任务。某些语言要求对任何内存不安全的内容进行明确的注释,以使程序员和程序的任何审查者意识到它是不安全的。内存安全语言还可以使用以非内存安全语言编写的库,因此可以包含不安全的内存功能。尽管这些包含内存不安全机制的方法颠覆了固有的内存安全性,但它们有助于定位可能存在内存问题的位置,从而可以对这些代码部分进行额外的审查。”

另一方面,一些内存安全语言可能会以性能为代价。此外,学习一门新的语言也并不容易;譬如,Rust 虽然功能强大,但学习曲线相当陡峭。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    8

    文章

    3017

    浏览量

    73997
  • C++
    C++
    +关注

    关注

    22

    文章

    2108

    浏览量

    73613
  • 编译器
    +关注

    关注

    1

    文章

    1623

    浏览量

    49104

原文标题:NSA:建议从 C/C++ 切换到内存安全语言

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    同样是函数,在CC++中有什么区别

    同样是函数,在 CC++ 中有什么区别? 第一个返回值。 C语言的函数可以不写返回值类型,编译器会默认为返回 int。 但是 C++
    的头像 发表于 11-29 10:25 258次阅读

    C语言中申请的堆内存能不能自动释放

    C语言中申请的堆内存能不能自动释放?每次都要手动 free 太麻烦,也容易忘记。 学过 C++ 的同学,应该首先能想到智能指针。 但是这是C
    的头像 发表于 11-27 09:33 102次阅读

    C语言指针学习笔记

    本文底层内存分析,彻底让读者明白C语言指针的本质。
    的头像 发表于 11-05 17:40 225次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>指针学习笔记

    C语言C++中结构体的区别

    同样是结构体,看看在C语言C++中有什么区别?
    的头像 发表于 10-30 15:11 188次阅读

    如何模拟输入设备切换到数字输入设备

    电子发烧友网站提供《如何模拟输入设备切换到数字输入设备.pdf》资料免费下载
    发表于 09-26 10:41 0次下载
    如何<b class='flag-5'>从</b>模拟输入设备<b class='flag-5'>切换到</b>数字输入设备

    C++语言基础知识

    电子发烧友网站提供《C++语言基础知识.pdf》资料免费下载
    发表于 07-19 10:58 7次下载

    SEGGER编译器优化和安全技术介绍 支持最新CC++语言

    SEGGER编译器是专门为ARM和RISC-V微控制器设计的优化C/C++编译器。它建立在强大的Clang前端上,支持最新的CC++语言
    的头像 发表于 06-04 15:31 1441次阅读
    SEGGER编译器优化和<b class='flag-5'>安全</b>技术介绍 支持最新<b class='flag-5'>C</b>和<b class='flag-5'>C++</b><b class='flag-5'>语言</b>

    为什么很少用C++开发单片机

    C语言是面向过程的语言C++是面向对象的编程语言。结合本文来说,面向过程相比面向对象的编程,生成代码量(bin文件)更小,运行效率更高。
    发表于 03-25 14:26 940次阅读
    为什么很少用<b class='flag-5'>C++</b>开发单片机

    C语言内存泄漏问题原理

    内存泄漏问题只有在使用堆内存的时候才会出现,栈内存不存在内存泄漏问题,因为栈内存会自动分配和释放。C
    发表于 03-19 11:38 519次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b><b class='flag-5'>内存</b>泄漏问题原理

    美国政府呼吁开发人员使用内存安全编程语言

    所谓内存安全,即是防止程序在处理内存时产生如缓冲区溢出以及悬停指针等潜在漏洞。因此,尽管Java凭借其内存安全模式,不受此类问题影响,但
    的头像 发表于 02-29 14:40 769次阅读

    C语言中的动态内存管理讲解

    本章将讲解 C 中的动态内存管理。C 语言内存的分配和管理提供了几个函数。这些函数可以在 头文件中找到。
    的头像 发表于 02-23 14:03 388次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>中的动态<b class='flag-5'>内存</b>管理讲解

    c语言,c++,java,python区别

    C语言C++、Java和Python是四种常见的编程语言,各有优点和特点。 C语言
    的头像 发表于 02-05 14:11 2353次阅读

    vb语言c++语言的区别

    VB语言C++语言是两种不同的编程语言,虽然它们都属于高级编程语言,但在设计和用途上有很多区别。下面将详细比较VB
    的头像 发表于 02-01 10:20 2233次阅读

    C++在Linux内核开发中争议到成熟

    Linux 内核邮件列表中一篇已有六年历史的老帖近日再次引发激烈讨论 —— 主题是建议将 Linux 内核的开发语言 C 转换为更现代的 C++
    的头像 发表于 01-31 14:11 619次阅读
    <b class='flag-5'>C++</b>在Linux内核开发中<b class='flag-5'>从</b>争议到成熟

    C++简史:C++是如何开始的

    的 MISRA C++:2023 博客系列的第二部分。 在这篇博客中,我们将深入探讨 C++ 的历史、编程语言多年来的发展历程以及它的下一步发展方向。
    的头像 发表于 01-11 09:00 575次阅读
    <b class='flag-5'>C++</b>简史:<b class='flag-5'>C++</b>是如何开始的