Project/Program

[tryhackme] UAC bypass(1)

choideu 2023. 11. 7. 20:04

UAC(user access control)

- 권한이 없는 프로그램이나 악성코드가 바로 실행되지 않도록 사용자에게 실행 여부를 묻는 것

- 사용자는 편의에 따라 UAC 알람 수준을 설정할 수 있음

 

Integrity Level

- UAC는 사용자, 프로세스 및 리소스 각가에 IL(무결성 수준)을 할당해 차별화할 수 있는 메커니즘인 MIC(mandatory integrity control)임

- 일반적으로 더 높은 IL 액세스 토큰을 가진 사용자 또는 프로세스는 더 낮거나 동등한 IL을 가진 리소스에 액세스 가능

  • system, high, medium, low로 구성되며, 표준 사용자(user group)은 medium integrity level을 부여 받음

- 관리자 계정으로 로그온한 경우 표준 사용자 접근 토큰(medium)과 관리자 접근 토큰(high) 2개를 받음

 

filtered token

- UAC는 로그온 중에 일반 사용자와 관리자를 다른 방식으로 처리

  • 관리자가 아닌 사람
    • 단일 액세스 토큰을 받으며, 이는 사용자가 수행하는 모든 작업에 사용함(medium)
  • 관리자
    • 필터링된 토큰: 관리자 권한이 제거된 토큰으로 일반 작업에 사용(medium)
    • 상승된 토큰: 전체 관리자 권한이 있는 토큰으로, 관리 권한으로 실행할 때 사용(high)

https://tryhackme.com/room/bypassinguac

  • 열기: medium level의 token이 생성된 프로세스에 할당
  • 관리자 모드로 실행하기: high level의 token이 생성된 프로세스에 할당

https://tryhackme.com/room/bypassinguac

 

UAC settings

 

- 4가지 알림 수준 존재

 

UAC 내부 실행 프로세스

  1. 사용자가 관리자 권한으로 응용프로그램 실행
  2. ShellExecute API 호출 - runas를 사용하여 이루어짐
  3. 권한 상승 요청을 처리하기 위해 Appinfo(application information service)로 전달됨
  4. AutoElevation이 허용되는지 확인하기 위해 애플리케이션의 Manifest를 검사함
  5. Appinfo는 Secure Desktop에 UAC 프롬프트를 표시하는 consent.exe를 실행함
    1. Secure Desktop: 실제 사용자의 데스크톱에서 실행 중인 모든 것과 프로세스를 격리하는 별도의 데스크탑
  6. 사용자가 애플리케이션을 관리자로 실행하는 데 동의하면 Appinfo 서비스는 사용자의 상승된 토큰을 사용해 요청을 실행함, 그리고 Appinfo는 권한 상승이 요청된 shell을 가리키도록 새 프로세스의 상위 프로세스 ID를 설정함

UAC bypass

- High IL 상위 프로세스에 의해 생성된 모든 프로세스는 동일한 IL을 상속하므로, UAC 프롬프트를 거치지 않고 상승된 토큰을 얻을 수 있음

 

UAC bypass based GUI

- UAC 설정 레벨이 "앱에서 사용자 모르게 컴퓨터를 변경하려는 경우에만 알림(기본값)"으로 되어 있는 경우 "msconfig"

를 열었을 때 UAC 프롬프트 없이, high IL 프로세스로 실행됨

- msconfig가 shell을 생성하도록 강제할 수 있다면? > shell은 msconfig에서 사용하는 것과 동일한 access token을 상속하므로 high IL 프로세스로 실행됨

*msconfig는 shell을 생성하는 기본 제공 방법이 있음

 

UAC: Auto-Elevating Processes

- 일부 실행 파일은 자동으로 상승해 사용자 개입 없이 high IL을 달성할 수 있음

  • 제어판 기능과 Windows에서 제공하는 일부 실행 파일에 한해서 적용됨

- 애플리케이션의 경우 자동 승격을 위해서는 일부 요구 사항이 충족되어야 함

  • 실행 파일은 Windows 게시자의 서명을 받아야 함
  • 실행 파일은 다음과 같은 신뢰할 수 있는 디렉터리에 포함되어야 함
    • %SystemRoot%/System32/
    • %ProgramFiles%/
  • 추가 요구 사항이 적용될 수도 있음
    • 실행파일은 Manifest 내에 autoElevate 요소를 선언해야 함
      • sysinternals 제품군의 sigcheck 도구로 파일의 Manifest 확인 가능
        • sigcheck64.exe -m c:/windows/system32/msconfig.exe