선릉역 1번 출구

[adventofcyber2023] - Day_11_Active Directory Jingle Bells, Shadow Spells 본문

Project/Program

[adventofcyber2023] - Day_11_Active Directory Jingle Bells, Shadow Spells

choideu 2023. 12. 12. 17:48

Story: AntarctiCrafts의 조직은 일부 사용자가 너무 많은 권한을 가지고 있음

 

목표: Active Directory 이해, 비지니스용 Windows Hello 소개, GenericWrite 권한을 활용하기 위한 전제 조건 이해, Shadow Credentials 공격의 작동 방식 이해, 취약점 악용하는 방법 공부

 

1. Active Directory

- AD는 Windows 환경에서 기업이 주로 사용하는 시스템으로 중앙 집중식 인증 시스템임

- DC(도메인 컨트롤러)는 AD의 핵심이며 일반적으로 도메인 내 데이터 저장, 인증 및 권한 부여를 관리함

- AD는 각각 특정 속성과 권한을 가진 사용자, 그룹, 컴퓨터 등의 개체를 포함하는 디지털 데이터베이스임

 

2. WHfB(Windows Hello for Business)

출처 : https://tryhackme-images.s3.amazonaws.com/user-uploads/63c131e50a24c3005eb34678/room-content/e0462d7ca580d386c4d74a03483bf43c.png

- Microsoft가 기존 암호 기반 인증을 대체하는 방식으로 도입

- 기존 비밀번호에 의존하는 대신 사용자 확인을 위해 암호화 키를 사용

- Active Directory 도메인의 사용자는 공개 및 비공개 암호화 키 쌍에 연결된 PIN 또는 생체 인식을 사용해 AD에 엑세스할 수 있음

- msDS-KeyCredentialLink : 도메인 컨트롤러가 새 사용자 장치(ex: 컴퓨터)를 등록할 때 사용하는 속성

- WHfB를 사용해 인증서를 저장하는 절차

  1. TPM public / private key 생성 : TPM은 사용자가 등록할 때 사용자 계정에 대한 public-private key pair를 생성함
    1. TPM은 trusted platform module로 디바이스의 하드웨어 기능 중 하나임 / 안전한 키를 저장함
  2. 클라이언트 인증서 요청 : 클라이언트는 신뢰할 수 있는 인증서를 받기 위해 인증서 요청을 시작함. 조직의 CA는 이 요청을 수신하고 유효한 인증서를 제공함
  3. 키 저장소 : 사용자 계정의 msDS-KeyCredentialLink 속성이 설정됨

- 인증 프로세스

  1. msDS-KeyCredentialLink 인증 : 도메인 컨트롤러는 사용자 계정의 속성에 저장된 원시 공개키를 사용해 클라이언트의 사전 인증 데이터를 해독함
  2. 인증서 생성 : 도메인 컨트롤러가 사용자를 위해 인증서를 생성하고 클라이언트로 다시 보낼 수 있음
  3. 인증 : 클라이언트는 인증서를 사용해 Active Directory 도메인에 로그인 가능

*왜 더 안전한가?

client의 device에 내장된 TPM에 개인키가 저장되기 때문에 공격자가 비밀번호를 탈취한다고 해도 해당 정보를 암호화해서 전달하기 어려움. 즉 해당 기능은 디바이스의 신뢰성을 검증하기 때문에 더 안전함

 

3. Enumeration

- 임의의 Powershell 스크립트 실행에 대한 기본 정책 우회

 powershell -ep bypass

*bypass를 하지 않으면 error 발생

 

- PowerView 스크립트를 메모리에 로드

. .\PowerView.ps1

*Powerview란? : 침투한 시스템에서 추가 정찰을 수행하는 기능

2) Where-Object {$_.IdentityReferenceName -eq "hr"} : 구체적인 사용자 "hr" 필터링

3) Select-Object IndentityReferenceName, ObjectDN, ActiveDirectoryRights 열 필터링

- hr은 vansprinkles에 대한 GenericWrite 권한을 가짐

=> 해당 권한을 사용해 msDS-KeyCredentialLink를 인증서로 업데이트함으로써 해당 계정을 침해 가능함(Shadow Credentials 공격)

 

4. Exploitation

- Whisker 도구 : C#으로 만들어진 취약한 권한 남용 도구

  • Whisker add를 사용해 악의적인 디바이스 등록을 시뮬레이션하고 'msDS-KeyCredentialLink' 속성을 업데이트함

hr의 권한으로 GenericWrite 권한을 가진 CN(vansprinkles)를 target으로 설정해 공격

- Rubeus 도구 : 취약한 사용자를 위조하여 인증하는 데 필요한 인증서 제공 도구

  • 직접적인 kerberos 상호 작용 및 이용을 위해 설계, pass the hash 공격이 포함됨
  • 이전 명령에서 생성된 인증서를 사용해 취약한 사용자의 TGT를 요청해 공격함
.\Rubeus.exe asktgt /user:vansprinkles /certificate: 생략 /password:"XxZHIdP-fVdZ5pkb" /domain:AOC.local /dc:southpole.AOC.local /getcredentials /show

명령 설명
asktgt TGT를 획독하라는 요청
/user TGT에 대해 가장하려는 사용자
/certificate 대상 사용자를 가장하기 위해 생성된 인증서
/password 인증서를 디코딩하는 데 사용되는 비밀번호
/domain 대상 도메인
/getcredentials 다음 단계에서 사용될 NTLM 해시 검색
/dc TGT를 생성할 도메인 컨트롤러

- 공격 결과 TGT, NTLM 생성됨

- Evil-WinRM 도구 : Windows 원격 관리 도구인 WinRM 프로토콜을 남용해 Windows 시스템을 원격으로 관리하는 도구

evil-winrm -i 10.10.189.160 -u vansprinkles -H 03E805D8A8C5AA435FB48832DAD620E3

옵션 설명
-i IP
-u User
-H NTLM의 HASH

- 원격 접속 성공

- 관리자 계정으로 이동하여 flag 확인

 

 

 

사이트

Whisker https://github.com/eladshamir/Whisker
Rebeus https://github.com/GhostPack/Rubeus
참고 https://pentestlab.blog/tag/whisker/

 

Comments