DLL(Dynamic Link Library) 이란?
- MS 윈도우에서 구현된 동적 라이브러리이다. 내부에는 다른 프로그램이 불러서 쓸 수 있는 다양한 함수들을 가지고 있다.
- 자주 사용되는 표준적인 함수를 매번 직접 작성해서 사용하는 것은 지나치게 시간 소모적이므로 표준화할 수 있는 함수를 미리 만들어서 모아 놓은 것.
- DLL 파일 → 함수 모음, 1개의 EXE 파일로 볼 수 있다.
- DLL → 동적 링킹, EXE → 정적 링킹
EXE와 DLL의 차이:
가장 큰 차이점은 실행 시점이다. EXE(독립적 실행)는 필요한 모든 라이브러리들을 갖고 있다. DLL은 프로그램 실행 도중에 갖고 오거나 가져다 준다.
EXE와 DLL 파일의 크기도 연관이 있으며, EXE는 독립적으로 실행하기 위해 모든 파일이 필요하여 그만큼 용량이 더 크다. 동적으로 파일을 가져다 쓸 수 있으면 자체적으로 가져야 할 크기는 작아진다.
< 주요 DLL >
- Kernel32.dll: 메모리, 파일, 하드웨어 접근과 조작(기본적인 dll 파일)
- MSVCRT.dll: C 프로그래밍 언어를 위한 런타임 라이브러리로, 기본적인 C 함수 및 입출력 기능을 제공
- Advapi32.dll: 서비스 관리자, 레지스트리 같은 추가 윈도우 핵심 컴포넌트
- User32.dll: 유저 인터페이스 (버튼, 스크롤바, 사용자 행위 제어, 반응 컴포넌트), GUI 관련
- Gdi32.dll: 그래픽 보기 및 조작
- Ntdll.dll: 윈도우 커널 인터페이스
- WS2_32.dll: 윈도우 소켓 네트워크(외부와 통신)
- Wininet.dll: FTP, HTTP, NTP와 같은 상위 수준 프로토콜 구현
Dependency Walker (DLL 의존성 확인 도구) 사용법
- exe파일이 어떤 DLL 파일을 가지고 와서 사용하는지 확인하는 도구
- Dependency Walker 다운로드 링크: https://www.dependencywalker.com/
그림1의 아이콘을 더블 클릭하여 실행한다.
그림2에서 File - Open 을 눌러서 분석할 파일을 가져오거나, 드래그 앤 드랍하여 파일을 분석한다.
그림3에서 EXE 파일을 불러온 후, KERNERL32.DLL 좌측에 +를 클릭하여 상세 정보를 확인할 수 있다.
DLL 파일 내에 여러 DLL 파일 정보를 확인할 수 있다.
빨간 박스 내의 Function은 윈도우 API 함수로, 좌측의 kernel32.dll 에서 사용된 함수들의 목록이다.
정적 분석에서 윈도우 API 함수는 파일의 행위를 유추할 수 있는 자료로 구글에서 검색하거나, https://learn.microsoft.com/ko-kr/ 에서 함수 이름을 검색하여 기능을 확인 한다.
PE 헤더 분석 도구(PEview, pestudio)의 IAT(Imports 테이블)에서 윈도우 API 함수 확인이 가능하다.
PE 헤더 분석 도구 관련 글은 여기를 참고한다. (그림8, 그림14 참고)
리소스 파일이란?
- 윈도우 프로그램은 입출력 외의 코드 부분이 존재하는데 이를 리소스라고 한다.
- 리소스는 화면에 시각적으로 보여지는 메뉴바, 툴바, 비트맵, 단축키, 대화상자 등으로 구성되어 있다.
- 기존의 프로그램보다 완성도를 높이고 사용자의 프로그램 사용을 돕는데 사용된다.
리소스 영역 확인
- 리소스 해커 사용
- 아이콘 섹션
- 메뉴 섹션
- 대화상자 섹션
- 문자열 테이블
- 버전정보 섹션
리소스 해커 사용법
리소스 해커 다운로드 링크: https://www.angusj.com/resourcehacker/
그림5의 아이콘을 더블 클릭하여 리소스 해커를 실행한다.
리소스 해커를 실행 후 File - Open을 클릭하여 파일을 불러오거나 드래그 앤 드랍으로 파일을 분석한다.
UI가 있는 프로그램을 분석하는 것을 추천한다. (메모장 - Notepad)
notepad(메모장)은 기본적으로 약간의 UI가 가미된 프로그램으로 가볍게 분석하기 좋다.
좌측에는 메모장이 가진 리소스 정보를 확인할 수 있다.
Icon은 메모장 프로그램의 아이콘 그림 정보를 확인 할 수 있다.
Icon Group은 메모장 프로그램의 아이콘의 크기를 확인할 수 있다.
Version Info는 메모장 프로그램의 버전 정보를 확인할 수 있다.
그 외 자세한 사용법은 리소스 해커 공식 홈페이지를 참고한다.
리소스를 이용한 악성코드
다운로더(Downloader)
- 특정 프로그램 실행 시 리소스 파일에 인터넷을 연결하여 exe 파일 등을 다운로드 받기
- 다운로드를 위해 UrlDownloadToFile() API 호출
- 다운로드 완료 후 ShellExecute(), WinExec(), 또는 CreateProcess() API 호출하여 다운로드한 컴포넌트 실행
드로퍼(Dropper)
- 특정 프로그램의 리소스 파일에 exe 파일 등을 숨겨놓기
- 해당 프로그램 실행 시 숨겨놓은 exe 파일이 실행되어 악성코드가 실행됨.
- 일반적으로 리소스 섹션에 추가 바이너리를 포함한다.
- 내장한 실행 파일을 추출하고자 FileResource(), LoadResource(), LockResource(), SizeOfResource() API 호출
참고
https://rninche01.tistory.com/entry/%EC%95%85%EC%84%B1%EC%BD%94%EB%93%9C-%EA%B8%B0%EB%8A%A5
pestudio 활용하여 악성코드 리소스 파일 분석
pestudio를 사용하여 Lab01-04.exe 파일을 불러온다. (pestudio 사용법은 여기를 참고)
그림11을 보면 Lab01-04.exe 파일의 imports 정보가 확인되며, SizeofResource, FindResourceA, LoadResource 등 리소스 정보가 확인된다.
BIN 파일은 리소스 내부의 파일로, 이진 파일 형식의 문자열이 포함되어 있는 바이너리 파일이다. (컴퓨터가 이해할 수 있는 텍스트 파일)
마우스 우측 클릭 후 dump(RAW)를 클릭하여 동일 폴더에 파일을 추출한다. (파일명: bin.dump)
우측으로 드래그 해보니 BIN 파일은 exe 파일임을 확인할 수 있다. (MZ 문자열 = PE 파일 = exe 파일)
bin.dump 파일을 pestudio로 분석한다.
imports 테이블 확인 시, 기존 Lab01-04.exe 에서 확인되지 않았던 URLDownloadToFileA 라는 함수가 확인된다.
그림14의 imports 테이블 정보로 bin.dump 파일의 행위를 대략적으로 파악할 수 있다.
- GetWindowsDirectoryA → 윈도우 디렉터리 정보 가져오기
- URLDownloadToFileA → URL에서 파일 다운로드
- GetTempPathA → 경로 정보 가져오기
- WinExec → EXE 파일 실행
strings 정보 확인 시 특정 URL이 확인되며 updater.exe 파일을 다운로드 하는 것으로 유추할 수 있다.
결론
- Lab01-04.exe 파일의 리소스 파일에 exe 파일(bin.dump)이 감춰져 있다.
- bin.dump 파일의 imports 정보 확인 시 기존(Lab01-04.exe)에 없던 API 함수 확인 → url 다운로드
- bin.dump 파일의 strings 정보 확인 시 특정 URL 에서 updater.exe 를 다운로드 하는 것을 확인
'보안 > 악성코드 분석' 카테고리의 다른 글
리버싱 개념 및 어셈블리어 설명 (0) | 2024.07.27 |
---|---|
악성코드 동적 분석 도구 기능 및 사용법 (Process Monitor, Process Explorer) (0) | 2024.07.26 |
PE 헤더 분석 도구 (PEview, pestudio) 기능 및 사용법 (4) | 2024.07.23 |
악성코드 분석 시 파일 내 문자열 확인 도구 (BinText, Strings) 기능 및 사용법 (3) | 2024.07.22 |
정적 분석 도구 PEiD, Exeinfo PE 및 UPX 기능 및 사용법 (0) | 2024.07.21 |