Abusing Tokens
토큰
Windows Access Tokens가 무엇인지 모른다면 계속하기 전에 이 페이지를 읽어보세요:
Access Tokens이미 가지고 있는 토큰을 남용하여 권한 상승을 할 수 있을지도 모릅니다.
SeImpersonatePrivilege
이 권한은 어떤 프로세스가 토큰을 생성하지 않고도 임시로 사용할 수 있도록 허용합니다. 핸들을 얻을 수 있는 경우, Windows 서비스(DCOM)에서 특권 토큰을 획득할 수 있으며, 이를 통해 NTLM 인증을 유도하여 SYSTEM 권한으로 프로세스를 실행할 수 있습니다. 이 취약점은 juicy-potato, RogueWinRM (winrm 비활성화 필요), SweetPotato, PrintSpoofer와 같은 다양한 도구를 사용하여 악용될 수 있습니다.
RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotatoJuicyPotatoSeAssignPrimaryPrivilege
SeImpersonatePrivilege와 매우 유사하며, 특권 토큰을 얻기 위해 같은 방법을 사용합니다. 그 후, 이 권한은 새로운/중단된 프로세스에 기본 토큰을 할당할 수 있게 해줍니다. 특권 임시 토큰을 사용하여 기본 토큰을 파생할 수 있습니다(DuplicateTokenEx). 이 토큰을 사용하여 'CreateProcessAsUser'로 새 프로세스를 생성하거나 중단된 프로세스를 생성하고 토큰을 설정할 수 있습니다(일반적으로 실행 중인 프로세스의 기본 토큰을 수정할 수는 없습니다).
SeTcbPrivilege
이 토큰이 활성화되어 있다면, KERB_S4U_LOGON을 사용하여 자격 증명 없이 다른 사용자의 임시 토큰을 얻을 수 있으며, 임의의 그룹(관리자)을 토큰에 추가하고, 토큰의 무결성 수준을 "중간"으로 설정하고, 이 토큰을 현재 스레드에 할당할 수 있습니다(SetThreadToken).
SeBackupPrivilege
이 권한은 시스템이 모든 파일에 대한 읽기 접근 제어를 부여하도록 합니다(읽기 작업에 한정됨). 이는 로컬 관리자 계정의 비밀번호 해시를 레지스트리에서 읽는 데 사용되며, 이후 "psexec" 또는 "wmiexec"와 같은 도구를 해시와 함께 사용할 수 있습니다(패스-더-해시 기법). 그러나 이 기법은 두 가지 조건에서 실패합니다: 로컬 관리자 계정이 비활성화되어 있거나, 원격으로 연결하는 로컬 관리자에게 관리 권한을 제거하는 정책이 시행될 때입니다. 이 권한을 남용할 수 있는 방법은 다음과 같습니다:
또는 다음의 Backup Operators로 권한 상승 섹션에서 설명된 대로:
SeRestorePrivilege
이 권한은 파일의 접근 제어 목록(ACL)에 관계없이 모든 시스템 파일에 대한 쓰기 접근 권한을 제공합니다. 이는 서비스 수정, DLL 하이재킹, 이미지 파일 실행 옵션을 통한 디버거 설정 등 다양한 권한 상승 가능성을 열어줍니다.
SeCreateTokenPrivilege
SeCreateTokenPrivilege는 강력한 권한으로, 사용자가 토큰을 임시로 사용할 수 있는 능력을 가질 때 특히 유용하지만, SeImpersonatePrivilege가 없을 때도 유용합니다. 이 기능은 동일한 사용자를 나타내는 토큰을 임시로 사용할 수 있는 능력에 의존하며, 이 토큰의 무결성 수준이 현재 프로세스의 무결성 수준을 초과하지 않아야 합니다.
주요 사항:
SeImpersonatePrivilege 없이 임시 사용: 특정 조건에서 토큰을 임시로 사용하여 EoP를 위해 SeCreateTokenPrivilege를 활용할 수 있습니다.
토큰 임시 사용 조건: 성공적인 임시 사용은 대상 토큰이 동일한 사용자에게 속하고, 임시 사용을 시도하는 프로세스의 무결성 수준보다 낮거나 같아야 합니다.
임시 토큰의 생성 및 수정: 사용자는 임시 토큰을 생성하고 특권 그룹의 SID(보안 식별자)를 추가하여 이를 향상시킬 수 있습니다.
SeLoadDriverPrivilege
이 권한은 특정 값으로 레지스트리 항목을 생성하여 장치 드라이버를 로드 및 언로드할 수 있게 해줍니다. HKLM
(HKEY_LOCAL_MACHINE)에 대한 직접 쓰기 접근이 제한되므로, 대신 HKCU
(HKEY_CURRENT_USER)를 사용해야 합니다. 그러나 드라이버 구성을 위해 HKCU
가 커널에 인식되도록 하려면 특정 경로를 따라야 합니다.
이 경로는 \Registry\User\<RID>\System\CurrentControlSet\Services\DriverName
이며, 여기서 <RID>
는 현재 사용자의 상대 식별자입니다. HKCU
내에서 이 전체 경로를 생성하고 두 가지 값을 설정해야 합니다:
ImagePath
, 실행할 바이너리의 경로Type
, 값은SERVICE_KERNEL_DRIVER
(0x00000001
).
따라야 할 단계:
제한된 쓰기 접근으로 인해
HKLM
대신HKCU
에 접근합니다.HKCU
내에\Registry\User\<RID>\System\CurrentControlSet\Services\DriverName
경로를 생성합니다. 여기서<RID>
는 현재 사용자의 상대 식별자를 나타냅니다.ImagePath
를 바이너리의 실행 경로로 설정합니다.Type
을SERVICE_KERNEL_DRIVER
(0x00000001
)로 할당합니다.
더 많은 방법은 https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege에서 확인할 수 있습니다.
SeTakeOwnershipPrivilege
이는 SeRestorePrivilege와 유사합니다. 이 특권의 주요 기능은 프로세스가 객체의 소유권을 가정할 수 있도록 하여, WRITE_OWNER 접근 권한을 제공함으로써 명시적인 재량 접근 요구 사항을 우회하는 것입니다. 이 과정은 먼저 쓰기 목적으로 의도된 레지스트리 키의 소유권을 확보한 다음, DACL을 변경하여 쓰기 작업을 가능하게 하는 것입니다.
SeDebugPrivilege
이 권한은 다른 프로세스를 디버그할 수 있게 하며, 메모리에서 읽고 쓸 수 있습니다. 대부분의 안티바이러스 및 호스트 침입 방지 솔루션을 회피할 수 있는 메모리 주입을 위한 다양한 전략을 이 권한으로 사용할 수 있습니다.
Dump memory
ProcDump를 SysInternals Suite에서 사용하여 프로세스의 메모리를 캡처할 수 있습니다. 특히, 이는 사용자가 시스템에 성공적으로 로그인한 후 사용자 자격 증명을 저장하는 로컬 보안 권한 하위 시스템 서비스 (LSASS) 프로세스에 적용될 수 있습니다.
그런 다음 이 덤프를 mimikatz에 로드하여 비밀번호를 얻을 수 있습니다:
RCE
NT SYSTEM
셸을 얻고 싶다면 다음을 사용할 수 있습니다:
권한 확인
The 비활성화된 토큰은 활성화할 수 있으며, 실제로 활성화된 및 비활성화된 토큰을 악용할 수 있습니다.
모든 토큰 활성화
비활성화된 토큰이 있는 경우, 스크립트 EnableAllTokenPrivs.ps1를 사용하여 모든 토큰을 활성화할 수 있습니다:
Or the script embed in this post.
Table
Full token privileges cheatsheet at https://github.com/gtworek/Priv2Admin, summary below will only list direct ways to exploit the privilege to obtain an admin session or read sensitive files.
Privilege | Impact | Tool | Execution path | Remarks |
---|---|---|---|---|
| Admin | 3rd party tool | "사용자가 토큰을 가장하고 nt 시스템으로 권한 상승을 허용합니다. 도구로는 potato.exe, rottenpotato.exe 및 juicypotato.exe가 있습니다." | Thank you Aurélien Chalot for the update. I will try to re-phrase it to something more recipe-like soon. |
| Threat | Built-in commands |
| - %WINDIR%\MEMORY.DMP를 읽을 수 있다면 더 흥미로울 수 있습니다.
- |
| Admin | 3rd party tool |
| |
| Admin | PowerShell |
| Script to be found at FuzzySecurity |
| Admin | 3rd party tool | 1. | 1. |
| Admin | PowerShell | 1. SeRestore 권한이 있는 상태에서 PowerShell/ISE 실행. 2. Enable-SeRestorePrivilege로 권한 활성화. 3. utilman.exe를 utilman.old로 이름 변경 4. cmd.exe를 utilman.exe로 이름 변경 5. 콘솔 잠그고 Win+U 누르기 | 공격은 일부 AV 소프트웨어에 의해 탐지될 수 있습니다. 대체 방법은 동일한 권한을 사용하여 "Program Files"에 저장된 서비스 바이너리를 교체하는 것입니다. |
| Admin | Built-in commands | 1. | 공격은 일부 AV 소프트웨어에 의해 탐지될 수 있습니다. 대체 방법은 동일한 권한을 사용하여 "Program Files"에 저장된 서비스 바이너리를 교체하는 것입니다. |
| Admin | 3rd party tool | 토큰을 조작하여 로컬 관리자 권한을 포함하도록 합니다. SeImpersonate가 필요할 수 있습니다. 확인 필요. |
Reference
Take a look to this table defining Windows tokens: https://github.com/gtworek/Priv2Admin
Take a look to this paper about privesc with tokens.
Last updated