[tryhackme] UAC bypass(1)
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)
- 열기: medium level의 token이 생성된 프로세스에 할당
- 관리자 모드로 실행하기: high level의 token이 생성된 프로세스에 할당
UAC settings
- 4가지 알림 수준 존재
UAC 내부 실행 프로세스
- 사용자가 관리자 권한으로 응용프로그램 실행
- ShellExecute API 호출 - runas를 사용하여 이루어짐
- 권한 상승 요청을 처리하기 위해 Appinfo(application information service)로 전달됨
- AutoElevation이 허용되는지 확인하기 위해 애플리케이션의 Manifest를 검사함
- Appinfo는 Secure Desktop에 UAC 프롬프트를 표시하는 consent.exe를 실행함
- Secure Desktop: 실제 사용자의 데스크톱에서 실행 중인 모든 것과 프로세스를 격리하는 별도의 데스크탑
- 사용자가 애플리케이션을 관리자로 실행하는 데 동의하면 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
- sysinternals 제품군의 sigcheck 도구로 파일의 Manifest 확인 가능
- 실행파일은 Manifest 내에 autoElevate 요소를 선언해야 함