
Windows 권한을 (오)용하여 OS 내에서 권한을 상승시킬 수 있는 익스플로잇 경로
아이디어는 Windows OS 권한을 다음 경로로 "변환"하는 것입니다:
권한 목록과 설명은 다음에서 확인할 수 있습니다: https://learn.microsoft.com/en-us/windows/win32/secauthz/privilege-constants
목표를 여러 방식으로 달성할 수 있다면 우선순위는 다음과 같습니다:
자신의 권한은 whoami /priv로 확인할 수 있습니다. 비활성화된 권한도 활성화된 권한과 동일하게 간주됩니다. 중요한 것은 권한 목록에 해당 권한이 있는지 여부입니다.
참고 1: 공격 경로가 토큰 생성으로 끝나는 경우, 다음 단계는 해당 토큰을 사용하여 새 프로세스를 생성한 후 OS를 제어하는 것이라고 가정할 수 있습니다.
참고 2:
a. NtQuerySystemInformation()/ZwQuerySystemInformation()을 직접 호출하는 데 필요한 권한은 여기에서 확인할 수 있습니다.
b. NtSetSystemInformation()/ZwSetSystemInformation()에 필요한 권한은 여기에 나열되어 있습니다.
참고 3: 저는 OS에만 초점을 맞추고 있습니다. 권한이 AD에서는 작동하지만 OS 자체에서는 작동하지 않는 경우, OS에서 사용되지 않는 것으로 설명합니다. 누군가 AD 중심 시나리오를 더 깊이 파고들면 좋을 것입니다.
제시된 아이디어에 자유롭게 기여하거나 논의해 주십시오.
크레딧:
| 권한 | 영향 | 도구 | 실행 경로 | 비고 |
|---|
SeAssignPrimaryToken | 관리자 | 타사 도구 | "이를 통해 사용자는 토큰을 가장하고 potato.exe, rottenpotato.exe, juicypotato.exe와 같은 도구를 사용하여 nt system으로 권한 상승할 수 있습니다." | 업데이트를 제공해 주신 Aurélien Chalot 님께 감사드립니다. 곧 좀 더 레시피 형식으로 다시 작성하겠습니다. |
SeAudit | 위협 | 타사 도구 | 감사 또는 이전 이벤트 덮어쓰기를 속이기 위해 보안 이벤트 로그에 이벤트를 기록합니다. | 자체 이벤트 기록은 Authz Report Security Event API로 가능합니다.- @daem0nc0re의 PoC 참조 |
SeBackup | 관리자 | 타사 도구 | 1. HKLM\SAM 및 HKLM\SYSTEM 레지스트리 하이브를 백업합니다.2. SAM 데이터베이스에서 로컬 계정 해시를 추출합니다.3. 로컬 Administrators 그룹의 구성원으로 Pass-the-Hash를 수행합니다.또는 중요한 파일을 읽는 데 사용할 수 있습니다. | 자세한 내용은 SeBackupPrivilege 파일을 참조하십시오.- @daem0nc0re의 PoC 참조 |
SeChangeNotify | 없음 | - | - | 모든 사용자가 보유한 권한입니다. 이를 철회하면 OS(Windows Server 2019)가 부팅 불가능해질 수 있습니다. |
SeCreateGlobal | ? | ? | ? | |
SeCreatePagefile | 없음 | 내장 명령어 | hiberfil.sys를 생성하고 오프라인에서 읽어 민감한 데이터를 찾습니다. | 오프라인 접근이 필요하며, 이는 결국 관리자 권한으로 이어집니다. - @daem0nc0re의 PoC 참조 |
SeCreatePermanent | ? | ? | ? | |
SeCreateSymbolicLink | ? | ? | ? | |
SeCreateToken | 관리자 | 타사 도구 | NtCreateToken을 사용하여 로컬 관리자 권한을 포함한 임의의 토큰을 생성합니다.- @daem0nc0re의 PoC 참조 | |
SeDebug | 관리자 | PowerShell | lsass.exe 토큰을 복제합니다. | 스크립트는 FuzzySecurity에서 찾을 수 있습니다. - @daem0nc0re의 PoC 참조 |
SeDelegateSession-UserImpersonate | ? | ? | ? | 권한 이름을 열 폭에 맞추기 위해 분할했습니다. |
SeEnableDelegation | 없음 | - | - | Windows OS에서 사용되지 않는 권한입니다. |
SeImpersonate | 관리자 | 타사 도구 | Potato 계열 도구(potato.exe, RottenPotato, RottenPotatoNG, Juicy Potato, SweetPotato, RemotePotato0), RogueWinRM, PrintSpoofer 등이 있습니다. | SeAssignPrimaryToken과 마찬가지로, 설계상 다른 사용자의 보안 컨텍스트에서 프로세스를 생성할 수 있습니다(해당 사용자의 토큰 핸들을 사용). 필요한 토큰을 얻기 위해 여러 도구와 기법을 사용할 수 있습니다. |
SeIncreaseBasePriority | 가용성 | 내장 명령어 | start /realtime SomeCpuIntensiveApp.exe | 서버에서 더 흥미로울 수 있습니다. |
SeIncreaseQuota | 가용성 | 타사 도구 | CPU, 메모리, 캐시 한도를 OS를 부팅 불가능하게 만드는 값으로 변경합니다. | - 안전 모드에서는 할당량이 확인되지 않으므로 복구가 비교적 쉽습니다. - 동일한 권한이 레지스트리 할당량 관리에도 사용됩니다. |
SeIncreaseWorkingSet | 없음 | - | - | 모든 사용자가 보유한 권한입니다. 메모리 관리 함수를 세밀하게 조정할 때 확인됩니다. |
SeLoadDriver | 관리자 | 타사 도구 | 1. szkg64.sys와 같은 결함이 있는 커널 드라이버를 로드합니다.2. 드라이버 취약점을 악용합니다. 또는 fltMC 내장 명령어를 사용하여 보안 관련 드라이버를 언로드할 수 있습니다. 예: fltMC sysmondrv | 1. szkg64 취약점은 CVE-2018-15732로 등록되어 있습니다.2. szkg64 익스플로잇 코드는 Parvez Anwar가 작성했습니다. |
SeLockMemory | 가용성 | 타사 도구 | 페이지를 이동하여 시스템 메모리 파티션을 고갈시킵니다. | Walied Assar (@waleedassar)가 PoC를 게시했습니다. |
SeMachineAccount | 없음 | - | - | Windows OS에서 사용되지 않는 권한입니다. |
SeManageVolume | 관리자 | 타사 도구 | 1. 토큰에서 권한을 활성화합니다. 2. SYNCHRONIZE | FILE_TRAVERSE로 \.\C:에 핸들을 생성합니다.3. FSCTL_SD_GLOBAL_CHANGE를 보내 S-1-5-32-544를 S-1-5-32-545로 교체합니다.4. utilman.exe 등을 덮어씁니다. | FSCTL_SD_GLOBAL_CHANGE는 이 코드로 수행할 수 있습니다. |
SeProfileSingleProcess | 없음 | - | - | Prefetch, SuperFetch, ReadyBoost의 매개변수를 변경(매우 제한된 명령어 세트에서는 조회)하기 전에 확인되는 권한입니다. 실제 효과는 알려지지 않았으므로 영향이 조정될 수 있습니다. |
SeRelabel | 위협 | 타사 도구 | 합법적인 관리자에 의한 시스템 파일 수정 | 참조: MIC 문서 무결성 레이블은 잘 알려진 ACL 외에 추가 보호를 제공합니다. 두 가지 주요 시나리오는 다음과 같습니다. - 브라우저, PDF 리더 등 악용 가능한 응용 프로그램을 사용한 공격에 대한 보호 - OS 파일 보호. 토큰에 SeRelabel이 있으면 파일 및 폴더를 포함한 리소스에 WRITE_OWNER 액세스를 사용할 수 있습니다. 안타깝게도 IL이 High보다 낮은 토큰은 SeRelabel 권한이 비활성화되어 이미 관리자가 아닌 사람에게는 쓸모가 없습니다.자세한 내용은 @tiraniddo의 훌륭한 블로그 게시물을 참조하십시오. |
SeRemoteShutdown | 가용성 | 내장 명령어 | shutdown /s /f /m \\server1 /d P:5:19 | 네트워크를 통해 종료/재시작 요청이 들어올 때 이 권한이 확인됩니다. 127.0.0.1 시나리오는 조사 중입니다. |
SeReserveProcessor | 없음 | - | - | 이 권한은 더 이상 사용되지 않는 것으로 보이며, winnt.h의 몇몇 버전에만 나타납니다. Microsoft가 게시한 소스 코드 여기에서 확인할 수 있습니다. |
SeRestore | 관리자 | PowerShell | 1. SeRestore 권한이 있는 PowerShell/ISE를 실행합니다.2. Enable-SeRestorePrivilege로 권한을 활성화합니다. 3. utilman.exe를 utilman.old로 이름을 바꿉니다. 4. cmd.exe를 utilman.exe로 이름을 바꿉니다. 5. 콘솔을 잠그고 Win+U를 누릅니다. | 일부 AV 소프트웨어가 공격을 탐지할 수 있습니다. 대체 방법은 동일한 권한을 사용하여 "Program Files"에 저장된 서비스 바이너리를 교체하는 것입니다. - @daem0nc0re의 PoC 참조 |
SeSecurity | 위협 | 내장 명령어 | - 보안 이벤트 로그 지우기: wevtutil cl Security- 보안 로그를 20MB로 축소하여 이벤트가 곧 플러시되도록 함: wevtutil sl Security /ms:0- 보안 이벤트 로그를 읽어 시스템 내 다른 사용자의 프로세스, 액세스 및 작업에 대한 정보 획득. - 어떤 내용이 기록되는지 알아내어 탐지를 피해 활동. - 어떤 내용이 기록되는지 알아내어 많은 수의 이벤트를 생성하여 오래된 이벤트를 효과적으로 제거하면서 로그 정리 흔적을 남기지 않음. - 개체 SACL(실제로는 감사 설정) 보기 및 변경. | @daem0nc0re의 PoC 참조 |
SeShutdown | 가용성 | 내장 명령어 | shutdown.exe /s /f /t 1 | 대부분의 NtPowerInformation() 수준을 호출할 수 있습니다. 조사 중입니다. NtRaiseHardError()를 호출하여 즉시 BSOD 및 메모리 덤프를 유발할 수 있으며, 잠재적으로 중요한 정보가 노출될 수 있습니다. - @daem0nc0re의 PoC 참조 |
SeSyncAgent | 없음 | - | - | Windows OS에서 사용되지 않는 권한입니다. |
SeSystemEnvironment | 알 수 없음 | 타사 도구 | 이 권한은 NtSetSystemEnvironmentValue, NtModifyDriverEntry 및 기타 일부 시스템 호출을 사용하여 UEFI 변수를 조작할 수 있게 합니다. | sysprep.exe를 실행하는 데 필요한 권한입니다. 추가적으로: |
SeSystemProfile | ? | ? | ? | |
SeSystemtime | 위협 | 내장 명령어 | cmd.exe /c date 01-01-01cmd.exe /c time 00:00 | 이 권한은 시스템 시간을 변경할 수 있게 하며, 이로 인해 감사 추적 무결성 문제가 발생할 수 있습니다. 이벤트가 잘못된 날짜/시간으로 저장되기 때문입니다. - 날짜/시간 형식에 주의하십시오. 확실하지 않은 경우 항상 안전한 값을 사용하십시오. - 때때로 권한 이름이 대문자 "T"로 표기되어 SeSystemTime으로 참조되기도 합니다. |
SeTakeOwnership | 관리자 | 내장 명령어 | 1. takeown.exe /f "%windir%\system32"2. icacls.exe "%windir%\system32" /grant "%username%":F3. cmd.exe를 utilman.exe로 이름을 바꿉니다. 4. 콘솔을 잠그고 Win+U를 누릅니다. | 일부 AV 소프트웨어가 공격을 탐지할 수 있습니다. 대체 방법은 동일한 권한을 사용하여 "Program Files"에 저장된 서비스 바이너리를 교체하는 것입니다. - @daem0nc0re의 PoC 참조 |
SeTcb | 관리자 | 타사 도구 | 로컬 관리자 권한을 포함하도록 토큰을 조작합니다. | 임의 토큰을 생성하는 샘플 코드+exe는 PsBits에서 찾을 수 있습니다. |
SeTimeZone | 혼란 | 내장 명령어 | 시간대를 변경합니다. tzutil /s "Chatham Islands Standard Time" | |
SeTrustedCredManAccess | 위협 | 타사 도구 | 자격 증명 관리자에서 자격 증명 덤프 | @tiraniddo의 훌륭한 블로그 게시물. - @daem0nc0re의 PoC 참조 |
SeUndock | 없음 | - | - | 도킹 해제 시 활성화되지만, 액세스 허용/거부를 위해 확인되는 것은 관찰되지 않았습니다. 실제로는 사용되지 않으며 어떤 권한 상승으로 이어지지 않습니다. |
SeUnsolicitedInput | 없음 | - | - | Windows OS에서 사용되지 않는 권한입니다. |