커버로스팅

  • Kerberos는 Windows Active Directory 환경에서 사용되는 인증 프로토콜(Linux 호스트에 대한 인증에도 사용할 수 있음).

  • Kerberos를 사용하여 일부 서비스에 인증하려는 경우 DC에 연락하여 인증할 시스템 서비스를 알려주면 됨, 그러면 DC는 서비스 사용자의 비밀번호 해시를 사용하여 응답을 암호화한 후 이 응답을 서비스에 보내면 해당 서비스는 비밀번호로 해독하여 사용자가 누구인지 확인하고 사용자를 허용할지 결정할 수 있습니다.

  • Kerberoasting 공격에서는 암호화된 티켓을 DC에서 서비스로 보내는 대신 오프라인 무차별 대입을 사용하여 서비스와 관련된 비밀번호를 해독합니다.

    • 무차별 대입으로 암호회된 티켓 대체

  • 대부분의 경우 Kerberoast를 초기화하려면 도메인에 활성 계정이 있어야 하지만, 사용자 계정 컨트롤 설정이 "Kerberos 사전 인증 필요 없음"으로 설정된arrow-up-right 상태에서 DC를 구성한 경우에는 도메인에 유효한 계정이 없어도 크랙 티켓을 요청하고 받을 수 있음

GetUserSPNs.py를 사용한 커버로스팅

  • Kerberoasting 공격을 수행하기 위한 전제 조건은 도메인 사용자 자격 증명(평문 또는 Impacket을 사용하는 경우 NTLM 해시), 도메인 사용자 컨텍스트의 셸 또는 SYSTEM과 같은 계정

  • 이 수준의 액세스 권한이 있으면 시작할 수 있음, 또한 도메인에서 어떤 호스트가 도메인 컨트롤러인지 알아야 쿼리할 수 있음

GetUserSPNs.py 도움말 옵션 나열하기

$ GetUserSPNs.py -h

Impacket v0.9.25.dev1+20220208.122405.769c3196 - Copyright 2021 SecureAuth Corporation

usage: GetUserSPNs.py [-h] [-target-domain TARGET_DOMAIN]
                      [-usersfile USERSFILE] [-request]
                      [-request-user username] [-save]
                      [-outputfile OUTPUTFILE] [-debug]
                      [-hashes LMHASH:NTHASH] [-no-pass] [-k]
                      [-aesKey hex key] [-dc-ip ip address]
                      target

Queries target domain for SPNs that are running under a user account

positional arguments:
  target                domain/username[:password]

<SNIP>
  • 도메인의 SPN 목록을 수집하는 것부터 시작할 수 있음, 이렇게 하려면 유효한 도메인 자격 증명 집합도메인 컨트롤러의 IP 주소가 필요

  • 일반 텍스트 비밀번호, NT 비밀번호 해시 또는 Kerberos 티켓을 사용하여 도메인 컨트롤러에 인증할 수 있음

  • 여기서는 비밀번호를 사용, 아래 명령을 입력하면 자격 증명 프롬프트가 생성된 다음 모든 SPN 계정의 멋진 형식의 목록이 생성

    • 아래 출력에서 여러 계정이 Domain Admins 그룹의 구성원임을 알 수 있습니다.

    • 이러한 티켓 중 하나를 검색하여 크랙할 수 있다면 도메인 침해로 이어질 수 있음

      • 크랙하기 쉬운 티켓이 있는 계정을 발견하면 대상 도메인에서 수평/수직 이동이라는 목표를 달성하는 데 도움이 될 수 있으므로 항상 모든 계정의 그룹 멤버십을 조사하는 것이 좋음

GetUserSPNs.py로 SPN 계정 나열하기

  • -request 플래그를 사용하여 오프라인 처리를 위해 모든 TGS 티켓을 가져올 수 있음

    • TGS 티켓은 오프라인 비밀번호 크래킹 시도를 위해 Hashcat 또는 John the Ripper에 쉽게 제공할 수 있는 형식으로 출력됩니다.

  • 좀 더 타겟팅하여 특정 계정에 대한 TGS 티켓만 요청할 수도 있습니다. sqldev 계정에 대해서만 요청해 보겠음

단일 TGS 티켓 요청하기

  • 이 티켓을 받으면 해시캣을 사용하여 오프라인에서 사용자의 비밀번호 해독을 시도해 볼 수 있음, 성공하면 도메인 관리자 권한을 갖게 될 수도 있음

  • 오프라인 크래킹을 용이하게 하려면 항상 -outputfile 플래그를 사용하여 TGS 티켓을 파일에 기록한 다음 공격 시스템에서 해시캣을 사용하여 실행하거나 GPU 크래킹 장비로 옮길 수 있는 파일에 기록하는 것이 좋음

TGS 티켓을 출력 파일에 저장하기

  • 여기서는 sqldev 사용자에 대한 TGS 티켓을 sqldev_tgs라는 파일에 작성했습니다. 이제 해시캣 해시 모드 13100을 사용하여 오프라인에서 티켓 크랙을 시도해 볼 수 있음

해시캣으로 오프라인에서 티켓 크래킹하기

GetNPUsers.py

Kerberos 사전 인증이 필요하지 않은 사용자를 위한 헌팅

Last updated