
내부 네트워크에 있지만 AD 환경 외부에 있을 때 Active Directory의 평문 자격 증명을 획득합니다
저기 귀여운 Active Directory 환경과 얼음을 깨보세요. 외롭고 추운 상태로 Active Directory 파티를 바라보고 있지만 파티에 참여할 AD 자격 증명조차 없다면, 이 도구가 도움이 될 것입니다.
5가지 내부 네트워크 공격을 Active Directory에 대해 순차적으로 자동화하여 일반 텍스트 자격 증명을 제공합니다. --auto 옵션을 사용하면 발판을 마련한 후 도메인 관리자 권한을 자동으로 획득할 수 있습니다.
다음 공격은 네 번째와 다섯 번째 공격이 병렬로 무기한 실행될 때까지 순차적으로 수행됩니다.
아래 기법에서 캡처된 모든 NetNTLMv2 해시는 JohnTheRipper와 길이 100만 개의 AD 전용 비밀번호 목록으로 자동 크랙됩니다.
위의 5가지 네트워크 공격을 순서대로 수행합니다. 역방향 무차별 대입과 SCF 파일 업로드는 일반적으로 매우 빠르게 진행되며, 그 후 기본적으로 10분 동안 공격 3(Responder.py)에 머뭅니다. 그 시간 또는 사용자가 지정한 시간이 지나면 마지막 두 공격(병렬로 무기한 실행)으로 넘어갑니다.
null SMB 세션을 허용하는 호스트가 발견되면 icebreaker는 ridenum을 사용하여 유효한 사용자 이름을 위해 RID 순환을 수행합니다. -d <somedomain.com> 옵션을 사용하면 theHarvester가 지정된 웹사이트에서 이메일 주소를 스크래핑합니다. AD와 호환되는 이메일 사용자 이름은 역방향 무차별 대입 사용자 이름 목록에 추가됩니다. Icebreaker는 asyncio 라이브러리를 사용하여 10개의 비동기 작업자로 rpcclient(리눅스 도구)를 통해 역방향 무차별 대입을 수행합니다.
SCF 업로드 공격은 Shell Command Files를 익명으로 쓰기 가능한 네트워크 공유에 대해 악용합니다. SCF는 바탕 화면 표시 또는 파일 탐색기 창 열기와 같은 기본 작업을 수행할 수 있는 파일입니다. 파일 아이콘을 네트워크 경로로 설정할 수 있는 특이한 속성이 있습니다. 이 네트워크 경로를 자신의 머신으로 설정하면 파일 공유를 파일 탐색기에서 여는 사용자가 자동으로 NetNTLMv2 비밀번호 해시를 전송합니다. Icebreaker는 Nmap 스크립트 smb-enum-shares를 사용하여 익명으로 쓰기 가능한 공유를 찾은 다음 자동으로 페이로드가 포함된 SCF를 생성하고 업로드합니다.
공격 3은 Responder.py를 사용하여 LLMNR, NBT-NS 및 mDNS 멀티캐스트/브로드캐스트 프로토콜을 중독시킵니다. 사용자가 존재하지 않는 네트워크 경로로 이동하면 Responder는 공격자 머신이 올바른 경로라고 알려줍니다. 사용자의 NetNTLMv2 비밀번호 해시는 이제 당신 것입니다. Responder는 SCF 공격을 통해 전송된 해시도 캡처하지만, 다음 공격이 일반적으로 SCF 해시 캡처에 더 유용합니다. 왜냐하면 해시를 명령 실행에 사용할 가능성이 있기 때문입니다.
SMB 릴레이는 오래된 네트워크 공격으로, 공격자가 SMB 클라이언트와 SMB 서버 사이에 위치합니다. 이를 통해 공격자는 SMBv1이 활성화되고 SMB 서명이 비활성화된 호스트로 NetNTLMv2 해시를 캡처하고 릴레이할 수 있습니다. Impacket 라이브러리의 ntlmrelayx.py는 릴레이에 사용되고 Responder.py는 SMB 연결을 중간자 공격하는 데 사용됩니다. SMB 클라이언트 사용자가 SMB 서명이 비활성화된 네트워크의 호스트에 대해 관리 권한을 가진 경우, ntlmrelayx.py는 해당 호스트에서 명령 실행을 수행합니다.
ntlmrelayx가 캡처된 해시를 릴레이하면 base64로 인코딩된 powershell 명령을 실행합니다. 이 명령은 먼저 관리 사용자(icebreaker:P@ssword123456)를 추가한 다음, 난독화되고 AMSI를 우회하는 버전의 Mimikatz를 실행하고, 이어서 난독화되고 AMSI를 우회하는 버전의 Invoke-PowerDump를 실행합니다. Invoke-Mimikatz와 Invoke-PowerDump의 출력에서 일반 텍스트 비밀번호 또는 NTLM 해시를 파싱하여 표준 출력 및 found-passwords.txt 파일로 제공합니다. NTLM 해시는 NetNTLMv2 해시와 달리 일반 텍스트 비밀번호처럼 다른 AD 호스트에 인증하는 데 사용할 수 있습니다. 단, Microsoft의 KB2871997 패치 이후에는 Pass-the-Hash 공격에 기본 제공 RID 500 로컬 관리자 계정만 사용할 수 있습니다.
마지막 공격은 mitm6 도구를 사용하여 전체 네트워크에 대해 중간자 IPv6 DNS 공격을 수행합니다. 이로 인해 네트워크의 호스트가 공격자 머신을 DNS 서버로 사용하도록 강제합니다. DNS 서버로 설정되면 공격자는 피해자에게 악성 WPAD 프록시 설정 파일을 제공하고 NetNTLMv2 해시를 수집합니다. 이 해시는 ntlmrelayx.py를 사용하여 추가 원격 코드 실행 가능성을 위해 릴레이됩니다. 참고할 점은 이 공격이 네트워크에 문제를 일으키기 쉽다는 것입니다. 종종 클라이언트 머신의 브라우저에서 인증서 오류를 발생시킵니다. 또한 네트워크 속도를 저하시킬 가능성이 있습니다. 그러나 이 공격의 장점은 Windows AD 환경이 기본적으로 취약하다는 것입니다.
icebreaker를 --auto [tmux/xterm] 플래그와 함께 실행하면, 공격 4에 도달했을 때 icebreaker는 Empire와 DeathStar를 tmux 세션 또는 xterm 창에서 실행합니다. 이 옵션을 사용하면 릴레이된 해시를 통해 원격 호스트에서 mimikatz를 실행하는 대신, icebreaker는 관리 사용자를 추가한 다음 Empire의 powershell 런처 코드를 실행하여 원격 머신에 에이전트를 얻습니다. DeathStar는 이 에이전트를 사용하여 도메인 관리자 달성 과정을 자동화합니다. Empire와 DeathStar는 icebreaker를 종료해도 닫히지 않습니다.
비밀번호 크랙은 JohnTheRipper와 사용자 정의 단어 목록으로 수행됩니다. 이 목록의 출처는 merged.txt로, SecLists GitHub 계정의 모든 비밀번호를 결합한 것입니다. 단어 목록은 정리되었으며 다음 조건을 만족하는 비밀번호는 포함되지 않습니다: 모두 소문자, 모두 대문자, 모두 기호, 7자 미만, 32자 초과. 이러한 규칙은 기본 Active Directory 비밀번호 요구 사항을 준수하며 목록을 2천만 개에서 100만 개 이상으로 줄여 비밀번호 크랙을 매우 빠르게 만듭니다.
root로 실행:
./setup.sh
pipenv install --three
pipenv shell
pipenv install 실행 후 오류가 발생할 수 있습니다. 그런 경우 pipenv를 11.9.0보다 높은 버전으로 업데이트하세요. GitHub에서 pipenv를 git clone하고 폴더 내에서 apt-get remove python-pipenv && python setup.py install을 실행할 수 있습니다.
도커 이미지에는 아직 몇 가지 버그가 있으므로 오류가 발생할 가능성이 있지만 거의 완성되었습니다. Git 저장소에서:
docker build --rm -t danmcinerney/icebreaker .
docker run danmcinery/icebreaker
또는 일반적으로 icebreaker에 추가하는 명령을 추가합니다 (볼륨 매핑을 잊지 마세요):
docker run -v $(pwd)/logs:/icebreaker/logs -v $(pwd)/hashes:/icebreaker/hashes -v $(pwd)/icebreaker-scan.xml:/icebreaker/icebreaker-scan.xml -v $(pwd)/submodules:/icebreaker/submodules -e PYTHONUNBUFFERED=0 danmcinerney/icebreaker -x icebreaker-scan.xml
**참고: 리스너를 위해 docker의 -p <host>:<container> 플래그로 포트를 매핑해야 합니다.
root로 실행합니다. 줄바꿈으로 구분된 IP 주소 목록(단일 IP 또는 CIDR 범위)에서 읽고, ntlmrelayx가 사용자를 추가하고 해시 릴레이 시 mimikatz를 실행하는 대신 피해자 머신에서 사용자 정의 명령을 실행하도록 합니다. 이 예제에서는 Empire가 powershell 런처 원라이너로 제공할 수 있는 것과 유사한 명령을 제공합니다.
./icebreaker -l targets.txt -c "powershell -nop -w hidden -exec bypass -enc WwFk..."
호스트 목록에서 읽고, Responder가 기본 게이트웨이 인터페이스 대신 eth0 인터페이스를 사용하도록 지정하고, Responder를 평소 10분 대신 30분 동안 실행하며, 기본 ntlmrelayx 포스트 릴레이 명령을 실행하여 피해자 서버에서 SAM을 덤프합니다.
./icebreaker -l targets.txt -i eth0 -t 30 -c default
Nmap XML 출력 파일을 사용하고, 다섯 가지 공격을 모두 건너뛰고 해시 자동 크랙을 비활성화하며, 역방향 무차별 대입 공격에 사용자 정의 비밀번호 목록을 사용합니다 (이 예제는 '-s rid'를 통해 공격 1을 건너뛰므로 지정된 비밀번호 목록이 사용되지 않습니다; 단지 예시로 사용됩니다)
./icebreaker.py -x nmapscan.xml -s rid,scf,llmnr,relay,dns,crack -p /home/user/password-list.txt
발사 후 망각(Fire-and-forget) 사용법: 대상 파일 입력, companydomain.com에서 이메일 사용자 이름을 스크래핑하여 역방향 무차별 대입 공격에 추가, mitm6의 IPv6 DNS 중독 건너뛰기, 공격 4가 시작될 때 Empire와 DeathStar를 tmux 또는 xterm 창에서 실행하여 자동화된 도메인 관리자 권한 획득. 이 사용법의 목표는 월요일 오전 9시에 명령을 실행한 후 금요일 오후 4시 30분까지 짧고 방해받지 않는 휴식을 취하고, 그 시간에 도메인 관리자 셸이 기다리고 있도록 하는 것입니다. 공격 5(mitm6)는 때때로 네트워크 문제를 일으킬 수 있으므로 건너뛰고, 열심히 벌어놓은 휴식을 방해하는 화난 클라이언트를 원하지 않습니다.
./icebreaker.py -l targets.txt -d companydomain.com -s dns --auto [tmux/xterm]