상세 컨텐츠

본문 제목

[Active Directory] AS-Requested Service Ticket

Penetration

by obscurity_ 2024. 11. 15. 14:49

본문

이 취약점은 이해가 안 가는 취약점입니다.

왜 가능한지 이해는 안 되는데 실습을 해보니 실제로 되긴 하네요

AS-REP-Roasting에 취약한 계정을 통해서 TGT를 발급받아

서비스 어드민의 패스워드를 해쉬 크래킹하는 공격입니다.

우리가 기존에 알던 AS-REP 공격은

Do not require preauthentication 설정이 되어있는 사용자는

프리 어센티케이션 과정인 AS-REQ를 생략하고

AS-REP을 받을 수 있습니다.

근데 AS-REP 메시지는 사용자의 패스워드를 이용해서 암호화가 되어있어서

우리가 이 메시지를 해쉬크래킹 성공하면 평문 패스워드를 얻을 수 있습니다.

여기까지가 AS-REP-Roasting에 대한 간단한 소개이고

이제 커버로스팅이 뭔지에 대해서 간략히 소개하겠습니다.

커버로스팅은 우리가 접속한 사용자의 계정에서

SPN 목록이 있다면, 그 SPN에 대한 TGS를 요청하고 받을 수 있는데

TGT는 Service Admin Password로 암호화가 되어 있습니다.

그래서 우리가 TGS를 통해서 서비스 주체의 패스워드를 구할 수 있죠

그리고 TGS에는 실제 SPN에 관련된 내용은 전혀 없다고 합니다.

SPN이 없다는건 곧 서비스를 구분할 수 있는 지표가 없다는 것이고

Administrator 사용자에서 여러 서비스를 사용할 때

발급받은 TGS를 다른 서비스에 재사용도 가능하다는 뜻이죠

이 점을 악용하면 우리가 SPN을 모르는 상태에서

사용자 계정 목록만 획득하면 그것을 통해서 대상의 TGS를 발급받을 수 있습니다.

사실 저도 커버로스에 대해서 10%도 이해하지 못한 형편이고

이것에 대해서 지금 당장 더 공부한다고 이해할 수 있을 것 같진 않습니다.

괜히 MIT 분들이 만든게 아니죠

이걸 이해 했으면 이미 암호학 교수하고 있지 않을까 싶습니다.

그래서 이 포스팅은 정확함이 많이 떨어질 수 있다는 점 미리 고지를 드립니다.

우선 실습 환경에선 도메인에 Do not require preauthentication 설정이 된

계정이 1개 이상 필요합니다.

그리고 실습의 편의상 공격자는 이미 도메인 내의 유저 목록을

RID Cycling 공격 등으로 획득했다고 가정하고

저는 온전한 계정 목록을 users.txt 파일에 저장하여 사용하겠습니다.

 

먼저 도메인 Administrator 계정으로 서비스를 하나 생성합니다.

그리고 앞서 언급했듯 도메인 사용자 목록을 users.txt에 저장합니다.

도메인에 대해서 사용자 목록을 가지고 AS-REP-Roasting을 시도했을 때

wiki라는 사용자가 취약한것이 확인됩니다.

원래 AS-REP-Roasting 공격은 여기서 wiki 사용자의 권한으로 수신된

메시지를 해쉬크래킹함에 따라서 평문 패스워드를 획득할 수 있죠.

하지만 여기서 wiki 사용자로 커버로스팅 공격을 합니다.

 

SPN을 지정할 필요 없이 유저 이름을 지정하면 Service Name으로 사용되기 때문에 users.txt파일을 입력해줍니다.

그러면 많은 유저에 대한 TGS가 반환되고, Administrator의 TGS가 반환됩니다.

TGS를 획득했으면 해쉬크래킹을 시도해보고

성공한다면 그 계정정보로 접속이 되는지를 확인합니다.

Administrator의 패스워드를 크래킹 성공했고

smb에 로그인이 성공하는 것이 확인됩니다.

아래는 참고한 자료들인데 잘못된 내용이 있으면 제보 바랍니다..

https://github.com/fortra/impacket/pull/1413

관련글 더보기