聚焦源代码安全,网罗国内外最新资讯!
编译:代码卫士
软件内存安全问题因程序管理或分配内存、逻辑错误、运营顺序不正确或使用未初始化变量而导致,通常可用于实现远程代码执行 (RCE)。在很多情况下,软件内存安全问题是最常见的漏洞原因(微软和谷歌称70%的问题是内存安全问题),可能导致不正确的程序行为和性能降级。
NSA发布指南指出,清除内存安全问题的第一步是使用不会内在地打开这些漏洞之门的编程语言。C和C++为内存管理提供灵活性,它们严重依赖程序员对内存引用进行检查。因此,即使是最小的错误也可能导致可利用的漏洞。
指南提到,虽然软件分析工具可能检测到内存管理缺陷,也存在一些防护措施,但使用内存安全软件语言能够阻止或缓解多数问题。NSA建议尽可能地使用内存安全语言。虽然使对非内存安全语言使用额外防护措施以及使用内存安全语言可能无法绝对地防护可利用的内存问题,但它们确实提供了庞大的防护能力。
最常见的内存安全问题包括缓冲区溢出(数据在数组边界之外遭访问)、内存泄露(内存未在使用后释放)、释放后使用和条件竞争等等。恶意人员可能利用异常输入引发异常内存行为并利用这些漏洞执行代码、访问敏感信息或者执行其它恶意活动。模糊测试可帮助威胁行动者更容易地识别有问题的输入。
NSA指出,“一旦相关人员发现他们可通过特定输入导致程序崩溃外,他们会检查代码并判断特殊构造的输入如何做。在最糟糕的情况下,这类输入可导致相关人员控制程序所运行的系统。”
为了阻止或缓解与内存安全有关的风险,NSA推荐组织机构使用内存安全编程语言如C#、Go、Java、Ruby、Rust和Swift,但提醒称由于一些非内存安全操作或库,这样做无法完全消除这些问题。NSA还建议通过静态和动态应用安全测试(SAST和DAST)方法加固非内存安全语言。
NSA提到,由于CFG、ASLR和DEP,编译和执行环境可导致更难以利用内存安全漏洞。NSA总结道,“软件中的内存问题代表着存在的大量可利用漏洞。NSA建议组织机构考虑在可能的情况下,从几乎不提供或者无内在内存防护能力的编程语言战略性地转向内存安全语言。通过使用内存安全语言和可用的代码加固防护措施,很多内存漏洞可得到阻止、缓解或使其难以遭利用。”
https://www.securityweek.com/nsa-publishes-guidance-mitigating-software-memory-safety-issues
题图:Pixabay License
本文由奇安信编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。
奇安信代码卫士 (codesafe)
国内首个专注于软件开发安全的产品线。
觉得不错,就点个 “在看” 或 "赞” 吧~
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...