CVE-2021-42278과 42287 - 파트 1

Disclaimer

이 글은 제가 다른 블로그 글들을 읽으면서 배운 것을 개인적으로 정리해놓은 글입니다. 이 분야에 완벽한 전문가가 아니다 보니 틀린 사실이 있을 수도 있습니다. 이 글에 있는 모든 내용 및 코드는 이미 다른 사람들이 공개적으로 발표한 것들이며, 실제 상황에 쓰이기에 부족한 퀄리티의 개념 증명 (PoC)입니다. 이 글에 있는 내용은 모두 레퍼런스 섹션에 있는 글 작성자분들이 쓴 내용을 정리한 것입니다. There is no novel research/content in this blog post, nor do I claim any work in this blog post to be mine (it’s not). This post is just a personal study note that I use for personal reasons while I study others’ work. All credits go to the authors in the reference section, not me.

들어가며

https://twitter.com/_nwodtuhs/status/1472232630024343556 - log4shell도 중요하지만, 다른 취약점들 또한 중요하다

12월 9일, log4shell 취약점이 발표되며 전세계가 떠들썩했다. Log4shell 관련 기사, 기술적 분석, 익스플로잇 킷들이 만연하는 와중에 log4shell과는 관련없는 다른 취약점들인 CVE-2021-42278(이하 42278)과 CVE-2021-42287(이하 42287)은 주목 받지 못한채 조용히 아는 사람들만 관심을 기울였다.

소수의 아는 사람들만 정보를 공유하고, 툴을 제작하고, 탐지/대응 방안을 만들어내고 있었지만, 우리나라에는 알려진 바가 없는 것 같아 블로그 글 2개를 통해 이를 알리려고 한다. 파트1은 실무자들을 위한 실용적인 정보를 압축해서 간단하게 요약한 글이다. 파트2는 기술적인 분석을 통해 이 취약점이 뭔지, 왜 일어나는지, 어떻게 악용되는지에 대해 알아본다.

간단 요약

CVE-2021-42278, CVE-2021-42287 은 2021년 11월에 발견된 액티브 디렉토리 권한 상승 취약점이다. 액티브 디렉토리 내 일반 유저에서 도메인 관리자로 권한 상승이 가능해지며, 도메인을 장악할 수 있게된다. 취약점 발표는 2021년 11월달에 이뤄졌지만, 12월 11일 noPac 이라는 개념증명 공격 툴이 공개되어 다시 주목받고 있다. 마이크로소프트 사에서는 이 두 취약점에 모두 CVSS 7.5 - 높음 위험도를 부여했다. 해당 취약점들은 2021년 11월 9일에 발표된 KB5008380, KB5008602, 혹은 KB5008102 보안 패치를 통해 해결할 수 있다.

취약점 공격 필수 요소:

  • 도메인 내 MachineAccountQuota의 값이 0이상(기본값 10)으로 설정 되었을 시
  • 도메인 컨트롤러에 2021년 11월 보안 패치가 이뤄지지 않았을 시

취약점 영향:

  • 도메인 일반 유저를 도메인 관리자로 권한 상승

취약점 정보

CVE-2021-42278 - sAMAccountName  Spoofing

액티브 디렉토리 내 머신 계정은 일반적으로 sAMAccountName 뒤에 “$” 이 붙는다. 예를 들어 도메인 컨트롤러 DC01.choi.local 의 sAMAccountName은 DC01$ 이다. CVE-2021-42278은 머신 계정의 sAMAccountName를 수정할 때 검증이 제대로 이뤄지지 않아 “$”를 뺀 sAMAccountName을 만들어낼 수 있는 취약점이다. 예를 들어  DC01$에서 “$”가 빠진 DC01으로 지정할 수 있다.

42278만 놓고보면 심각한 취약점이 아니지만 이는 42287 취약점 공격에 필수적인 요소로 사용된다.

CVE-2021-42287

액티브 디렉토리에서 머신 계정은 S4U2self 커버로스 요청을 통해 <특정 유저>가 자신(머신)의 특정 서비스에 접근가능한 TGS 티켓을 KDC로부터 받을 수 있다. 42287 취약점은 S4U2self를 요청한 머신의 sAMAccountName 이 액티브 디렉토리에 존재하지 않을시, KDC가 스스로 머신의 sAMAccountName 에 “$” 을 붙여 TGS를 발급해주는 취약점이다.

이 취약점을 악용할 시 공격자는 도메인 컨트롤러와 sAMAccountName은 같지만 “$” 이 없는 머신 계정을 만든 뒤, TGT를 발급받고, 머신 계정의 sAMAccountName 을 다른 것으로 바꾼 뒤, <도메인 관리자>가 자신의 특정 서비스에 접근 가능한 S4U2self 요청을 KDC에게 보낸다. sAMAccountName이 바뀌었기 때문에 KDC는 액티브 디렉토리 내에서 이를 찾지 못하고, 결국 스스로 “$”을 붙여 (DC01$) <도메인 관리자>가 도메인 컨트롤러의 특정 서비스에 접근 가능한 TGS를 공격자에게 발급한다.

패치 정보

KB5008102 패치 - 머신 계정의 sAMAccountName에는 무조건적으로 “$”이 들어가게끔 검증하도록 바뀌었다.

KB5008380 패치 - S4U2self 요청시, TGT안에 PAC (Privileged Account Certificate) 이 들어가게끔 바뀌었다. TGT안의 PAC과 새롭게 발급하는 TGS안의 PAC이 일치하지 않으면 TGS를 사용해 서비스를 이용할 수 없도록 바뀌었다.

개념 증명용 툴

noPac은 42278과 42287 취약점을 이용해 일반적인 도메인 유저에서 도메인 관리자로 권한 상승을 할 수 있게끔 도와주는 개념 증명 툴이다. 깃-클론을 한 뒤, 컴파일을 하고, 리드미에 적혀있는 명령어를 사용하면 일반 도메인 유저에서 도메인 관리자 권한을 가진 TGS를 발급받을 수 있다.

실전 noPac 사용법에 대해서는 파트 2에서 설명한다.

탐지 방안

1. sAMAccountName 검색

정말 특별한 경우가 아니라면 도메인 내 “$”이 없는 머신 계정은 존재해서는 안된다. 다음의 파워쉘 명령어를 이용해 “$”이 없는 머신 계정을 찾아본다. 결과가 나온다면 계정을 분석한 뒤 침해대응을 준비한다.

<# (https://cloudbrothers.info/en/exploit-kerberos-samaccountname-spoofing/) #>
Get-ADComputer -Filter { samAccountName -notlike "*$" }

2. 이벤트 로그 - 머신 계정 관련

아래 이벤트 로그들을 분석해 공격당하지 않았는지 확인한다:

4741 - 머신 계정 생성

4742 - 머신 계정 수정 (sAMAccountName 이 “$” 이 없도록 수정되었는지 확인)

4743 - 머신 계정 삭제

만약 4741, 4742, 4743이 짧은 시간 (5~10분) 동안 일어났고, 4742에서 “$”이 없는 sAMAccountName 수정이 확인되었다면, 공격 받았을 확률이 매우 높다.

3. 11월 9일 패치에서 추가된 이벤트 로그 확인

11월 9일 KB5008380 패치에서 마이크로소프트 사는 다음과 같은 이벤트 로그들을 추가했다. 이를 모니터링 룰에 적용한다.

  • 35 - PAC without Attributes
  • 36 - Ticket without a PAC
  • 37 - Ticket without Requestor
  • 38 - Requestor Mismatch (중요)

마치며

42278과 42287은 기존 액티브 디렉토리 방어 수단을 우회하는 새로운 형태의 공격이다. 하지만 동시에 2021년 11월, 12월 패치를 통해 수월하게 방어할 수 있다.

파트 1에서는 실무자를 위한 42278, 42287 간단 요약을 했다. 파트 2에서는 기술적인 분석을 하니 궁금하신 분들은 참고 하시기 바란다.

Happy Hacking!

레퍼런스

CVE-2021-42278 마이크로소프트 - https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-42278

CVE-2021-42287 마이크로소프트 - https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-42287

KB5008102 - CVE-2021-42278 패치 - https://support.microsoft.com/en-us/topic/kb5008102-active-directory-security-accounts-manager-hardening-changes-cve-2021-42278-5975b463-4c95-45e1-831a-d120004e258e

KB5008380 - CVE-2021-42287 패치 - https://support.microsoft.com/en-us/topic/kb5008380-authentication-updates-cve-2021-42287-9dafac11-e0d0-4cb8-959a-143bd0201041

noPac 개념증명 공격 툴 - https://github.com/cube0x0/noPac

noPac 툴 제작자의 블로그 글 -  https://exploit.ph/cve-2021-42287-cve-2021-42278-weaponisation.html

CVE-2021-42278, CVE-2021-42287, noPac 에 관련된 추가 자료 - https://cloudbrothers.info/exploit-kerberos-samaccountname-spoofing/

Show Comments