Presentation is loading. Please wait.

Presentation is loading. Please wait.

Hide Process 2007. 06.

Similar presentations


Presentation on theme: "Hide Process 2007. 06."— Presentation transcript:

1 Hide Process

2 목차 I. II. III. IV. V. VI. VII. Process Native API SSDT Hooking
Memory Protection Hook Procedure 참고자료 Q & A

3 PROCESS ▪ Windows 에서 모든 프로그램은 Process 단위로 관리
▪ 모든 Process는 Thread를 가지고 있음 ▪ EPROCESS 구조체를 이용하여 프로세스들을 관리함. 즉, 모든 Process는 EPROCESS 구조체에 기록된다. 프로세스 환경블록 스레드 블록 Windows 프로세스 블록 핸들 테이블 프로세스 주소공간 시스템 주소공간

4 EPROCESS ▪ EPROCESS의 구조체의 형태 프로세스 블록들의 리스트 헤드 ActiveProcessLinks

5 Process 감추기 ▪ EPROCESS 구조체를 사용한 Linked List를 변조

6 Native API ▪ Windows Native API는 NtXXX, ZwXXX의 두 계열이 있음
• 모든 User Mode Application들은 System Service를 받기 위해 Native API를 호출 • Native API는 SYSENTER를 호출하며 이 명령에 의해 KiSystemService 내부함수가 호출 • KiSystemService는 SSDT를 참고하여 해당 Native API의 Entry Point를 가져 옴 • User Mode 에서의 Native API 호출 - 모두 NtXXX 계열의 API를 호출 • Kernel Mode 에서의 Native API 호출 - NtXXX API 호출 : 직접 System Service 호출(실제 Service Code) - ZwXXX API 호출 : SYSENTER를 호출 -> KiSystemService -> NtXXX API

7 NtQuerySystemInformation
▪ 프로세스 목록을 요구할 때(작업 관리자) 호출되는 Native API NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS SystemInformationClass, PVOID SystemInformation, ULONG SystemInformationLength, PULONG ReturnLength ); IN OUT

8 NtQuerySystemInformation
▪ 프로세스 목록을 요구할 때(작업 관리자) 호출되는 Native API Application SystemInformationClass = SystemProcessesAndThreadsInformtion Call NtQuerySystemInformation PVOID SystemInformation = _SYSTEM_PROCESS_INFORMATION

9 _SYSTEM_PROCESS_INFORMATION
다음 프로세스 프로세스의 이름 프로세스 ID

10 SSDT ▪ System Service Dispatch Table ▪ 이용 가능한 모든 시스템 서비스들의 주소를 가지고 있음
▪ 인터럽트 발생 시 Windows는 이 테이블을 참고하여 적절한 결과 값을 되돌려 줌

11 SSDT Hook ▪ SDT에 기록된 시스템 서비스의 Entry Point를 바꿔치기 하는 것

12 KiServiceTableⅠ ▪ KiServiceTable(SSDT)는 unexported 구조체
▪ KeServiceDescriptorTable에 KiServiceTable에 대한 단서 존재 typedef struct ServiceDescriptorTable { SDE ServiceDescriptor[4]; } SDT; typedef struct ServiceDescriptorEntry { PDWORD KiServiceTable; PDWORD CounterTableBase; DWORD ServiceLimit; PBYTE ArgumentTable; } SDE; ServiceDescriptor[0].KiServiceTable == SSDT

13 KiServiceTableⅡ ▪ WINDBG를 이용해 구조체를 살펴볼 수 있음 KiServiceTable[0] ==
NtAcceptConnectPort KiServiceTable[0] KiServiceTable[1] KiServiceTable[2] KiServiceTable[3]

14 ZwQuerySystemInformation
▪ 모든 ZwXXX API는 처음 시작이 mov eax, index number 의 형태를 가진다 ▪ Index Number는 OpCode 다음 바이트부터 4바이트를 차지한다 KeServiceDescriptor.ServiceDescriptor[0].KiServiceTable[0AD] == NtQuerySystemInformation

15 Change Function ▪ NewZwQuerySystemInformation으로 바꿔치기

16 Memory Protection Change
▪ CR0 Register를 이용해 write protection 제거 Write Protection

17 NewZwQuerySystemInformationⅠ
▪ 프로세스 이름을 검사하여 Link를 조작함

18 NewZwQuerySystemInformationⅡ
▪ 프로세스 이름을 검사하여 Link를 조작함 숨기기를 원하는 프로세스 이름이면

19 참고 자료 1. Win2K Kernel Hidden Process, SIG2 G-TEC
2. Inside Windows Rootkits, SIG2 G-TEC 3. 아무도 모르는 Process, Devguru 4. Process Internals 5. Attack Native API, Devguru 6. 드라이버 쪼물딱거리기 3탄

20 Q & A Q & A


Download ppt "Hide Process 2007. 06."

Similar presentations


Ads by Google