160 likes | 385 Views
Evolution of Rootkit. amy@panicsecurity.com Amadoh4ck in Null@Root. Existing Rootkit. 저장위치 : File System 동작을 위한 구현방법 Loadable Kernel Module 이용 (LKM Rootkit) API Hooking IDT/SDT 변조 Etc … 수행 작업 Network Traffic 및 사용자 입력 감시 Backdoor 생성 Log File 수정 및 삭제 Other Computer 공격 Etc ….
E N D
Evolution of Rootkit amy@panicsecurity.com Amadoh4ck in Null@Root
Existing Rootkit • 저장위치: File System • 동작을 위한 구현방법 • Loadable Kernel Module 이용 (LKM Rootkit) • API Hooking • IDT/SDT 변조 • Etc … • 수행 작업 • Network Traffic 및 사용자 입력 감시 • Backdoor 생성 • Log File 수정 및 삭제 • Other Computer 공격 • Etc …
The future of Rootkit • 저장위치 • The first sector of bootable partition • EPROM or EEPROM • 동작을 위한 구현방법 • Hooking Interrupt in real mode IVT • Interrupt 특성에 맞게 기능 구현 필요 • Int 13h hooking (Disk I/O)의 경우 OS Boot 영역 로딩 위치를 변조시킴 • Int 10h hooking (VGA/VGE BIOS 함수들 구현) • 수행 작업 • 기존 Rootkit과 동일
Rootkit using bootstrap • BIOS boot process and Windows startup • BIOS POST (Power On Self Test) 과정 수행 • BIOS는 Booting 가능한 매체에 코드 수행과정 넘겨줌 • Disk driver, CD-ROM, Network boot (PXE) • 각 매체 별로 Booting 과정 수행 • Hard Drive • MBR (Master Boot Record) • bootstrap loader (Windows, Linux, Etc…) • Windows의 경우 NTLDR • OSLOADER.EXE • NTDETECT.COM • NTOSKRNL.EXE & HAL.DLL & boot drivers • CD : 과정은 거의 동일 (Sector Size, Data Format 등 다름) • PXE (Preboot eXecution Environment) • BOOTP(DHCP기반)와 TFTP 를 통한 Network boot • Boot file 다운로드 받은 후 수행
Rootkit using bootstrap • Boot Time Rootkit의 장점 • BIOS 보다는 후에 수행되지만 OS 보다는 먼저 수행 • Rootkit의 수행된 후의 모든 다음 부팅 과정을 제어할 수 있다. • Windows는 부팅 시 BIOS Interrupt 를 Wrapping 하기 때문에 DOS가 아닌 Windows에서의 real mode Interrupt Hooking은 불가능 • 현재 IDT 변조는 단지 Windows가 Wrapping한 Interrupt Description Table의 주소 값을 변조하는 것이다. • OS 부팅보다 먼저 수행되기 때문에 real mode Interrupt Hooking이 가능하며 Anti-virus 솔루션이나 기타 보안 솔루션 (Keyboard Stroke Protect Solution 등)들을 무력화 시킬 수 있다. • 최고 권한을 가진다. (Ring 0)
Rootkit using bootstrap • Boot Time Rootkit의 단점 • 이미 로딩된 OS에서는 동작하지 않는다. 즉, 부팅 과정을 적어도 한번은 수행해야 동작할 수 있다. 서버처럼 부팅이 빈번하지 않은 시스템에서는 기회를 얻기까지의 시간이 오래 걸린다. • 제어하기를 원하는 몇 가지 기능을 제외한 나머지 모든 시스템 기능들은 정상적으로 동작하도록 해야 한다. • 적재될 공간의 Size가 제한되어 있으므로 작성되어야 하는 코드 Size가 제한적이다. INT 13h Hooking을 통해 해결 Boot 영역에서 수행하는 코드는 INT 13h Hooking과 이전 코드 복사, Hooking 후 이전 코드 수행 등만 수행하면 된다. • Ring 0 에서 Ring 3, Kernel Land 에서 User Land 로 전환이 필요하다.
Rootkit using bootstrap • Requirement of Boot Time Rootkit • Rootkit Code를 복사하기 위한 Physical Memory 영역 • 더 많은 기능들을 수행하도록 하기 위해 OS 관련 File들을 Patch해야 한다. INT 13h의 AH=02h (Read Sector) INT 13h의 AH=42h (Large Disk를 위한 Extended Read) • INT 13h를 통해 OSLOADER안의 code signature를 검색하고 Patch한다. • OSLOADER의 패치를 통해 다음 Booting 순서에 존재하는 다른 기능이나 실행 등을 조작할 수 있다. • Boot drivers • INT 15h Hooking을 통한 Memory map의 조작 (백신 우회) • INT 13h Hooking을 통한 Boot 영역 감염 여부 숨김
Rootkit using bootstrap • Implementation of Boot Time Rootkit (Part 1) • INT 13h Hooking • The first sector of Boot Partition를 다른 메모리에 저장 • 다음 부팅 과정이나 응용프로그램에 의해서 사용되지 않는 영역에 복사해 두어야 한다. • Hooking INT 13h • INT 13h hooking 기능 코드는 sector들을 읽을 때마다 code signature를 검사한다. • OSLOADER의 적당한 code signature를 검사하여 일치하면 Patch하고 일치하지 않으면 예전 INT 13h를 수행하도록 처리한다. • AH=02h, AH=42h 둘 다 Hooking 해야 한다. (Large Disk를 위해) • Size에 맞게 OSLOADER를 Patch한다. • 주의: OSLOADER는 PE checksum을 확인한다. 그러므로, checksum checking code를 disable 시켜야 한다.
Rootkit using bootstrap • Implementation of Boot Time Rootkit (Part 2) • OSLOADER Patch • Boot driver가 로딩된 후에 실행되어진 6 byte만 Patch 0031ADF1 8B F0 MOV ESI, EAX 0031ADF3 85 F6 TEST ESI, ESI 0031ADF5 74 21 JZ $+23h 0031ADF7 80 ... ; not modified • 6 byte 코드로 Rootkit Code 저장 위치로 Jump해야 함 • CALL seg:ofs32 7 byte • CALL DWORD PTR [ofs32] 6 byte • Paging은 신경 쓰지 않아도 됨 • OSLOADER는 16MB physical memory를 16MB virtual memory로 mapping 되기 때문 • 이후부터는 Bookdoor나 기타 Rootkit 기능을 하는 Code들을 작성 • 대표적으로 NDIS.SYS를 Hooking하여 Network Traffic Monitoring 및 명령의 전달 매체로 사용
Rootkit using bootstrap • 구현상 정작 중요한 것? • How to modify Bootstrap? • The first sector of Boot Partition를 어떻게 변조할 수 있나? • Kernel에 진입하지 않고도 raw disk operation을 수행할 수 있다? • NT Kernel의 취약점이 아닌 특징일 뿐
Rootkit using bootstrap • CPL vs. IOPL • CPL : Current Privilege Level • IOPL : I/O Privilege Level IO와 관련된 Instruction 들의 권한 정의 • EFLAGS Register가 IOPL Field를 포함 • CPL <= IOPL 조건이 성립되어야 다음 Instruction들의 사용이 가능해 진다. • IN / INSB / INSW / INSD • OUT / OUTSB / OUTSW / OUTSD • CLI / STI • IOPL은 ring 0에서만 변경 가능하다.
Rootkit using bootstrap • 특정 CSRSS thread 들은 IOPL=3 권한으로 실행된다. • 이러한 Thread들은 hijack 가능 • NtSetInformationProcess(ProcessUserModeIOPL) • 두 방법 모두 SYSTEM-equivalent privileges 필요 • Port I/O를 사용하면 low-level disk 접근 허용 • Possible on IDE drives with only port I/O • No DMA required, no IRQs generated, etc. • For sample code, see [Kaze] in References • So what? • Evade anti-virus boot sector protection? • Evade system integrity assurance software? • Defeat machine state preservation software?
Rootkit using firmware • PCI bus • Next Seminar
Reference • 80386 Programmer’s Reference • http://pdos.csail.mit.edu/6.828/2005/readings/i386/toc.htm • http://www.x86.org/articles/ • IOPL Technique • http://www.uninformed.org/?v=2&a=4&t=pdf • Kaze • http://fat.next-touch.com/data/fatdoc1.txt • EEYE • http://research.eeye.com/html/tools/RT20060801-7.html • http://research.eeye.com/html/Papers/download/eEyeDigitalSecurity_Pixie%20Presentation.pdf
Q & A • 너무 어려운 건 묻지 마세용.. ^^