SMB v3遠程拒絕服務漏洞分析
漏洞簡介
此漏洞是由於Windows處理SMB協議驅動mrxsmb20.sys在解析Tree Connect Response時,未正確處理包長度導致的空指針引用漏洞。當Tree Connect Response包中smb協議長度大於0x400(1024)時,會造成藍屏崩潰。
漏洞重現
根據已公開的 POC,在win10 14393中重現了此漏洞。需要注意的是,Windows系統中可能默認監聽了445埠,在這種情況下運行POC會出現如下錯誤: socket.error: [Errno 10013] An attempt was made to access a socket in a way forbidden by its access permissions 解決方案有兩個,手動關閉系統445埠監聽,或者在其他系統中運行POC。隨後通過UNC路徑訪問便可以重現此漏洞。
通過windbg雙機調試崩潰機器,可以看出漏洞是mrxsmb20!Smb2ValidateNegotiateInfo函數訪問了空指針(rcx為0)導致了訪問異常。
0: kd> !analyze -vFAULTINGIP: mrxsmb20!Smb2ValidateNegotiateInfo+17fffff80e847fd117 66394114 cmp word ptr [rcx+14h],axrax=0000000000000001 rbx=0000000000000000 rcx=0000000000000000rdx=ffff9a0e216adb20 rsi=0000000000000000 rdi=0000000000000000rip=fffff80e847fd117 rsp=fffff8020385bec0 rbp=ffff9a0e21530ae8 r8=0000000000000001 r9=0000000000000000 r10=ffff9a0e218d2b20r11=fffff8020385c1a8 r12=0000000000000000 r13=0000000000000000r14=0000000000000000 r15=0000000000000000iopl=0 nv up ei ng nz na po ncmrxsmb20!Smb2ValidateNegotiateInfo+0x17:fffff80e847fd117 66394114 cmp word ptr [rcx+14h],ax ds:00000000`00000014=????FOLLOWUPNAME: MachineOwnerMODULENAME: mrxsmb20IMAGENAME: mrxsmb20.sysOSPLATFORMTYPE: x64OSNAME: Windows 10BUILDOSVERSTR: 10.0.14393.447.amd64fre.rs1releaseinmarket.161102-0100
POC分析
POC中大部分是用來進行封包操作,或用來進行身份認證的功能代碼。其中和漏洞相關的代碼如下:
代碼中注釋為BUG處為觸發漏洞的關鍵點,經過測試後發現只要Data的數據長度為945,任意數據都會觸發漏洞,此時代碼中packet1的長度剛好等於1025大於0x400。
漏洞數據包分析
由上圖可以看出,正常的Tree Connect Response在Access Mask欄位後是不會有數據。而漏洞攻擊數據包中,後面接了很多無用數據,而且數據包長度剛好大於0x400,漏洞便被觸發了。正常數據包和漏洞攻擊數據包如下: normal.pcapngtrigger.pcapng
漏洞影響
經測試漏洞只會影響win8及以上系統,包括對應的伺服器版本。由於此漏洞利用時只需要回應惡意的Tree Connect Response包,所以攻擊者可以通過中間人攻擊或誘騙用戶訪問等多種方式實現遠程攻擊。在微軟官方修補前,建議用戶通過防火牆禁用139和445等埠的流量。
本文為 四葉草安全實驗室 授權發布,如若轉載,請註明來源於嘶吼: SMB v3遠程拒絕服務漏洞分析 更多內容請關注「嘶吼專業版——Pro4hou」
推薦閱讀:
※PEGASUS iOS內核漏洞分析(第一部分)
※MS08-067漏洞原理分析及還原
※Microsoft Windows - 7'win32k!NtGdiGetRealizationInfo' Kernel Stack Memory
※2萬美金等你拿!任天堂發布3DS漏洞懸賞任務
※是什麼原因讓所有的Windows系統淪陷了?