악성코드 분석/동적 분석

실전 악성코드와 멀웨어 분석 실습 - 03-02

IT공부 2020. 1. 6. 22:32
반응형

기초 동적 분석 도구를 이용해 Lab03-02.exe 파일에서 발견된 악성코드를 분석하라.

질문

1. 악성코드 자체가 어떻게 설치됐는가?

A : 먼저 악성코드가 실행파일이 아닌 DLL파일이다. DLL을 설치하려면 rundll32.exe을 사용해서 설치를 진행 해야 하는 것 으로 보인다. 그래서 임포트 함수를 확인하기 위해서 Dependency Walker를 이용하여 Lab03-02.dll를 확인하였다.

익스포트 함수로는 InstallA 와 ServiceMain를 찾을 수 있었다. 악성코드를 서비스로 설치하려면 rundll32.exe 실행 파일을 통해 악성코드의 익스포트 installA 함수를 rundll32.exe Lab03-02.dll, installA 형태로 실행할 수 있다.

Strings를 이용하여 문자열 검색 

흥미로운 문자열을 볼 수 있는데, 레지스트리 위치, 도메인명, IPRIP, serve.html,그리고 인코딩된 특정 문자열이 포함되어 있습니다. 기본적인 정적 분석 기법을 통하여 확인 할 수 있었던 것은 악성코드가 익스포트  함수인 installA를 이용하여 서비스로 설치할 필요가 있음을 알 수 있었습니다. 

 

2. 설치 후 악성코드를 어떻게 실행 할 수 있는가?

위의 과정은 악성코드를 서비스로 설치하는 과정일 뿐이고 서비스를 시작하려면 net명령어인 net start IPRIP를 이용하여 설치한다. 

아래 그림은 rundll32.exe로 악성코드를 서비스로 설치했을 때 레지스트리에 생긴 IPRIP 서비스이다. 이로 인해 서비스가 설치 된 것을 서비스 실행 하면된다.

Regshot으로 레지스트리에 변화가 있는지 먼저 악성코드 실행전에 스냅샷을 찍은 후  악성코드 실행 후 스냅샷을 찍어서 둘을 비교하는 도구를 이용해서 확인 결과 HKLM\SYSTEM\ControlSet001\Services\IPRIP HKLM\SYSTEM\C urrentControlSet\Services\IPRIP 이라는 서비스가 새로 생긴 것을 볼 수 있다.

 

3. 악성코드가 동작할 때 어떤 프로세스를 발견할 수 있는가?

svchost.exe로 정상적인 svchost.exe와 확연히 차이가 많이 나는 svchost.exe가 있었다. 차이가 있다는 것은 기존 svchost.exe 보다 크기의 차이도 있다고 판단하였다. 다른 방법으로는 Ctrl+F를 눌러 Lab03-02.dll 파일을 검색하는 방법 또한 또 다른 방법이다. 

아래와 같이 사진으로 보았을때 Command line 쪽을 보았을 때 레지스트리 편집기를 통해 보았던 명령어와 똑같은 svchost.exe파일 보아서 악성코드가 생성되어 활동중이란 것을 확인하였습니다. buildtime을 보아도 Lab03-02.dll의 컴파일 시간과 일치하였습니다. 

4. 정보를 수집하는 ProcMon을 사용하기 위해 어떤 필터를 설정했는가?

프로세스 익스플로러에서 발견한 PID를 이용하여 ProcMon에서 필터링 할 수 있었다. 

 

5. 악성코드임을 의미하는 호스트 기반 표시자는 무엇인가?

기본적으로 악성코드는 IPRIP을 설치하며, 자신을 레지스트리 HKLM\SYSTEM\CurrentControlSet\Services\IPRIP\Parameter\ServiceDll:%CurrentDirectory%\Lab03-02.dll 위치에 설치를 한다. 

6. 악성코드에서 유용한 네트워크 기반 시그니처가 존재하는가?

악성코드는 도메인명 Practicalmalwareanalysis.com 주소를 받고 HTTP로 보이는 내용으로 포트 80을 통해 호스트에 연결한다. server.html에 GET요청을 하고 User-Agent로 %ComputerName%Windows XP 6.11을 사용한다. 

 

여기서 User-Agent란 사용자를 대신하여 일을 수행하는 소프트웨어 에이전트입니다. 

예를 들어 모바일 페이지나 데스크탑용 페이지로 연결하려면 거기에 맞는 정보가 필요한데, 그 정보가 바로 사용자 에이전트입니다. 

 악성코드는 포트 80번을 통해 HTTP GET 요청을 하고 있다.(넷캣으로 포트 80번으로 리스닝을 한 이유는 문자열 리스트에서 HTTP를 보았기 떄문입니다.