• Rust缓冲区溢出漏洞消失了吗?
  • 发布于 2个月前
  • 249 热度
    0 评论
缓冲区溢出漏洞是臭名昭著的漏洞之一,因为攻击者可以利用它们来执行任意代码并获得访问权限,在最坏的情况下,可以控制具有根帐户的系统。缓冲区溢出漏洞通常在通用漏洞评分系统(CVSS)中获得高分,因为它们通常相对容易被利用,并可能对目标系统造成严重后果。

从上面的参考文献中,我们可以看到,缓冲区溢出漏洞的峰值发生在2007年和2018年,在十年间分别报告了938例和1505例。我们可以猜测未来的趋势,缓冲区溢出漏洞将在下一个十年达到峰值。

关键是大多数企业软件开发了几十年,仍然使用遗留的代码库,这些代码库通常是用C或C++编写的,由于其在内存控制上的灵活性,这种语言被指责为是造成缓冲区溢出漏洞的主要原因。下面是一个用c++编写的示例程序example1,如果输入超过16字节,就可能发生缓冲区溢出。
#include <stdio.h>
#include <string.h>

int main() {
    // 堆代码 duidaima.com
    char buffer[16];
    printf("Enter a string: ");
    gets(buffer);
    printf("You entered: %s\n", buffer);
    return 0;
}
值得注意的是,C或C++语言并不是缓冲区溢出漏洞的根本原因。开发人员可以使用更安全的函数来检查边界并验证输入。example1可以通过使用fgets函数来修复。
#include <stdio.h>
#include <string.h>

int main() {
    char buffer[16];
    printf("Enter a string: ");
    fgets(buffer, sizeof(buffer), stdin);
    printf("You entered: %s\n", buffer);
    return 0;
}
C或C++语言允许开发人员对内存控制有很大的灵活性,但是随着软件规模的增大,开发人员对内存却越来越难以控制,是造成缓冲区溢出漏洞的主要原因。

Rust是一种相对较新的现代编程语言,专注于安全性、并发性和性能,在大型企业中获得了信心,这对我们来说是个好消息。Rust相对于C和C++的优点之一是所有权模型和借用检查器概念。Rust的所有权和借用系统使得在编写安全性高、可靠性高的大规模应用程序时,维护成本更低。下面是Rust中所有权模型的一个例子。
fn main() {
   // s1 own this string => hello world
   let s1 = String::from("hello world");
   let s2 = s1;

   // 这一行将产生错误,因为s1在生命周期结束后不再有效.
   // println!({} , s1); 
}
相对于C或C++,Rust有严格的内存管理系统,在编写底层操作系统软件上具有更好的安全性。谷歌通过与其他企业公司合作,发布了开源操作系统KataOS的几个组件,而KataOS几乎完全是用Rust编写的。

在未来,我们可以预测许多Rust项目将是开源的,并寻求缩小计算机体系结构中低层环境(如系统管理程序)的差距。我们希望预见的是,探索和实现缓冲区溢出漏洞的成本越来越高,使得缓冲区溢出攻击在理论上是可能的,但不可行。

用户评论