SRX中文网
栏目分类
UNA中文网
UNA中文网
你的位置:SRX中文网 > UNA中文网 > 54亿美金蒸发,83岁老人失踪!蓝屏元凶30天崩一个系统,微软急发事故报告|应用程序|操作系统|财务会计|财务报表|蓝屏事件|windows
54亿美金蒸发,83岁老人失踪!蓝屏元凶30天崩一个系统,微软急发事故报告|应用程序|操作系统|财务会计|财务报表|蓝屏事件|windows
发布日期:2025-01-04 10:15    点击次数:68
新智元报道 编辑:Aeneas 好困 【新智元导读】史上最大规模TI故障,已经为财富500强带来了54亿美元损失,甚至导致一位83岁老人失踪至今未归。如今,微软终于给出了一份详尽的分析报告。 7月19日那场震惊全球的「史上最大规模IT故障」,影响还在继续…… 25日,情况最为严重、持续时间也最长的航司——达美航空,终于完成了系统修复,恢复正常运营。期间,共有2500多个航班被迫取消。 27日,美国奥兰多警察局发布寻人启事称,一名83岁男子在因CrowdStrike宕机导致回家航班被取消后,已经失踪一周了。 根据分析和保险服务商Parametrix的计算,这次宕机事件给财富500强企业带来了高达54亿美元的损失。 而这种搞崩全球设备的操作,可以算是CrowdStrike家的传统艺能了。 ;跟CEO的作风类似的,CrowdStrike在过去的四个月里,差不多每30天就要搞垮一个操作系统! 终于,在7月27日,微软针对这次CrowdStrike导致的全球蓝屏事件,给出了一份官方的分析。 「Windows安全工具的集成与管理最佳实践」 而看完报告之后,网友纷纷开启了嘲讽模式: 「难道CrowdStrike的高层领导都睡着了?为什么连续几个月来每30天都会发生这么多事件?」 「微软已经在言辞上尽可能地保持委婉了,但这绝对是对CrowdStrike的一记耳光!」CrowdStrike不知道如何展开工作,并且需要基本的质量保证(QA)实践指导,我们很乐意教他们…… 接着,便列出了一堆在用户模式下运行的功能,告诉他们如何避免需要在内核模式下运行太多东西。 有人表示,自己在微软工作的朋友对此深表不满,每次有类似的宕机事件,微软都得背黑锅。 「接口之所以这样设计,是因为不在内核模式下进行,就很难在实时文件系统过滤中获得足够的性能。这是困扰很多操作系统的难题。」 实际上,微软允许第三方代码加载到自己的内核,跟其他的主要操作系统内核(Linux或Apple XNU之类)并没什么不同。 这次的问题主要是,CrowdStrike在内核模式下做了很多本可以在用户模式下完成的事情。 接下来,就让我们看看,微软官方对于宕机事件的详细分析。CrowdStrike事件分析 在博客中,微软解释了为什么现在的安全产品,必须使用内核模式驱动程序。 为此,Windows也为第三方解决方案提供了安全措施。 报告中,CrowdStrike将原因归根为内存安全问题,特别是CSagent驱动程序中的越界读取访问违规 对于CrowdStrike给出的解释,微软利用Microsoft WinDBG内核调试器和任何人都可免费谁用的几个扩展,来执行了如下分析。 基于Microsoft对与该事件相关的Windows错误报告(WER)内核崩溃转储的分析,可以观察到反映这一点的全球崩溃模式:FAULTING_THREAD: ffffe402fe868040 READ_ADDRESS: ffff840500000074 Paged pool MM_INTERNAL_CODE: 2 IMAGE_NAME: csagent.sys MODULE_NAME: csagent FAULTING_MODULE: fffff80671430000 csagent PROCESS_NAME: System TRAP_FRAME: ffff94058305ec20 -- (.trap 0xffff94058305ec20) .trap 0xffff94058305ec20 NOTE: The trap frame does not contain all registers. Some register values may be zeroed or incorrect. rax=ffff94058305f200 rbx=0000000000000000 rcx=0000000000000003 rdx=ffff94058305f1d0 rsi=0000000000000000 rdi=0000000000000000 rip=fffff806715114ed rsp=ffff94058305edb0 rbp=ffff94058305eeb0 r8=ffff840500000074 r9=0000000000000000 r10=0000000000000000 r11=0000000000000014 r12=0000000000000000 r13=0000000000000000 r14=0000000000000000 r15=0000000000000000 iopl=0 nv up ei ng nz na po nc csagent+0xe14ed: fffff806`715114ed 458b08 mov r9d,dword ptr [r8] ds:ffff8405`00000074=???????? .trap Resetting default scope STACK_TEXT: ffff9405`8305e9f8 fffff806`5388c1e4 : 00000000`00000050 ffff8405`00000074 00000000`00000000 ffff9405`8305ec20 : nt!KeBugCheckEx ffff9405`8305ea00 fffff806`53662d8c : 00000000`00000000 00000000`00000000 00000000`00000000 ffff8405`00000074 : nt!MiSystemFault+0x1fcf94 ffff9405`8305eb00 fffff806`53827529 : ffffffff`00000030 ffff8405`af8351a2 ffff9405`8305f020 ffff9405`8305f020 : nt!MmAccessFault+0x29c ffff9405`8305ec20 fffff806`715114ed : 00000000`00000000 ffff9405`8305eeb0 ffff8405`b0bcd00c ffff8405`b0bc505c : nt!KiPageFault+0x369 ffff9405`8305edb0 fffff806`714e709e : 00000000`00000000 00000000`e01f008d ffff9405`8305f102 fffff806`716baaf8 : csagent+0xe14ed ffff9405`8305ef50 fffff806`714e8335 : 00000000`00000000 00000000`00000010 00000000`00000002 ffff8405`b0bc501c : csagent+0xb709e ffff9405`8305f080 fffff806`717220c7 : 00000000`00000000 00000000`00000000 ffff9405`8305f382 00000000`00000000 : csagent+0xb8335 ffff9405`8305f1b0 fffff806`7171ec44 : ffff9405`8305f668 fffff806`53eac2b0 ffff8405`afad4ac0 00000000`00000003 : csagent+0x2f20c7 ffff9405`8305f430 fffff806`71497a31 : 00000000`0000303b ffff9405`8305f6f0 ffff8405`afb1d140 ffffe402`ff251098 : csagent+0x2eec44 ffff9405`8305f5f0 fffff806`71496aee : ffff8405`afb1d140 fffff806`71541e7e 00000000`000067a0 fffff806`7168f8f0 : csagent+0x67a31 ffff9405`8305f760 fffff806`7149685b : ffff9405`8305f9d8 ffff8405`afb1d230 ffff8405`afb1d140 ffffe402`fe8644f8 : csagent+0x66aee ffff9405`8305f7d0 fffff806`715399ea : 00000000`4a8415aa ffff8eee`1c68ca4f 00000000`00000000 ffff8405`9e95fc30 : csagent+0x6685b ffff9405`8305f850 fffff806`7148efbb : 00000000`00000000 ffff9405`8305fa59 ffffe402`fe864050 ffffe402`fede62c0 : csagent+0x1099ea ffff9405`8305f980 fffff806`7148edd7 : ffffffff`ffffffa1 fffff806`7152e5c1 ffffe402`fe864050 00000000`00000001 : csagent+0x5efbb ffff9405`8305fac0 fffff806`7152e681 : 00000000`00000000 fffff806`53789272 00000000`00000002 ffffe402`fede62c0 : csagent+0x5edd7 ffff9405`8305faf0 fffff806`53707287 : ffffe402`fe868040 00000000`00000080 fffff806`7152e510 006fe47f`b19bbdff : csagent+0xfe681 ffff9405`8305fb30 fffff806`5381b8e4 : ffff9680`37651180 ffffe402`fe868040 fffff806`53707230 00000000`00000000 : nt!PspSystemThreadStartup+0x57 ffff9405`8305fb80 00000000`00000000 : ffff9405`83060000 ffff9405`83059000 00000000`00000000 00000000`00000000 : nt!KiStartSystemThread+0x34 如果深入分析这个崩溃转储,就可以恢复访问违规时的堆栈帧,从而了解更多起因了。 然而不幸的是,由于使用WER数据时,微软只能接收到压缩状态,因此就无法反向反汇编,查看崩溃前的更多指令了。 不过,在反汇编中可以看到,在读取R8寄存器中指定的地址之前,有一个NULL检查:6: kd> .trap 0xffff94058305ec20 .trap 0xffff94058305ec20 NOTE: The trap frame does not contain all registers. Some register values may be zeroed or incorrect. rax=ffff94058305f200 rbx=0000000000000000 rcx=0000000000000003 rdx=ffff94058305f1d0 rsi=0000000000000000 rdi=0000000000000000 rip=fffff806715114ed rsp=ffff94058305edb0 rbp=ffff94058305eeb0 r8=ffff840500000074 r9=0000000000000000 r10=0000000000000000 r11=0000000000000014 r12=0000000000000000 r13=0000000000000000 r14=0000000000000000 r15=000000000000 000 iopl=0 nv up ei ng nz na po nc csagent+0xe14ed: fffff806`715114ed 458b08 mov r9d,dword ptr [r8] ds:ffff8405`00000074=???????? 6: kd> !pte ffff840500000074 !pte ffff840500000074 VA ffff840500000074 PXE at FFFFABD5EAF57840 PPE at FFFFABD5EAF080A0 PDE at FFFFABD5E1014000 PTE at FFFFABC202800000 contains 0A00000277200863 contains 0000000000000000 pfn 277200 ---DA--KWEV contains 0000000000000000 not valid 6: kd> ub fffff806`715114ed ub fffff806`715114ed csagent+0xe14d9: fffff806`715114d9 04d8 add al,0D8h fffff806`715114db 750b jne csagent+0xe14e8 (fffff806`715114e8) fffff806`715114dd 4d85c0 test r8,r8 fffff806`715114e0 7412 je csagent+0xe14f4 (fffff806`715114f4) fffff806`715114e2 450fb708 movzx r9d,word ptr [r8] fffff806`715114e6 eb08 jmp csagent+0xe14f0 (fffff806`715114f0) fffff806`715114e8 4d85c0 test r8,r8 fffff806`715114eb 7407 je csagent+0xe14f4 (fffff806`715114f4) 6: kd> ub fffff806`715114d9 ub fffff806`715114d9 ^ Unable to find valid previous instruction for 'ub fffff806`715114d9' 6: kd> u fffff806`715114eb u fffff806`715114eb csagent+0xe14eb: fffff806`715114eb 7407 je csagent+0xe14f4 (fffff806`715114f4) fffff806`715114ed 458b08 mov r9d,dword ptr [r8] fffff806`715114f0 4d8b5008 mov r10,qword ptr [r8+8] fffff806`715114f4 4d8bc2 mov r8,r10 fffff806`715114f7 488d4d90 lea rcx,[rbp-70h] fffff806`715114fb 488bd6 mov rdx,rsi fffff806`715114fe e8212c0000 call csagent+0xe4124 (fffff806`71514124) fffff806`71511503 4533d2 xor r10d,r10d 6: kd> db ffff840500000074 db ffff840500000074 ffff8405`00000074 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? ffff8405`00000084 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? ffff8405`00000094 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? ffff8405`000000a4 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? ffff8405`000000b4 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? ffff8405`000000c4 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? ffff8405`000000d4 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? ffff8405`000000e4 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? 观察以上结果,就可以证实CrowdStrike的分析是正确的—— 在CrowdStrike开发的CSagent.sys驱动程序中,存在越界读取内存安全错误。 另外,微软还发现,csagent.sys模块被注册为文件系统过滤驱动程序——通常被反恶意软件用来接收与文件操作有关的通知。 安全软件会用它来扫描保存到磁盘的任何新文件,比如通过浏览器下载的文件。typedef union _FLT_PARAMETERS { ... ; struct { PIO_SECURITY_CONTEXT SecurityContext; ULONG Options; USHORT POINTER_ALIGNMENT Reserved; USHORT ShareAccess; PVOID Parameters; } CreatePipe; ... ; } FLT_PARAMETERS, *PFLT_PARAMETERS; 而且,文件系统过滤器还可以作为监控系统行为的安全解决方案的信号。 正如CrowdStrike在博客中指出,他们内容更新的一部分,就是更改传感器逻辑,以处理与命名管道创建相关的数据。 而文件系统过滤驱动程序API,允许驱动程序在系统上发生命名管道活动时接收调用,从而能够检测恶意行为。 这种驱动程序的一般功能,是与CrowdStrike分享的信息相关联的。6: kd>!reg querykey \REGISTRY\MACHINE\system\ControlSet001\services\csagent Hive ffff84059ca7b000 KeyNode ffff8405a6f67f9c [SubKeyAddr] [SubKeyName] ffff8405a6f683ac Instances ffff8405a6f6854c Sim Use '!reg keyinfo ffff84059ca7b000 ' to dump the subkey details [ValueType] [ValueName] [ValueData] REG_DWORD Type 2 REG_DWORD Start 1 REG_DWORD ErrorControl 1 REG_EXPAND_SZ ImagePath \??\C:\Windows\system32\drivers\CrowdStrike\csagent.sys REG_SZ DisplayName CrowdStrike Falcon REG_SZ Group FSFilter Activity Monitor REG_MULTI_SZ DependOnService FltMgr\0 REG_SZ CNFG Config.sys REG_DWORD SupportedFeatures f 可以看到,在CrowdStrike分析中指定的控制通道文件版本291也出现在了崩溃中,这表明文件已被读取。 如何确定文件本身与崩溃转储中观察到的访问违规相关联呢?这就需要使用这些工具对驱动程序进行额外的调试了。(这次咱不讨论)!ca ffffde8a870a8290 ControlArea @ ffffde8a870a8290 Segment ffff880ce0689c10 Flink ffffde8a87267718 Blink ffffde8a870a7d98 Section Ref 0 Pfn Ref b Mapped Views 0 User Ref 0 WaitForDel 0 Flush Count 0 File Object ffffde8a879b29a0 ModWriteCount 0 System Views 0 WritableRefs 0 PartitionId 0 Flags (8008080) File WasPurged OnUnusedList \Windows\System32\drivers\CrowdStrike\C-00000291-00000000-00000032.sys 1: kd> !ntfskd.ccb ffff880ce06f6970 !ntfskd.ccb ffff880ce06f6970 Ccb: ffff880c`e06f6970 Flags: 00008003 Cleanup OpenAsFile IgnoreCase Flags2: 00000841 OpenComplete AccessAffectsOplocks SegmentObjectReferenced Type: UserFileOpen FileObj: ffffde8a879b29a0 (018) ffff880c`db937370 FullFileName [\Windows\System32\drivers\CrowdStrike\C-00000291-00000000-00000032.sys] (020) 000000000000004C LastFileNameOffset (022) 0000000000000000 EaModificationCount (024) 0000000000000000 NextEaOffset (048) FFFF880CE06F69F8 Lcb (058) 0000000000000002 TypeOfOpen 我们可以做的,是通过崩溃转储,来确定在崩溃发生时,运行的系统上是否存在其他由CrowdStrike提供的驱动程序。6: kd> lmDvmCSFirmwareAnalysis lmDvmCSFirmwareAnalysis Browse full module list start end module name fffff806`58920000 fffff806`5893c000 CSFirmwareAnalysis (deferred) Image path: \SystemRoot\system32\DRIVERS\CSFirmwareAnalysis.sys Image name: CSFirmwareAnalysis.sys Browse all global symbols functions data Symbol Reload Timestamp: Mon Mar 18 11:32:14 2024 (65F888AE) CheckSum: 0002020E ImageSize: 0001C000 Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e4 Information from resource tables: 6: kd> lmDvmcspcm4 lmDvmcspcm4 Browse full module list start end module name fffff806`71870000 fffff806`7187d000 cspcm4 (deferred) Image path: \??\C:\Windows\system32\drivers\CrowdStrike\cspcm4.sys Image name: cspcm4.sys Browse all global symbols functions data Symbol Reload Timestamp: Mon Jul 8 18:33:22 2024 (668C9362) CheckSum: 00012F69 ImageSize: 0000D000 Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e4 Information from resource tables: 6: kd> lmDvmcsboot.sys lmDvmcsboot.sys Browse full module list start end module name Unloaded modules: fffff806`587d0000 fffff806`587dc000 CSBoot.sys Timestamp: unavailable (00000000) Checksum: 00000000 ImageSize: 0000C000 6: kd> !reg querykey \REGISTRY\MACHINE\system\ControlSet001\services\csboot !reg querykey \REGISTRY\MACHINE\system\ControlSet001\services\csboot Hive ffff84059ca7b000 KeyNode ffff8405a6f68924 [ValueType] [ValueName] [ValueData] REG_DWORD Type 1 REG_DWORD Start 0 REG_DWORD ErrorControl 1 REG_EXPAND_SZ ImagePath system32\drivers\CrowdStrike\CSBoot.sys REG_SZ DisplayName CrowdStrike Falcon Sensor Boot Driver REG_SZ Group Early-Launch 6: kd> !reg querykey \REGISTRY\MACHINE\system\ControlSet001\services\csdevicecontrol !reg querykey \REGISTRY\MACHINE\system\ControlSet001\services\csdevicecontrol Hive ffff84059ca7b000 KeyNode ffff8405a6f694ac [SubKeyAddr] [VolatileSubKeyName] ffff84059ce196c4 Enum Use '!reg keyinfo ffff84059ca7b000 ' to dump the subkey details [ValueType] [ValueName] [ValueData] REG_DWORD Type 1 REG_DWORD Start 3 REG_DWORD ErrorControl 1 REG_DWORD Tag 1f REG_EXPAND_SZ ImagePath \SystemRoot\System32\drivers\CSDeviceControl.sys REG_SZ DisplayName @oem40.inf,

上一篇:2016考研英语语法大全
下一篇:邊線-凸緣 PropertyManager
友情链接:

Powered by SRX中文网 @2013-2022 RSS地图 HTML地图

Copyright Powered by站群系统 © 2013-2024