<실전 악성코드와 멀웨어 분석> 책의 실습 문제 1-1 을 분석해보고자 합니다.

분석환경은 Windows XP / Vmware 9.0.3 build 입니다.

 

1. 바이러스 토탈에서 악성코드 여부 확인하기

    분석하고자 하는 파일은 책에서 제공하는 실습용 악성코드 Lab01-01.exe와 Lab01-01.dll 2개의 파일입니다.

    exe파일을 바이러스 토탈에 검색해보겠습니다.

   

  

  
  

   Avast와 Ikarus에서 악성코드라고 판별하는군요.

 

2. 악성코드의 컴파일 정보 확인하기

    Stud_PE로 확인해본 결과 Visual C++ 6.0에서 컴파일 되었네요. 컴파일된 시간을 알아내기 위해

    PEView로 살펴보겠습니다.

   

   Lab01-01.exe의 경우 IMAGE_NT_HEADER -> IMAGE_FILE_HEADER -> Time date Stamp 에서

   2010/12/19 16:16:19 UTC에 컴파일 된 사실을 알 수 있었습니다.

   Lab01-01.dll 역시 exe파일과 약 20초 차이로 컴파일 되었습니다.

   책에서는 동일한 제작자에 의해 동일한 시간에 생성됐다는 암시로 보고 있습니다.

   DLL파일은 스스로 실행될 수 없기 때문에 이를 뒷받침 해주는 근거가 되겠습니다. 

    


  

  

3.  악성코드의 패킹 및 난독화 여부 확인

     PEView를 통하여 IMAGE_SECTION_HEADER를 살펴보면 패킹이 되었는지 확인해볼 수 있습니다.

     Virtual Size(가상크기)와 Size of Raw Data(원래 데이터 크기)를 비교하였을 때 Virtual Size가 Size of Raw Data

     보다 월등히 크다면 패킹을 의심해보아야 합니다.

     하드디스크의 offset 구조에서 메모리 영역으로 로딩되면서 NULL Padding의 크기 차이가 발생하기 때문에

     약간의 차이는 발생하지만, 비교해본 결과 별 차이가 없네요.

     

     PEid를 이용하여 패킹의 여부를 추가적으로 확인해보았으나, 패킹되지 않았네요.

     패킹의 흔적이 없으니 기타 동적/정적 분석시 문제가 없을것같습니다.

     [ exe파일 ]

     

     [ dll파일 ] 

    

 

4. DLL 임포트 리스트 확인하기

    Dependency Walker를 이용하여 Lab01-01.exe 파일의 Import된 DLL 목록을 살펴보면

    KERNEL32.DLL과 MSVCRT.DLL 두개의 DLL을 임포트하고 있는것을 볼 수 있습니다.

    MSVCRT.DLL의 모든 임포트 함수의 경우 컴파일러가 추가한 래퍼 코드의 일부분으로 거의 모든 실행파일에

    포함되어 있는 함수라고 합니다. 무난하게 Pass~!

    문제는 KERNEL32.DLL의 CreateFileA, FindFirstFIleA, FindNextFileA과 같은 함수들입니다.

    이 함수들을 이용하여 악성코드가 시스템의 파일을 탐색하거나 새로운 파일을 만드는데 쓰일 수 있습니다. 

 

   다음으로 Lab01-01.DLL을 살펴보겠습니다.

   KERNEL32.DLL, WS2_32.DLL, MSVCRT.DLL 총 3개의 DLL을 임포트하는군요.

   KERNEL32.DLL의 경우 악성코드가 프로세스를 생성할 수 있는 CreateProcessA 함수를 포함하고 있습니다.

    WS2_32.DLL의 기능은 윈도우 소켓을 구동하는데 필요한 DLL 파일입니다. 윈도우에 익스플로러가 내장되면서

   만들어졌다고 합니다. 네트워크 컴퓨팅을 하기 위한 DLL 이므로 이 DLL을 사용하여 네트워크에 연결하거나

   정보를 외부로 유출할 가능성이 있습니다.

   DWalker의 우측 상단은 임포트 함수를 우리에게 보여줍니다. 하지만 어떤 함수를 임포트

   하는지 나타나지 않네요. (아래 스샷 참고) 일단 패스해야겠습니다.

 

 

5. 감염된 시스템에서 검색할 수 있는 다른 파일이나 호스트 기반의 증거 확인

    올리디버그의 Serch 기능으로 텍스트를 검색해 보았습니다.(마우스 우클릭 -> Serch for -> All referenced text strings)

    결과값으로 Kernel32.dll 과 이름이 유사한 Kernel132.dll 의 경로값이 나왔습니다.(영어 L을 숫자 1로 표현)

  

 

   해당 스트링을 어떤 용도로 사용하는지 알아내기 위해 더블클릭하여 따라가 보았습니다.

   처음 DWalker로 파악한 CreateFileA API가 이곳에 쓰였습니다.

   아마 Kernel132.dll을 일반 시스템 Dll로 위장시켜 악성행위를 하는 악성코드로 추정됩니다.

  

 

6. 감염된 시스템에서 이 악성코드를 발견하기 위해 사용한 네트워크 기반의 증거 확인

    같은 방법으로 dll 역시 올리디버거로 살펴보겠습니다.

    수상한 IP 주소가 보이네요.(127.26.152.13)

    아래쪽에는 백도어에서 사용할 가능성이 높은 sleep과 exec이 보입니다.

  

   주소를 더블클릭하여 추적한 결과

   inet_addr() 함수를 통해 외부로 통신함을 알 수 있었습니다.

  

 

7. 악성코드의 목적 확인

    Kerne132.dll을 만들어 사용하고(혹은 위장) sleep과 exec을 이용하여

    외부 C&C서버(127.26.152.13)와 통신하는 백도어로 추정됩니다.

 

 

posted by Red_Message