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 적용

같이 보기

[편집 | 원본 편집]