Internals - vjj root page
Transcription
Internals - vjj root page
Windows System Internals struktura OS (Windows 7) 13.4.2016 vjj 1 kernel • • • • • • • The kernel is contained in the files below (as specified in the book Windows Internals): Ntoskrnl.exe - Executive and kernel Ntkrnlpa.exe (32-bit systems only) - Executive and kernel with support for Physical Address Extension (PAE), which allows addressing of up to 64 GB of physical memory Hal.dll - Hardware abstraction layer Win32k.sys - Kernel-mode part of the Windows subsystem Ntdll.dll - Internal support functions and system service dispatch stubs to executive functions Kernel32.dll, Advapi32.dll, User32.dll, Gdi32.dll - Core Windows subsystem DLLs 13.4.2016 vjj 2 System support processes Service processes Environment subsystems Applications Kernel32.dll, Advapi32.dll, User32.dll, GDI32.dll, COM.dll SysEnter SysCall Ntdll.dll LRPC Ntoskrnl.exe Win32k.sys Windowing and graphics Win32 System service dispatcher Executive User Kernel GDI Drivers Graphic device drivers Hal.dll Hardware abstraction layer (HAL) 13.4.2016 vjj 3 System support processes Service processes SCMan.exe Service control manager Svchost.exe Lsass.exe Local Security Authentication Server Winmgmt.exe Applications Environment subsystems User applications Winlogon.exe Logon Process Smss.exe Session manager Spooler Task Manager Services.exe Windows Explorer Subsystem DLLs POSIX PSXSS.exe OS/2 OS2SS.exe Win32 Csrss.exe Kernel32.dll, Advapi32.dll, User32.dll, GDI32.dll Ntdll.dll SysEnter / SysCall System threads Ntoskrnl.exe Executive System service dispatcher Executive support WDM WMI routines Configuration manager (registry) Processes and threads Object manager Virtual memory Security reference monitor Power manager Plug and Play manager File system cache I/O Manager Local procedure call RTL Win32k.sys Windowing and graphics Win32 User GDI Kernel (Process Manager, Interrupt / Exception Dispatcher, Multiprocessor Synchronization) Device and file system drivers Graphic device drivers Hal.dll 13.4.2016 Hardware abstraction layer (HAL) vjj 4 Csrss.exe Win32 subsystem Aplikace GDI32.dll User32.dll AdvAPI32.dll RPCRT4.dll Kernel32.dll NTdll.dll ring 3 SysEnter LRPC ring 0 Win32k.sys 13.4.2016 NTOSKrnl.exe vjj 5 Csrss.exe • Win32 subsystém • • • • Client-Server Runtime Subsystem • různé funkce okna textových konsolí vytváření a rušení procesů a vláken část podpory pro VDM (16-bit Virtual DOS Machine) procesy • • • • 13.4.2016 GetTempFile DefineDosDevice ExitWindowsEx ... vjj 7 Subsystem DLLs • User32.dll GDI32.dll Kernel32.dll Advapi32.dll ... 13.4.2016 vjj 8 Ntdll.dll • System service dispatch stubs • více než 200 Native API funkcí (Nt... / Zw..., např. NtCreateFile, NtSetEvent, ...) • • stubs – SysCall (x64) / SysEnter (x32) / Int 2E (dříve) – volání stejně pojmenované funkce z jádra Windows (Ntoskrnl.exe) Internal support functions • C runtime library • heap manager • Win32 subsystem process communication functions • Windows Run-time library routines (Rtl...) • user-mode asynchronous procedure call (APC) dispatcher • exception dispatcher 13.4.2016 vjj 9 Win32k.sys • správce oken (Window Manager) • • • • řídí zobrazování oken řídí výstup na obrazovku spravuje vstup z klávesnice, od myši, . . . předává uživatelské zprávy aplikacím • Graphics Device Interface (GDI) • knihovna funkcí pro zařízení s grafickým výstupem • 13.4.2016 obsahuje funkce pro text, čárové a bitmapové kreslení a pro manipulaci s grafikou vjj 10 NTOSKrnl.exe • • System service dispatcher Executive – horní vrstva NTOSKrnl.exe • System Services - exportované funkce - většinu z nich lze volat z uživatelského módu (API funkce) exportované a dokumentované funkce • • • • • • Windows Driver Kit (WDK) exportované ale nedokumentované funkce neexportované funkce jejichž názvy jsou ale definovány jako globální symboly interní funkce jednotlivých modulů, které nejsou definovány jako globální symboly Kernel – dolní vrstva NTOSKrnl.exe 13.4.2016 vjj 11 Windows System Internals "long winding road" ring 3 -> ring 0 13.4.2016 vjj 12 ring 3 -> ring 0 • syscall / sysenter / interrupt ring 0 -> ring 3 • callgate ring 3 <-> ring 3 • lrpc 13.4.2016 vjj 13 interrupt mov eax, sys_call_number lea edx, [esp+4] int 0x2E 13.4.2016 vjj 14 sysenter mov eax, sys_call_number mov edx, address_of_ntdll_KiFastSystemCall call edx retn 8 mov edx, esp sysenter retn 13.4.2016 vjj 15 x64 13.4.2016 vjj 16 syscall mov r10, rcx mov eax, sys_call_number syscall retn 13.4.2016 vjj 17 ????? • jaká je ale celá cesta od zavolání Win32 API funkce v aplikaci, např. DeviceIoControl, k její implementaci někde v jádře ? • jakým způsobem přitom dochází k přechodu z ringu 3 na ring 0? 13.4.2016 vjj 18 Dependency Walker • > depends.exe • Kernel32.dll v. 6.1.7601.18409 (W7 SP1 x64) preferred base: virtual size: 0x78D20000 0x0011F000 • DeviceIoControl Entry Point: 0x00015C80 preferred base + Entry Point = 0x78D35C80 13.4.2016 vjj 19 API -> kernel • • Windows Debugger - WinDbg - attached to a process • myTEST64.exe: • • • kernel32.dll: KERNELBASE.dll: ntdll.dll: wWinMain DeviceIoCtrl DeviceIoControl DeviceIoControl ZwDeviceIoControlFile Kernel Debugger - LiveKd + WinDbg • 13.4.2016 ntoskrnl.dll: KiSystemCall64 NtDeviceIoControlFile vjj 20 Visual Studio • myTEST64.cpp • DeviceIoControl • right mouse button -> View Call Hierarchy • • 13.4.2016 wWinMain DeviceIoControl vjj 21 WinDbg • run myTEST64.exe • run WinDbg (x64) • • • 13.4.2016 File | Source File Path... File | Symbol File Path... File | Attach to a Process... vjj 22 display all loaded and unloaded modules > lm start end module name 00000000`76ef0000 00000000`76ff0000 00000000`77110000 00000001`3fbd0000 00000000`76fea000 00000000`7710f000 00000000`772b9000 00000001`3fcfe000 USER32 KERNEL32 ntdll myTEST64 • kernel32.dll start address 76ff0000 Depends.exe states its base address as 78D20000 ASLR ? DeviceIoControl entry point: 76ff0000 + 00015C80 = 77005C80 13.4.2016 vjj 23 myTEST64 > ln wWinMain (00000001`3fbf1330) myTEST64!wWinMain Exact matches: myTEST64!wWinMain (struct HINSTANCE__ *, struct HINSTANCE__ *, wchar_t *, int) 13.4.2016 vjj 24 myTEST64.exe > u myTEST64!wWinMain ... 00000001`3fbf13e4 call qword ptr [myTEST64!_imp_DeviceIoControl] ... 13.4.2016 vjj 25 myTEST64.exe > d DeviceIoCtrl!_imp_DeviceIoControl 00000001`3fbfe290 13.4.2016 80 5c 00 77 00 00 00 00 vjj 26 endianess • Jonathan Swift: "Gulliver's Travels" certain people prefer to eat their hard boiled eggs from the little end first (thus, little endian), while others prefer to eat from the big end (thus, big endians) this leads to various wars. 13.4.2016 vjj 27 Kernel32.dll > u 77005c80 kernel32!DeviceIoControlImplementation ... 00000000`77005cfa call kernel32!DeviceIoControl ... 13.4.2016 vjj 28 Kernel32.dll > ln Kernel32!DeviceIoControl (00000000`77675c74) kernel32!DeviceIoControl Exact matches: kernel32!DeviceIoControl > u kernel32!DeviceIoControl 00000000`77675c74 jmp qword ptr [kernel32!_imp_DeviceIoControl] > d kernel32!_imp_DeviceIoControl 00000000`776fd688 80 9a ef fc fe 07 00 00 > u 000007fe`fcef9a80 13.4.2016 vjj 29 KERNELBASE.dll > u 000007fe`fcef9a80 KERNELBASE!DeviceIoControl: ... 000007fe`fcef9af3 call qword ptr [KERNELBASE!_imp_NtDeviceIoControlFile] ... > d KERNELBASE!_imp_NtDeviceIoControlFile 000007fe`fcf3b148 20 13 16 77 00 00 00 00 > u 77161320 13.4.2016 vjj 30 ntdll.dll ntdll!ZwDeviceIoControlFile: 00000000`77161320 4c8bd1 mov r10,rcx 00000000`77161323 b804000000 mov eax,4 00000000`77161328 0f05 syscall 00000000`7716132a c3 ret 13.4.2016 vjj 31 ????? • kde mám pokračovat ? tj. kde je kód ringu 0 reagující na SysCall? 13.4.2016 vjj 32 Intel: syscall • For SYSCALL, the processor saves RFLAGS into R11 and the RIP of the next instruction into RCX; • it then gets the privilege-level 0 target instruction and stack pointer from: • Target code segment — Reads a non-NULL selector from IA32_STAR[47:32]. MSR index C0000081 • Target instruction — Reads a 64-bit canonical address from IA32_LSTAR. IA32_LSTAR model specific register points to "KiSystemCall64" NT kernel routine. MSR index C0000082 • • Stack segment — Computed by adding 8 to the value in IA32_STAR[47:32]. 13.4.2016 System flags — The processor sets RFLAGS to the logical-AND of its current value with the complement of the value in the IA32_FMASK MSR. MSR index C0000084 vjj 33 target instruction • WinDbg > rdmsr C0000082 • WinDbg > ln KiSystemCall64 13.4.2016 vjj 34 livekd • download from Windows Sysinternals Marc Russinovich •> livekd -w runs WinDbg instead of "kd" •> livekd -w -m creates a mirror dump and starts WinDbg on it 13.4.2016 vjj 35 ntoskrnl - KiSystemCall64 > ln KiSystemCall64 (fffff800`034d5bc0) nt!KiSystemCall64 Exact matches: nt!KiSystemCall64 (<no parameter info>) > u nt!KiSystemCall64 nt!KiSystemCall64: ... 13.4.2016 vjj 36 KiSystemService ... nt!KiSystemServiceStart: mov edi,eax shr edi,7 and edi,20h and eax,0FFFh 13.4.2016 vjj 37 KiSystemService nt!KiSystemServiceRepeat: lea r10,[nt!KeServiceDescriptorTable] lea r11,[nt!KeServiceDescriptorTableShadow] test dword ptr [rbx+100h],80h cmovne r10,r11 cmp eax,dword ptr [rdi+r10+10h] jae nt!KiSystemServiceExit+0x1a7 mov r10,qword ptr [rdi+r10] movsxd r11,dword ptr [r10+rax*4] mov rax,r11 sar r11,4 add r10,r11 ... call 13.4.2016 r10 vjj 38 Service Table > ln nt!KiServiceTable (fffff800`034d1800) nt!KiServiceTable | Exact matches: nt!KiServiceTable (<no parameter info>) > dd nt!KiServiceTable 04134b00 02f5e200 fff6f000 02e8f205 031ce706 03136605 02ba5501 02b41b00 > ln nt!KiServiceTable+(031ce706>>4) (fffff800`037ee670) nt!NtDeviceIoControlFile | Exact matches: nt!NtDeviceIoControlFile (<no parameter info>) 13.4.2016 vjj 39
Similar documents
Memory Dump Analysis Anthology
.NET Managed Code Analysis in Complete Memory Dumps .................................... 131 Who Opened That File?......................................................................................
More information