ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 악성코드 탐지 - 툴 사용법
    > Information Security/Windows 2014. 5. 30. 13:42

    이번 포스팅에서 언급할 악성코드 탐지방법론은

    일차적으로 백신에서 탐지하지 못하였는데 의심되는 악성코드가 어딘가에 있을 것이라 생각 될 때.

    내 PC를 좀 더 깔끔한 환경에서 사용하고 싶을 때.

     

    악성코드의 기본적인 특성을 바탕으로 수동으로 탐지하는 방법에 대해 기술할 것이다.

     

     

    1. 프로세스 확인


    가장 먼저 확인해야 할 것은 현재 실행되고 있는 프로세스 목록을 확인하는 것이다.

    현재 사용하고 있는 응용프로그램과 관련이 없는 프로세스를 판별하고, 비정상적인 프로세스를 의심해 나가는 것을 시작으로 한다.


    Windows 작업관리자 이외에, 원하는 정보를 한눈에 파악하기 쉬운 몇가지 툴을 아래와 같이 정리해보았다.

     

    1) Procexp (Sysinternals)


    Microsoft에서 제공하는 Sysinternals Tool에 내장되어 있는 Procexp, Procmon을 통해 현재 실행되고 있는 프로세스를 작업 관리자보다 명확하게 확인할 수 있다.

     

     

     

    2) Procmon, Process Monitor (Sysinternals)

     

    프로세스 모니터는 프로세스 동작 과정과 부트로그 또한 확인할 수 있다.

    Options > Enable Boot Logging

     

     

     

    Tools > Process Tree

     

     

     작업관리자나 Procexp, Procmon을 사용하기에 앞서,

    실행되고 있는 프로세스가 이렇게나 많은데, 일일이 알지 않고서야 어찌 비정상적인 프로세스를 선별할 수 있을까 걱정이 든다면 기본적인 Windows 시스템이 사용하는 프로세스들을 확인해보자.


    ※ Windows 기본 사용 프로세스

    smss.exe : 사용자 세션 시작 담당

    csrss.exe : 프로그램이 Win32 API 호출할 때, 커널이 응답하도록 중계하는 역할

    winlogon.exe : 로그인 프로세스

    services.exe : 부팅 시, 드라이버 및 서비스 로드

    lsass.exe : 보안정책 적용 담당

    Userinit.exe : 부팅 이후 시작버튼, 트레이, 작업표시줄 로드. Explorer.exe를 호출하고 작업이 끝나면 자동으로 종료

    svchost.exe : 윈도우 부팅 시, 레지스트리 서비스 부분을 검사


    특히, Windows 기본 사용 프로세스들은 

    smss.exe를 기준으로 프로세스 트리관계를 가지고 있어, 이를 파악하고 있다면 진짜 프로세스인지 확인하는 데에 중요한 힌트가 될 수도 있다.



    현재 사용중인 프로세스와 Windows 기본 사용 프로세스를 기준으로 의심스러운 프로세스를 파악해 나가도록 한다. 


    의심해봐야 할 프로세스의 예 )

    제조사가 불명확한 경우

    중국어로 표기되어 있는 경우(중국발일 가능성 존재)

    WIndows 기본 프로세스와 유사한 이름의 프로세스(smms.exe, lasss.exe, scvhost.exe, svhcost.exe ...)


    그러나, 루트킷으로 의심되는 악성코드들은 

    Windows 기본 사용 프로세스 속에 은닉되거나, 가장하는 경우가 많기 때문에 

    시스템 프로세스이더라도 다시 살펴볼 필요가 있다.  

     





    2. 네트워크 통신 확인


    악성행위가 의심되어 현재 실행중인 프로세스를 확인했다면, 현재 나의 PC가 기존과 다른 통신을 맺고 있는 지를 확인해야한다. 만일, 알지 못하는 외부주소와 [Established] 통신상태를 맺고 있다면, 내 PC는 악성코드에 감염되어 공격자의 원격행위가 가능할 확률이 높다. 이러한 상황에서는 일차적으로 해당 네트워크 세션을 종료하거나, 네트워크 통신상태를 중단시켜준 후, 숨겨진 악성코드를 완전히 제거해야 한다.


     (1) netstat 명령어를 통해 확인


    cmd > netstat -na



    LISTENING : 원격지의 통신을 대기하고 있는 상태

    ESTABLISHED : 원격지와 통신이 맺혀진 상태


    (2) TCP view


    TCP view 는 마찬가지로 MS사의 Sysinternals에서 제공하는 툴로써, 프로세스 별 통신상태를 확인할 수 있다.

    command 명령어보다는 조금 더 친절하게, 원격지 주소와 포트 뿐 아니라 송/수신 패킷의 크기도 한눈에 확인할 수 있다.



    참고로 211.233.xxx.xxx로 CLOSE_WAIT(비정상 종료) 상태로 남은 'ASDSvc.exe'는 V3 백신에 의한 흔적으로 확인되었다.


     

     

     

     

    3. 레지스트리 분석

     

    일반적으로 잘 알려진 악성코드들은 아래와 같은 레지스트리 값을 변경시킨다.

    따라서, 주요 자동실행지점을 분석함으로써 백신을 통해 찾을 수 없던 악성코드의 존재유무를 파악할 수도 있다.

     

    1) 로그온 시

    HKLM\Software\Microsoft\Windows\CurrentVersion\Winlogon

     

     

     

    2) OS 구동 시

    : OS 시작 시, Explorer.exe 이후에 자동으로 시작되는 프로그램 지정

     

    HKLM\Software\Microsoft\Windows\CurrentVersion\Run

    HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce

     

     

    3) 서비스

    : Windows 서비스로 구동 될 프로그램들을 지정하는 레지스트리 키로써,

    종종 악성코드의 서비스유형을 '자동'형태로 서비스 상에 올라오는 경우가 있다.

     

    HKLM\SYSTEM\CurrentControlSet\services

    4) SSODL

     

    : Explorer.exe 프로세스가 구동될 때, SSODL에 등록된 DLL을 가상 메모리에 매핑

     

     

     (1) Autoruns (Sysinternals)



    Autoruns는 자동시작에 설정된 레지스트리 값을 편리하게 확인할 수 있다. 이외에도 작업관리(스케줄), 윈도우 로그인(Winlogon), Explorer, Internet Explorer, 서비스 등과 관련된 자동시작 레지스트리 키와 관련된 프로그램들을 확인할 수 있다.

     

     

    서비스 자동시작부분을 확인해보자.

    일반적으로 레지스트리 값을 확인하려면 regedit을 통해 아래 경로를 일일이 확인해야 한다.

    HKLM\System\CurrentControlSet\Services

    하지만, autoruns는  마우스 클릭 한번 만으로도 이를 확인할 수 있다.


    확인 결과, 서비스 자동실행지점에는 악성코드로 인해 아래와 같은 프로그램들이 지정되었다.

     





    728x90
    반응형
Designed by Tistory.