연구높음

Windows 관리자 보호 우회: UI 액세스를 통한 권한 상승 공격 기법

6분 읽기출처: Google Project Zero
Diagram illustrating Windows UI Access process flow and privilege escalation attack vectors

Microsoft Windows의 UI 액세스 취약점을 악용한 권한 상승 공격 기법 분석. James Forshaw 연구로 밝혀진 5가지 핵심 취약점과 대응 방안.

Windows 관리자 보호 우회: UI 액세스를 통한 권한 상승 공격 기법

작성자: [사이버 보안 전문 기자]

주요 발견 사항

보안 연구원 James Forshaw는 Microsoft의 UI 액세스 구현에서 발견된 5가지 중요한 취약점에 대한 기술적 세부 사항을 공개했습니다. Forshaw의 연구에서 확인된 9가지 우회 기법(이 분석에서 상세히 다룬 5가지 포함)은 현재 모두 Microsoft에 의해 패치되었습니다.

이러한 취약점은 Windows Vista에서 접근성 도구(예: 화면 판독기)를 지원하기 위해 도입된 UI 액세스 기능에서 발생합니다. 공격자는 이 기능을 악용하여 High 무결성 UI 액세스 프로세스에서 임의 코드 실행을 달성하고, 사용자 상호 작용 없이 관리자 보호의 보안 경계를 손상시킬 수 있었습니다.

기술적 배경: UI 액세스와 UIPI

윈도우 상호작용 보안의 진화

Windows Vista 이전에는 사용자 데스크톱에서 실행되는 모든 프로세스가 윈도우 메시지를 통해 다른 프로세스(특권 프로세스 포함)가 생성한 윈도우를 제어할 수 있었습니다. 이러한 동작은 제한된 사용자가 특권 UI 구성 요소를 조작하여 권한을 상승시키는 Shatter 공격으로 악용되었습니다. Microsoft는 특권 코드에서 UI 요소를 제거하여 이를 완화했습니다.

Windows Vista에서 사용자 계정 컨트롤(UAC)이 도입되면서 동일한 데스크톱에서 실행되는 프로세스가 서로 다른 권한 수준으로 실행되기 시작했습니다. 교차 권한 윈도우 조작을 방지하기 위해 Microsoft는 **사용자 인터페이스 권한 격리(UIPI)**를 구현했으며, 이는 **강제 무결성 제어(MIC)**를 활용하여 프로세스 간 상호작용을 제한합니다. UIPI는 프로세스가 윈도우 메시지를 보내거나 훅을 사용하여 더 높은 무결성 프로세스가 생성한 윈도우와 상호작용하는 것을 차단합니다.

예를 들어:

  • 제한된 사용자 프로세스(중간 무결성)는 관리자 프로세스(높은 무결성)에 메시지를 보낼 수 없습니다.
  • UIPI는 또한 윈도우 훅과 같은 다른 UI 기능을 무결성 수준 간에 사용할 수 없도록 차단합니다.

접근성 딜레마

UIPI의 제한은 화면 판독기와 같은 접근성 도구에 큰 문제를 야기했습니다. 제한된 사용자로 실행되는 이러한 애플리케이션은 더 이상 관리자 프로세스와 상호작용할 수 없게 되어, 윈도우 내용을 읽거나 버튼 클릭과 같은 작업을 수행할 수 없게 되었습니다. 이를 해결하기 위해 Microsoft는 UI 액세스 플래그를 도입했습니다.

프로세스의 액세스 토큰 초기화 시 설정되는 UI 액세스 플래그는 많은 UIPI 제한을 우회할 수 있는 특수 권한을 부여합니다. 이 플래그를 활성화하려면 SE_TCB_NAME 권한이 필요하며, 이는 시스템 서비스에서만 사용할 수 있습니다. 그 결과, UI 액세스 프로세스를 생성하려면 일반적으로 UAC 서비스와 같은 시스템 서비스를 통해 RAiLaunchAdminProcess RPC 호출을 사용해야 합니다.

UI 액세스 프로세스 생성 흐름

오용을 방지하기 위해 UAC 서비스는 UI 액세스 플래그를 활성화하기 전에 실행 파일에 대해 엄격한 검사를 수행합니다:

  1. 매니페스트 요구 사항: 실행 파일에는 uiAccess 속성이 true로 설정된 임베디드 매니페스트가 있어야 합니다.
  2. 코드 서명: 파일은 로컬 머신의 루트 인증서 저장소에서 신뢰하는 코드 서명 인증서로 서명되어야 합니다.
  3. 보안 위치: 실행 파일은 시스템 드라이브의 관리자 전용 위치에 있어야 합니다. 예를 들어:
    • Program Files 디렉터리
    • Windows 디렉터리(쓰기 가능한 위치 제외)
    • System32 디렉터리(쓰기 가능한 위치 제외)

이러한 기준이 충족되면 UAC 서비스는:

  • 호출자의 액세스 토큰 복사본을 가져옵니다.
  • UI 액세스 플래그를 활성화합니다.
  • 호출자에 따라 무결성 수준을 증가시킵니다:
    • UAC 관리자의 제한된 사용자: 무결성을 High로 설정합니다.
    • 관리자: 무결성을 High로 설정합니다(일반적으로 변경 없음).
    • 일반 사용자: 호출자의 무결성 + 16으로 설정하며, 최대 High까지 가능합니다.

중요 사항: UI 액세스 플래그는 윈도우 메시지를 더 높은 무결성 프로세스로 보내는 것과 같은 제한된 작업만 우회할 수 있습니다. 코드 주입을 가능하게 할 수 있는 윈도우 훅 사용은 허용되지 않습니다.

관리자 보호에서 UI 액세스 악용

핵심 취약점

관리자 보호는 UAC를 위해 제한된 사용자와 섀도 관리자를 분리하여 보안 경계를 구축하도록 설계된 최신 Windows 기능입니다. 그러나 Forshaw는 UI 액세스 프로세스가 이 경계를 약화시킬 수 있음을 발견했습니다:

  • 제한된 사용자가 RAiLaunchAdminProcess를 통해 UI 액세스 프로세스를 생성하면, 해당 프로세스는 호출자의 토큰(제한된 사용자)으로 실행되지만 UI 액세스 플래그가 활성화되고 무결성이 High로 설정됩니다.
  • High 무결성 프로세스는 동일한 데스크톱에서 실행되는 다른 High 무결성 프로세스(다른 사용자로 실행되는 경우 포함)를 손상시킬 수 있습니다.
  • UI 액세스 프로세스가 제한된 사용자로 실행되므로 프로필 분리가 이루어지지 않으며, 이는 관리자 보호의 핵심 보안 개선 사항 중 하나입니다.
  • High 무결성으로의 상승은 사용자에게 알림 없이 이루어지며, 공격자가 보안 경계를 깨뜨릴 수 있습니다.

임의 UI 액세스 실행 달성

Forshaw는 High 무결성 UI 액세스 프로세스에서 임의 코드 실행을 달성하는 여러 방법을 확인했습니다. Microsoft는 이전에 이러한 문제가 수정 우선순위가 아니라고 밝혔으나, 현재 여러 문제가 패치되었습니다. 이러한 기법은 크게 세 가지 범주로 나뉩니다:

1. 보안 애플리케이션 디렉터리 검사 우회

UAC 서비스의 AiCheckSecureApplicationDirectory 메서드는 실행 파일이 보안 위치에 있는지 검증합니다. Forshaw는 이 검사를 우회할 수 있는 여러 방법을 발견했습니다:

  • NTFS 명명 스트림: 2017년 Forshaw는 제한된 사용자가 쓸 수 있는 디렉터리에 NTFS 명명 스트림을 작성하여 검사를 우회할 수 있음을 보고했습니다. 예를 들어, C:\Windows\tracing 디렉터리는 쓰기 가능하지만 보안 검사에서 제외됩니다. 명명 스트림(예: C:\Windows\tracing:file.exe)을 작성하면 경로가 C:\Windows 내에 있는 것으로 간주되어 보안으로 인식됩니다. 이 문제는 이후 Windows 버전에서 해결되었습니다.

  • 보안 위치 내 쓰기 가능한 파일/디렉터리: 공격자는 보안 위치에 있는 쓰기 가능한 기존 파일을 악성 실행 파일로 덮어쓸 수 있습니다. UAC 서비스에서 사용하는 CreateProcessAsUser API는 특정 파일 확장자를 요구하지 않으므로 모든 파일을 실행할 수 있습니다. 또는 공격자는 보안 위치 내 쓰기 가능한 디렉터리에 실행 파일을 복사할 수 있습니다.

  • MSIX 설치 프로그램 악용: 최근 연구에서 Forshaw는 Windows 설치 프로그램이 MSIX 파일을 C:\Program Files\WindowsApps 디렉터리에 배치할 수 있으며, 이 디렉터리는 보안 검사에서 제외되지 않음을 발견했습니다. Windows 11은 기본적으로 관리자 권한 없이 서명된 MSIX 파일을 설치할 수 있습니다. 공격자는 UI 액세스 실행 파일을 MSIX 설치 프로그램으로 패키징하고 임의 인증서로 서명하여 보안 위치에 배치할 수 있었습니다. 이 문제는 WindowsApps 디렉터리를 제외하도록 수정되었습니다.

2. 기타 역사적 우회 기법

Forshaw는 또한 임의 UI 액세스 실행을 달성하기 위한 다른 역사적 방법도 언급했습니다:

  • DLL 플랜팅: 악성 DLL을 심어 보안 위치에 있는 합법적인 실행 파일을 하이재킹합니다.
  • COM 악용: 메시지 전용 윈도우를 사용하는 COM 구성 요소를 악용하여 UI를 표시하지 않고 프로세스를 손상시킵니다.

영향 분석

이 연구에서 설명된 취약점은 관리자 보호가 활성화된 Windows 시스템에 상당한 위험을 초래합니다:

  • 권한 상승: 공격자는 제한된 사용자에서 High 무결성으로 권한을 상승시켜 관리자 보호의 보안 경계를 효과적으로 우회할 수 있습니다.
  • 무음 악용: High 무결성으로의 상승은 사용자 상호 작용 없이 이루어져 탐지가 어렵습니다.
  • 임의 코드 실행: High 무결성 UI 액세스 프로세스에서 임의 코드 실행이 이루어지면 동일한 데스크톱의 다른 High 무결성 프로세스를 손상시킬 수 있습니다.
  • 프로필 분리 부재: 프로필 분리가 이루어지지 않아 관리자 보호의 핵심 보안 개선 사항 중 하나가 약화됩니다.

권장 사항

보안 전문가와 시스템 관리자는 다음 단계를 통해 이러한 취약성과 관련된 위험을 완화해야 합니다:

  1. 패치 적용: 모든 Windows 시스템에 Microsoft의 최신 보안 패치를 적용하여 수정된 우회 기법을 해결합니다.
  2. UI 액세스 프로세스 모니터링: 특히 High 무결성으로 실행되는 UI 액세스 프로세스 생성에 대한 비정상적인 활동을 모니터링합니다.
  3. 보안 위치 접근 제한: Program Files, Windows, System32와 같은 디렉터리에 대한 쓰기 권한을 관리자로만 제한합니다.
  4. 코드 서명 인증서 감사: 로컬 머신의 루트 인증서 저장소에서 신뢰하는 코드 서명 인증서를 검토하고 제한하여 악용을 방지합니다.
  5. 불필요한 접근성 기능 비활성화: 필요하지 않은 애플리케이션에 대해 UI 액세스를 비활성화하여 공격 표면을 줄입니다.

결론

James Forshaw의 연구는 Windows의 권한 상승 메커니즘을 보호하는 데 있어 지속적인 과제를 강조합니다. UI 액세스는 접근성을 지원하기 위해 설계되었지만, 그 구현은 관리자 보호를 우회하는 데 악용될 수 있는 중요한 보안 위험을 초래했습니다. Microsoft는 이 분석에서 설명된 취약점을 해결했지만, 이 연구는 유사한 위협에 대비하기 위해 엄격한 보안 테스트와 사전 모니터링의 중요성을 강조합니다.

추가 기술적 세부 사항은 Forshaw의 원본 블로그 게시물(Project Zero)을 참조하십시오.

공유

TwitterLinkedIn