1 / 20

Hide Process

Hide Process. 2007. 06. 목차. 목차. I. II. III. IV. V. VI. VII. Process Native API SSDT Hooking Memory Protection Hook Procedure 참고자료 Q & A. 프로세스 환경블록. 스레드 환경블록. 프로세스 주소공간. 시스템 주소공간. Windows 프로세스 블록. 프로세스 블록. 핸들 테이블. 스레드 블록. PROCESS.

shayna
Download Presentation

Hide Process

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Hide Process 2007. 06

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

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

  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 ▪ Process의 정보를 가지고 있는 구조체 다음 프로세스 프로세스의 이름 프로세스 ID

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

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

  12. KiServiceTableⅠ ▪ KiServiceTable(SSDT)는 unexported 구조체 ▪ KeServiceDescriptorTable에 KiServiceTable에 대한 단서 존재 typedefstructServiceDescriptorTable { SDEServiceDescriptor[4]; } SDT; typedefstructServiceDescriptorEntry { PDWORDKiServiceTable; PDWORDCounterTableBase; DWORDServiceLimit; PBYTEArgumentTable; } SDE; ServiceDescriptor[0].KiServiceTable == SSDT

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

  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. http://snoya.ye.ro/driver/inwin2k/ch06b.htm Process Internals 5. Attack Native API, Devguru 6. http://somma.egloos.com/2731001, 드라이버 쪼물딱거리기 3탄

  20. Q & A Q & A

More Related