시작 전 용어 설명
KDC (Key Distribution Center) : 서버와 사용자에 대한 신뢰 관계 정보를 관리하는 역할이며, AD(Active Directory) 환경에서는 Domain Controller(DC)가 KDC 역할을 수행
AS (Authentication Service) : 사용자로부터 인증을 수락하는 인증 서버
TGS (Ticket Granting Service) : 클라이언트가 특정 서비스에 접근할 수 있도록 Service Ticket을 발급하는 서버
TGT (Ticket Granting Ticket) : 클라이언트가 AS로부터 인증을 받았다는 것을 증명하는 티켓
Principal : KDC가 인증하는 사용자 및 서버
티켓은 총 2가지 존재함
TGT : 나는 이 도메인의 사용자임을 증명함
Service Ticket : 이 서비스에 접근 가능하다는 것을 증명
Kerberoasting이란
Kerberos의 인증 구조를 악용해 서비스 계정의 비밀번호를 오프라인 크래킹할 수 있는 공격 기법임
공격 기법을 알기 위해서는 먼저 Kerberos 인증 구조를 알아야 함
커버로스는 티켓 기반의 컴퓨터 네트워크 사용자 인증 프로토콜이며,
이러한 티켓을 발급할 때는 Secret Key로 정보들을 암호하여 전송하고 있음
또한, 암호화된 정보들을 통하여 서버와 클라이언트는 서로 신뢰할 수 있는 대상인지를 확인함
실제 인증 방식은 아래와 같은 방식으로 진행됨
1. 로그인 단계 - 신원 증명
AS-REQ (Client -> AS)
- 클라이언트는 자신의 신원을 증명하기 위하여, 몇 가지 데이터를 보냄
- Timestamp 기반 데이터
- 사용자 이름 (예 : user1)
- 도메인 정보
AS-REP (AS -> Client)
- AS는 AD에서 user1 정보를 확인한 뒤, 두가지 데이터를 보냄
- TGT
- 사용자 SID
- 그룹 정보
- 유효기간
- KRBTGT 계정 패스워드로 암호화됨
- Client-TGS Session Key
- 클라이언트 신원 확인용
- 사용자 비밀번호로 암호화됨
- 클라이언트는 자기 비밀번호를 알고 있을테니 Session Key를 복호화할 수 있기 때문에 사용자라는 것을 증명할 수 있음
2. 서비스 접근 권한 요청 (이 부분이 이번 공격의 핵심)
TGS-REQ (Client -> TGS)
- 클라이언트는 어떤 서비스에 접근하기 위해 TGS에 요청을 함
- TGT
- 인증자 ( Client id, Timestamp)를 세션키로 암호화 ->재전송 공격을 방지하기 위해 Timestamp가 들어감
TGS-REP (TGS -> Client)
- TGS는 다음의 내용을 확인한 뒤, 특이사항이 없으면 Service Ticket을 발행
- TGT 유효성 확인
- 시간 값 정상 여부 확인
- 권한 유무 확인
- Service Ticket 구성 정보는 서비스 계정의 비밀번호로 암호화됨
- 사용자 정보
- 접근 권한
- 유효 기간
3. 실제 서비스 접근
AP-REQ (Client -> Service)
- 클라이언트가 서비스 서버에게 인증된 사용자임을 증명하며, Service Ticket을 전달함
- Service Ticket
- 인증자(Client id, Timestamp)를 서비스 서버 세션키로 암호화
- 서비스 서버는 아래와 같은 행위를 수행한 뒤, 성공하면 Timestamp를 서비스 서버 세션키로 암호화하여 전달함
- 자기 계정 비밀번호로 Service Ticket을 복호화
- 사용자 정보 확인
- 시간 확인
- 클라이언트는 전달받은 Timestamp와 자신이 인증 정보에 담았던 Timestamp 값이 일치하는 지 확인 후, 서비스 서버에 서비스를 요청하게

Kerberoasting
위의 인증 단계에서 이야기했듯이 Kerberos는 도메인 유저라면,
Service Principal Name(SPN) 특성이 존재하는 서비스 서버를 대상으로 한 Service Ticket을 TGS를 통해 요청하고 받아낼 수 있음
이때 이러한 Service Ticket은 해당 서비스 서버의 패스워드로 암호화되어있기 때문에
해당 티켓을 온라인에서 받아 오프라인에서 크래킹할 경우, 서비스 서버의 계정 패스워드를 획득할 수 있는 공격임
이를 테스트 서버에서 PoC 해본 화면은 아래와 같음


방어자 입장에서 바라보면,
네트워크 상에는 SPN의 티켓을 요청하는 정상 요청만이 존재하기 때문에 공격을 탐지하는 것은 매우 어려운 일일 수 있음
다만, 단 시간 내에 대량의 SPN 티켓을 요청하는 경우를 탐지하거나,
쉽게 크래킹할 수 없게 어려운 패스워드를 사용하도록 정책을 강화하는 방안이 존재하며,
최소한의 권한을 SPN에 부여하고 SPN 계정을 최소한으로 운영해야 함
(조직에서 사용하는 정해진 틀의 패스워드를 사용하는 모든 경우를 방어할 순 없으나, SPN에 사용되는 계정만이라도 안전하게 방어가 필요함)
Reference
- https://hyeo-noo.tistory.com/415
- https://gruuuuu.hololy.org/security/kerberos/
- https://www.xn--hy1b43d247a.com/credential-access/kerberos/kerberoasting
'Hack > System' 카테고리의 다른 글
| Type Confusion이란? (0) | 2023.02.12 |
|---|---|
| Ghidra ARM64 설치 가이드 for MAC M1 or M2 Chip (0) | 2022.11.08 |
| [MS Office 1-Day] Follina 취약점(CVE-2022-30190) (0) | 2022.07.02 |
| Log4Shell (Log4j 0day RCE, CVE-2021-44228) (0) | 2022.04.01 |
| Windows에서 Metasploit 설치 (0) | 2020.09.21 |
댓글