티스토리 뷰
728x90
위성 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을 관리하는 것이 필요합니다.
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 서귀포블루버블
- 윈도우
- 패턴
- 울릉도
- CMake
- C# 고급 기술
- 티스토리챌린지
- Windows
- 블루버블다이빙팀
- 성산블루버블
- Linux
- 현포다이브
- OpenSource
- DLL
- 스쿠버 다이빙
- 스쿠버다이빙
- 암호화
- C#
- 서귀포
- Build
- script
- 외돌개
- 블루버블
- 제주도
- C++
- PowerShell
- 블루버블다이브팀
- ip
- C#.NET
- C
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함
250x250