标签: 内存安全

首次!美国政府立法推动改善内存安全问题

美国国会上周五通过的2023财年综合拨款法案中包含一份“圣诞彩蛋”,倡导开发者使用可支持内存安全的编码语言,以阻止网络对手利用绝大多数软件漏洞。 “有史以来第一次,国会将内存安全纳入法律,要求国家网络总监研究政府层面的内存安全问题。总体法案预计将在本周通过。为在参议院期间参与制定这项法规感到自豪!”知名安全研究员Jack Cable昨天发布推文称。 Cable推文中引用的法案原文采用了更保守的用词,称“鼓励”国家网络总监研究和报告内存安全问题,而非“要求”,并提到国家网络总监办公室的领导作用仍在不断变化。 非内存安全语言存在较高安全隐患 与此同时,美国国家安全局和网络安全与基础设施安全局一直在密切关注编码语言的影响,承认多数语言并不会自动检查和控制软件开发者的内存管理方法。 网络安全与基础设施安全局高级技术顾问Bob Lord在内部网络安全咨询委员会12月6日的会议上表示,“我们年复一年,甚至可以说十年如一日地发现各类漏洞,而其中约有三分之二”跟内存管理问题有关。 在11月公布的一份信息表中,NSA表示,“质量低下或粗糙的内存管理设计,可能令恶意黑客获得可乘之机,例如随意令程序崩溃、或者篡改正在执行的程序指令以完成任何恶意操作。” 内存安全语言可解决问题,但性能消耗大 NSA认为“软件程序的内存管理机制是预防各类漏洞、保障程序健壮性的核心所在”,并建议开发者应尽可能使用内存安全语言。 典型内存安全语言包括JavaScript、Ruby、Python等。NSA指出,与C、C++等常见的非内存安全语言不同,内存安全语言可以“控制内存的分配、访问和管理方式,在很大程度上提供安全保护。” 当然,这其中也存在着权衡取舍。内存安全语言的默认检查可能会耗费大量时间和开发资源。 NSA表示,“对于极端强调内存保护的语言,即使是简单程序的编译也涉及大量检查和保护工作。必须承认,内存安全也带来了高昂的性能和灵活性成本。” 另一方面,手动检查代码中的内存管理错误同样耗时耗力,考虑到可能引发的网络攻击后果,其成本可能更为沉重。 美国政府呼吁采用内存安全语言 在12月6日的会议上,网络安全与基础设施安全局长Jen Easterly强调了技术在“设计层面上保障安全”的重要意义。她认为应当“继续呼吁软件开发企业以完全透明的方式,从设计出发构建切实安全的产品。” 除了鼓励开发商改用内存安全编程语言之外,NSA的文件还列出了推荐工具,可用于测试应用程序是否存在易遭对手利用的内存管理错误。 考虑到开发人员已经习惯于使用非内存安全语言的软件库,并积累起大量相关专业知识,国安局承认这种开发范式转换绝非易事。 Lord总结称,“好消息是,新兴的内存安全编程语言已经存在,其他配套技术、硬件和保障性元素也陆续问世。所以,我们已经有了可行的解决方案。接下来的重点是提高人们的安全意识,现在各相关组织是时候行动起来了。”   转自 安全内参,原文链接:https://www.secrss.com/articles/50499 封面来源于网络,如有侵权请联系删除

谷歌工程师:七成 Chrome 安全漏洞是内存安全问题,Rust 又成备选语言

近日,有谷歌工程师分析了自 2015 年以来在 Chrome 稳定版分支中修复的 912 个安全错误。并发现,在这些被标记为“高”或“严重”等级的所有安全漏洞中,大约 70% 是内存管理和安全问题。 这其中又有一半是 use-after-free 漏洞。这种安全问题是由对内存指针(地址)的错误管理引起的,为攻击者打开了攻击 Chrome 内部组件的大门。 这一数据恰巧与微软此前的研究结果相同:微软安全响应中心(MSRC)对自 2004 年以来所有报告过的微软安全漏洞进行了分类,所有微软年度补丁中约有 70% 是针对内存安全漏洞的修复程序。 微软安全响应中心曾给出解释,这是因为他们大多数产品使用 C 和 C++ 编写,而这两种编程语言属于“内存不安全”(memory-unsafe)的范畴。管理内存执行的开发人员代码中的一个漏洞可能导致一系列内存安全错误。 谷歌也面临着相似的境地。仅仅从 2019 年 3 月到现在,等级为“严重”的 130 个 Chrome 漏洞中,有 125 个与内存损坏相关,可见内存管理仍然是一个很大的问题。 为此,谷歌工程师必须遵循 “2 的规则”(The Rule of 2)。即每当工程师编写新的 Chrome 特性时,其代码不得破坏以下两个以上的条件: 该代码处理不可信的输入 代码在没有沙箱的情况下运行 代码使用不安全的编程语言(C/C ++)编写 迄今为止,谷歌一直在 Chrome 中尝试使用沙箱方法。他们将数十个进程隔离到自己的沙箱中,最近还推出了“站点隔离”功能,该功能将每个站点的资源也放入自己的沙箱进程中。但谷歌工程师表示,考虑到性能问题,他们使用沙盒化 Chrome 组件的方法已达到最大收益,现在必须寻求新的方法。 因此,谷歌计划研究开发自定义 C++ 库,以与 Chrome 的代码库一起使用,这些库可以更好地保护与内存相关的错误。 与此同时,谷歌还在探索 MiraclePtr 项目,该项目旨在将“use-after-free bug 转变为具有可接受的性能、内存、二进制大小和最小的稳定性影响的非安全崩溃”。 最后,值得注意的一点是,谷歌表示计划在可能的情况下使用“安全”语言进行探索。候选对象包括 Rust、Swift、JavaScript、Kotlin 和 Java。   (稿源:ZDNet,封面源自网络。)