도전한 사람들의 날짜를 보니 이번년도 중순정도 오픈된 사이트 같네요.^_^)
한번 심심하실때 도전하심 좋을듯!!~고고.
사이트 주소 : http://real-forensic.com/
Opera DLL Hijacking 위협 분석
By. clarus (clarus@a3sc.co.kr)
I. Opera DLL Hijacking 위협 분석
1. 취약점 개요
DLL Hijacking은 윈도우 기반의 어플리케이션이 DLL을 로딩할 때 DLL의 경로가 지정되지 않아서 발생하는 취약점입니다. 원칙적으로 파일의 전체 경로가 입력되어야 하지만, 윈도우 DLL의 경로가 지정되지 않으면, 자동으로 파일이 탐색되기 때문에 대부분의 코딩은 경로명을 생략하고 파일명만을 적어주기 쉽습니다.
파일의 경로가 존재하지 않을 경우, 가장 먼저 레지스트리의 KnownDLLs 키가 조사됩니다. 해당 레지스트리의 경로 및 내용의 다음과 같습니다.
레지스트리가 등록되어있지 않을 경우, DllDirectory에 저장된 디렉터리를 검색합니다.
만약 로드하고자 하는 DLL이 해당 레지스트리에 존재치 않으면, DLL 검색 경로에서 우선순위에 의하여 DLL을 찾게 됩니다.
따라서 공격자는 프로그램을 사용시 실행되는 DLL 파일의 경로를 추적한 후, DLL의 우선순위가 낮으면 우선순위가 높은 디렉터리에 DLL 파일을 삽입하여 악의적인 명령을 수행할 수 있습니다.
[그림 1] DLL Hijacking가상 시나리오
나. DLL 호출 우선 순위
①응용 프로그램이 로드되는 디렉터리
②시스템 디렉터리
③16비트 시스템 디렉터리
④Windows 디렉터리
⑤CWD (현재 작업 디렉터리)
⑥PATH 환경 변수에 나열되는 디렉터리
다. 취약점 영향도
- 악의적인 DLL 의도적 loading으로 권한 상승 또는 시스템 장악
- WebDAV와 연계시켜 취약성 발생시, 원격코드 실행에 따른 치명적인 위협 발생
2. 취약점 상세
가. 위협 분석 방향
WebDAV나 네트워크 공유를 통해 접속한 디렉터리는 DLL 호출 우선 순위의 “⑤ CWD(현재 작업 디렉터리)”에 해당하기 때문에, 해당 공격이 성공하기 위해서는 호출되는 DLL 우선순위가 가장 낮은 PATH 환경변수에 등록되어 있거나 존재하지 않는 DLL이어야 합니다.
DLL 호출 우선순위의 “⑥PATH 환경 변수에 나열되는 디렉터리” 경로까지 검색하여도 DLL을 찾을 수 없을 경우 에러메시지를 띄우는데, 현 구현시의 DLL Hijacking의 경우는 “⑤CWD(현재 작업 디렉터리)”를 참조하는 것에서 발생합니다.
어플리케이션이 파일(.ppt, .c, .cpp, .torrent, .pcap 등)을 읽을 때 악성 DLL 파일이 어플리케이션 파일과 같은 경로에 있으면 CWD(현재 디렉터리)로 인식하여 조작된 DLL이 삽입되는 것입니다
나. Opera DLL Hijacking으로 임의의 명령 실행
Opera 버전 10.61 에서 DLL Hijacking 이 발생됩니다. 취약점 정보 및 Exploit Code에 대한 정보는 아래와 같습니다.
URL) http://www.exploit-db.com/exploits/14732/
(Opera v10.61 DLL Hijacking Exploit (dwmapi.dll))
다음은 Opera 버전10.61 에서 발생하는 DLL Hijacking취약점에 대한 취약점 정보 및 Exploit Code 일부분 입니다.
[그림 2] Opera DLL Hijacking 취약점 정보
다음은 process monitor로 확인한 “NAME NOT FOUND”에 따른 DLL Hijacking 취약점을 분석하는 화면입니다.
[그림 3] DLL Hijacking 취약점 분석
다음은 Opera 버전10.61에서 존재하는 DLL Hijacking취약점으로 계산기를 실행시키기 위한 Exploit Code를 구성하는 화면입니다.
[그림 4] exploit code
다음은 Exploit code를 통해 DLL 파일을 생성하는 화면입니다
[그림 5] win32 DLL 프로젝트 생성 및 코드 작성
다음은 Opera 버전 10.61에서 DLL Hijacking 공격을 위해 DLL 파일(dwmapi.dll)을 생성한 화면입니다.
[그림 6] DLL 파일 생성
“1. 취약점 개요”에서 설명한 내용과 같이 DLL을 찾을 수 없을 경우 DLL 호출 우선순위인 “⑤CWD(현재 작업 디렉터리)”를 참조하도록 하기 위해, 현재 작업 디렉터리에 DLL파일을 위치시킨 화면입니다.
[그림 7] 현재 작업 디렉터리에 DLL 이동
다음은 Exploit Code로 생성된 DLL파일에 의해 임의의 명령(계산기 실행)이 실행된 화면입니다.
[그림 8] DLL Hijacking 으로 인한 계산기 실행
가. 어플리케이션 개발 시 로딩하는 파일의 전체 경로를 사용하여 예방 가능
나. WebDAV 공유에서 DLL을 로드할 수 없도록 설정
① 레지스트리 편집기 실행
②HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager 경로로 이동
③Session Manager에서 다음과 같이 이동
[그림 10] Session Manager측 레지스트리 생성
④CWDIllegalInDllSearch를 입력한 후 수정
[그림 11] 레지스트리 편집기 실행
⑤DWORD 값 편집 창에서 1을 입력한 후 확인
[그림 12] 편집 창DWORD 값 입력
다. 패치된 최신 버전의 어플리케이션으로 업데이트 적용
- http://www.exploit-db.com/exploits/14732/
- http://support.microsoft.com/kb/2264107
- http://isc.sans.edu/diary.html?storyid=9445
- http://blog.metasploit.com/2010/08/exploiting-dll-Hijacking-flaws.html
※현재 ㈜에이쓰리시큐리티에서 테스트 및 분석 중에 있으며, 이 문서는 계속 업데이트될 것입니다. 본 문서는 보안취약점으로 인한 피해를 최소화하는 데 도움이 되고자 작성되었으나, 본 문서에 포함된 대응방안의 유효성이나 기타 예상치 못한 시스템의 오작동 발생에 대하여서는 ㈜에이쓰리시큐리티에서는 일체의 책임을 지지 아니합니다..