본문 바로가기
리버싱(Reversing)/'악성코드 분석 시작하기' 정복

[악성코드 분석]#3 동적 분석 - part(2/2)

by 아기미믹 2023. 6. 21.

책 '악성코드 분석 시작하기' 표지

이 글의 모든 내용은 책 '악성코드 분석 시작하기'를 스스로 공부하며 정리한 내용임을 밝힙니다.

 

DLL(Dynamic Link Library)

 DLL은 그 자체로서 실행할 수 없지만, 다른 프로그램(실행 파일 또는 DLL)에서 사용할 수 있는 함수를 담고 있는 모듈이다. 즉, DLL 파일은 여러가지 함수들을 익스포트(Export)하고 있으며, 다른 파일들은 해당 DLL 파일의 익스포트된 함수들을 임포트(Import)하여 사용한다.

 

CFF 익스플로러 도구를 사용하면 임포트한 DLL 파일과 그 DLL 파일이 익스포트하고 있는 함수를 볼 수 있다.

악성 샘플의 Import Directory

Import Directory를 클릭하면 해당 파일이 어떤 DLL을 임포트하고 각 DLL이 익스포트하는 함수의 목록을 확인할 수 있다.

[악성코드 분석]#3 동적 분석 - part(1/2) 에서 분석한 샘플을 CFF 익스플로러에 올리고 확인한 결과, kernel32.dll 을 임포트하고 있고 최초의 자기자신 파일을 삭제했던 행위를 수행하기 위해 DeleteFileA 함수가 있는 것을 볼 수 있다.

 

DLL을 분석하기에 앞서, 공격자가 왜 DLL을 사용하는지 알아야 할 것이다.

그 내용을 정리하면 다음과 같다.

● 악성코드가 수행하는 모든 동작들을 호스트 프로세스를 통해 발생한 것처럼 보이기 위해

(DLL은 그 자체로서 실행할 수 없고 다른 파일에 의해 로드되어 실행할 수 있다.)

● 이미 실행중인 프로세스에 DLL을 삽입하여 지속적인 공격을 위해

● 메모리에 로드된 DLL을 활용해 프로세스의 기능을 조작하기 위해

● DLL은 일반 실행 파일보다 분석이 더 어렵기때문에

 

rundll32.exe를 이용한 DLL 분석

1. rundll32.exe 문법

rundll32.exe를 이용하여 DLL을 실행할 때의 문법은 다음과 같다.

rundll32.exe [DLL 전체 경로], [익스포트 함수] [함수 인자]

DLL 전체 경로: 실행할 DLL의 절대경로값을 적는다.

익스포트 함수: 실행할 DLL이 익스포트하고 있는 함수의 이름을 적는다. 일치하지 않으면 엔트리 에러와 함께 rundll32.exe는 종료된다. 익스포트가 없는 DLL 실행 시 더미값을 임의로 넣어줄 수 있다.

함수 인자: 선택적으로 입력되는 값이며, 익스포트 함수의 인자가 필요할 때 적어주는 항목이다.

 

DLL은 로드되면 항상 엔트리 포인트 함수(DLLMain 함수)가 호출된다.

공격자는 일반적으로 DLLMain함수에 대부분의 악성 코드를 구현해놓는다.

 

2. DLL 분석 예시

책에 있는 샘플의 해시값을 몰라 구할 수가 없어 오픈된 악성 샘플 다운로드 사이트에서 임의의 .dll 파일을 받아 분석/모니터링 해보았다. 샘플명 "e1.dll"

샘플을 분석하기 전에 노리벤, 와이어샤크, 프로세스 해커 등 분석 도구를 사전에 실행해놓았다.

익스포트 디렉토리

CFF 익스플로러를 활용해 Export Directory 확인 결과, DllRegisterServer란 함수를 익스포트하고있다.

해당 함수를 활용해 DLL을 실행해보자.

rundll32.exe C:\Users\blackcarriage\Desktop\e1.bin\e1.dll, DllRegisterServer

어떠한 에러 메시지도 출력 안 하는 걸 보니 정상적으로 실행된 것 같다.

30초 정도 후, 프로세스 모니터 로그를 확인해보았다.

 

rundll32.exe를 통해 외부 통신(90.123.203.50)을 시도한 것을 발견하였다.

와이어샤크에서 해당 패킷을 확인해보자.

뭔지는 몰라도 무언가 TCP 통신을 시도했음을 알 수 있다.

그 이후에도 계속하여 외부통신을 시도한다. 악성 행위를 하는 dll임에 틀림없다...

 

프로세스 체크를 이용한 DLL 분석

본 내용에서는 rundll32.exe로 동작하지 않고 특정 프로세스에서만 동작하는 DLL 파일을 실행하는 방법을 설명한다.

다만 그러한 샘플을 구하지 못 해서 실습은 하지 못 했다...

내용을 정리하자면 rundll32.exe로 동작하지 않는 DLL의 경우, 정적 분석(리버싱)을 통해 실행할 때 어떤 프로세스에서 로드 되었는 지 검증하는 부분을 찾아내고, 이를 RemoteDLL 도구를 활용해 실행할 수 있다.


동적 분석은 악성코드의 네트워크 상호작용, 시스템 파일에서의 행위 등을 직접 확인하고 검증할 수 있다.

정적 분석과 결합하여 분석을 수행하게 되면 악성 바이너를 훨씬 더 심도있게 이해할 수 있는 기법이다.

다음 포스팅부터는 대망의 어셈블리어이다...어셈블리어를 익히고 이를 활용하여 진정한 리버싱(코드 분석)에 입문해보자!