上周,一位微软工程师在一次安全会议上透露:
微软产品每年通过安全更新解决的所有漏洞中,大约70%是内存安全问题。
当软件意外或有意地以超过其分配的大小和内存地址的方式访问系统内存时,就会出现内存安全漏洞。
经常阅读漏洞报告的用户会反复遇到相关术语:
缓冲区溢出、页面错误、空指针、堆栈耗尽、堆耗尽/损坏等术语都描述内存安全漏洞。
上周在以色列举行的 BlueHat 安全会议上,微软安全工程师马特·米勒(Matt Miller)表示:在过去12年里,微软所有补丁中大约70%是针对内存安全漏洞的补丁。
之所以有这么高的比例,是因为Windows主要是用C和c++这两种“内存不安全”的编程语言编写的。这两种语言允许开发人员细粒度地控制可以执行代码的内存地址。开发人员内存管理代码中的一个错误可能会导致大量内存安全错误,攻击者可以利用这些错误带来危险和侵入性的后果——例如远程代码执行或特权提升缺陷。
内存安全错误是当今黑客更大的攻击面,攻击者似乎正在利用它们的可用性。根据Miller的介绍,在攻击者开发漏洞时,free和堆损坏破坏漏洞仍然是首选的漏洞。
此外,由于微软修补了大部分基本的内存安全漏洞,攻击者和漏洞猎人也加强了他们的游戏,从将代码发送到相邻内存的基本内存错误转移到在所需内存地址运行代码的更复杂漏洞,非常适合定位系统上运行的其他应用和流程。
那么问题来了,在你看来,造成这种问题的根源是什么呢?是黑产太嚣张,还是开发者的代码太烂了?