Untitled
Untitled
•
Write-Where-Where
simulation
tagWND R/W outside Desktop Heap
• Pointer verification is performed by DesktopVerifyHeapPointer.
• tagWND.strName must be
within the Desktop Heap
tagWND R/W outside Desktop Heap
• Desktop Heap address and size comes from tagDESKTOP object.
• No validation on tagDESKTOP pointer.
• Pointer is taken from header of tagWND.
• Find tagDESKTOP pointer and replace it.
• Control Desktop Heap address and size
during verification.
tagWND R/W outside Desktop Heap
• SetWindowLongPtr can overwrite
tagDESKTOP pointer.
• Verification succeeds everywhere.
Write-What-Where
simulation
Windows 10 1703 Mitigations
• UserHandleTable from User32!gSharedInfo is gone
• UserHandleTable contains Kernel-mode address of tagWND
• Windows 10 1607
• Windows 10 1703
Windows 10 1703 Mitigations
• ulClientDelta from Win32ClientInfo is gone
• Windows 10 1607
• Windows 10 1703
Windows 10 1703 Mitigations
• ExtraBytes modified by SetWindowLongPtr are moved to user-mode.
• Cannot overwrite adjacent tagWND.strName.
Windows 10 1703 Mitigations
• tagWND as Kernel-mode read/write primitive is broken again.
• Bitmap object header increased by 0x8 bytes.
• Change allocation size to retain allocation alignment.
• HAL Heap is randomized.
• No longer ntoskrnl.exe pointer at 0xFFFFFFFFFD00448.
tagWND Primitive Revival
• ulClientDelta in Win32ClientInfo has been replaced by user-mode
pointer
Function Pointer
Bitmap KASLR Bypass 0-Day
• Allocate NonPagedPoolExecute
pool memory
• Return pool memory
address
Dynamic Kernel Memory
• Need controlled arguments to call ExAllocatePoolWithTag
• NtQueryIntervalProfile takes two arguments
• Must have specific values to trigger HaliQuerySystemInformation
• Need a different system call
Dynamic Kernel Memory
• Enter NtGdiDdDDICreateAllocation
• Arguments are not modified from system call to function table call
Dynamic Kernel Memory
• Inspecting win32kbase!gDxgkInterface shows it to be writable
Dynamic Kernel Memory
• Need to dynamically locate win32kbase!gDxgkInterface
• Can be found in win32kfull!DrvOcclusionStateChangeNotify