ASRep-Roasting

Active Directory 사용자 설정에서는 Do not require preauthentication 이라는 설정이 존재합니다. 이 설정이 된 사용자들은 AS에 대해 REQ를 조건 없이 전송할 수 있고 그 과정에서 수신하는 AS-RES의 사용자 패스워드로 암호화된 메시지를 해쉬 크래킹하여 사용자의 원문 패스워드를 획득할 수 있는 공격입니다.

커버로스 프로토콜은 총 6단계로 이루어진 인증 매커니즘을 갖고 있습니다. AS는 티켓인 Key를 분포하는 곳인, Key Distribution Center의 약어입니다. Active Directory 환경에서는 Domain Controller가 AS/KDC의 역할을 합니다.

  1. Alice는 본인의 계정정보로 로그인 한 이후 DC로 본인의 ID와 Timestamp를

    해쉬화된 패스워드로 암호화한 것을 DC에게 전송하여 TGT 발급 요청

  2. DC는 Alice의 해쉬 암호로 암호화된 Alice에 대한 정보와 비밀키 Sa를 발급

  3. Alice는 자신의 해쉬 암호로 해당 정보를 복호화하여 TGT를 획득

  4. 획득한 TGT를 가지고 DC에 ST 요청

    (요청을 할 때는 TGT 정보와 함께 현재 시간(TimeStamp)를 Sa로 암호화하여 전송

  5. DC는 Sa로 복호화한 TimeStamp 정보를 구해서 일치한다면 ST 발급

  6. Alice는 ST을 가지고 서비스를 이용할 수 있음

  7. 발급된 ST은 Service Admin의 NT Hash 정보로 암호화 되어있음

단계를 통해 알 수 있듯이 Kerberos 프로토콜을 사용해 TGT를 발급받기 위해 AS-REQ 단계에서 현재 시간을 해쉬 패스워드로 암호화하여 전송해야 합니다. 그렇기 때문에 공격자들은 일반적인 상황에서는 사용자의 계정정보를 알지 못하는 이상 AS-REQ를 통해서 해쉬 크래킹을 시도하지 못합니다.

하지만 Active Directory 설정 중에는 Do not require preauthentication 이라는 설정이 존재합니다. 이름 그대로 사전 인증을 요구받지 않는다는 설정인데, 이 설정으로 인해 AS-REQ 과정을 건너뛰고 누구나 사용자의 패스워드 없이 해당 사용자의 TGT를 발급받을 수 있습니다.

이러한 설정이 되어있는 계정의 경우 Active Directory 속성에서 userAccountControl:1.2.840.113556.1.4.803:=4194304 로 나타납니다. 따라서 AS-REP-Roasting 공격이 가능한 사용자들을 모두 출력한 뒤 TGT를 가져오는 것이 아닌, 해당 속성이 정해진 사용자를 검색한 이후 출력된 사용자에 대해서만 TGT 요청을 수행하는 것이 안전합니다.

# ASREP-Roasting 공격이 가능한 목록 열거
execute-assembly C:\Tools\ADSearch.exe --search "(&(objectCategory=user)(userAccountControl:1.2.840.113556.1.4.803:=4194304))" --attributes cn,distinguishedname,samaccountname

# 선택적 ASREP-Roasting 공격
execute-assembly C:\Tools\Rubeus.exe asreproast /user:<USER> /nowrap

References

Last updated

Was this helpful?