개발/WIN32-MFC

DLL 시리즈 #4 위성 DLL 취약점

-=HaeJuK=- 2024. 9. 12. 15:32
위성 DLL 로드 취약점

위성 DLL 로드 취약점

1. 위성 DLL 로드 취약점이란?

위성 DLL 로드 취약점(Satellite DLL Load Vulnerability)은 응용 프로그램이 특정 언어 리소스나 플러그인과 같은 위성 DLL을 로드할 때 발생할 수 있는 보안 문제입니다. 위성 DLL은 프로그램의 실행 파일과 같은 경로에 있거나, 특정 경로에서 로드됩니다. 이 취약점을 악용하면, 공격자는 악성 DLL을 시스템에 배치하여 응용 프로그램이 이를 로드하게 만들 수 있습니다.

2. 위성 DLL 로드 취약점의 유형

  • DLL 하이재킹(DLL Hijacking): 프로그램이 특정 DLL을 로드할 때, 시스템의 경로 탐색 순서에 따라 악성 DLL이 먼저 로드되는 경우입니다. 공격자는 프로그램과 동일한 이름의 악성 DLL을 경로 상에 배치해 시스템이 이를 먼저 로드하게 만듭니다.
  • DLL 경로 탐색 순서 취약점: 운영체제는 특정 경로에서 먼저 DLL을 검색합니다. 공격자가 이 경로 탐색 순서를 악용해 악성 DLL을 우선 로드하게 만들 수 있습니다.
  • 위성 DLL 하이재킹(Satellite DLL Hijacking): 프로그램이 지역화된 리소스나 언어별 리소스를 로드하는 위성 DLL을 동적으로 로드할 때, 잘못된 경로에서 로드되면 공격자가 악성 DLL을 실행시킬 수 있습니다.

3. 취약점이 발생하는 원인

  • 불명확한 DLL 경로 지정: 프로그램이 LoadLibrary() 또는 LoadLibraryEx()와 같은 함수를 사용할 때 명확한 절대 경로를 지정하지 않으면, 운영체제가 경로 탐색 순서에 따라 예상하지 않은 경로에서 DLL을 로드할 수 있습니다.
  • 기본 경로 탐색 순서의 오용: 기본적으로 윈도우는 실행 파일 경로, 시스템 디렉터리, PATH 환경 변수의 순서대로 DLL을 찾습니다. 공격자는 이를 악용해 프로그램이 악성 DLL을 로드하게 할 수 있습니다.
  • 사용자 권한 부족: 낮은 권한을 가진 사용자가 임시 디렉터리에 접근할 수 있는 경우, 악성 DLL을 해당 디렉터리에 배치하여 시스템을 공격할 수 있습니다.

4. 방지 방법

  • 명시적 경로 사용: LoadLibrary() 또는 LoadLibraryEx() 함수를 사용할 때, 명확한 절대 경로를 지정하여 DLL을 로드해야 합니다. 상대 경로나 기본 경로에 의존하지 않고, 명확한 경로를 설정해 악성 DLL이 로드되지 않도록 해야 합니다.
  • DLL 검색 경로 제한: SetDllDirectory() 함수를 사용해 특정 경로에서만 DLL을 로드하도록 설정할 수 있습니다. 이를 통해 예상하지 못한 경로에서 악성 DLL이 로드되는 것을 방지할 수 있습니다.
  • Safe DLL Search Mode 사용: 윈도우에서 Safe DLL Search Mode를 활성화하면, 시스템 디렉터리와 Windows 디렉터리부터 먼저 탐색하므로, DLL 하이재킹 위험을 줄일 수 있습니다.
  • 디지털 서명 확인: DLL에 디지털 서명을 적용해, 로드 시 무결성과 신뢰성을 확인하여 악성 DLL이 아닌 신뢰할 수 있는 DLL만 로드되도록 할 수 있습니다.
  • Application Manifest 사용: 애플리케이션 매니페스트 파일에서 RequireAdministrator 속성을 설정하여 관리자 권한으로 프로그램을 실행함으로써 악성 DLL이 쉽게 설치되지 않도록 방지할 수 있습니다.

5. 결론

위성 DLL 로드 취약점은 시스템의 경로 탐색 순서나 불명확한 경로 지정으로 인해 발생하는 중요한 보안 문제입니다. 공격자는 이를 이용해 악성 DLL을 로드시켜 프로그램의 동작을 변경하거나, 악성 코드를 실행할 수 있습니다. 이러한 문제를 방지하기 위해서는 DLL 로드 경로를 명확하게 설정하고, 시스템의 기본 경로 탐색 순서를 조정해 안전한 방식으로 DLL을 관리하는 것이 필요합니다.

반응형