Rootkits Detection on Windows Systems Joanna Rutkowska ITUnderground Conference, October 12 th -13 th 2004, Warsaw.

Slides:



Advertisements
Similar presentations
Project 5: Virtual Memory
Advertisements

Sample chapter from Reverse Engineering Course.
Memory Protection: Kernel and User Address Spaces  Background  Address binding  How memory protection is achieved.
R4 Dynamically loading processes. Overview R4 is closely related to R3, much of what you have written for R3 applies to R4 In R3, we executed procedures.
VICE – Catch the hookers! (Plus new rootkit techniques)
2 © 2004, Cisco Systems, Inc. All rights reserved. IT Essentials I v. 3 Module 4 Operating System Fundamentals.
Operating System Security : David Phillips A Study of Windows Rootkits.
Operating-System Structures
1 Task Manager: Processes vs Applications Tabs Processes tab: List of processes “Running” means waiting for window messages Applications tab: List of top.
Windows Rootkits – Userland API Hooking Robert Vinson – IT Security Analyst – University of Iowa 09/06/06.
Windows Security and Rootkits Mike Willard January 2007.
Process in Unix, Linux and Windows CS-3013 C-term Processes in Unix, Linux, and Windows CS-3013 Operating Systems (Slides include materials from.
Chapter 6 Implementing Processes, Threads, and Resources.
ROOT KITS. Overview History What is a rootkit? Rootkit capabilities Rootkits on windows OS Rootkit demo Detection methodologies Good tools for detection.
Processes in Unix, Linux, and Windows CS-502 Fall Processes in Unix, Linux, and Windows CS502 Operating Systems (Slides include materials from Operating.
Copyright John “Four” Flynn This work is the intellectual property of the author. Permission is granted for this material to be shared for non-commercial,
70-293: MCSE Guide to Planning a Microsoft Windows Server 2003 Network, Enhanced Chapter 14: Problem Recovery.
Slide 6-1 Copyright © 2004 Pearson Education, Inc. Operating Systems: A Modern Perspective, Chapter 6.
MS systems use one of the following: LanManager Hash (LM) LanManager Hash (LM) NT LanManager (NTLM) NT LanManager (NTLM) Cached passwords Cached passwords.
Microsoft Windows 2003 Server. Client/Server Environment Many client computers connect to a server.
WARNING! Sample chapter -Materials in this sample chapter is selected advanced penetration from
_______________________________________________________________________________________________________________ E-Commerce: Fundamentals and Applications1.
Windows Memory Forensics and Direct Kernel Object Manipulation Jesse Kornblum.
Chapter 8 Windows Outline Programming Windows 2000 System structure Processes and threads in Windows 2000 Memory management The Windows 2000 file.
Process in Unix, Linux, and Windows CS-3013 A-term Processes in Unix, Linux, and Windows CS-3013 Operating Systems (Slides include materials from.
XP New Perspectives on Microsoft Office Access 2003 Tutorial 12 1 Microsoft Office Access 2003 Tutorial 12 – Managing and Securing a Database.
Windows Operating System Internals - by David A. Solomon and Mark E. Russinovich with Andreas Polze Unit OS3: Concurrency 3.5. Lab Slides & Lab Manual.
Disclaimer The Content, Demonstration, Source Code and Programs presented here is "AS IS" without any warranty or conditions.
Rootkits in Windows XP  What they are and how they work.
Chapter 2: Operating-System Structures. 2.2 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts Chapter 2: Operating-System Structures Operating.
Monnappa KA  Info Security Cisco  Member of SecurityXploded  Reverse Engineering, Malware Analysis, Memory Forensics 
BlackHat Windows Security 2004 Data Hiding on a Live System by Harlan Carvey
Windows Operating System Internals - by David A. Solomon and Mark E. Russinovich with Andreas Polze Unit OS4: Scheduling and Dispatch 4.6. Lab Manual.
Week 10-11c Attacks and Malware III. Remote Control Facility distinguishes a bot from a worm distinguishes a bot from a worm worm propagates itself and.
Hidden Processes: The Implication for Intrusion Detection
Spam Mail FilterJeff Rupp & Frank Watson1 Implement Spam Mail Filtration inside Linux kernel Jeff Rupp and Frank Watson.
Operating Systems Security
Lecture 18 Windows – NT File System (NTFS)
M. Accetta, R. Baron, W. Bolosky, D. Golub, R. Rashid, A. Tevanian, and M. Young MACH: A New Kernel Foundation for UNIX Development Presenter: Wei-Lwun.
Copyright Security-Assessment.com 2006 Rootkits – Advanced Malware Presented by Darren Bilby Brightstar, IT Security Summit, April 2006.
Lecture 4 Mechanisms & Kernel for NOSs. Mechanisms for Network Operating Systems  Network operating systems provide three basic mechanisms that support.
Windows ® 2000 Debugging André Vachon Development Lead Windows Debuggers Microsoft Corporation.
2 Processor(s)Main MemoryDevices Process, Thread & Resource Manager Memory Manager Device Manager File Manager.
Lecture 7 Rootkits Hoglund/Butler (Chapter 5-6). Avoiding detection Two ways rootkits can avoid detection –Modify execution path of operating system to.
Digital Forensics Dr. Bhavani Thuraisingham The University of Texas at Dallas Lecture #8 File Systems September 22, 2008.
Lecture 5 Rootkits Hoglund/Butler (Chapters 1-3).
Lecture 11 Example Rootkit. Intel internship Intel CTG (Corporate Technology Group) –Advanced research & development –System integrity services using.
MINIX Presented by: Clinton Morse, Joseph Paetz, Theresa Sullivan, and Angela Volk.
Memory Management Chapter 5 Advanced Operating System.
Lecture 8 Rootkits Hoglund/Butler (Chapter 7-8). Avoiding detection Two ways rootkits can avoid detection –Modify execution path of operating system to.
Detecting Windows Server Compromises Joanna Rutkowska HIVERCON 2003, Dublin, Ireland, November 6 th, 2003.
Cryptographic Hash Function. A hash function H accepts a variable-length block of data as input and produces a fixed-size hash value h = H(M). The principal.
Rogue Wireless Router By Alex Crowell and James Kasten.
Operating Systems: A Modern Perspective, Chapter 6
Malware Analysis with Volatility
Hidden Processes: The Implication for Intrusion Detection
Operation System Program 4
Chapter 11: File System Implementation
Undermining the Linux Kernel: Malicious Code Injection via /dev/mem
Practical Malware Analysis
Lecture Topics: 11/1 General Operating System Concepts Processes
Rootkits Jonathan Hobbs.
Outline Chapter 2 (cont) OS Design OS structure
Implementing Processes, Threads, and Resources
System calls….. C-program->POSIX call
Outline Process Management Process manager Hardware process
In Today’s Class.. General Kernel Responsibilities Kernel Organization
Dirty COW Race Condition Attack
Presentation transcript:

Rootkits Detection on Windows Systems Joanna Rutkowska ITUnderground Conference, October 12 th -13 th 2004, Warsaw

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Sample scenario… pwdlogger.exe (web passwords logger) with sniffed passwords encoded using some text based steganography techniques compromised system

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Function hooking… Logon passwords sniffing Redirection: msgina.dll! WlxLoggedOutSAS() to rootkit function, which logs the passwords …and sends them to the attacker (using CC)

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Function hooking e e9 32 bit offset JMP (relative)

Rootkit Detection in Windows Systems. © Joanna Rutkowska, original function Hooking with original code saved e entry entry + 16 jmp (entry+16) orig_entry(); remove_hidden(); return; orig_entry

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Another example backdoor. exe Compromised system cmd.exe communication with backdoor (covert channel in HTTP or DNS)

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Rootkit goals Hide intruder’s processes ( pwdlogger.exe, backdoor.exe, etc…) Hide registry keys responsible for starting intruder’s tools after system reboot Sometimes to hide some files (intruder’s tools).

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Live DEMO: Simple rootkit VANQUISH

Rootkit Detection in Windows Systems. © Joanna Rutkowska, MS Kernel Debugger MS Debugging Tools can be freely downloaded from: Powerful debugger not only for catching rootkits;) Allows usermode processes debugging kernel debugging To debug kernel we need to: start system with /debug switch (I.e. requires reboot on a production system) use Livekd tool from sysinternals.com (does not require reboot)

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Live DEMO: Detection of simple rootkit C:\>pslist winlogon Name Pid Pri Thd Hnd Mem User Time (...) winlogon :00: (...) C:\>cdb.exe -p 456 Microsoft (R) Windows Debugger Version Copyright (c) Microsoft Corporation. All rights reserved. (...) 0:018>.exepath c:\Windows\system32 Executable image search path is: c:\Windows\system32 0:018> !chkimg -d msgina 75844b b9c 5 bytes - MSGINA!WlxLoggedOutSAS [ 55 8b ec 83 ec:e9 c1 11 2a 8c ] 5 errors : msgina (75844b b9c) 0:018>

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Useful command: !chkimg kd> !chkimg -d ntdll 77f f4246b 5 bytes - ntdll!ZwCreateFile [ b :e ] [...] starting address of the region which was altered (by rootkit) original bytesnew bytes (inserted by rootkit)

Rootkit Detection in Windows Systems. © Joanna Rutkowska, kd> u 77f42467 ntdll!ZwCreateFile: 77f42467 e jmp 7ffa488d 77f4246c ba0003fe7f mov edx,0x7ffe0300 [...] Classic API hooking! At address 7ffa488d we should find a rootkit code.

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Debugger cheating kd.exe debuggee (np. winlogon.exe ) NtReadVirtualMemory() Some rootkits are hooking NtReadVirtualMemory() to cheat debuggers, when they are reading processes memory. The same apply to dumping tools, like pmdump.exe

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Live DEMO: rootkit which cheats debugger on the fly Rootkit Hackder Defender

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Livekd tool Available at (free): Recommended in MS documentation as an alternative to using /debug switch Allows for live kernel debugging on the same machine Creates virtual memory crash dump and spawns kd.exe to work on it Kernel memory is read by special kernel driver: LiveKdD.sys Everything works in READ-ONLY mode – seems to be a safe choice on a production system Obviously circumvents NtReadVirtualMemory() trick!

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Live DEMO: detection of yyt kd>.exepath c:\windows\system32 Executable image search path is: c:\windows\system32 kd> !chkimg ntdll 25 errors : ntdll (77f426bf-77f42f7f) kd> !chkimg -d ntdll (...) 77f f4273b 5 bytes - ntdll!NtEnumerateKey (+0x78) [ b8 4b :e9 65 f6 0b 98 ] (...) 25 errors : ntdll (77f426bf-77f42f7f) kd> u 77f42737 ntdll!NtEnumerateKey: 77f42737 jmp globalc!HooksCanUnloadNow+0xc2e(10001da1) 77f4273c mov edx,0x7ffe0300 (...) kd>

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Detection of yyt rootkit (2) kd> lm f a 10001da1 start end module name globalc  C:\WINDOWS\system32\com\sserver\globalc.dll kd> ntdll!NtEnumerateKey() seems to be redirected to 0x10001da1 address (as seen on the previous slide). Lets take a look to which module it belongs… We see that the suspicious code is within globalc.dll module, in the following directory: C:\WINDOWS\system32\com\sserver\ Note: if the rootkit was not using DLL injection technique (as in this case), but rather a RAW memory change, we would not see any module for its code. But still we would be able to detect its presence, although finding the exactable would not be so easy…

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Detection of yyt rootkit (3) C:\>dir C:\WINDOWS\system32\com\ 10/03/ :59 PM. 10/03/ :59 PM.. 03/25/ :00 PM 189,440 comadmin.dll 03/25/ :00 PM 61,440 comempty.dat 03/25/ :00 PM 91,620 comexp.msc 03/25/ :00 PM 8,704 comrepl.exe 03/25/ :00 PM 5,632 comrereg.exe 03/25/ :00 PM 19,456 mtsadmin.tlb 6 File(s) 376,292 bytes 2 Dir(s) 1,518,030,848 bytes free C:\> …it turns up that sserver\ directory is hidden...

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Detection of yyt rootkit (4) C:\>cd C:\WINDOWS\system32\com\sserver\ C:\WINDOWS\system32\Com\sserver>dir 10/03/ :59 PM. 10/03/ :59 PM.. 05/31/ :43 PM 108,544 comine.exe 10/03/ :59 PM 135,168 globalc.dll 10/03/ :59 PM 32,064 npf.sys 10/03/ :14 PM 1,418 rtkit.log 4 File(s) 277,194 bytes 2 Dir(s) 1,518,030,848 bytes free C:\WINDOWS\system32\Com\sserver> …but we could enter it, since we know its name So, we can see a rootkit program, DLL which was used to infect other processes, WinPCAP driver and finally the rootkit log.

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Creating memory dumps Livekd + KD works fine as far as online analysis is concerned Sometimes we would like to save a crash dump and perform the whole analysis in the lab Standard mechanism for creating crash dumps requires system reboot (or at least booting with /debug switch, which in fact is unacceptable on a production system)

Rootkit Detection in Windows Systems. © Joanna Rutkowska, \Device\PhysicalMemory

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Access to physical memory \Device\PhysicalMemory object of type Section NtOpenSection()  to get the handle NtMapViewOfSection()  to map piece of physical memory to process virtual memory 4GB 0 2GB virtual memory physical memory normal mapping NtMapViewOfSection () kernel

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Tools for creating dumps dd.exe, together with other forensic tools can be downloaded from: dd if=\\.\PhysicalMemory of=c:\physmem.img unfortunately such dump is not compatible with crashdump which could be used under MS KD dd however, has many other interesting applications. livekd + kd: To create full crash dump:.dump /f c:\kernel.dmp reading dump into debugger: kd –z c:\kernel.dmp

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Usermode rootkits short summary We focused on usermode rootkits so far. Can hide quite well in the system. Usually they work together intruder’s process(es) making them invisible. Those processes may include backdoor processes (like in yyt), command prompt for the backdoor (hxdef) or some kind of password sniffer. So far we are able to detect them all using LiveKd and MS KD.

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Other types of rootkits Kernel rootkits which modify System Service Table (famous NTRootkit by Greg Hoglund) detection: SST analysis using KD – see script on the next slide. It simply checks, for every SST entry to which module in belongs. Kernel rootkits which hook function code (similar to usermode rootkits) detection: almost the same as with usermode rootkits – use !chkimg command. The above two types are however not very poplar in the wild

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Useful script for checking SST $$ Get the service table length r $t0 = poi(KeServiceDescriptorTable+8);.for ( r $t1 = r $t1 + 1) { r $t2 = $$ get the syscall handler address into $addr as /x $addr (poi & 0`FFFFFFFF); $$ check to which module $addr belongs.block { as /c $module lm 1m a $addr; } as /x {.echo Service ${$sysno} : handler at ${$addr} --> ${$module}; } ad ${/v:$module}; ad ${/v:$addr}; ad ${/v:$sysno}; }

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Integrity checking on many levels Filesystem/Registry Process memory Code sections IAT tables Kernel SST/IDT Kernel Code... Process memory IDT SST kernel userland Is it enough? Of course not;)

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Is it enough? Is it possible to write a rootkit, which: Does not modify any files/registry Does not modify process user memory space Does not hook IDT nor SDT/SST/ KiServiceTable Does not change kernel code area

Rootkit Detection in Windows Systems. © Joanna Rutkowska, DKOM (Direct Kernel Object Modification) New approach to hiding in the system Pioneered by James Butler Implemented in fu rootkit Does not require any code changes, only unlinking some objects from the kernel internal lists

Rootkit Detection in Windows Systems. © Joanna Rutkowska, EPROCESS Objects Every processes is described by EPROCESS object Every thread is described by ETHREAD object Structures’ internals can be seen under KD: eg. kd> dt _EPROCESS Process1 Thread1Thread2Thread3 Process2 Thread1Thread2 Process3 Thread1Thread2Thread3 ActiveProcessList

Rootkit Detection in Windows Systems. © Joanna Rutkowska, ActiveProcessLinks... All process objects are kept on this list. It is implemented by ActiveProcessLinks fields in the EPROCESS structure. EPROCESS

Rootkit Detection in Windows Systems. © Joanna Rutkowska, EPROCESS Object kd> dt nt!_EPROCESS +0x000 Pcb : _KPROCESS +0x06c ProcessLock : _EX_PUSH_LOCK +0x070 CreateTime : _LARGE_INTEGER +0x078 ExitTime : _LARGE_INTEGER +0x080 RundownProtect : _EX_RUNDOWN_REF +0x084 UniqueProcessId : Ptr32 Void +0x088 ActiveProcessLinks : _LIST_ENTRY +0x090 QuotaUsage : [3] Uint4B +0x09c QuotaPeak : [3] Uint4B +0x0a8 CommitCharge : Uint4B +0x0ac PeakVirtualSize : Uint4B +0x0b0 VirtualSize : Uint4B +0x0b4 SessionProcessLinks : _LIST_ENTRY +0x0bc DebugPort : Ptr32 Void (...)

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Fu rootkit... Intruder’s process... Now it is hidden!

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Live DEMO klogger.exe – simple keystroke logger processes FU rootkit –DKOM based rootkit, which we use to hide klogger.exe process OK, so how to detect the hidden processes now?

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Detection of hidden processes Dispatcher thread list analysis Heuristic search for blocks of data, which “looks” like KPROCESS structures

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Dispatcher Database (Win2000): KiDispatcherReadyListHead actually 32 lists (one for each priority level), grouping threads in state READY. KiWaitInListHead KiWaitOutListHead 31 0 Threads which are not ready for execution (for e.g. waiting on some object) KiDispatcherReadyListHead

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Dispatcher Database (Win2003) Lack of KiWaitInListHead and KiWaitOutListHead on XP and 2003 systems  The threads are still kept on some lists however, but nobody(?) knows where those lists are starting… Solution: we need to search for the threads starting from known threads and follow pointers in KTHREAD… KTHREAD...

Rootkit Detection in Windows Systems. © Joanna Rutkowska, KPROCESS Object kd> dt nt!_KPROCESS +0x000 Header : _DISPATCHER_HEADER (...) +0x028 Int21Descriptor : _KIDTENTRY +0x030 IopmOffset : Uint2B +0x032 Iopl : UChar +0x033 Unused : UChar +0x034 ActiveProcessors : Uint4B +0x038 KernelTime : Uint4B +0x03c UserTime : Uint4B +0x040 ReadyListHead : _LIST_ENTRY +0x048 SwapListEntry : _SINGLE_LIST_ENTRY +0x04c VdmTrapcHandler : Ptr32 Void +0x050 ThreadListHead : _LIST_ENTRY +0x058 ProcessLock : Uint4B (...)

Rootkit Detection in Windows Systems. © Joanna Rutkowska, KTHREAD Object kd> dt nt!_KTHREAD +0x000 Header : _DISPATCHER_HEADER +0x010 MutantListHead : _LIST_ENTRY (...) +0x060 WaitListEntry : _LIST_ENTRY +0x060 SwapListEntry : _SINGLE_LIST_ENTRY (...) +0x0a0 WaitBlock : [4] _KWAIT_BLOCK +0x100 QueueListEntry : _LIST_ENTRY +0x108 ApcStateIndex : UChar (...) +0x1a8 LegoData : Ptr32 Void +0x1ac ThreadListEntry : _LIST_ENTRY +0x1b4 LargeStack : UChar (...)

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Algorithm for finding all threads in the system (works on 2000, XP and 2003) for each process p on PsActiveProcessList do { for each thread t which belongs to process p do { findAllThreadsFromList (t, WaitList) findAllThreadsFromList (t, QueueListEntry) findAllThreadsFromList (t, ThreadListEntry) } findAllThreadsFromList (KTHREAD t, int listOffset) { for each element e on list (t+listOffset) do if (isKTHREAD(e)) then addThreadToFoundList (e); }

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Thread  Process Having a list of all threads in the system it is trivial to compile a list of all processes in that system. See slide #30

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Live DEMO: detecting hidden processes on Win 2003 C:\tools>psfinder.exe /t show all PID Name System 372 smss.exe 432 csrss.exe 456 winlogon.exe 500 services.exe (...) 512 lsass.exe 1180 explorer.exe 476 IEXPLORE.EXE 604 cmd.exe h 304 klogger.exe 412 cmd.exe 620 psfinder.exe (...)

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Alternative for process hiding rootkit Dedicated rootkit (for e.g. integrated keylogger and covert channel) Implemented in kernel (Partly) implemented as an additional thread inserted in to some system processes (note the difference with current usermode rootkits) Hard to write. Well…;) Hard to detect…

Rootkit Detection in Windows Systems. © Joanna Rutkowska, Summary MS Kernel Debugger can be very useful tool for system compromise detection It should be safe to use it even on a production server (together with LiveKD) Presented techniques (KD + DKOM process detection) allows to detect all known rootkits (known to the author) As we saw DKOM rootkit require special tools (like klister) and cannot be detected by KD (anybody would like to implement klister as KD script?)