KoreanHackerTeam
Moderator
Kerberoasting 攻击
1 背景
Kerberoasting 공격은 Derbycon 2014에서 Tim Medin이 발표 한 도메인 암호 공격 방법입니다. Tim Medin도 지원 공격 도구 Kerberoast를 발표했습니다. 그 이후로 많은 연구자들은 Kerberosting을 개선하고 확장하고 GitHub에 대한 많은 수의 도구를 개발하고 발표하여 Kerberosting이 점차 일반적인 도메인 공격 방법 중 하나로 진화했습니다.2 原理
데이터를 암호화하기위한 키로 다른 계정의 NTLM을 사용하는 Kerberos 프로토콜의 인증 및 권한 부여 프로세스도메인 사용자의 NTLM 암호화 인증 요청 티켓을 사용하십시오
KRBTGT 계정 Tgt를 사용한 KDC NTLM 인증 인증 티켓
KDC는 서비스 TGS를 실행하는 서비스 계정에 NTLM 암호화 공인 티켓을 사용합니다.
Kerberos는 노출 된 대칭 암호화 알고리즘을 사용합니다
y=f (x, key)는 RC4_HMAC_NT 등과 같은 알려진 대칭 암호화 알고리즘입니다.
X는 암호화 할 데이터, 타임 스탬프 및 기타 내용을 고정 형식으로 포함합니다.
키는 암호화 키, 즉 NTLM입니다. Y는 암호화 된 비밀 데이터입니다.
Kerberos 도메인 네트워크에서 Y를 얻을 수 있다면, 다른 f를 사용한 알려진 알고리즘에 따라 다른 x를 계산할 수 있습니다.
X에는 간단하고 식별하기 쉬운 타임 스탬프가 포함되어 있으므로 타임 스탬프를 사용하여 데이터 암호 해독이 올바른지 여부를 신속하게 결정하여 사용 된 키가 찾을 수있는 비밀번호 여부를 결정할 수 있습니다.
키가 더 간단할수록 암호화 알고리즘 F의 강도가 낮을수록 갈라질 확률이 높아집니다. 따라서 간단한 키가있는 계정을 찾고 낮은 강도 암호화 알고리즘 f를 사용해야합니다.
3 账号类型
도메인에는 호스트 계정, 사용자 계정, 서비스 계정 (SPN이 도메인 사용자 계정에 등록됨) 등 3 가지 주요 계정 유형이 있습니다.호스트 계정의 비밀번호는 시스템에 의해 무작위로 설정되어 있으며 거의 금산 될 수 없으며 30 일마다 자동으로 변경됩니다.
사용자 계정의 비밀번호 복잡성은 전략에 따라 다르며, 복잡한 요구 사항이 높은 도메인에서 크랙하기가 어렵습니다.
3.1 服务账号的口令存在很大的特殊性
애플리케이션 소프트웨어를 설치할 때 암호가 자동으로 설정되며 복잡성이 더 간단합니다.대부분의 애플리케이션 소프트웨어는 MS SQL Server 서비스를 실행하는 SQLSVC 계정 등과 같은 서비스 계정을 수정하기위한 기능 및 인터페이스를 제공하지 않기 때문에 비밀번호는 거의 변경되지 않습니다.
서비스 계정은 기본적으로 비밀번호가 낮고 크래킹 객체로 사용할 수있는 조건을 충족합니다.
크래킹 조건을 달성하려면 암호화 된 데이터도 얻어야하며 서비스 계정의 기밀 데이터를 얻어야합니다.
TGS는 서비스 계정의 NTLM에 의해 암호화되므로 Kerberos 프로토콜의 4 단계 인 Access Service의 TGS를 얻어 비밀 데이터를 얻을 수 있습니다.
Kerberos 프로토콜에 따라 모든 사용자는 도메인 서버에서 서비스에 대한 액세스를 요청할 수 있습니다.
서비스가 도메인에 SPN (서비스 원명)을 등록하는 한 서비스는 온라인 상태가 아닐 수 있습니다.
4 SPN
4.1 SPN 相关概念
SPN은 서버에서 실행되는 서비스의 고유 식별자입니다. Kerberos를 사용한 각 서비스에는 SPN이 필요합니다SPN은 두 가지 유형으로 나뉩니다. 하나는 AD의 컴퓨터 계정에 등록되고 다른 하나는 도메인 사용자 계정 (사용자)에 등록됩니다.
서비스의 권한이 로컬 시스템 또는 네트워크 서비스 인 경우 SPN은 기계 계정 (컴퓨터)에 등록됩니다.
서비스의 권한이 도메인 사용자 인 경우 SPN은 도메인 사용자 계정 (사용자)에 등록됩니다.
SPN 형식은 ServiceClass/host

여기서 ServiceClass는 www와 같은 서비스 유형을 나타냅니다.
FQDN을 사용하여 호스트를 나타냅니다.
포트가 잘 알려진 포트 인 경우 생략 할 수 있습니다.

4.2 查询 SPN
SPN은 계정의 속성에 존재하므로 모든 계정의 속성을 쿼리하여 도메인의 모든 SPN 서비스를 통과 할 수 있습니다. 호스트 계정의 비밀번호는 크랙하기가 거의 불가능하기 때문에 사용자 계정의 SPN 만 쿼리됩니다.이 시스템은 쿼리를위한 PowerShell 모듈을 제공합니다. PowerViewer는 모듈을 캡슐화하고 Get -Domainuser -spn 명령을 제공하여 도메인의 모든 사용자 계정의 SPN을 통과합니다.

Win7 및 Windows Server 2008에 포함 된 도구
setspn.exe -q */*
일부 도메인에서는 일부 서비스가 더 이상 서비스를 실행하거나 중지하지 않으면 이러한 서비스 계정은 여전히 도메인에 남아있을 수 있습니다. 서비스의 운영이든 아니든 TGS 인수에 영향을 미치지 않기 때문에 이러한 존재하지 않는 SPN은 여전히 커버 스팅에 적용 할 수 있습니다.
일부 서비스 계정에는 더 높은 권한이 있습니다. 예를 들어 일부 특별 서비스에는 도메인 관리자 권한이있는 서비스 계정이 정상적으로 실행됩니다. 따라서 주요 공격의 대상으로 SPN을 쿼리 할 때 표시 및 필터링 할 수 있습니다. 이 방법은 get -domainuser -spn 명령을 사용할 때 Admincount 매개 변수를 추가하여 권한이 높은 것을 나타냅니다.

5 攻击流程
도메인에서 서비스 계정을 실행중인 서비스에 해당합니다.서비스 계정 NTLM에서 암호화 된 암호화 된 데이터를 얻기 위해 이러한 서비스에 액세스하려면 TGS를 확보해야합니다.
Mimikatz는 Kerberos 모듈의 Ask 명령을 통해 얻을 수있는이 기능을 제공합니다.

Mimikatz를 사용하여 한 번에 하나의 TG 만 얻으십시오. IMPACKET 툴킷은 배치 획득 방법을 제공하여 오프라인 배치 크래킹을 위해 도메인의 모든 SPN의 TG를 한 번에 얻을 수 있습니다.
기존 버전 및 새로운 버전의 시스템의 호환성 문제를 해결하기 위해 Microsoft는 AES, DES, RC4, MD5 등과 같은 여러 암호화 알고리즘을 지원하며 Windows 2003 및 Windows 2000 시스템에서 RC4, MD5, HMAC_MD5와 같은 알고리즘이 주로 사용되며 상대적으로 갈라지기 쉽습니다. 따라서 균열 할 핵심 사항을 선택할 때 이러한 시스템에서 실행되는 서비스를 선택하십시오.
덜 강력한 암호화 알고리즘을 사용하도록 시스템을 강제하는 방법에는 여러 가지가 있습니다. 지금 균열이 쉬운 알고리즘은 RC4_HMAC_NT 알고리즘입니다. TGS를 획득 할 때 도메인 서버는 암호화 에이 알고리즘을 사용하도록 유도 될 수 있습니다.

Kerberoasting 공격을위한 모든 조건
기밀 데이터
연산
비밀번호 사전 라이브러리
Tim Medin의 Kerberoast 도구를 사용하여 비밀번호를 크랙하고 물론 더 빠른 알고리즘으로 Hashcat 도구를 사용하십시오. 감압 kerberoast 도구를 다운로드 한 후 tgsRepCrack.py WordList.txt Tgs.Kirbi를 사용하여 Crack, 여기서 WordList.txt는 사전 파일이고 Tgs.kirbi는 이전에 얻은 TGS입니다. 크래킹 확률과 시간은 암호 복잡성, 사전 및 기계 성능에 따라 다릅니다.
./tgsRepCrack.py WordList.txt test.kirbi
6 防御
Kerberoasting 공격의 주요 전제는 암호 복잡성이 낮고 암호화 알고리즘이 약하다는 것입니다.Kerberosting에 대한 공격 도이 두 가지 측면에서 수행해야합니다.
서비스 계정의 비밀번호 복잡성을 향상시킵니다.
도메인의 서버 시스템을 최소 Windows 2008 시스템으로 업그레이드하고 AES256 어려운 암호화 알고리즘을 적용하십시오.
모든 온라인 운영이 합법적이고 정상적인 운영이기 때문에 Kerberosting 공격을 감지하는 것은 어렵지만 여전히 따라야 할 흔적이 있습니다. 예를 들어, TGS의 배치 획득은 기능이며 저 강도 암호화 알고리즘은 기능입니다. 이 두 가지 측면에서 시작하는 것은 비교적 효과적인 탐지 아이디어입니다.