DLL
IT 위키
- DLL; Dynamic Link Library; 동적 링크 라이브러리
- 여러 프로그램이 공유해서 쓰도록 함수·자원을 모아 둔 윈도우의 라이브러리 파일
리눅스의 공유 라이브러리(`.so`)에 해당한다. 확장자는 `.dll` 이다.
| 구분 | 정적 링크(.lib) | 동적 링크(.dll) |
|---|---|---|
| 결합 시점 | 컴파일·링크 시 실행 파일에 포함 | 실행 시 메모리에 적재 |
| 실행 파일 크기 | 커진다 | 작다 |
| 메모리 | 프로그램마다 사본 | 여러 프로세스가 공유 |
| 갱신 | 전체를 다시 빌드 | DLL 파일만 교체 |
- 묵시적 링크(Implicit) : 실행 시 로더가 임포트 테이블을 보고 자동 적재
- 명시적 링크(Explicit) : 코드에서 `LoadLibrary()` → `GetProcAddress()` 로 직접 적재
DLL 코드는 그것을 적재한 호스트 프로그램의 권한으로 실행된다. 이 점이 공격에 이용된다.
| 공격 | 내용 |
|---|---|
| DLL 인젝션(DLL Injection) | 다른 프로세스의 주소 공간에 DLL 을 강제로 적재시켜 그 프로세스 권한으로 코드를 실행한다. `CreateRemoteThread` + `LoadLibrary`, `SetWindowsHookEx`, APC 주입 등의 방법이 있다 |
| DLL 하이재킹 / 프리로딩 | 프로그램이 찾는 이름의 DLL 을 검색 경로 앞쪽에 악성 파일로 놓아 대신 적재되게 한다 |
| DLL 사이드로딩 | 정상 서명된 실행 파일이 악성 DLL 을 끌어오도록 한 묶음으로 배포한다 |
- DLL 검색 순서 제어 (`SetDllDirectory`, SafeDllSearchMode)
- DLL 에 코드 서명을 하고 로드 시 검증한다
- 절대 경로로 적재한다
- EDR 로 원격 스레드 생성·비정상 모듈 적재를 탐지한다
- ASLR, DEP 적용
