[하루한줄] Abusing Kerberos S4U2self local privilege escalation

URL

Abusing Kerberos S4U2self for local privilege escalation

Target

  • Kerberos S4U2self

Explain

티켓을 기반으로 동작하는 컴퓨터 네트워크 인증 암호화 프로토콜 Kerberos의 S4U2self extension을 악용하여 권한 상승이 가능합니다. 해당 기술은 새로 발견된 것은 아니며 Rubeus manualCharlie Clark의 게시글에서 상세 내용을 확인할 수 있습니다.

S4U2proxy와 관련된 시스템 간에 작업은 권한을 가진 계정이 활성화 되어 있어야 하지만, SPN을 사용하는 모든 사용자는 S4U2self를 호출할 수 있습니다. Active Directory에서 네트워크 서비스 계정과 AppPool identities는 컴퓨터 계정의 역할을 할 수 있습니다. 따라서 네트워크 서비스 계정으로 실행되는 MSSQL이나, AppPool을 사용하는 IIS 등이 실행 중일 경우 S4U2self를 호출하여 모든 유저가 자신의 서비스 티켓을 요청할 수 있습니다. 이를 통해 권한 상승을 하는 방법은 다음과 같습니다.

  1. TGT 가져오기

S4U2self를 호출하기 위해서는 TGT 또는 컴퓨터 계정의 자격 증명이 필요합니다. 컴퓨터 계정의 TGT는 Rubues의tgt::deleg trick을 통해 가져올 수 있습니다.

Invoke-Rubeus -Command "tgtdeleg /nowrap"
  1. SPN 수정

위의 TGT를 사용하여 S4U2self를 호출하여 도메인 관리자에 대한 티켓을 요청할 수 있습니다.

Invoke-Rubeus -Command "s4u /self /nowrap /impersonateuser:doadmin /ticket:base64blob"

기본적으로 S4U2self를 통해 가져온 티켓의 SPN은 해커가 실행 중인 Computername$으로 설정되어 있습니다. 따라서 유효한 SPN이 아니므로 티켓을 사용할 수 없지만, tgssub/altservice를 사용하여 해당 부분을 수정할 수 있습니다.

Invoke-Rubeus -Command "tgssub /altservice:http/adsec-00.contoso.com /ticket:base64blob"

그 후 다른 호스트에서 티켓을 복사해 사용할 수 있습니다.

tgtdeleg