DLL 정리
- 악성코드는 일반적으로 윈도우
API(Application Programming Interface)
함수를 사용해 파일 시스템, 프로세스, 메모리, 네트워크 작업 수행을 위해 OS와 상호작용한다.- 상호작용을 위해 필요한 기능 대부분을 동적
DLL(Dynamic Link Library)
파일로 Export한다.
- 상호작용을 위해 필요한 기능 대부분을 동적
- 실행 파일은 다른 기능을 제공하는 다양한 DLL에서 이들 API 함수를 임포트한 후 호출한다.
- 따라서, 악성코드가 의존하고 있는 DLL과 임포트하고 있는 API함수를 조사하면 악성코드의 기능을 분석할 수 있다.
1) Kernel32.dll
- 부팅시 로드되어 모든 프로그램에 사용되고 커널이 애플리케이션에게 제공할 수 있는 서비스 함수 형태로 존재
- 프로세스, 메모리, 하드웨어, 파일 시스템 작업과 관련된 함수를 익스포트
- 악성코드는 파일 시스템, 메모리, 프로세스 관련 작업을 처리하고자 해당 DLL에서 API함수를 임포트한다.
2) ntdll.dll
kernel32.dll
과 함께 부팅 시 로드되어 모든 프로그램에 사용되며 유저 모드에서 동작 중이던 프로그램들을 위해 커널 모드의 요청을 대신 처리한 후 결과 값을 반환해주는 역할
- 윈도우 내장 API 함수를 익스포트하고 유저 모드 프로그램과 커널 사이에서 인터페이스 같은 역할을 한다.
- 프로그램은 일반적으로
ntdll.dll
의 API함수를 직접 임포트하지 않으며ntdll.dll
의 API함수는kernel32.dll
과 같은 DLL에 간접적으로 임포트된다.
- 예를 들어 프로그램이
kernel32.dll
(또는kernelbase.dll
)에 있는 API함수를 호출하면 API는 차례로ntdll.dll
안에 있는 짧은 스텁(stub)을 호출한다.
3) Advapi32.dll
- 서비스와 레지스트리 관련 기능 포함
- 악성코드는 서비스와 레지스트리 관련 작업을 하고자 해당 DLL에서 API함수를 사용한다.
4) Gdi32.dll
- 그래픽 관련 함수 익스포트
- 윈도우에서 마우스 움직임, 그림, 화면 등 GUI의 가장 기본이 되는 DLL
5) User32.dll
- 데스크톱, 윈도우 메뉴, 메시지 박스, 프롬프트 등과 같은 윈도우 유저 인터페이스 컴포넌트를 생성하고 조작하는 함수를 구현
- 일부 악성코드 프로그램은 해당 DLL의 함수를 이용해 DLL Injection과 키보드(키로깅)와 마우스 이벤트 모니터링을 한다.
6) MSVCRT.dll
- C 표준 라이브러리 함수 구현을 포함
7) WS2_32.dll, WSock32.dll, wsgtpip.dll
- 네트워크 통신을 위한 함수를 포함
- 악성코드는 네트워크 관련 작업을 수행하고자 이들 DLL에서 함수를 임포트한다.
8) Wininet.dll
- HTTP와 FTP 프로토콜과 상호작용하기 위한 고급 수준의 함수를 노출한다.
9) Urlmon.dll
WinInet.dll
을 둘러싸는 래퍼(wrapper)로 MIME 형식 처리와 웹 콘텐츠를 다운로드하는 역할을 수행한다.
- 악성코드 다운로더는 추가 악성 콘텐츠를 다운로드하고자 이 DLL의 함수를 사용한다.
10) Comctl32.dll
- 상태바, 진행바, 툴바 등과 같은 운영체제에서 지원하는 기능에 대한 응용 프로그램의 접근을 지원
11) Netapi32.dll
- 운영체제에서 지원하는 다양한 통신 기능을 응용 프로그램이 접근할 수 있도록 지원하는 기능
12) winmm.dll
- 멀티미디어 관련 기능들 포함
Window API 함수 볼 때 참고
MSDN(Microsoft Developer Network)나 구글링을 통해 윈도우 API함수에 대해 자세히 알아볼 수 있다.
데이터 타입
data type | description |
---|---|
Byte(b) | 부호없는 8비트 |
WORD(w) | 부호없는 16비트 |
DWORD(dw) | 부호없는 32비트 |
QWORD(qw) | 부호없는 64비트 |
Char(c) | 8비트 ANSI문자 |
WCHAR | 16비트 유니코드 문자 |
TCHAR | 일반 문자(1byte ASCII문자 또는 와이드, 2byte 유니코드 문자) |
Long Pointer(LP) | 다른 데이터 타입에 대한 포인터, 예를 들어 LPDWORD는 DWORD, LPCSTR은 상수 문자열. |
Handle(H) | 핸들 데이터 타입. 핸들은 객체에 대한 참조로 프로세스가 객체(파일, 레지스터, 프로세스, 뮤텍스 등)에 접근하기 전 객체에 대한 핸들을 먼저 열어야 한다. |
Untitled |
ANSI, 유니코드, 확장된 API 함수
간혹 API함수명 끝에 접미사로 A 또는 W, Ex가 붙은 것을 볼 수 있다.
ex) CreateFileA, CreateFileW
- (API함수명)A : ANSI 문자열을 입력으로 받음
- (API함수명)W : 유니코드 문자열을 입력으로 받음
- (API함수명)Ex : 확장 버전, MS가 이전 함수와 호환되지 않는 함수를 업데이트하면 업데이트 함수 이름 뒤에 붙임
Uploaded by Notion2Tistory v1.1.0