ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 악성코드 분석 방법론 (2) - 초기분석
    Malware/study 2013. 11. 29. 03:17

    ※ 주의사항

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

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

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


    [초기분석] 


    개요

    초기분석 항목에서는 먼저 초기분석을 하는 여러가지 방법들을 설명합니다.
    그 속에서 얻을 수 있는 결과를 보여주고, 그 결과를 얻어낸 목적을 알 수 있도록 합니다.
    결과적으로 초기분석을 통해 얻은 결과를 이용하여 악성코드 분석을 이어 나갈 방향을 찾을 수 있도록 합니다. 

     

    상세 내용

    초기분석에 앞서 먼저 악성코드를 수집합니다.





    수집된 악성코드 bott.exe입니다. 

    하지만 실행해보기 전까지는 이것이 정말 악성코드인지, 아니면 단순한 실행파일인지를 알 길이 없습니다.


    그래서 수집한 악성코드 bott.exe를 virustotal.com에 업로드하여 검사를 해보도록 하겠습니다.


    [virustotal.com]


    1. 먼저 바이러스토탈에 접속합니다.



    2. 수집한 파일을 선택하고 검사 시작!을 눌러 검사를 시작합니다.



    3. 검사 결과를 바탕으로 수집한 파일이 악성코드인지 아닌지를 판단합니다.



    제가 수집한 bott.exe의 경우, Win-Trojan/Zbot.210944.R 이라는 진단명이 눈에 가장 먼저 띄었습니다.

    TR/Crypt.XPACK Gen이라는 진단 결과도 보입니다. 나머지 몇가지 진단 결과들도 있었습니다.

    (단어를 얼핏봐도 Packing 되어 있다는 느낌이 팍팍옵니다.) 


    위와 같이, 내가 수집한 악성코드 의심파일이 정말 악성코드인지 혹은 일반 실행파일인지를 

    알아내고자 하는 경우, virustotal.com에 의심파일을 업로드하여 국내외 46여개의 안티바이러스 엔진을 

    통해 검사해볼 수 있습니다.


    그 결과에 따라, 내가 수집한 파일이 악성코드인지 아닌지를 판단할 수 있게되고 해당 파일을 분석할 것인지의 여부를 결정할 수 있습니다.


    일단 수집한 의심파일이 악성코드인 것으로 결정지어졌거나, 분석을 하기로 마음 먹었다면

    가장 먼저 분석에 걸림돌이 되는 Packing이 적용되어 있는지를 확인할 필요가 있습니다.

    Packing은 암호화, 코드치환 등의 과정을 거쳐 이루어집니다. 

    그러한 과정을 거치면서 분명 가려지거나 볼 수 없게되는 정보들이 많아지게 됩니다.


    따라서, Packing이 적용된 악성코드를 분석할 때에는 Packing을 해제하고 분석을 해 나가는 것이 바람직합니다.


    [PEiD] - 첫번째 도구


    1. 먼저 PEiD를 실행하고, Packing 여부를 확인할 파일을 불러옵니다.



    위와 같이, 악성코드 파일을 불러오면 PEiD는 해당 파일이 Packing 되어 있는지, 되어있지 않은지,

    되어 있다면 어떠한 방식의 Packing이 적용되어 있는지를 분석하여 화면에 나타내줍니다.


    분석을 하는 사람은 이 정보를 보고, 적용된 Packer의 Unpacker를 찾아 Packing을 해제해야 합니다.


    2. 다음으로는 Packing된 악성코드 파일을 Unpack 합니다.


    조금 전, PEiD를 이용하여 Packing을 확인해보았던 bott.exe의 경우 UPX로 Packing이 되어있었으므로,

    UPX 명령을 이용하여 bott.exe를 Unpack하였습니다.


    위와 같이 악성코드가 Packing 되어있던 방식의 Unpacker를 구하여 악성코드의 Packing을 해제합니다.

    그러면 기존의 암호화, 코드치환 등의 이유로 볼수 없었던 정보들을 확인할 수 있습니다.



    위의 그림은 같은 악성코드 파일을 Packing 되었을 때와 Unpacking 되었을 때의 상태, 

    각각에서 추출한 악성코드에 포함되어있는 함수들의 정보입니다.

    Packing된 상태일 때 보다 Unpacking 했을 때 추출할 수 있는 함수정보가 훨씬 많은 것을 확인할 수 있습니다.


    방금 보았던 악성코드 파일에서 사용하는 함수들을 볼 수 있도록 도와주는 다음 Tool을 간략하게 설명하겠습니다.


    [Stud_PE] - 두번째 도구


    이번에 설명드릴 도구는 PEiD를 사용하는 목적인 Packing을 확인하는 기능을 포함하고,

    나아가 악성코드 파일에 포함된 함수들을 볼 수 있도록 도와주는 도구 입니다.


    1. Stud_PE를 실행하고 분석할 파일을 불러옵니다.


    일을 불러온 다음, Signature 탭을 클릭하면 화면 하단에 Packer의 정보를 보여줍니다.

    여기까지는 PEiD의 기능과 매우 유사합니다.

    나타난 정보를 바탕으로 알맞는 Unpacker를 찾아 Unpacking을 하고 다음 단계로 넘어가겠습니다.


    2. Unpacking 된 상태의 파일을 불러옵니다.



    그런 다음 Funtions 탭을 클릭하면 화면 중단에 Imported Funtions와 Exported Functions가 보입니다.

    Imported Functions의 경우, 특정 DLL로 부터 Import 되어지는 함수들의 정보를 보여줍니다.

    Exported Functions의 경우, 반대로 지금 보고 있는 PE 파일에서 외부 모듈에 제공할 수 있는 함수를 보여줍니다.

    지금의 경우는 KERNEL32.DLL로 부터 불러오는 함수들만 존재합니다.


    3. 현 상태에서 우 클릭 후, View as text를 클릭합니다.


    현재 Imported Functions 필드에서 View as text를 실행하였습니다.

    그 결과로 위와 같이 bot.exe라는 악성코드 파일에 Import 된 함수들의 목록을 Text로 시원하게 볼 수 있습니다.


    지금 보이는 함수들 중에서 저의 눈에 띄는 함수들이 있습니다.

    ExitProcess, WriteFile 입니다.

    ExitProcess 함수는 프로세스를 강제종료하는 함수입니다.

    WriteFile 함수는 특정 파일에 데이터를 기록하는 함수입니다.

    그렇다면, bot.exe라는 악성코드 파일이 실행되면 뭔진 모르겠지만 프로세스가 종료되고,

    어떤 특정한 파일에 뭔지모를 데이터를 기록한다는 것을 알아낼 수 있습니다.


    여기서, 악성코드 파일에서 사용하는 함수를 찾아내는 과정의 목적이 나옵니다.

    분석할 악성코드 파일에서 사용되는 함수들의 목록을 알아냄으로써, 

    악성코드가 실행되었을 때 어떤 동작들을 하는지를 유추해낼 수 있게 된다는 것입니다.


    추가적으로 Stud_PE를 보조할 수 있는 도구가 있습니다. 바로 BinText라는 도구 입니다.

    이 도구는 악성코드 파일에 포함된 String들을 긇어모아 Text로 보여주는 기능을 합니다.

    BinText의 사용방법은 다음과 같습니다.


    [BinText] - 세번째 도구 ( 보조도구 )


    1. BinText를 실행하고 분석할 파일을 불러옵니다.


    파일을 불러온 다음 Go 버튼을 누르면 파일속에 들어있는 String들을 나열해줍니다.

    Tool이 긁어모은 String들을 살펴보며 키워드가 될만한 String을 찾아 참고할 수도 있습니다.


    [PEView] - 네번째 도구


    다음으로 설명드릴 도구는 PEView라는 도구입니다.

    PEView는 파일이 가지고 있는 PE Header를 구조체 별로 보기 쉽게 나타내주는 도구 입니다.


    PE Header에는 파일을 실행하기 위한 모든 정보가 담겨 있습니다.

    PE Header의 구조를 알고 있고 구조체 형식으로 담겨있는 정보들을 읽을 수 있다면, 

    악성코드 파일이 실행되는 과정에 필요한 정보들을 모두 알수가 있게 됩니다.

    그런 동작들을 알 수 있다면 악성코드를 분석하는데에 있어서 아주 큰 도움이 될 것입니다.

    이런 점에서 PE View는 매우 유용한 도구가 될 것입니다.

    ( PE 구조에 대해 공부를 하고 나면 내용 보충 하도록 하겠습니다. )


    지금 까지 설명한 초기분석에 사용하는 도구들에 대한 정리를 하면 다음과 같습니다.


    1. 악성코드 의심파일을 수집합니다.

    2. virustotal.com

    - 수집된 악성코드 의심파일을 virustotal.com에 업로드하여 검사를 합니다.

    - 악성코드인지 아닌지를 판단합니다.

       ( 한번도 알려지지 않은 악성코드라면 아무 진단이 없을 가능성도 있습니다. )

    - 여러 안티바이러스에서 내주는 진단명에서 정보를 얻습니다.

    3. PEiD

    - Packing 유무를 확인합니다.
    - Packing 되어있다면 알맞는 Unpacker를 이용하여 Unpacking합니다.

    4. Stud_PE

    - Unpacking된 파일로부터 Import 함수, Export 함수 등의 정보를 추출합니다.
    - 사용되는 함수들을 어떤 파일로부터 불러오는지 확인합니다.
    - 추출한 함수 정보들을 이용하여 악성코드가 어떤 동작을 할지 유추합니다.
    - 유추한 정보를 이용하여 동적분석 단계에서 어떤 부분에 유의할 지 생각해둡니다.

    5. BinText

    - 파일로부터 String 정보를 추출합니다.
    - 추출한 String들로부터 분석에 필요한 키워드들을 얻어냅니다.

    6. PEView

    - 파일이 실행될 때 필요한 모든 정보를 얻어냅니다.
    - 아주 유용하지만, PE 구조와 구성 구조체에 대해서 알고 있어야 합니다.


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

    초기분석을 끝낸 후에는 해당 악성코드 파일에서는 어떤 함수를 사용하고 어떤 기능들이 동작하는지 알수 있게 됩니다.

    결론적으로 초기분석을 통해서 악성코드를 분석하는 사람은 그 결과를 가지고 동적분석와 정적분석을 할 때에는 어떤 부분들을 살펴봐야 하는지 어떠한 부분에 중점을 둬야할 지 등에 대한 전체적인 방향성을 찾는 것이 목적이라고 할 수 있습니다.





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

    악성코드 분석 방법론 (3) - 동적분석  (3) 2013.12.03
    악성코드 분석 방법론 (1) - 요약  (0) 2013.11.29
Designed by Tistory.