관리 메뉴

Information Security

Windows Netlogon 권한상승 취약점 (CVE-2020-1472) 본문

CVE 취약점

Windows Netlogon 권한상승 취약점 (CVE-2020-1472)

HackingPractice 2020. 12. 26. 13:23

Netlogon은 도메인 내 사용자를 인증하는 Windows Server의 서비스 중 하나로 컴퓨터와 도메인 컨트롤러 간 보안채널을 생성한다. CVE-2020-1472는 공격자가 MS-NRPC(Netlogon Remote Protocol) 취약점을 이용해 도메인 컨트롤러(DC)에 취약한 보안 채널 연결을 설정하여 발생하는 권한상승 취약점이다. 공격자는 도메인 컨트롤러에 별도의 권한 없이 네트워크 연결만으로도 취약점을 악용할 수 있어 위험도가 매우 높다.

 

S/W 구분 취약 버전
Windows Server 2008 ~ 2019

 

역할 구분
공격자 Kali-linux-2020.3
피해자 Windows Server 2019

취약점 테스트

파이썬 네트워크 프로토콜 작업을 위해 impacket을 다운로드하였다.  Impacket은 패킷 및 일부 프로토콜 (예 : SMB1-3 및 MSRPC)의 경우 프로토콜 구현 자체에 대한 저수준 프로그래밍 방식 액세스를 제공하는 데 중점을 둡니다. 패킷은 처음부터 구성할 수 있을 뿐만 아니라 원시 데이터에서 구문 분석할 수 있으며, 객체 지향 API를 사용하면 프로토콜의 심층적인 계층 구조를 간단하게 사용할 수 있습니다.

그림 1-1 impacket

ZeroLogon 악용 스크립트를 다운로드하였다.

그림 1-2 ZeroLogon

Impacket 라이브러리를 사용하여 Zerologon 익스플로잇 (CVE-2020-1472)에 대한 취약성을 테스트하는 Python 스크립트를 다운로드하였다.

그림 1-3 CVE-2020-1472

Windows Server 2019의 IP 주소, hostname을 확인했다.

그림 1-4 Windows Server 2019

DNS 서버를 설치를 시도하였다.

그림 1-5 DNS Server

설치 완료 후 Domain Controller를 클릭했다.

그림 1-6 Domain Controller

test.com이라는 DNS를 만들었다.

그림 1-7 DNS

Password를 입력했다.

그림 1-8 Password

test.com Domain이 만들어지는 것을 확인할 수 있다.

그림 1-9 Domain

impacket/examples 파이썬 파일들을 확인했다.

그림 1-10 examples

파이썬 파일들 중에 사용할 secretsdump 옵션을 확인했다.

그림 1-11 secretdump.py

impacket 폴더 위치에서 pip3 install . 실행되지 않는 것을 알 수 있다.

그림 1-12 pip3

python3-pip를 설치했다.

그림 1-13 python3-pip

다시 하면 impacket 관련 모듈들이 설치되는 것을 알 수 있다.

그림 1-14 setup.py

secrtsdum.py -just-dc 옵션을 사용하고 패스워드 입력 없이 실행하면 failed 에러 메시지가 보이는 것을 알 수 있다.

그림 1-15 failed

CVE-2020-1472 폴더에 zerologon_tester.py 옵션을 확인했다.

그림 1-16 zerologon_tester

zerologon_tester.py <dc-name> <dc-ip> 실행하면 무차별 대입 공격을 시도하면서 인증 도메인컨틀러가 손상된다.

그림 1-17 zerologon

zerologon 폴더에 set_empty_py.py 옵션을 확인했다.

그림 1-18 set_empty_pw.py

set_empty_pw.py <dc-name> <dc-ip> 똑같이 실행하고 암호를 공백으로 설정된것 같다.

그림 1-19 set_empty_pw.py

impacket/examples로 이동하여 다시 한번 입력하면 도메인의 모든 해시 및 관리자 해시를 확인할 수 있다.

그림 1-20 hash

test.com 도메인의 Administrator 계정 해시 값을 복사하여 examples 폴더에 wmiexec.py를 사용했다.

그림 1-21 wmiexec.py

Windows Server 2019 서버에 연결된 것을 알 수 있고 whoami, ifconfig 정보를 확인하면 동일하다는 것을 알 수 있다.

그림 1-22 연결성공

hacker/Password! 계정을 생성 후 Admin 그룹에 추가하였다.

그림 1-23 계정생성

hacker계정으로 Windows Server 2019 서버 원격 접속을 시도하였다.

그림 1-24 원격접속

Window Server 2019 서버의 접속이 성공한 것을 알 수 있다.

그림 1-25 원격접속

Window Server의 Active Directory Users and Computers을 보면 hacker 계정이 존재하는 것을 알 수 있다.

그림 1-26 hacker

hacker계정의 속성을 보면 Domain Admins 그룹에 추가되어 있는 것을 알 수 있다.

그림 1-27 Properties

취약점 상세분석

MS-NRPC(Netlogon 원격 프로토콜)의 사용자 확인 절차는 다음과 같다.

그림 1-28 Netlogon 인증

  1. Netlogon 세션은 클라이언트의 요청으로 시작한다. 클라이언트와 서버는 랜덤으로 생성한 8바이트의 값을 서로 교환하는 데 이를 가각 client challenge, server challenge라고 한다.
  2. 클라이언트와 서버는 각각 Secret(Password hash)와 challenge를 섞어 세션 키를 생성한다.
  3. 서버는 클라이언트가 보낸 credential 값과 비교하여 같다면 정상적인 client로 간주하고 서버의 credential을 보내준다.
  4. 클라이언트는 인증 후 권한을 획득하여 작업을 수행한다.

Netlogon 인증 시 자격증명 값(Credential) 생성을 위해 ComputeNetlogonCredential 함수를 사용한다. 이 함수는 AES 기반의 CFB8(8-bit Cipher Feedback) 모드를 이용하여 8바이트 입력 값과 비밀 세션 키를 인자로 받아 동일한 길이의 암호문 결과 값을 만든다.

그림 1-29 AES-CFB8 모드의 동작 과정

1. 평문 메시지에 16바이트 임의의 초기화 벡터(IV)를 추가한다.
2. 16바이트만큼 AES 암호화를 적용하여 결과 값의 맨 처음 1바이트 값만 가져온다.
3. 2번의 결과와 평문 메시지를 1바이트 xor 하여 암호문으로 저장한다.
4/5. 2번과 3번 과정을 반복하며 1바이트씩 진행한다.
6. 모든 과정이 종료되었으면 1번에서 추가한 IV를 제거한다.

 

공격자는 ComputeNetlogonCredential 함수의 AES-CFB8 모드에서 사용되는 두 가지 인자 중 비밀 세션 키 값을 모른다. 하지만 나머지 인자인 IV와 평문 입력 값이 모두 0인 상태로 고정되면 암호문의 결과가 모두 같은 값을 가진다는 것을 예상할 수 있다. 즉, 전체 암호 과정 중 1바이트 암호 결과 값이 X라고 가정하면 그 후의 결과 값들은 모두 같은 X로 예상할 수 있다. (X는 0~255의 256가지의 랜덤 값) 아래 그림은 256가지 경우의 수 중 한 가지로 암호 결과 값이 모두 0으로 설정될 때 발생하는 취약한 경우이다.

그림 1-30 평문과 IV 값이 0일 경우에 발생할 수 있는 동작 과정

클라이언트(공격자)는 credential 값을 0으로 채워 서버에 인증을 시도한다. 서버는 인증 시도 횟수에 대한 제한이 없어 공격자는 인증에 성공할 때까지 반복해서 인증을 시도한다. 256분의 1 확률로 위에서 설명했던 ComputeNetlogonCredential 함수의 결과 값이 클라이언트의 값과 일치하게 되어 인증에 성공한다. 인증에 성공한 공격자는 서버의 권한을 부여받아 패스워드를 초기화하는 NetrServerPasswordSet2 등의 요청을 보낼 수 있다.

그림 1-31 취약점이 발생한 경우의 Netlogon 사용자 확인 절차

 

대응방안

Microsoft에서 발표한 취약점 패치 업데이트를 적용한다.

*링크: https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-1472

그림 1-32 보안패치