ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 악성코드 분석 방법론 (3) - 동적분석
    Malware/study 2013. 12. 3. 14:04

    ※ 주의사항

    아래 공격 코드는 연구 목적으로 작성된 것이며, 허가 받지 않은 공간에서는 테스트를 절대 금지합니다.

    악의 적인 목적으로 이용할 시 발생할 수 있는 법적 책임은 자신한테 있습니다. 이는 해당 글을 열람할 때 동의하였다는 것을 의미합니다.

    해당 문서의 저작권은 해당 저자에게 모두 있습니다. 다른 용도로 사용할 시 법적 조치가 가해질 수 있습니다.

     


    [동적분석]


    개요

    동적분석에서 역시 마찬가지로 동적분석을 하는 여러가지 방법들을 설명합니다.

    그 속에서 얻을 수 있는 결과를 보여주고, 그 결과를 얻어낸 목적을 알 수 있도록 합니다.

    결과적으로 동적분석을 통해 얻은 결과를 이용하여 악성코드가 행하는 동작들을 알아낼 수 있도록 합니다.


    테스트 환경 (해당 될시에만)

     운영 체제 (OS) : Windows XP Service Pack 3

     IP Address : 172.31.0.129

     Default Gateway : 172.31.0.2


     
     VM Ware상의 Guest PC에서 진행하였습니다. NAT 설정으로 아이피 대역이 172.31.0.0 입니다.

     

    상세 분석

    동적 분석 예시를 위해 수집한 악성코드 샘플 aaa.exe를 이용하여 설명하도록 하겠습니다.


    - 준비 단계 -


    먼저, 악성코드를 실행하기 전에 현재 시스템의 상태를 저장하도록 하겠습니다.


    [Autoruns]


    Autoruns는 시스템에서 자동으로 시작되는 시작프로그램들을 보여주고 관리하는 Tool 입니다.


    1. Autoruns를 실행하고 Filter를 적용합니다.



    위와 같이 Autoruns를 실행하면 수많은 시작 프로그램들이 보이게 됩니다.

    이 많은 프로그램들 중에서 신뢰할 수 있는 프로그램인 Windows에서 제공하는 시작프로그램과

    Microsoft에서 제공하는 시작 프로그램들은 보이지 않게 하기 위해서 Filter를 적용합니다.

    먼저 [Options] - [Filter Options...]를 클릭합니다.



    새 창으로 띄워진 Filter Options 화면에서 [Hide Microsoft entries]에 체크를 합니다.

    해당 항목을 체크하게 되면 Microsoft와 Windows에서 기본으로 제공하는 시작프로그램들은 보이지 않게 가려줍니다.


    2. 현재 시작프로그램 상태를 저장합니다.



    [File] - [Save...] 를 클릭하여 현재 시작프로그램 상태를 저장해둡니다.


    [Winalysis]


    Winalysis는 Registry, Services, Scheduler, Groups 등 여러 시스템 정보를 저장할 수 있는 Tool 입니다.


    1. Winalysis를 실행합니다.



    위와 같이 Winalysis를 실행하면 아무것도 나오질 않습니다.

    현재 시스템 상태를 Scan하여 저장하기 위해, 좌측 상단의 Snapshot이라는 아이콘을 클릭합니다.



    위와 같은 화면이 나오면, 우측 상단의 Start버튼을 클릭하여 Snapshot을 생성합니다.



    Snapshot 생성이 완료되고 나면, Finish 버튼을 클릭하여 생성을 완료합니다.



    Snapshot 생성을 마치고 나면, 위와 같이 현재 시스템 상태가 저장된 것을 확인할 수 있습니다.

    후에 비교시 현재 상태를 기준으로 변화가 생기면 화면 중심부의 숫자들이 변화합니다.


    지금까지 Autoruns와 Winalysis라는 Tool들을 이용하여 악성코드를 실행하기 전인 현재 시스템의 상태를 저장해두었습니다.


    주의! 

    현재 시스템의 상태를 저장해두었다고해서 악성코드 실행 후 변한 시스템을 다시 되돌릴 수 있는 것이 아닙니다. 단지, 비교를 위해 현재 상태를 기록해 둔 것일 뿐입니다! 


    다음은 실시간 프로세스 모니터링을 위한 준비를 하겠습니다.


    먼저 process Explorer를 실행합니다.


    [Process Explorer]


    Process Explorer는 윈도우의 작업관리자에서 더 많은 기능을 추가한 프로그램이라고 생각하면 됩니다.


    1. Process Explorer를 실행합니다.



    Process Explorer를 실행한 화면입니다.

    현재 동작중인 모든 Process를 실시간으로 표시하여 줍니다. 

    또한 새로 실행되는 Process나 종료되는 Process들에 대해서도 실시간으로 표시하여 줍니다.


    다음은 Process Monitor입니다.


    [Process Monitor]


    기존에 시스템에서 File의 추가나 삭제 등 File의 변화를 실시간으로 모니터링하는 Tool인 FileMon과

    시스템에서 Registry의 변화를 실시간으로 모니터링하는 Tool인 RegMon이라는 툴들이 이 프로그램에 포함되었습니다.

    실시간으로 변화하는 Registry, File, Process 등을 로그로 남깁니다.


    1. Process Monitor를 실행합니다.



    Process Monitor를 실행한 화면입니다.

    실행하자마자 순식간에 로그가 차오릅니다. 모든 프로세스가 행하는 File, Registry, Network 동작 등을 실시간으로 기록하기 때문에 엄청나게 많은 로그가 기록됩니다.

    악성코드를 실행하기 직전 단축키 Ctrl + X 를 눌러 로그를 초기화할 수 있습니다.


    다음은 네트워크 동작을 모니터링하기 위한 준비를 하겠습니다.


    [Tcpview]


    Tcpview는 현재 동작중인 프로세스 중에서 네트워크 동작을 행하고 있는 프로세스들의 상태를 실시간으로 보여주는 도구입니다.


    1. Tcpview를 실행합니다.



    Tcpview를 실행한 화면입니다.

    현재 네트워크 동작중인 프로세스들을 보여주고, 각 프로세스들이 사용하는 Local과 Remote의 

    Address, Port 그리고 State 등의 정보를 실시간으로 모니터링할 수 있도록 보여줍니다.


    [Wireshark]


    Wireshark는 네트워크 패킷분석에 사용되는 Tool 입니다.

    지정한 네트워크 인터페이스를 흘러가는 모든 패킷들에 대한 정보를 실시간으로 로그를 남겨주고

    각 패킷들을 분석할 수 있도록 도와주는 Tool 입니다.


    1. Wireshark를 실행하고, 모니터링할 인터페이스를 설정합니다.



    상단의 메뉴에서 [Capture] - [Interfaces...] 항목을 클릭합니다.



    니터링할 인터페이스를 선택하고 가운데 하단에 있는 Start 버튼을 클릭합니다.


    Wireshark가 동작하고 있는 화면입니다.

    모니터링 중인 네트워크 인터페이스를 거치는 모든 패킷을 경과시간, 출발지IP, 도착지IP, 사용 Protocol, 크기 그리고 간략한 정보를 담은 로그형태로 실시간으로 기록하여 줍니다.

    각 로그를 클릭하면 화면 하단에 더욱 자세한 정보를 나타내줍니다.


    이로써 동적분석을 하기위한 모든 준비를 마쳤습니다.


    - 분석 단계 -


    준비를 마쳤다면 악성코드를 실행합니다.


    그리고 Process Explorer와 Tcpview를 지켜봅니다.

    ( 저의 경우, Autoruns, Winalysis는 악성코드 동작이 끝난 후 저장했던 파일과 비교할 수 있기 때문에 내려놓고, Wireshark, Process Monitor는 로그형태로 기록이 남아 나중에 확인할 수 있기 때문에 내려 놓았습니다. )


    먼저 Process Explorer를 확인해보도록 하겠습니다.



    악성코드 aaa.exe를 실행하자마자 프로세스 aaa.exe가 생성되었으며, aaa.exe가 하위 프로세스 svchost.exe들을 생성한 것을 확인할 수 있습니다.


    이처럼 Process Explorer를 이용하면 실행한 악성코드와 악성코드가 생성한 보이지 않는 하위프로세스들까지 확인을 할 수 있습니다.

    svchost.exe의 경우, 시스템에서 기본적으로 동작하는 같은 이름의 프로세스들이 있기 때문에

    단순히 윈도우 작업관리자로는 이것이 원래있는 것인지, 이름이 같은 새로운 프로세스인지 확인하기 어렵습니다. 악성코드는 이런 단점을 이용하여 자신의 프로세스를 위장합니다.


    하지만, 지금과 같이 Process Explorer를 이용하면 프로세스간의 관계까지 한눈에 파악이 가능하기 때문에 위장된 프로세스를 잡아낼 수 있습니다.


    다음은 Tcpview를 확인해보겠습니다.



    악성코드 aaa.exe와 그 하위프로세스들인 svchost.exe들이 쉴새없이 동작하는 것을 확인할 수 있습니다.

    aaa.exe와 svchost.exe들은 1100~1700번대 포트들을 이용하여 수많은 사이트들에 접속을 하고, 접속을 끊는 동작들을 하는 것을 확인할 수 있습니다.


    이처럼 Tcpview를 이용하면 쉴새없이 동작하는 악성코드의 보이지 않는 네트워크 관련 행위들을

    쉽게 파악할 수 있습니다.


    하지만 Tcpview는 지나간 동작은 확인할 수 없다는 단점을 가지고 있습니다.

    이를 보완하기 위해 Wireshark를 이용하여 지나간 네트워크 동작을 확인해보도록 하겠습니다.




    악성코드로 인해 현재 시스템( 172.31.0.129 )에서 수많은 사이트에 대한 DNS query를 보내고,

    해당 사이트들에 접속하는 것을 확인할 수 있습니다. 또한 특정 사이트들에서는 큰 크기의 데이터를 전송받는 것을 볼 수 있습니다.


    이처럼 Wireshark는 네트워크 동작들을 로그 형태로 기록해주기 때문에 현재 상태만을 확인할 수 있는

    Tcpview의 한계를 보완하여 악성코드가 행하는 네트워크 동작들을 더욱 상세히 분석할 수 있도록 도와줍니다.


    다음은 시스템의 변화를 살펴보겠습니다.


    먼저 Winalysis를 살펴보겠습니다.



    Winalysis를 열어 화면 상단 아이콘 메뉴들 중 [Test] 아이콘을 클릭합니다.

    이 버튼을 클릭하면 아까 생성하였던 Snapshot과 현재 상태를 비교하게 됩니다.



    위와 같은 화면이 나타나면 아까와 마찬가지로 Start 버튼을 누르고, 완료되면 Finish 버튼을 누릅니다.



    그러면 위와 같은 화면이 나옵니다.

    Snapshot을 생성하였을 때와는 다르게 화면 중단 Registry 부분에 숫자가 바뀐 것을 볼 수 있습니다.

    이것은 Snapshot 생성 당시와 현재의 Registry가 변화하였다는 것을 의미합니다.



    확인하여 보면 위와 같이 변화된 내용들을 상세히 보여줍니다.


    이처럼 Winalysis는 생성한 Snapshot과 현재 시스템의 상태를 비교하여 다른 부분을 알려줍니다.

    악성코드를 실행하기 전과 후의 시스템의 상태를 비교하기에 아주 좋은 Tool 입니다.


    다음으로 Autoruns를 살펴보도록 하겠습니다.



    내려두었던 Autoruns를 띄우고 F5 키를 눌러 현재 상태의 시작프로그램 목록으로 갱신합니다.

    ( 반드시 F5 키를 눌러 새로고침을 해야 합니다. 하지 않으면 아무 소용 없습니다. )
    그리고 나서 상단 [File] - [Compare...] 메뉴를 눌러 악성코드 실행 전 시작프로그램 현황을 저장한 파일과 현재 시작프로그램 현황을 비교합니다.

    위와 같이 새로 등록된 시작 프로그램이 있음을 확인할 수 있습니다.

    새로 등록된 시작프로그램은 초록색으로 표시됩니다.

    이처럼 Autoruns를 이용하면 악성코드가 사용자 몰래 등록하는 시작프로그램을 확인할 수 있습니다.
    시작프로그램은 윈도우 실행시 자동으로 실행되므로 이것이 사용자 몰래 실행되고 시스템에 치명적인 동작을 한다면 아주 위험할 수 있습니다.
    하지만 Autoruns를 이용하면 몰래 등록되는 시작프로그램을 확인할 수 있습니다.

    마지막으로 Process Monitor를 살펴보겠습니다.

    Process Monitor에는 너무도 많은 내용의 로그들이 기록되어있습니다.

    모두 살펴보기에는 살펴볼 필요가 없는 내용들도 많이 있으므로 Filter를 설정하여 악성코드에 관련된 부분만 보도록 하겠습니다.
    상단 [Filter] - [Filter...] 메뉴를 클릭합니다.


    위와 같이 특정 프로세스 명을 포함하는 로그만 볼 수 있도록 Filter 옵션을 등록할 수 있습니다.
    Include의 경우, 옵션에 추가되면 초록색 체크 그림이 표시되며 로그에 표시가 됩니다.


    또는 볼 필요가 없는 프로세스 명을 포함하는 로그는 보지 않도록 Filter 옵션을 등록할 수 가 있습니다.
    Exclude의 경우, 옵션에 추가되면 빨간색 엑스 그림이 표시되며 로그에 표시되지 않습니다.


    신뢰할 수 있는 Company에서 제공하는 프로세스도 로그에 표시하지 않도록 할 수 있습니다.
    현재의 경우 Microsoft Corporation에서 제공하는 프로세스에 대한 로그는 표시 하지 않도록 등록하였습니다.

    혹은 특정 프로세스와 그 하위 프로세스들에 대한 로그를 표시할 수 도 있습니다.

    이 경우, 상단 [Tools] - [Process Tree...] 메뉴를 클릭합니다.


    그러면 위와 같은 창이 뜨는데, 내가 보고 싶은 프로세스에 오른쪽 클릭을 하고

    [Add process and children to Include filter] 를 클릭하면 해당 프로세스 트리에 속하는 프로세스들은

    로그에 표시가 되도록 Filter옵션으로 추가합니다.



    필터를 적용한 후, 저는 악성코드가 생성한 파일이 있는지 확인해 보기위해 WriteFile이 들어간 로그를 찾아 보았습니다.


    위와 같이 악성코드 aaa.exe가 생성한 파일이 있는 것을 확인할 수 있었습니다.

    생성된 파일의 경로를 살펴보니 Autoruns에서 확인하였던 새로 추가된 시작 프로그램임을 알 수 있었습니다.

    결과적으로 aaa.exe가 새로운 파일을 생성하고 해당 파일을 시작프로그램으로 등록하는 동작을 한 것임을 알수 있었습니다.


    이처럼 Process Monitor를 이용하면 악성코드가 추가, 수정, 삭제한 Registry나 File등을 확인할 수 있습니다.


    지금까지 동적분석에 사용되는 도구들에 대한 정리를 하면 다음과 같습니다.


    1. Autoruns

    - 시스템에 등록된 시작프로그램 현황을 볼 수 있습니다.

    - 현재 시작프로그램 등록 현황을 저장하고 악성코드를 실행한 이후 변화된 현황과 비교할 수 있습니다.

    2. Winalysis

    - 시스템의 모든 상태를 Snapshot으로 저장할 수 있습니다.

    - 악성코드를 실행하기 전후의 시스템의 상태를 비교하고, 어떤 부분에서 어떤 변화가 있었는지 확인할 수 있습니다.

    3. Process Explorer

    - 실행중인 프로세스에 대한 정보를 확인할 수 있습니다.
    - 실시간으로 변화하는 프로세스들의 상태와 프로세스간의 상하위 관계를 쉽게 파악할 수 있습니다.
    - 악성코드가 생성하는 프로세스들을 파악할 수 있습니다.

    4. Tcpview

    - 현재 동작중인 프로세스들의 네트워크 동작을 실시간으로 파악할 수 있습니다.
    - 악성코드가 네트워크 동작을 하는지 파악할 수 있습니다.

    5. Wireshark

    - 동작중이거나 종료된 프로세스들의 지난 네트워크 동작을 볼 수 없는 Tcpview의 단점을 보완할 수 있습니다.
    - 지정한 네트워크 인터페이스를 지나는 모든 패킷들에 대한 로그를 남기고 자세한 정보를 확인할 수 있습니다.
    - 악성코드가 패킷을 주고 받은 사이트들의 정보를 알 수 있고, 어떤 패킷을 주고 받았는지 확인할 수 있습니다.

    6. Process Monitor

    - 동작하는 프로세스들의 모든 동작을 로그로 기록합니다.
    - 어떤 프로세스가 어떤 동작을 했는지 확인할 수 있습니다.
    - 악성코드가 어떤 파일 또는 레지스트리를 생성하거나 삭제했는지, 수정했는지 등에 대한 정보를 확인할 수 있습니다.

    지금까지 동적분석 방법에 대하여 알아보았습니다.

    각각의 툴들에 대해서 순차적으로 살펴보는 것으로 설명을 하였지만,

    실제적으로 설명한 모든 툴들을 다같이 살펴보면서 악성코드가 행하는 유기적인 동작들을

    파악하도록 해야 합니다.

    결론적으로 동적분석을 통해서 악성코드가 행하는 핵심 동작들이 어떤 것이 있는지 파악을 하고,

    정적분석을 통하여 핵심 동작들이 정확이 어떻게 이루어 지는지 분석하는 것을, 동적분석으로 파악한

    정보들을 토대로 할 수 있도록 해야 합니다.


    참고 URL 및 도서

    http://www.test.co.kr

    - OOO 도서ㅇ

     


    'Malware > study' 카테고리의 다른 글

    악성코드 분석 방법론 (2) - 초기분석  (2) 2013.11.29
    악성코드 분석 방법론 (1) - 요약  (0) 2013.11.29
Designed by Tistory.