no image
90u7f65d.exe Malware Analysis
개요 분석하고자 하는 파일에 대한 정보는 위의 표와 같다. 이제 이 파일을 가지고 정적 분석과, 동적 분석, 그리고 마지막으로 상세 분석을 진행할 것이다. 정적 분석에서는 해당 파일의 실행 없이 진행이 되며, 동적 분석은 해당 파일을 실행한 결과를 나타낸다. 상세 분석은 이 2가지를 종합하여 얻은 정보를 통해 좀 더 구체적으로 분석을 진행한다. 2. 정적 분석 정적 분석에서는 해당 악성코드의 실행 없이 분석을 진행한다. PE 구조에서 특이사항이나 문자열, 함수 등을 확인할 것이며 의심스러운 사항이 있을 경우 이에 대하여 나타낼 것이다. 이를 토대로 이후 동적 분석과 함께 상세 분석에서 토대가 된다. 2.1 PE구조 분석 PE구조에 있어 우선 Detect It Easy를 통해 패킹의 여부와 어떤 컴파일러를..
2015.12.28
no image
Nethost.exe분석
개요해당 악성코드 파일(nethost.exe)에 대한 기본적인 파일 정보는 아래의 표-1과 같다. 이를 통해 해당 악성코드는 러시아어로 작성된 것과 버전에 따라 유포자 및 제작자에 의해 업데이트가 될 수 있다는 것을 확인할 수가 있다. 정적 분석정적 분석에서는 PE구조를 확인하고, 이를 통해 패킹의 여부를 확인하며 그 외에 PE구조의 특이사항을 확인할 것이다. 이러한 PE 구조의 특이사항이란 IAT나 문자열 등을 포함하며 이를 통해 프로세스의 대략적인 기능에 대하여 추측해볼 것입니다. PE구조 분석PE구조를 확인해본 결과 별도의 패킹이 되지 않은 것을 확인할 수가 있었으며, TLS 영역도 존재하지 않음을 확인할 수가 있다. 아래의 그림은 DIE를 통해 해당 프로그램을 분석한 결과이다.. 그림 1. PE구..
2015.11.26
  1. 개요


 분석하고자 하는 파일에 대한 정보는 위의 표와 같다. 이제 이 파일을 가지고 정적 분석과, 동적 분석, 그리고 마지막으로 상세 분석을 진행할 것이다. 정적 분석에서는 해당 파일의 실행 없이 진행이 되며, 동적 분석은 해당 파일을 실행한 결과를 나타낸다. 상세 분석은 이 2가지를 종합하여 얻은 정보를 통해 좀 더 구체적으로 분석을 진행한다.



2. 정적 분석


 정적 분석에서는 해당 악성코드의 실행 없이 분석을 진행한다. PE 구조에서 특이사항이나 문자열, 함수 등을 확인할 것이며 의심스러운 사항이 있을 경우 이에 대하여 나타낼 것이다. 이를 토대로 이후 동적 분석과 함께 상세 분석에서 토대가 된다.


2.1 PE구조 분석

 PE구조에 있어 우선 Detect It Easy를 통해 패킹의 여부와 어떤 컴파일러를 사용했는지를 확인해볼 것이다. 어떤 언어로 제작이 되었는지에 따라 해당 소스를 복구할 수도 있기 때문에 이는 반드시 확인을 해주어야 한다.

그림 1. Detect It Easy

 C/C++로 작성된 것을 확인할 수가 있으며, 별 다른 패킹이 되었는지는 나타나지 않는다. 이제 PE View를 통해 좀 더 PE구조에 대하여 자세히 살펴보자. 아래의 그림을 확인해보자.

그림 2. PE view

 특이한 사항을 바로 확인할 수가 있을 것이다. 우선 Gangnam, freebody, wtf 섹션은 일반적인 파일에는 존재하지 않는 다는 점이다. 각 섹션의 내용을 확인해본 결과 문자열들이 존재하였으며 해당 문자열은 다음과 같다.

 일반적으로 장난과 같은 느낌이 든다. 이 세 섹션은 별 중요한 내용이 없는 것 같고 이 외에 한 가지를 제외하고 다른 특이사항은 없는 것 같다. 리소스 섹션에는 .png 파일의 signature인 {89 50 4E 47 0D 0A 1A 0A}가 존재하고 있다. 아래의 그림을 보자.

그림 3. PE view – Resource Section

 그림 파일이 안에 있다는 것임으로 이를 추출해보고자 했다. 7zip을 통해 파일에서 png signature를 갖는 부분을 찾았으며 해당 파일의 이름은 87로 되어있다. 확장자를 png로 변환하고 열어서 확인해본 결과는 아래와 같다.

그림 4. Error – PNG File

 해당 파일이 손상되어 확인을 할 수 없다는 화면이 출력되는 것을 확인할 수가 있다. 그렇다면 이제 다른 부분을 분석하여 보자.


2.2 Import Address Table 분석

 문자열에서는 별다른 내용이 확인되지 않았으니 함수를 확인하였다. Import 하는 DLL은 6개이며 각 DLL에서 의심스러운 행위와 관련된 몇 가지 함수들을 선별하여 표에 정리하였다. 아래의 표를 보자.

 특정 디렉터리를 생성한다는 점과 파일과 관련하여 찾기, 생성, 삭제, 이동, 읽기, 쓰기 기능이 있다는 점에서 어떤 파일과 관련되는지 이름을 찾는 것이 중요하겠다. 프로세스와 스레드도 어떤 기능의 프로세스와 스레드가 생성되는지를 상세분석에서 확인해보자.



3. 동적 분석


 동적 분석에서는 위 정적 분석에서 확인하였던 내용을 중점적으로 어떠한 기능을 하는지 확인할 것이다. 그 외에도 정적 분석에서 확인하지 못하였던 부분이 있다면 추가로 인지를 하고 종합하여 상세분석을 진행하는데 참고할 것이다.


3.1 프로세스 분석

 해당 프로그램 90u7f65d.exe를 실행할 경우 90u7f65d가 프로세스로 생성된다. 하위 프로세스는 생성되지 않는 것으로 보인다.

그림 5. Process Explorer


3.2 네트워크 분석

 우선 다른 곳과 연결이 되는지를 확인해보자. 여기에는 TCP View를 사용하였으며 결과는 아래의 그림과 같다.

그림 6. TCP View

 해당 프로세스가 연결을 SYN 패킷을 보내는 것을 확인할 수 있지만 정확한 원격 주소가 출력되지 않고 있다. 따라서 다른 방법을 통해 해당 주소를 확인할 수 있는지 알아보자.

그림 7. Rekall – Netscan

 프로세스가 실행 중인 메모리를 덤프 떠서 메모리 분석 도구인 Rekall을 통해 어떠한 곳과 연결을 하려는 지 확인해 보았다. 결과는 위의 그림과 같으며 90u7f65d.exe 외에 System(pid=4)도 해당 주소와 연결을 하려고 했던 것을 확인할 수가 있다.

그림 8. WireShark – packet

 WireShark를 통해 캡처한 많은 패킷 중 해당 주소를 필터로 나타낸 결과이다. 위의 그림과 같이 3번의 연결을 시도하려는 작업을 하지만 닫힌 포트이므로 연결이 제대로 이루어지지 않는 것을 확인할 수가 있다. 그 다음, 해당 IP에 대한 정보를 찾아보았다.

그림 9. 해당 IP 정보

 위의 정보는 Whois를 통해 찾아본 결과이다. 프랑스 국적으로 등록이 되어 있으며 해당 사이트의 주소가 나와있는 것을 볼 수가 있다. 해당 웹사이트에 접속하여 화인해보자.

그림 10. 해당 웹 사이트

 해당 사이트에 접속해보니 서버를 빌려주는 등의 서비스를 하는 업체인 것 같다. 이 외에 별다른 정보를 알아내지는 못했다. 그러므로 임대 받은 서버 등을 통해 악성코드와 관련되는 것이라 볼 수 있다.


3.3 레지스트리 분석

 악성코드가 지속성을 유지하기 위해 레지스트리에 등록을 했을 경우도 있다. 그러므로 레지스트리에 어떠한 변화가 생겼는지 REGA와 Regshot을 통해 확인해보았다. 아래의 그림과 같은 변화가 나타났다.

그림 11. REGA

 Internet Settings와 관련하여 동작이 이루어지는 것을 확인할 수가 있다. 이 외에도 Tcpip, Tracing 등 레지스트리를 조작하는 것을 확인할 수 있었지만 지속성과 관련된 레지스트리 항목은 보이지 않았다.

  

3.4 MFT 분석

 MFT 분석을 위하여 WinHex를 통하여 $MFT, $LogFile, $UsnJrnl:$J를 수집하였다. 이렇게 수집된 정보를 통해 분석은 NTFS Log Tracker를 통해 진행하였으며, 실행 후 변화가 일어난 .pf 파일을 제외한 사항은 다음과 같다.

그림 12. NTFS Log Tracker – Excel

 위의 그림과 같이 IE와 관련이 있는 Content.IE5, Cookies, History 디렉터리의 각 index.dat 파일과 어떠한 행위를 하는 것을 알 수가 있다. 대부분 이를 통해 개인정보를 가져온다는 점을 고려했을 때, 이 또한 이러한 가능성을 배제할 수 없다.



4. 상세 분석


 이번 장에선 위 정적 분석과 동적 분석을 통해 얻은 정보들을 바탕으로 더 자세히 알아보는 과정을 포함하고 있다. 주로 OllyDBG와 Rekall을 통해 분석이 진행되며 그 외에 IDA pro와 Volatility를 같이 사용하고 있다.

 

4.1 메모리 분석

 메모리를 통해 우선 해당 프로세스가 가지는 핸들을 확인해보았다. 어떠한 파일을 핸들로 갖는지 먼저 확인해보았다. 아래의 그림과 같이 이전에 MFT를 통해 확인한 index.dat과 관련하여, 악성코드로 인한 것임을 확인할 수 있다.

그림 13. Volatility – handles

 Malfind Plugin을 통해 인젝션이 일어났는지 확인해보았다. 그 결과 아래와 같이 나타난 것을 확인할 수가 있다. 실행, 읽기, 쓰기 권한이 있는 페이지에 MZ 헤더가 있는 것을 확인할 수가 있다.

그림 14. Rekall – Malfind

 이를 추출하기 위해 dlldump Plugin을 사용하였으며 해당 주소를 베이스로 주어 추출하였으며 성공적으로 추출이 되었다.

그림 15. Volatility - dlldump

 추출한 dll에서 특이한 문자열과 API는 찾을 수가 없었기에 간단하게 Virustotal을 통해 확인해보았다. 결과는 아래의 그림과 같으며 53개의 엔진 중 4곳에서 악의적인 기능이라 의심을 받는 결과가 나왔다.

그림 16. Virustotal

  

4.2 디버깅 분석

 GetProcAddress API는 지정된 모듈에서 함수의 주소를 구할 때 사용되는 API이다. 여기선 EncodePointer와 DecodePointer 함수의 주소를 구하는 것을 아래의 그림과 같이 확인할 수 있다.

그림 17. GetProcAddress

 Thread를 생성할 때 사용하는 CreateThread를 호출하는 것을 볼 수가 있다. 여기서 스레드를 CREATE_SUSPENDED로 CreateionFlags를 주므로 생성된 스레드는 바로 대기 상태가 되며 ResumeThread API를 호출해야 본 기능을 진행하게 된다.

그림 18. CreateThread

 생성된 스레드는 바로 대기상태에 진입을 하였기 때문에 ResumeThread를 호출해야 하며 이를 밑의 그림과 같이 바로 호출하는 것을 확인할 수가 있다. 만약 비교문에서 값이 같을 경우엔 스레드를 재개시키지 않는다는 것 또한 같이 확인할 수가 있다.

그림 19. ResumeThread

 CreateFile API는 파일을 생성하는 것뿐만이 아니라 해당 이름의 파일이 존재하고 있는 지의 여부를 확인하는데도 사용된다. 여기선 OPEN_EXISTING 이므로 해당 파일이 존재하는지를 확인하는 것으로 반환 값이 'FFFFFFFF'이므로 존재하지 않음을 알 수 있다.

그림 20. CreateFile

 Sleep 함수를 호출한 뒤 아래의 부분과 같이 값을 이동하는 과정을 볼 수가 있다. 마치 유니코드와 같이 1바이트는 NULL이 위치하고 있으며 많은 부분이 바뀌며 아래의 그림을 보자.

그림 21. Decoding

 변환된 부분 중에서 아래의 그림과 같이 "vcltest3.dll" 과 "RegisterAutomation"이라는 문자열을 확인할 수가 있다. 그 외에 다른 부분은 특정한 문자열을 확인할 수는 없었다.

그림 22. Decoding – String

 하지만 분석을 하는 도중 에러가 발생하였다. 디코딩을 진행한 부분의 주소를 ESI에 넣고 이를 CALL 명령어를 통해 호출하는 과정이다. 하지만 해당 호출 부분으로 이동한 후 디버거로 더 이상 분석이 불가능하게 된다.

그림 23. Error

 

 혹시나 해서 IDA Pro로 열어본 결과 아래와 같은 결과를 확인할 수가 있었다. 따라서 어떻게 해야 할지 모르므로 더 이상 분석은 어려울 것 같다.

그림 24. Error

  


5. 결론


 전체적으로 분석하는 내용을 실패하였다. 분석한 범위에서 내릴 수 있는 결론은 하나뿐이다. 인터넷 브라우저를 통해 개인정보 유출의 가능성이 있다는 것이다. 이제 Cuckoo Sand Box를 통한 결과를 확인해보자.

 

      • 인터넷 브라우저에서 개인 정보를 가로채는 기능을 함
      • 시스템의 정보를 수집하는 기능
      • 자동 실행을 위해 \Software\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon 등록
      • C:\ autoexec.bat Drop

 

 위와 같이 정리할 수 있다. 하지만 여기서 의문이 남는다. 본인의 VM에서 일반적으로 실행(디버거 없이)한 경우에도 autoexec.bat은 생성되지 않았다. 또한 지속성을 위한 해당 레지스트리 값이 변화하지 않았다. 다음과 같이 생각해볼 수가 있다.

 

  1. 해당 서버와의 연결이 이루어진 뒤에 주요한 기능들이 실행되는데 현재 서버가 닫힌 상태이므로 본 기능을 진행하지 않는다.
  2. 가상 머신에서 실행을 했기 때문에 이를 인지하고 본래의 기능을 진행하지 않는다.

 

 본인의 실력이 부족한 것도 사실이지만, Cuckoo를 통한 결과에 따르면 생성되었어야 할 파일이 생성되지 않는다는 점부터 결국 찜찜하게 분석을 마무리 짓는다.

 

# Cuckoo 분석 결과

/malwr.com/analysis/YzRjOTg0ZThmYWYzNDgxYWIyM2QwNGRkNWMxZTE4ODk/



  개요


해당 악성코드 파일(nethost.exe)에 대한 기본적인 파일 정보는 아래의 표-1과 같다. 

이를 통해 해당 악성코드는 러시아어로 작성된 것과 버전에 따라 유포자 및 제작자에 의해 업데이트가 될 수 있다는 것을 확인할 수가 있다.

  

  정적 분석


정적 분석에서는 PE구조를 확인하고, 이를 통해 패킹의 여부를 확인하며 그 외에 PE구조의 특이사항을 확인할 것이다. 이러한 PE 구조의 특이사항이란 IAT나 문자열 등을 포함하며 이를 통해 프로세스의 대략적인 기능에 대하여 추측해볼 것입니다.


PE구조 분석

PE구조를 확인해본 결과 별도의 패킹이 되지 않은 것을 확인할 수가 있었으며, TLS 영역도 존재하지 않음을 확인할 수가 있다. 아래의 그림은 DIE를 통해 해당 프로그램을 분석한 결과이다..

그림 1. PE구조 분석

 

그림에서와 같이 해당 악성코드는 C/C++로 작성된 것을 확인할 수가 있다.

  

문자열 분석

해당 악성코드에는 다양한 문자열들이 존재하는데 네트워킹과 관련된 문자열이 많음을 확인할 수가 있습니다. 몇 가지 선별한 문자열은 아래와 같다. 

 

이러한 문자열들을 통하여 인터넷 브라우저를 통하여 네트워킹을 진행하며 이외에도 ping 명령어, 그리고 레지스트리 키, FTP 등을 확인할 수가 있다. 따라서 웹브라우저의 연결을 통하여 특정한 사이트와 연결을 하거나, 다른 어떠한 작업을 진행하기 위하여 ping 명령어를 사용하는 것이라 예상해 볼 수가 있다.

  

Import Address Table 분석

어떤 함수들이 사용되고 있는지 IAT에 나타나있는 항목을 Dependency Walker를 통해 확인해 보았으며, 이 중에서 악성코드의 기능으로 의심되는 몇 가지 항목은 아래의 표와 같습니다. 

 

이를 통해 보았을 때 WS2_32.dll에서 네트워킹과 관련된 API들이 많이 사용되는 것을 알 수가 있다. 또한 CRYPT32.dll과 ADVAPI32.dll을 통해 암호화와 레지스트리 값 설정을 하는 함수가 존재하며 KERNEL32.dll을 특정한 파일과 기능하는 함수들이 있고 SHELL32.dll을 통해 특정한 명령어를 실행할 것이라 예상할 수가 있다.


동적 분석


동적 분석에서는 정적 분석을 토대로 예상되는 기능들을 직접 안전한 환경에서 실행하므로 일어나는 변화들을 관찰하여 이에 대하여 알아볼 것입니다. 여기선 Process Explorer를 통하여 프로세스의 변화를 관찰하고 TCP Viewer를 통하여 네트워크를 관찰하고 마지막으로 MFT를 분석할 것입니다.


          프로세스 분석

해당 프로세스를 실행시키고 ProcessExplorer을 통하여 아래와 같이 extension.exe가 실행이 추가적으로 실행이 되며, 이후 startpm.exe도 실행이 되는 것을 알 수가 있다.

그림 2. 프로세스 진행과정(1)

 

이렇게 3개의 프로세스가 실행되고 startpm.exe가 종료되기 전에 하위 프로세스로 CMD를 통하여 Ping 명령어를 사용하는 것을 확인할 수가 있었다.

그림 3. 프로세스 진행과정(2)

 

이러한 결과를 토대로 이후4장 상세 분석을 함에 참고를 하면 도움이 될 것이다.

  

네트워크 분석

해당 악성코드가 네트워킹을 하는 과정에 대하여 어느 곳과 연결이 네트워킹을 하는지 알아보기 위하여 TCP Viewer를 통하여 확인해보았다.

 

그림 4. TCP/UDP 연결 확인

 

위의 그림에서와 같이 악성코드가 실행된 후 이전에는 없던 System Process(PID:0)이 생기는 확인할 수가 있다. 이렇게 사용되는 프로세스와 원격주소에 대하여 정리한 것은 아래의 표와 같다.

 

 

이와 같이 총 9개의 주소 혹은 IP와 네트워킹을 하는 것을 확인할 수가 있으며, 프로세스가 종료된 후에는 이러한 네트워킹도 모두 종료가 되는 것을 확인할 수가 있었다.

  

MFT 분석

악성코드가 동작한 시간 이후로 MFT에 나타난 변화를 통하여 어떠한 파일이나 디렉터리가 생성되었는지를 확인해 보았으며 아래의 표와 같이 정리할 수가 있습니다. 

 

위의 표와 같이 SystemDir이라는 디렉터리를 생성 후 Temp나 그 곳에 부차적인 파일들을 생성하여 실행을 진행하고 실행이 완료된 후에는 삭제하는 것을 확인할 수가 있었다.

그 후 IE와 관련된 흔적들을 지우는 것을 확인할 수 있었으며 이를 통해 웹을 통한 행위에 대해 유심히 살펴보아야 함을 알 수가 있다.

  


상세 분석


상세 분석에서는 해당 악성코드에 대하여 상세한 분석이 진행되며, 필요하다면 부차적인 파일들도 상세 분석을 진행할 것이다.


Nethost.exe분석

우선 MFT에서 분석한 바와 같이 Nethost는 %AppData%\Local\SystemDir을 생성하는 것을 확인할 수가 있었다. 이후에 extension.exe와 startpm.exe는 동시에 생성되는 것이 아니라 같은 방식으로 extension.exe이 먼저 생성되기에 이에 맞추어 startpm.exe의 생성과정은 생략하였다.

그림 5. SystemDir 생성

 

이렇게 생성된 디렉터리와 %AppData\Local\%Temp 디렉터리를 통하여 악성코드가 어떠한 행위를 하는 것을 알 수가 있었다. 이렇게 기능을 한 후 프로세스가 종료된 후 디렉터리 내에 해당하는 내용들을 삭제하는 것 또한 확인할 수가 있었다.

그림 6. 네트워크 연결

 

네트워킹을 진행하는 것을 확인할 수가 있으며 send와 recv명령어를 사용하는 것을 확인할 수가 있었으며 동적 분석에서 확인한 바와 같이 여러 IP와 연결하는 것을 확인할 수가 있었다.

그림 7. CreateFile함수 통한 파일 생성

 

위의 그림과 같이 SystemDir 디렉터리에 extension.exe라는 파일을 생성을 하며, 이후엔 이와 같은 방식으로 startpm.exe를 생성한다. 이렇게 생성된 파일은 아래의 그림과 같이 WriteFile API를 통하여 버퍼가 기록된다.

그림 8. WriteFile 통한 기록

 

이렇게 recv를 통해 데이터를 받은 후 WriteFile을 통하여 4096Byte 만큼씩 데이터를 기록하는 것을 확인할 수가 있다. 이때의 IP는 193.238.153.90이다.

그림 9. MoveFile을 통한 파일 이동

 

872KB까지 기록이 된 후 MoveFile 함수를 통하여 기록되던 파일(SystemDir\)이 Temp디렉터리에 exe.tmp로 이동 되는 것을 확인할 수가 있다. 이후 아래의 그림과 같이 CopyFile 함수를 통하여 최초에 실행됐던 nethost.exe가 Temp\extension.exe와 Temp\startpm.exe로 복사가 되는 것을 확인할 수가 있다.

그림 10. CopyFile을 통한 파일 복사

 

이렇게 된 후 .tmp로 옮겨진 파일을 읽어서, CopyFile을 통한 원본과 같은 파일에 쓰는 것을 아래의 그림과 같이 확인할 수가 있다.

그림 11. 복사된 파일에 기록

위의 루프가 끝난 후 아래 그림 같이 CreateProcess를 통하여 각 파일(extension.exe, startpm.exe)를 실행하는데 여기서 이를 실행할 때 아래의 그림과 같이 인자를 주는 것을 확인할 수가 있었다.

그림 12. CreateProcess API 함수

     

CreateProcess의 CommandLine에 사용되는 각 프로세스의 인자는 아래의 표-6에 정리한 것을 볼 수가 있다. 여기서 이는 모두 한 줄에 해당하는 항목임을 유의하자. 

 

이렇게 각 프로세스는 생성된 후 아래의 그림과 같이 DeleteFile API를 사용하여 exe.tmp파일을 제거한다.

그림 13. DeleteFile API 함수

이렇게 작업을 수행한 후 해당 nethost.exe는 종료가 되는 것을 알 수가 있다. 이러한 분석을 통해 보았듯이, nethost.exe는 Dropper인 것을 알 수가 있다.