사용자 인터페이스 권한 격리

코드 주입 보안 결함에 대응하기 위해 윈도우 비스타에 도입된 기능

사용자 인터페이스 권한 격리(User Interface Privilege Isolation; UIPI)는 코드 주입 보안 결함에 대응하기 위해 윈도우 비스타에 도입된 기능이다. 신뢰 등급(MIC: Mandatory Integrity Control)을 확인하여 상대적으로 낮은 신뢰 등급을 가진 프로세스가 높은 신뢰 등급을 가진 프로세스에 메시지를 보내는 것을 제한한다. (사용자 인터페이스 메시지 중 매우 한정된 것은 가능하다.)[1] 윈도우 메시지는 사용자의 행동과 프로세스가 통신하기 위한 목적으로 설계되었다. 하지만 수신 프로세스가 자신의 임의의 코드를 수행함으로써 악의적으로 결함을 일으키는 데에 이용될 수 있다. 만약 낮은 신뢰 등급을 가진 프로세스가 높은 신뢰 등급을 가진 프로세스의 코드를 실행할 수 있다면 이를 통해 허가받지 않은 등급 상승이 가능하여 보안 제한을 회피하는 공격을 할 수 있다. UIPI는 결함을 유발하기 위한 특정 영역 접근에 제한을 둠으로써 그러한 종류의 보안 회피 공격을 줄일 수 있다.[2]

UIPI는 보안 경계가 아니며 모든 종류의 보안 회피 공격을 방어하지도 못한다. 사용자 인터페이스 접근성 응용 프로그램은 자신의 매니페스트 파일에 포함된 "uiAccess"의 값을 TRUE로 함으로써 UIPI를 우회할 수 있다. 이를 위해서는 응용 프로그램이 Program Files나 Windows 디렉터리에 존재해야 하고, 또한 인증된 코드 사인 기관에서 발행한 사인이 되어 있어야 하지만, 이러한 요구 사항이 악성 코드가 관여하는 것을 필연적으로 방지하지는 못한다. 또한, WM_KEYDOWN과 같은 몇몇 메시지는 여전히 허용되는데, 이 메시지는 낮은 신뢰 등급 프로세스가 입력을 권한이 상승된 명령 프롬프트로 전달하는 데에 필요하다. 마지막으로 ChangeWindowMessageFilter 명령어를 통해 높은 신뢰 등급 프로세스가 상대적으로 낮은 신뢰 등급 프로세스가 생성한 메시지를 받을 수 있도록 중간 신뢰 등급 프로세스(인터넷 익스플로러 보호 모드를 제외한 모든 비상승 프로세스)의 메시지를 변환할 수 있다. 이로써 인터넷 익스플로러 또는 그 자식 프로세스가 아닌 한 UIPI를 효과적으로 우회할 수 있다.

같이 보기 편집

참조 편집

  1. “The Windows Vista and Windows Server 2008 Developer Story: Windows Vista Application Development Requirements for User Account Control (UAC)”. 마이크로소프트. April 2007. 2011년 8월 23일에 원본 문서에서 보존된 문서. 2007년 12월 7일에 확인함. 
  2. Edgar Barbosa. “Windows Vista UIPI” (PDF). COSEINC. 2008년 10월 6일에 원본 문서 (PDF)에서 보존된 문서. 2007년 12월 7일에 확인함.