Opera DLL Hijacking 위협 분석

취약점 분석/2009년 이후 2010. 11. 3. 12:56 Posted by 알 수 없는 사용자

 

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 으로 인한 계산기 실행



  3. 대응 방안

    가.    어플리케이션 개발 로딩하는 파일의 전체 경로를 사용하여 예방 가능

    나.    WebDAV 공유에서 DLL 로드할 없도록 설정

레지스트리 편집기 실행

[그림 9] 레지스트리 편집기 실행

 

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager 경로로 이동

 

Session Manager에서 다음과 같이 이동

[그림 10] Session Manager 레지스트리 생성

 

④CWDIllegalInDllSearch 입력한 수정

[그림 11] 레지스트리 편집기 실행

  

DWORD 편집 창에서 1 입력한 확인

[그림 12] 편집 DWORD 입력

 

  다.    패치된 최신 버전의 어플리케이션으로 업데이트 적용

 

II. 참고 사이트 참고 문헌
  
  1.    참고 사이트

- 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

 

현재 ㈜에이쓰리시큐리티에서 테스트 분석 중에 있으며, 문서는 계속 업데이트될 것입니다. 문서는 보안취약점으로 인한 피해를 최소화하는 도움이 되고자 작성되었으나, 문서에 포함된 대응방안의 유효성이나 기타 예상치 못한 시스템의 오작동 발생에 대하여서는 ㈜에이쓰리시큐리티에서는 일체의 책임을 지지 아니합니다..