
데이터 유출 기능을 갖춘 DLL 비밀번호 필터 임플란트
DLLPasswordFilterImplant는 사용자의 자격 증명을 캡처할 수 있는 사용자 정의 암호 필터 DLL입니다. 도메인에서 암호 변경 이벤트가 발생할 때마다 등록된 DLL이 트리거되어 Active Directory (AD)에서 암호가 성공적으로 변경되기 전에 사용자 이름과 새 암호 값을 유출합니다.
암호 필터에 대한 자세한 내용은 Microsoft 설명서를 참조하십시오.
대상 아키텍처에 맞는 DLL을 생성합니다. 32비트 시스템에서는 32비트로, 64비트 시스템에서는 64비트로 컴파일합니다.
DLL을 Windows 설치 디렉터리에 복사합니다. (기본 폴더: \Windows\System32)
다음 레지스트리 키를 업데이트하여 암호 필터를 등록합니다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
Notification Packages 하위 키가 존재하는 경우, 기존 값 데이터에 DLL 이름("DLLPasswordFilterImplant"로 이름을 변경하지 않은 경우)을 추가합니다. 기존 값을 덮어쓰지 마십시오.
하위 키가 존재하지 않는 경우, 생성한 후 값 데이터에 DLL 이름("DLLPasswordFilterImplant"로 이름을 변경하지 않은 경우)을 추가합니다.
참고: Notification Packages 하위 키에 DLL 이름을 추가할 때 .dll 확장자는 포함하지 마십시오.
자격 증명 암호화에 사용할 공개 키를 구성합니다.
KEY=key.pem
# Generate an RSA key and dump its public key. Keep the private key around for decryption
openssl genrsa -out $KEY 2048
# Prepare the Windows registry key entry.
echo 'Windows Registry Editor Version 5.00' > addKey.reg
echo >> addKey.reg
echo '[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]' >> addKey.reg
# If python2 does not exist, use `python` instead.
echo "Key=hex:$(openssl rsa -in $KEY -pubout | sed -E '/^\-/d' | base64 -d | python2 -c 'import sys; print(",".join(["{:02x}".format(ord(b)) for b in sys.stdin.read()]))')" >> addKey.reg
그런 다음 addKey.reg 파일을 실행하여 원시 공개 키를 레지스트리에 추가할 수 있습니다.
비대칭 암호화를 사용하면 메시지 패딩으로 인해 유출할 데이터의 크기가 크게 증가합니다. 데이터 오버헤드를 줄이기 위한 가능한 개선 사항이 있습니다.
시스템을 다시 시작합니다. 출처
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
암호화된 데이터는 OAEP를 사용하여 패딩되며 다음과 같이 복호화할 수 있습니다:
# Convert the stitched hex string to raw bytes.
xxd -r -p exfiltrated.hex > raw.bin
# Decrypt using the private key.
openssl rsautl -decrypt -oaep -inkey $KEY -in raw.bin -out decrypted.txt
시스템에서 암호 필터를 완전히 제거하려면:
다음 레지스트리 키를 업데이트하여 암호 필터를 등록 해제합니다.
HKEY_LOCAL_MACHINE SYSTEM\CurrentControlSet\Control\Lsa
Notification Packages 하위 키에서 기존 값 데이터에서 DLL 이름을 제거합니다. 다른 기존 값은 제거하지 마십시오.
시스템을 다시 시작합니다.
Windows 설치 디렉터리(기본 폴더: \Windows\System32)에서 암호 필터 DLL("DLLPasswordFilterImplant.DLL"로 이름을 변경하지 않은 경우)을 찾아 파일을 삭제합니다.
유출된 데이터를 수신하는 간단한 DNS 서버가 scripts/에 제공됩니다. 가상 환경에서 pip install -r scripts/requirement.txt를 실행하고, .PEM으로 인코딩된 개인 키와 선택적 출력 파일(기본값: creds.txt)을 지정하여 자격 증명을 출력합니다.
현재 DNS 서버는 동시 암호 변경을 지원하지 않으며 개념 증명으로만 사용됩니다. 서버의 견고성을 높이는 풀 리퀘스트는 언제든지 환영합니다.
다음에서 작동:
암호 필터는 위에 나열된 시스템에서만 테스트되었습니다.
DLL 디버깅에 도움이 될 수 있는 도구는 다음과 같습니다 (필요한 경우):