본문 바로가기

study/악성코드분석&리버싱

기초 정적 분석, lab01-04.exe

728x90

lab01-04.exe를 분석해보겠습니다.

 

1. virustotal에 업로드 하고 보고서를 확인하자. 기존 안티바이러스 정의된 것과 일치하는가?

72개중에 61개의 엔진에서 악성코드라고 판단이 되었습니다.

아마 이 파일은 트로이목마 파일인 것 같고, 역시나 win32형태입니다.

downloader가 있는 것을 보니 네트워크를 통해 무언가를 다운로드 해오는 것 같습니다.

 

import는 3개의 dll이 있습니다. 

연결된 url과 도메인, ip들을 볼 수 있습니다. 만약 이것이 실제 악성코드라면, 알 수없는 주소로 가서 좋지않은 것들을 다운로드해올 가능성이 있으니 의심을 해봐야합니다.

이 exe파일은 어떤 특정 실행하는 파일이 연관되어있는것이 하나 더 있음을 알 수 있습니다.

그리고 url, domain, ip각 두개씩 연결이 되어있다고 보여줍니다.

behavior로 가서 보겠습니다. 

보통 주소의 끝이 /나 html로 끝나지만, 여기에 보이는 주소는 .exe로 끝나는 것으로 확인됩니다.

updater.exe파일을 다운받을 것으로 예상이 됩니다.--> 악성코드일 확률

아래로 가면 이 파일이 어떤 행동을 하는지 알 수 있습니다. 이 파일은 window아래의 system32폴더를 건드리게 됩니다.

system32폴더는 중요한 폴더이기 때문에 이 곳을 건드린다는 것은 무언가 위장을 하여 심어들 것으로 생각이 듭니다.

 

2. 패킹이나 난독화의 흔적이 있는가? 이유는? 파일이 패킹되어있다면 언패킹해라.

peid에서 확인해보겠습니다.

EP section이 .text로 깔끔하게 나오는 것으로 확인이 가능합니다.

또한 컴파일 버전도 visual c++ 6.0으로 패킹은 되어있지 않는 것 같습니다.

 

3. 이 프로그램은 언제 컴파일되었는가?

virustotal에서 먼저 확인할 수 있었습니다. pe파일의 컴파일 년도는 2019년 8월 30일입니다.

또 peview에서도 확인이 가능합니다.

이 실습예제가 12년도쯤에 생긴 것인데, 그렇다면 이전에는 미래의 시간으로 컴파일되었다는 것으로 확인이 가능했을 것입니다. 하지만 지금은 해가 지나서 과거로 보이는 것입니다.

왜 미래시간으로 해놓았을까? 의심을 해보자면, 이 악성코드를 만든 사람이 미래의 컴파일 시간으로 조작을 해둠으로써 이 파일이 악성코드라는 힌트를 주었다는 것으로 해결이 되겠습니다. 이 파일은 실습예제니까요!

 

4. import를 보고 악성코드의 기능을 알아낼 수 있는가? 그렇다면 어떤 import를 보고 알 수 있었는가?

dependency walker에서 확인해보겠습니다.

kernel32.dll에서 먼저 보이는 api함수는 4개정도가 되겠습니다. 각 함수들을 msdn에서 검색해서 보도록 하겠습니다.

- CreateFileA

이 함수는 이름에서도 알 수 있듯, 어떤 파일을 만드는 함수입니다. 

무슨 파일을 만들고 그 파일로 무엇을 하는지가 중요하겠네요.

- MoveFileA

아마 위에서 만든 파일을 다른곳으로 옮기는 것 같습니다.

-WriteFile

데이터를 인풋/아웃풋 디바이스에 생성하는 것도 가능하고, 특정 디바이스에 업데이트하는 것도 가능한 함수입니다.

- WinExec

어떤 createProcess하는 함수를 호출하고,

- CreateProcess

새로운 프로세서를 실행시키는데 우선순위를 높게하는 스레드로 실행합니다. 새로운 프로세서의 실행이 될때는 관련되어 여러가지일들을 하는 것으로 되어있습니다.

이 함수에서 필요한 parameter들로는 실행할 어플리케이션 이름, 커맨드라인, 등이 있습니다. 

 

그런데 virustotal에서 확인한 바로는, 네트워크 기반의 증거들이 보여야하는데 dll도 그렇고 네트워크에 관련된 것을 확인할 수가 없습니다. 패킹이 되질 않았으니 조작은 되지않았지만 다른 것들로 더 확인을 해봐야할 것 같습니다. 

 

5. 감염된 장비에서 이 악성코드를 발견하기위해 사용한 네트워크 기반의 증거는 무엇인가?

strings로 분석해보겠습니다. strings 파일위치한 곳에서 cmd창 실행하고 > strings (분석할파일명)

여기 보이는 부분에 대한 문자열들은 이전에 dependency walker에서 보았던 import되는 함수들입니다.

그런데 아래로 내려보면,

원래 strings실행하고 맨 처음에 보이는 this program cannot be run in DOS mode라는 것이 또 나옵니다.

앞쪽과 비슷한 형태로 문자열들이 나오다가 다시 한번 api함수가 나옵니다.

여기서 봐야할 부분은 이전에서 보았던 함수명이 아닌 함수가 나오는 것입니다. 

- URLDownloadToFileA

이 함수는 인터넷이나 다른곳에 저장되어있는 파일을 다운로드 하는 함수입니다.

그리고 필요한 parameter는 url, 파일명입니다. 그렇다면 이 함수를 쓰기위해 파일명과 url은 꼭 나와야겠습니다.

다시한번 strings를 보겠습니다.

다시보니 새로운 dll이 보입니다. urlmon.dll

그리고 함수를 사용하기 위해 필요한 winup.exe,system32폴더 아래의 wupdmgrd.exe, url까지 나와있습니다.

 

앞쪽에는 일반적으로 보던 문자열들이 나와있지만, 뒤에 내려보니 숨겨졌던 dll과 실행에 필요한 parameter들이 나왔습니다.

패킹이 안되어있는데 어떻게 된 것인지 알아보겠습니다.

 

6. 이 파일은 리소스 섹션에 하나의 리소스를 Resource Hacker를 이용해 리소스를 점검하고 추출해보자. 리소스로부터 무엇을 알 수 있는가?

리소스해커에서보면, peview에서 보았던 것 처럼 보입니다. 여기서 우리가 해야할 것은 또다른 파일을 추출해내는 것입니다.

bin파일을 추출해서 따로 저장합니다. 저는 output.exe로 저장하였습니다.

이제 우리는 lab01-04.exe에 숨겨진 또 다른 악성코드를 찾은 것입니다...분석을 새로운 파일로 다시 해봐야합니다.

 


output.exe파일 분석시작!

1. virustotal

69개중에 54개에서 악성코드임을 탐지하였습니다. 기타 파일에 대한 것들은 거의 비슷하게 나오고있습니다.

details에 가서 보면,

이 파일의 생성일자는 2011년도입니다. 앞에서 말씀드렸듯 이 예제가 만들어진 날짜입니다. 

이전 파일에서는 이 시간이 미래의 시간이였다고 설명을 드렸는데요, 숨겨진 악성코드 파일을 찾아내니 원래 생성시간대로 뜨는 것을 확인할 수 있습니다.

strings에서만 확인되었던, 숨겨진 dll이 나와있습니다. 그 아래 api함수명도 뜨네요.

그런데 kernel32.dll도 원래 확인했던 api함수명들과는 다른 것으로 확인됩니다.

실제 악성코드 파일은 이 파일인 것 같습니다.

2. dependency walker

함수이름들을 보니 window directory에 접근도 하고, 파일실행함수도 있는 것으로 확인됩니다.

그리고 숨겨져있던 urlmon.dll 안의 urldownloadtofile함수까지 확인됩니다.

3. PEiD

EP section, 컴파일버전또한 정상으로 나오는 것으로 패킹은 되어있지 않습니다.

4. PEview

이 악성코드의 진짜 컴파일 날짜입니다.


output.exe파일을 lab01-04.exe의 리소스 영역(특정영역)에 바이너리형태로 주입을 하고 만든것으로 확인이 됩니다.

이전의 악성코드들은 이런 형태로 숨겨져있었습니다.

특정영역에 숨겨져있지만 실행은 문제없이 되는 악성코드 파일입니다. 

 

resource hacker를 통해 실제 실행가능한 pe파일이 들어가있었고, 그 파일을 분석해본 결과 실제 악성코드의 많은 증후인 네트워크에 접속하는 dll도 있었고 기타 여러가지 일들을 한다는 것을 알 수 있었습니다. 

 

728x90
반응형