홈 그로운 레드팀: Havoc C2 및 Microsoft EDR을 사용하여 워크스테이션에서 도메인 컨트롤러로

다시 오신 것을 환영합니다! 이 블로그 항목에서는 낮은 무결성 컨텍스트에서 Domain Admin으로 이동하고 도메인 컨트롤러에서 원격 코드 실행을 얻을 수 있는지 확인하기 위해 다시 한 번 Microsoft의 Defender For Endpoint EDR과 대면할 것입니다!
지난 몇 달 동안 저는 가장 인기 있는 EDR 중 하나에 대해 오픈 소스 도구로 무엇을 할 수 있는지 알아보기 위해 다양한 기술에 뛰어들었습니다.
이 블로그에서는 내가 찾은 다른 기술을 사용하여 도메인 컨트롤러에 접근하는 몇 가지 일반적인 개념을 살펴보겠습니다.
여기에는 다음이 포함됩니다.
- UACME 커스텀 바이너리로 UAC 바이패스
- CrackMapExec 및 SharpWMI.exe를 사용한 측면 이동
- 언약으로 넘어가는 세션
- 계약을 통한 DCSync
하복 C2
Havoc을 시작하고 실행하는 방법은 이미 다뤘습니다. 익숙하지 않은 경우 내 게시물 Get System On Windows 11 With Havoc C2 를 확인할 수 있습니다 .

내 C2를 사용하여 일부 셸코드를 생성하고 내 고유의 셸코드 도구인 Harriet을 통해 실행할 것입니다.

이제 FUD 바이너리가 있으므로 내 AD 환경의 첫 번째 워크스테이션으로 전송할 수 있습니다.

이전 게시물에 따르면 여기에는 매우 작은 AD 환경이 있습니다. 시간과 블로그 공간의 목적을 위해 중간 수준의 알려진 DA부터 시작하겠습니다.
임플란트를 Win11-Blue.blueteam.local로 옮기고 초기 비콘을 다시 얻습니다.


EDR을 확인하고 초기 실행이 완료되었는지 확인하겠습니다.

조용히! 괜찮아! 계속 진행할 수 있습니다. 간단한 "whoami" 명령을 실행하면 Danny가 DA 그룹에 속해 있음을 알 수 있습니다.

SharpUp을 실행하면 UAC를 우회하여 관리자 권한을 얻을 수 있음을 알 수 있습니다.

커스텀 UACME 바이너리
이전 게시물에서 관리자를 가져오는 ComputerDefaults 메서드를 사용했지만 현재 Defender For Endpoint에서 이를 포착하고 있습니다. 우리는 경고 없이 DA를 얻고 싶기 때문에 터무니없는 일을 할 것입니다. 디스크에 무언가를 드롭합니다!
내 Windows 11 개발 시스템에서 UACME 프로젝트를 복제합니다.

자식 클론 https://github.com/hfiref0x/UACME.git
sln 파일을 로드하고 프로젝트를 로드했습니다.

컴파일되면 UACME 바이너리의 이름은 Akagi이므로 솔루션 탐색기의 해당 섹션에 있는 파일을 사용자 지정하기 시작합니다.

프로젝트를 확장하면 헤더 파일, 리소스 등에 대한 여러 섹션이 표시됩니다.
프로젝트에서 찾은 공통 문자열을 빠르게 찾고 교체하여 프로세스를 시작할 수 있습니다.

교체할 수 있는 다른 문자열 중 일부는 다음과 같습니다.
아카기
UACME
UAC
유효 탑재량
지금 솔루션을 구축하려고 하면 실패합니다.

이름을 변경하지 않았기 때문에 아이콘 파일을 찾을 수 없습니다. 따라서 Akagi 폴더에서 이름을 변경해야 합니다.

아이콘 이름을 변경하면 성공적으로 빌드됩니다.

이제 빌드된 바이너리의 세부 정보를 보면 몇 가지 중요한 속성이 있음을 알 수 있습니다.

프로젝트에서 APT 92에 대한 빠른 검색을 수행하고 이러한 설명이 포함된 Resources.rc 파일을 찾습니다.

소스 파일을 살펴보면 method 폴더가 보입니다.

이러한 각 메서드 파일은 컴파일된 바이너리에서 사용할 서로 다른 UAC 우회를 나타냅니다. 이러한 각 방법을 살펴보면 방법 이름과 함께 다양한 주석이 표시됩니다. Defender 및 기타 AV 엔진을 통과하려면 각 메서드 파일에서 이러한 주석을 삭제해야 합니다.

메서드 파일에서 모든 주석을 제거하는 데 시간이 오래 걸릴 수 있지만 AV에 걸리지 않는 바이너리를 만들기 전에 한 번만 수행하면 됩니다.
그리고 파일에서 모든 주석을 제거하고 다시 컴파일한 후 바이너리를 얻습니다. AntiScan.me에 대해 실행하면 여러 AV 공급업체를 우회했음을 알 수 있습니다.

Windows Defender에 대해 스캔하면 감지되지 않는 것을 볼 수 있습니다.

관리자 받기
다시 Havoc으로 돌아가서 타겟에 바이너리를 업로드하기만 하면 됩니다.

Microsoft의 EDR로 확인하여 우리가 아직 잡히지 않았는지 확인합시다.

그렇게 보이지 않습니다. 계속하자!
대상에 UACME 바이너리가 있으면 메서드로 실행해야 합니다. Powershell 및 shell 명령은 우리를 붙잡을 수 있으므로 WMI를 사용합시다. 다행스럽게도 SharpWMI를 사용하면 메모리에서 명령을 실행할 수 있습니다.
하지만 먼저 Windows 11용 메서드가 필요합니다.

59 좋아보입니다. SharpWMI로 메서드를 호출해 보겠습니다.
dotnet inline-execute /home/user/Desktop/SharpWMI.exe action=exec computername=WIN11-BLUE.blueteam.local command=”C:\Users\danny\Downloads\Acaji.exe 59 C:\Users\danny\Downloads \Inj3c13.exe”
그리고 우리는 관리 비콘을 되찾았습니다!

EDR을 다시 확인하면 감지된 항목이 없습니다.

엄청난! 이제 EDR을 트리거하지 않고 코드를 실행할 수 있다고 판단했으므로 동일한 방법을 사용하여 도메인을 통해 DC로 이동할 수 있습니다.
참고: 물론 실제 응용 프로그램에서는 이 작업을 수행하지 않습니다. DA가 있으므로 DCsync만 할 수 있지만 EDR을 변경하지 않고 이동할 수 있는지 확인하고 싶습니다.
측면 이동
따라서 WIN11-BLUE에서는 바이너리를 업로드할 수 있었지만 DC에 비콘이 없을 때 어떻게 해야 할까요?
이전 게시물에서 Powershell과 예약된 작업으로 이 작업을 수행할 수 있음을 증명했습니다. 이 글에서는 다른 방법을 사용합니다. CrackMapExec을 사용하여 바이너리를 대상에 업로드한 다음 SharpWMI로 호출할 것입니다.
공격 준비
그래서 이 POC를 위해 우리는 DC에 우리가 빼내야 하는 일급 비밀 문서가 있다고 다시 한 번 가장할 것입니다. 가장 먼저 해야 할 일은 사용자 Danny의 암호나 해시를 얻는 것입니다.
우리는 관리자이기 때문에 해시를 얻기 위해 여러 가지 방법을 사용할 수 있지만 가장 쉬운 방법은 세션을 Covenant로 전달하고 DCsync 명령을 사용하는 것입니다.
그래서 Covenant에서 쉘코드 파일을 설정하고 로컬 시스템에 다운로드합니다.

간단히 하기 위해 파일 이름을 grunt.bin으로 변경한 다음 Harriet을 통해 실행하겠습니다. 이렇게 하면 EDR을 통과할 수 있도록 암호화됩니다.

이제 바이너리가 있으므로 Donut을 사용하여 다시 쉘코드로 변환할 수 있습니다.

마지막 부분은 Havoc 실행 파일의 프로세스에 주입하는 것입니다.

쉘코드가 성공적으로 삽입되면 Covenant로 이동하여 새로운 grunt 체크인을 합니다.

EDR을 살펴보겠습니다.

여기는 볼게 없다! 우리는 함께 이동할 수 있습니다!
Covenant로 돌아가서 DCsync 명령을 사용하고 Danny의 해시를 얻을 수 있습니다. 그리고 몇 초 후 Danny와 도메인이 소유되었습니다.

좋아, 멋지다. 그래서 우리는 DA의 해시를 얻을 수 있음을 입증했습니다. 하지만 일단 가지고 나면 어떻게 할까요? 우리 실행의 목표는 도메인 제어를 얻는 것이 아니라 DC에서 비밀 문서를 얻는 것임을 기억하십시오.
도메인 컨트롤러로 이동
DC에 업로드해야 하는 FUD 실행 파일이 있습니다. 이를 위해 CrackMapExec을 사용할 것입니다. 그래서 여기에 우리의 명령이 있습니다.
crackmapexec smb 192.168.1.9 -u danny -H 83c4be1a3fd33a182dafc8bd3bf53d00 -d blueteam.local — 파일 넣기 /home/kali/Desktop/Inj3c13.exe \\WINDOWS\\TEMP\\25N0v3.exe
우리는 SMB 모듈을 사용하고 있으며 도메인 컨트롤러에 대한 IP를 가지고 있습니다. 그런 다음 danny라는 사용자 이름을 사용하고 그의 NTLM 해시를 입력합니다. 도메인이 있고 FUD 실행 파일의 경로와 함께 " — put-file" 명령을 사용한 다음 파일을 DC에 놓을 디렉터리를 사용합니다.
한번 해보자.

마찬가지로 실행 파일이 DC에 있습니다! 이제 호출해야 합니다. WIN11-BLUE에서 했던 것처럼 SharpWMI.exe를 사용하여 메모리에서 이 작업을 수행할 수 있습니다.
그리고 이제 우리는 DC에서 높은 무결성의 비콘을 갖게 되었습니다!

전리품을 찾자!
약간 열거한 후 Danny의 문서 폴더에서 찾습니다.

다운로드하자.

살펴보기 전에 EDR을 확인하겠습니다.

이게 무슨 소용이 있겠습니까?
그리고 여기 전리품이 있습니다!

괜찮은! 따라서 이 글의 결론으로 우리가 무엇을 했고 어떻게 했는지에 대해 조금 이야기해 봅시다.
우리는 낮은 무결성 비콘으로 시작하여 Windows Defender 및 Windows Defender for Endpoint를 통과하는 사용자 지정 UACME 바이너리를 생성하여 개인 정보를 에스컬레이션했습니다.
그런 다음 Powershell 또는 셸 명령에 대한 보다 은밀한 접근을 위해 메모리에 SharpWMI.exe가 있는 UACME 바이너리를 호출했습니다.
priv가 최대화되면 DCsync 명령을 사용하여 DA의 NTLM 해시를 얻기 위해 Covenant로 세션을 전달했습니다. 그런 다음 CrackMapExec을 사용하여 비콘을 DC에 업로드하고 SharpWMI.exe를 사용하여 호출했습니다.
그렇다면 이 환경은 우리의 성공을 위해 어떻게 조작되었을까요? WMI는 도메인 컨트롤러, Windows 서버 또는 Windows 11 워크스테이션에 대해 기본적으로 켜져 있지 않습니다.
그러나 최신 기업 환경에서 이러한 시스템의 대부분은 시스템 관리자가 문제를 보다 쉽게 해결할 수 있도록 WMI를 켭니다. 우리는 또한 DA의 계정으로 여행을 시작했지만 그것은 글을 쓰기에 조금 더 편리하도록 하기 위한 것이었습니다.
시스템에 다른 AV가 설치되어 있지 않다는 것을 이해하는 것도 중요합니다. BitDefender는 UACME 바이너리를 악성으로 간주했습니다. 따라서 실제 침투 테스트에서 사용할 때는 주의해야 합니다.
이 글이 즐거웠고 내가 하고 있는 다른 작업을 보고 싶다면 여기 또는 Twitter @assume_breach에서 나를 팔로우하십시오.