美国白宫国家网络主任办公室(ONCD)近日发布题为《回到基础构件:通往安全软件之路》的报告,呼吁业界加大内存安全投资,并鼓励技术社区积极采用内存安全编程语言,例如Rust、Python、Swift、C#、Java和Go等。
内存安全漏洞是指编程语言中以意外的方式访问、写入、分配或释放内存的一类漏洞。恶意行为者可能利用这类漏洞非法访问、破坏数据或运行任意恶意代码。
过去几十年,软件开发者通过各种方法不断尝试解决普遍存在的内存安全漏洞问题(例如开发者培训、代码覆盖、安全编码指南、模糊测试、静态/动态应用安全测试),但收效甚微。
75%的漏洞与内存安全有关
根据Horizon3.ai发布的2023年漏洞利用分析报告,内存安全问题是仅次于“注入”的第二大漏洞原因,75%的内存安全漏洞被攻击者作为零日漏洞利用。Horizon3.ai首席攻击工程师ZachHanley表示,还有25%的漏洞起初由安全研究人员发现,之后才追溯到曾被用于零日漏洞攻击。
美国国家网络总监助理Anjana Rajan列举了1988年的Morris蠕虫、2003年的Slammer蠕虫、2014年的Heartbleed漏洞、2016年的Trident漏洞以及2023年的Blastpass漏洞,指出这些漏洞的根源均为内存安全问题。
Rajan表示,过去35年来,内存安全漏洞一直困扰着数字生态系统,但并非无解。白宫的ONCD报告由工程师编写,旨在鼓励开发者在选择构建模块时做出有利于安全性的决策,从而大幅缩小网络攻击面,保护数字生态系统乃至国家安全。
内存安全语言与内存安全硬件的价值
ONCD报告阐述了内存安全编程语言和内存安全硬件的形式化方法的重要性。这些方法可以帮助软件开发人员避免多种软件漏洞(不仅仅是内存安全漏洞)。
报告还强调了内存安全硬件的重要性,因为对于某些系统(例如太空系统),可能无法使用内存安全语言,报告探讨了如何通过硬件实现内存安全的补充方法。例如,一些制造商已经开发了新的内存标签扩展(MTE)来检查内存位置的指针的有效性。
报告指出,内存安全编程语言(MSL)是减少内存安全漏洞的最高效方法。将不安全的代码库迁移到内存安全语言的长期收益远大于短期的迁移成本。
Trail of Bits首席执行官Dan Guido指出,形式化方法结合内存安全编程语言,能够提供一种消除软件漏洞的强大框架,其精准度至今无出其右。
白宫强调,ONCD报告旨在将网络安全责任从个人和小企业转移到大型科技公司和联邦政府等大型组织身上。报告指出,美国网络安全和基础设施安全局(CISA)、美国国家安全局(NSA)、联邦调查局(FBI)等机构联合发布的《内存安全路线图指南》报告(链接在文末),为制造商提供了消除产品内存安全漏洞的指导性步骤。
白宫报告还提及了软件可测量性问题,并呼吁学术界参与其中,共同开发更好的诊断工具来评估网络安全质量。
行业专家观点:从关键太空系统开始
霍尼韦尔互联企业首席技术官Jason Urso认为,将内存安全编程纳入软件设计流程,将成为网络防御工具包的重要补充,该工具包中的其他工具还包括网络隔离、高安全模型以及实时威胁和漏洞评估。
斯坦福大学计算机科学教授Dan Boneh则表示,如果能够将所有现有软件“神奇地“转换为内存安全语言,软件质量将会得到极大提升,但遗憾的是,这种“魔法棒”目前并不存在。
Boneh认为,白宫采取了务实的措施,建议从关键太空系统开始实施内存安全编程,这是一个很好的测试平台。防止内存安全漏洞只是迈向更安全软件的第一步,形式化验证和限制技术也是重要的安全工具,很高兴看到白宫呼吁加大对此类技术的投资。