史上最大規模TI故障,已經為財富500強帶來了54億美元損失,甚至導致一位83歲老人失蹤至今未歸。如今,微軟終於給出了一份詳盡的分析報告。
7月19日那場震驚全球的「史上最大規模IT故障」,影響還在繼續……
25日,情況最為嚴重、持續時間也最長的航司——達美航空,終於完成了系統修復,恢復正常營運。期間,共有2500多個航班被迫取消。
27日,美國奧蘭多警察局發佈尋人啟事稱,一名83歲男子在因CrowdStrike當機導致回家航班被取消後,已經失蹤一周了。
根據分析和保險服務商Parametrix的計算,這次當機事件給財富500強企業帶來了高達54億美元的損失。
而這種搞崩全球裝置的操作,可以算是CrowdStrike家的傳統藝能了。
首席執行官George Kurtz早在2010年的Windows XP時代,就曾在McAfee用一個更新搞崩了全球裝置;跟CEO的作風類似的,CrowdStrike在過去的四個月裡,差不多每30天就要搞垮一個作業系統!
終於,在7月27日,微軟針對這次CrowdStrike導致的全球藍色畫面事件,給出了一份官方的分析。
「Windows安全工具的整合與管理最佳實踐」
而看完報告之後,網友紛紛開啟了嘲諷模式:
「難道CrowdStrike的高層領導都睡著了?為什麼連續幾個月來每30天都會發生這麼多事件?」
「微軟已經在言辭上儘可能地保持委婉了,但這絕對是對CrowdStrike的一記耳光!」
CrowdStrike不知道如何展開工作,並且需要基本的質量保證(QA)實踐指導,我們很樂意教他們……
接著,便列出了一堆在使用者模式下運行的功能,告訴他們如何避免需要在核心模式下運行太多東西。
有人表示,自己在微軟工作的朋友對此深表不滿,每次有類似的當機事件,微軟都得背黑鍋。
「介面之所以這樣設計,是因為不在核心模式下進行,就很難在即時檔案系統過濾中獲得足夠的性能。這是困擾很多作業系統的難題。」
實際上,微軟允許第三方程式碼載入到自己的核心,跟其他的主要作業系統核心(Linux或Apple XNU之類)並沒什麼不同。
這次的問題主要是,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 0xffff94058305ec20NOTE: The trap frame does not contain all registers.Some register values may be zeroed or incorrect.rax=ffff94058305f200 rbx=0000000000000000 rcx=0000000000000003rdx=ffff94058305f1d0 rsi=0000000000000000 rdi=0000000000000000rip=fffff806715114ed rsp=ffff94058305edb0 rbp=ffff94058305eeb0 r8=ffff840500000074 r9=0000000000000000 r10=0000000000000000r11=0000000000000014 r12=0000000000000000 r13=0000000000000000r14=0000000000000000 r15=0000000000000000iopl=0 nv up ei ng nz na po nccsagent+0xe14ed:fffff806`715114ed 458b08 mov r9d,dword ptr [r8] ds:ffff8405`00000074=????????.trapResetting 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+0xe14edffff9405`8305ef50 fffff806`714e8335 : 00000000`00000000 00000000`00000010 00000000`00000002 ffff8405`b0bc501c : csagent+0xb709effff9405`8305f080 fffff806`717220c7 : 00000000`00000000 00000000`00000000 ffff9405`8305f382 00000000`00000000 : csagent+0xb8335ffff9405`8305f1b0 fffff806`7171ec44 : ffff9405`8305f668 fffff806`53eac2b0 ffff8405`afad4ac0 00000000`00000003 : csagent+0x2f20c7ffff9405`8305f430 fffff806`71497a31 : 00000000`0000303b ffff9405`8305f6f0 ffff8405`afb1d140 ffffe402`ff251098 : csagent+0x2eec44ffff9405`8305f5f0 fffff806`71496aee : ffff8405`afb1d140 fffff806`71541e7e 00000000`000067a0 fffff806`7168f8f0 : csagent+0x67a31ffff9405`8305f760 fffff806`7149685b : ffff9405`8305f9d8 ffff8405`afb1d230 ffff8405`afb1d140 ffffe402`fe8644f8 : csagent+0x66aeeffff9405`8305f7d0 fffff806`715399ea : 00000000`4a8415aa ffff8eee`1c68ca4f 00000000`00000000 ffff8405`9e95fc30 : csagent+0x6685bffff9405`8305f850 fffff806`7148efbb : 00000000`00000000 ffff9405`8305fa59 ffffe402`fe864050 ffffe402`fede62c0 : csagent+0x1099eaffff9405`8305f980 fffff806`7148edd7 : ffffffff`ffffffa1 fffff806`7152e5c1 ffffe402`fe864050 00000000`00000001 : csagent+0x5efbbffff9405`8305fac0 fffff806`7152e681 : 00000000`00000000 fffff806`53789272 00000000`00000002 ffffe402`fede62c0 : csagent+0x5edd7ffff9405`8305faf0 fffff806`53707287 : ffffe402`fe868040 00000000`00000080 fffff806`7152e510 006fe47f`b19bbdff : csagent+0xfe681ffff9405`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 0xffff94058305ec20NOTE: The trap frame does not contain all registers.Some register values may be zeroed or incorrect.rax=ffff94058305f200 rbx=0000000000000000 rcx=0000000000000003rdx=ffff94058305f1d0 rsi=0000000000000000 rdi=0000000000000000rip=fffff806715114ed rsp=ffff94058305edb0 rbp=ffff94058305eeb0 r8=ffff840500000074 r9=0000000000000000 r10=0000000000000000r11=0000000000000014 r12=0000000000000000 r13=0000000000000000r14=0000000000000000 r15=000000000000000iopl=0 nv up ei ng nz na po nccsagent+0xe14ed:fffff806`715114ed 458b08 mov r9d,dword ptr [r8] ds:ffff8405`00000074=????????6: kd> !pte ffff840500000074!pte ffff840500000074 VA ffff840500000074PXE at FFFFABD5EAF57840 PPE at FFFFABD5EAF080A0 PDE at FFFFABD5E1014000 PTE at FFFFABC202800000contains 0A00000277200863 contains 0000000000000000pfn 277200 ---DA--KWEV contains 0000000000000000not valid
6: kd> ub fffff806`715114edub fffff806`715114edcsagent+0xe14d9:fffff806`715114d9 04d8 add al,0D8hfffff806`715114db 750b jne csagent+0xe14e8 (fffff806`715114e8)fffff806`715114dd 4d85c0 test r8,r8fffff806`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,r8fffff806`715114eb 7407 je csagent+0xe14f4 (fffff806`715114f4)6: kd> ub fffff806`715114d9ub fffff806`715114d9 ^ Unable to find valid previous instruction for 'ub fffff806`715114d9'6: kd> u fffff806`715114ebu fffff806`715114ebcsagent+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,r10fffff806`715114f7 488d4d90 lea rcx,[rbp-70h]fffff806`715114fb 488bd6 mov rdx,rsifffff806`715114fe e8212c0000 call csagent+0xe4124 (fffff806`71514124)fffff806`71511503 4533d2 xor r10d,r10d
6: kd> db ffff840500000074db ffff840500000074ffff8405`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 ffff84059ca7b000KeyNode ffff8405a6f67f9c
[SubKeyAddr] [SubKeyName]ffff8405a6f683ac Instancesffff8405a6f6854c Sim
Use '!reg keyinfo ffff84059ca7b000 <SubKeyAddr>' to dump the subkey details
[ValueType] [ValueName] [ValueData]REG_DWORD Type 2REG_DWORD Start 1REG_DWORD ErrorControl 1REG_EXPAND_SZ ImagePath \??\C:\Windows\system32\drivers\CrowdStrike\csagent.sysREG_SZ DisplayName CrowdStrike FalconREG_SZ Group FSFilter Activity MonitorREG_MULTI_SZ DependOnService FltMgr\0REG_SZ CNFG Config.sysREG_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`e06f6970Flags: 00008003 Cleanup OpenAsFile IgnoreCaseFlags2: 00000841 OpenComplete AccessAffectsOplocks SegmentObjectReferenced Type: UserFileOpenFileObj: 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> lmDvmCSFirmwareAnalysislmDvmCSFirmwareAnalysisBrowse full module liststart end module namefffff806`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> lmDvmcspcm4lmDvmcspcm4Browse full module liststart end module namefffff806`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.syslmDvmcsboot.sysBrowse full module liststart 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 ffff84059ca7b000KeyNode ffff8405a6f68924
[ValueType] [ValueName] [ValueData]REG_DWORD Type 1REG_DWORD Start 0REG_DWORD ErrorControl 1REG_EXPAND_SZ ImagePath system32\drivers\CrowdStrike\CSBoot.sysREG_SZ DisplayName CrowdStrike Falcon Sensor Boot DriverREG_SZ Group Early-Launch6: kd> !reg querykey \REGISTRY\MACHINE\system\ControlSet001\services\csdevicecontrol!reg querykey \REGISTRY\MACHINE\system\ControlSet001\services\csdevicecontrol
Hive ffff84059ca7b000KeyNode ffff8405a6f694ac
[SubKeyAddr] [VolatileSubKeyName]ffff84059ce196c4 Enum
Use '!reg keyinfo ffff84059ca7b000 <SubKeyAddr>' to dump the subkey details
[ValueType] [ValueName] [ValueData]REG_DWORD Type 1REG_DWORD Start 3REG_DWORD ErrorControl 1REG_DWORD Tag 1fREG_EXPAND_SZ ImagePath \SystemRoot\System32\drivers\CSDeviceControl.sysREG_SZ DisplayName @oem40.inf,%DeviceControl.SVCDESC%;CrowdStrike Device Control ServiceREG_SZ Group BaseREG_MULTI_SZ Owners oem40.inf\0!csdevicecontrol.inf_amd64_b6725a84d4688d5a\0!csdevicecontrol.inf_amd64_016e965488e83578\0REG_DWORD BootFlags 146: kd> !reg querykey \REGISTRY\MACHINE\system\ControlSet001\services\csagent!reg querykey \REGISTRY\MACHINE\system\ControlSet001\services\csagent
Hive ffff84059ca7b000KeyNode ffff8405a6f67f9c
[SubKeyAddr] [SubKeyName]ffff8405a6f683ac Instancesffff8405a6f6854c Sim
Use '!reg keyinfo ffff84059ca7b000 <SubKeyAddr>' to dump the subkey details
[ValueType] [ValueName] [ValueData]REG_DWORD Type 2REG_DWORD Start 1REG_DWORD ErrorControl 1REG_EXPAND_SZ ImagePath \??\C:\Windows\system32\drivers\CrowdStrike\csagent.sysREG_SZ DisplayName CrowdStrike FalconREG_SZ Group FSFilter Activity MonitorREG_MULTI_SZ DependOnService FltMgr\0REG_SZ CNFG Config.sysREG_DWORD SupportedFeatures f
6: kd> lmDvmCSFirmwareAnalysislmDvmCSFirmwareAnalysisBrowse full module liststart end module namefffff806`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> !reg querykey \REGISTRY\MACHINE\system\ControlSet001\services\csfirmwareanalysis!reg querykey \REGISTRY\MACHINE\system\ControlSet001\services\csfirmwareanalysis
Hive ffff84059ca7b000KeyNode ffff8405a6f69d9c
[SubKeyAddr] [VolatileSubKeyName]ffff84059ce197cc Enum
Use '!reg keyinfo ffff84059ca7b000 <SubKeyAddr>' to dump the subkey details
[ValueType] [ValueName] [ValueData]REG_DWORD Type 1REG_DWORD Start 0REG_DWORD ErrorControl 1REG_DWORD Tag 6REG_EXPAND_SZ ImagePath system32\DRIVERS\CSFirmwareAnalysis.sysREG_SZ DisplayName @oem43.inf,%FirmwareAnalysis.SVCDESC%;CrowdStrike Firmware Analysis ServiceREG_SZ Group Boot Bus ExtenderREG_MULTI_SZ Owners oem43.inf\0!csfirmwareanalysis.inf_amd64_12861fc608fb1440\06: kd> !reg querykey \REGISTRY\MACHINE\system\Controlset001\control\earlylaunch!reg querykey \REGISTRY\MACHINE\system\Controlset001\control\earlylaunch
從上述分析中可見,CrowdStrike載入了四個驅動程式模組。
其中一個模組根據CrowdStrike的初步事件後審查時間線,會頻繁接收動態控制和內容更新。
利用此次崩潰的獨特堆疊和屬性,便可以識別出由CrowdStrike特定程式設計錯誤導致的Windows崩潰報告。
總之,這次全球當機事件告訴我們:任何無效記憶體訪問之類的可靠性問題,如果沒有結合安全部署實踐,都會導致嚴重的後果。
所以,為什麼安全解決方案必須在Windows上使用核心驅動程式呢?
對此,微軟給出了以下解釋。
首先最重要的一點原因,就是核心驅動程式允許系統範圍的可見性。
而且,它能在早起啟動時運行,這樣就能檢測出像啟動工具包和根工具包這樣的威脅(要知道,後者可是在使用者模式應用程式載入前,就可以運行的)。
微軟為核心驅動程式提供了一套豐富的功能,包括用於處理程序和執行緒建立的系統事件回呼,以及可以監控檔案建立、刪除或修改的過濾驅動程式。
而且,核心活動還可以觸發回呼,讓驅動程式決定何時阻止檔案或建立處理程序。
因此,許多供應商都是用NDIS驅動,在核心中使用驅動程式來收集各種網路資訊。
性能
核心驅動程式,還會帶來潛在的性能優勢。
比如,它可以幫助進行高吞吐量的網路活動分析或資料收集。
當然,有許多場景可以在非核心模式下最佳化資料收集和分析操作,微軟也會繼續與生態系統合作。
防篡改能力
載入到核心模式的另一個好處,就是防篡改能力。
即使攻擊者具有管理員權限,安全產品也不希望軟體被惡意軟體、針對性攻擊或惡意的內部人員擊潰。
另一個要求,就是讓驅動程式儘早載入,以便儘早觀察到系統事件。
為此,微軟提供了一種機制,可以在啟動過程的早期,啟動標記為早期啟動反惡意軟體(ELAM)的驅動程式。
核心驅動程式提供了以上好處,但是是以彈性為代價的。
因此,安全供應商在使用核心驅動程式時,就必須仔細權衡利弊,平衡可見性和防篡改需求,與在核心模式下操作的風險。
微軟表示,如今安全工具已經可以在安全性和可靠性之間實現平衡。
例如,安全供應商可以使用在核心模式下運行的最小感測器進行資料收集和執行,以限制暴露於可用性問題的風險。
其餘的關鍵產品功能則在使用者模式下隔離進行,然後再恢復。
而對於使用者模型保護方法,Windows也同樣提供了幾種防篡改的方法,比如基於虛擬化的安全(VBS)隔離區和受保護處理程序,以及ETW事件和使用者模式介面,如反惡意軟體掃描介面。
微軟表示,Windows本質上是一個開放、多功能的作業系統,可以通過整合工具輕鬆鎖定,以提高安全性。
此外,Windows也在不斷增加安全預設值,包括在Windows 11中默認啟用的數十個新的安全功能。
在Windows的自我防禦方面,默認啟用的關鍵反惡意軟體功能包括:
利用Windows整合的安全功能來防止攻擊,可以提高安全性,同時減少成本和複雜性。可參考的最佳實踐如下:
最後,微軟計畫利用新推出的數十種安全功能和架構改進,來幫助反惡意軟體完成方法的現代化,從而提升安全性和可靠性:
微軟表示,Windows今後將繼續創新並提供新的方法,使安全工具能夠安全地檢測和響應新興威脅。 (AIGC新智界)