ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Stealth (프로세스 은폐기법)
    > Information Security/Windows 2012. 6. 11. 19:41

    Stealth (프로세스 은폐기법)

     

    스텔스(stealth)는 프로세스를 은폐하는 기법이다.

     

    프로세스를 은폐할 때,

    은폐할 대상의 프로세스가 있다면 은폐할 대상 프로세스를 hooking하는 것이 아니라,

    주변 프로세스를 hooking 하는 방식이다.

     

    이 때 주변 프로세스에 사용되는 기법은 크게 말하면 API Hooking이 사용되는데,

    좀 더 세부적으로 나타내면, DLL 파일을 인젝션시켜

    은폐대상 프로세스의 DLL파일의 Code를 수정(API Code Patch)하는 방식이다.

     

     

    다음은 스텔스 기법을 도식화시킨 것이다.

     

     

    이 때 프로세스를 API Hooking하게 될 프로그램은 반드시 유저모드여야 한다.

    이 유저모드인 프로그램이 API Hooking을 통하여 프로세스에 접근하게 될텐데,

    프로그램에 있는 API함수인 CreatToolhelp32Snapshot() 과 EnumProcesses()가

    User Mode에서 프로세스의 정보 검색의 역할을 한다.

     

    그런데 이 두 API 함수는 Ntdll!ZwQuerySysemInformation()을 호출한다.

     

     

     

    따라서 API Hooking을 할 때 CreatToolhelp32Snapshot()과 EnumProcesses()를 hooking할 필요 없이

    Ntdll!ZwQuerySystemInformation()을 hooking하게 되면

    프로세스의 정보를 연결리스트 상태로 얻을 수 있다.

     

     

    여기에서, 우리가 하고자 하는것은 프로세스를 은폐하고자 하는 것이므로

    Ntdll!ZwQuery~~()함수에 의해 얻어진 연결리스트상태의 프로세스 정보를 조작하게 되면

    대상 프로세스를 은폐하는 것이 가능하게 된다.

     

    간단하게 이 기법을 이용하여

    notepad.exe파일을 은폐하는 과정을 담은 동영상을 첨부한다.

     환경은 VMware에서 Windows XP servicepack2 로 구현하였다.

     

     

     

    이 동영상에서 HideProc.exe파일은 Stealth.dll을 주입시켜

    notepad.exe 프로세스를 은폐하게 되는 프로그램(유저모드)이다.

     

     

    다음은 HideProc.exe와 Stealth.dll에서 프로세스에 영향을 끼치는 몇 가지 API 함수를 추려놓은 것이다.

     

     

     

     여기에서 프로세스는 은폐 대상 프로세스이며,

     

    아까 Hideproc.exe파일에서 얻어진 프로세스 리스트와 PID를 바탕으로

    Stealth.dll의 hook_by_code() API함수를 통해

    원본 프로세스(notepad.exe)의 시작 5byte를 JMP XXXX로 변경시킨다.

     

    이 의미는 원본 프로세스(notepad.exe)가 보여지지 않고 다음 프로세스가 보이도록 넘겨주는(JMP)역할을

    하는것으로 보인다.

     

     

    이러한 스텔스 기법의 단점은

    예를들어 하나의 프로세스 익스플로러가 실행되었을 때, Ntdll!ZwQuerySystemInformaton() 함수를 Hooking했을 때

    은폐 대상 프로세스(Test.exe)는 찾는것이 불가능하다.

    그러나 프로세스 익스플로러가 하나 이상 추가로 실행되었을 때 (새로운 프로세스가 실행되었을 때)

    은폐 대상 프로세스(Test.exe)는 찾는 것이 가능하다는 점이다.

     

    그렇기 때문에 이 Stealth기법을 완벽하게 실행하고자 한다면

     

     

    새로 추가되는 프로세스를 포함한 모든 프로세스를 Hooking해야 한다.

    이러한 기법을 Global Hooking이라고 한다.

     

    참고 : www.reversecore.com 스텔스기법

     

    728x90
    반응형

    '> Information Security > Windows' 카테고리의 다른 글

    Win32 API 기초  (0) 2014.06.17
    악성코드 탐지 - 툴 사용법  (0) 2014.05.30
    API Code Patch  (0) 2012.06.11
    안티디버깅 기법 - CheckRemoteDebuggerPresent()  (1) 2012.05.20
    안티디버깅 - IsDebuggerPresent  (3) 2012.04.11
Designed by Tistory.