Posted in

CrowdStrike:仅次于“千年虫”的史诗网安事件_AI阅读总结 — 包阅AI

包阅导读总结

1. 关键词:Crowdstrike、C++、空指针、内存、系统驱动程序

2. 总结:本文分析了 Crowdstrike 因 C++ 语言不安全内存导致的空指针问题,指出问题会被 Windows 终止程序,该问题出在系统驱动程序中,未来需更好的解决方案,还提及可能将系统驱动程序重写为 Rust 语言的讨论。

3.

– 空指针问题

– 由于 C++ 语言的不安全内存,出现空指针问题,计算机尝试读取无效内存地址 0x9c 即 156。

– 问题影响

– 出现在系统驱动程序中,拥有特权访问,操作系统出于谨慎崩溃。

– 解决与预防

– 未来 Microsoft 需更好策略回滚有缺陷驱动程序。

– Crowdstrike 可能提拔代码安全官员,安装代码清理工具,考虑将系统驱动程序重写为 Rust 语言。

– 但对 Rust 语言存在阴谋论的讨论。

思维导图:

文章地址:https://baoyu.io/translations/security/crowdstrike-analysis

文章来源:baoyu.io

作者:宝玉

发布时间:2024/7/19 23:00

语言:中文

总字数:1114字

预计阅读时间:5分钟

评分:75分

标签:C++,系统安全,代码审查,Rust,软件开发


以下为原文内容

本内容来源于用户推荐转载,旨在分享知识与观点,如有侵权请联系删除 联系邮箱 media@ilingban.com

Crowdstrike 分析:

这是一个由于 C++ 语言的不安全内存导致的空指针问题。

作为一名专业的 C++ 程序员,让我为你解析这个堆栈跟踪转储。

计算机内存被组织成一个巨大的数字数组。我们在这里用十六进制表示这些数字,因为这样处理起来更方便。

问题出在哪儿呢?计算机尝试读取内存地址 0x9c(即 156)。

为什么这样不好呢?

这是任何程序都不应访问的无效内存区域。任何尝试从该区域读取数据的程序将会被 Windows 立即终止。

这就是你在这个堆栈转储中看到的情况。

那么为什么会读取内存地址 0x9c 呢?因为……程序员犯了错误。

事实证明,Crowdstrike 使用的 C++ 语言喜欢用地址 0x0 作为特殊值,表示“这里什么都没有”,不要尝试访问它,否则程序会崩溃。

C++ 程序员在传递对象时应该检查这一点,通常通过“空值检查”来实现。

通常你会看到这样的代码:

string* p = get_name();

if (p == NULL) {

print("无法获取名称");

}

string* 表示我们有一个指向字符串起始位置的“指针”。如果它是空的,那么那里什么都没有,不要尝试访问。

举个例子:

struct Obj {

int a;

int b;

};

如果我们创建一个指向它的指针:

Obj* obj = new Obj();

我们可以获得它的起始地址,假设它是 0x9030=36912(这是个随机小数字)

然后地址如下:

  • obj 是 0x9030
  • obj->a 是 0x9030 + 0x4
  • obj->b 是 0x9030 + 0x8

每个成员是从起始地址的偏移量。

现在假设如下:

Obj* obj = NULL;

然后地址如下:

  • obj 是 0
  • obj->a 是 0 + 4
  • obj->b 是 0 + 8

所以如果我在一个空指针上执行以下操作:

print(obj->a);

程序会像你上面看到的那样崩溃。它无法读取值 0x000000004

在这个堆栈转储中,你会看到它试图读取内存值 0x9c。换算成人类数字,这是值 156。

所以发生的事情是程序员忘记检查正在处理的对象是否有效,试图访问对象的成员变量之一…

NULL + 0x9C = 0x9C = 156。

这是一个无效的内存区域。

更糟糕的是,这是一个叫做系统驱动程序的特殊程序,它拥有对计算机的特权访问。因此,操作系统出于谨慎考虑,被迫立即崩溃。

这就是导致蓝屏死机的原因。计算机可以通过简单地终止程序从非特权代码崩溃中恢复,但不能从系统驱动程序中恢复。当你的计算机崩溃时,95% 的情况是因为系统驱动程序崩溃。

如果程序员进行了空值检查,或者他们使用了现代工具来检查这些问题,它本可以被捕获。但不知怎的,它进入了生产,并被 Crowdstrike 推送为强制更新……哎呀!

未来的解决方案是 Microsoft 需要有更好的策略来回滚有缺陷的驱动程序,而不仅仅是将风险更新直接推送给客户。

Crowdstrike 可能会提拔他们的代码安全官员,安装代码清理工具,以自动捕获这些问题。

并且 Crowdstrike 可能会认真考虑将他们的系统驱动程序从目前的 C++ 重写为更现代的语言,如 Rust,后者没有这个问题。

对于那些寻找阴谋论的人来说,替代 C++ 的语言 Rust 被一群奇怪的觉醒人士控制

着,他们在做奇怪的事情。

可能这是一个将关键任务代码转移到 Rust 的阴谋。除了 C,这是 Linux 唯一允许的另一种语言。但谁知道呢。