
Spartacus DLL/COM 하이재킹 툴킷
[!CAUTION] 이 저장소는 유지보수되지 않습니다. 최신 버전은 https://github.com/sadreck/Spartacus 에서 확인하세요.
1960년 영화 스파르타쿠스를 보셨다면, 로마인들이 스파르타쿠스에게 자수하라고 요구하는 장면을 기억하실 것입니다. 진짜 스파르타쿠스가 일어났을 때, 다른 많은 사람들도 일어나 "나는 스파르타쿠스다"라는 대사를 사용하며 자신이 그라고 주장했습니다.
DLL 하이재킹에 취약한 프로세스가 DLL 로드를 요청할 때, 마치 "VERSION.DLL 누구야?"라고 묻는 것과 같으며, 여러 디렉터리가 "내가 VERSION.DLL이다", "아니, 내가 VERSION.DLL이다"라고 주장하기 시작합니다. 그래서 스파르타쿠스입니다.
DllMain에서 실행하는 대신 개별 프록시 함수를 통해 페이로드를 실행할 수 있습니다. 이 기술은 Shantanu Khandelwal 님이 제공한 https://www.redteam.cafe/red-team/dll-sideloading/dll-sideloading-not-by-dllmain 의 워크스루에서 영감을 받아 구현되었습니다.[방어] 모니터링 모드: 호출을 프록시하는 실행 중인 애플리케이션을 식별하려고 시도합니다. 즉, "DLL 하이재킹 진행 중"을 감지합니다. 이는 쉽게 찾을 수 있는 사항만 잡기 위한 것으로, 신뢰해서는 안 됩니다.최신 버전의 Spartacus를 Releases에서 찾아 다운로드하세요. 또는 이 저장소를 클론하여 소스에서 빌드할 수 있습니다.
아래는 Spartacus가 지원하는 각 모드에 대한 설명입니다.
참고: 명령줄 인수가 v1에서 v2로 크게 변경되었습니다.
Spartacus의 원래 기능은 DLL 하이재킹 취약점을 찾는 것이었습니다. 작동 방식은 다음과 같습니다.
CreateFile임..dll로 끝남.procmon.exe 또는 procmon64.exe가 아님.Drop Filtered Events 활성화.Auto Scroll 비활성화.ENTER를 누를 때까지 대기합니다.ENTER를 누르면 Process Monitor를 종료합니다.모든 이벤트를 수집하여 C:\Data\logs.pml에 저장합니다. 취약한 모든 DLL은 C:\Data\VulnerableDLLFiles.csv에 저장되고 모든 프록시 DLL 솔루션은 C:\Data\Solutions에 저장됩니다.
--mode dll --procmon C:\SysInternals\Procmon.exe --pml C:\Data\logs.pml --csv C:\Data\VulnerableDLLFiles.csv --solution C:\Data\Solutions --verbose
기존 PML 이벤트 로그 출력을 파싱하고, 출력을 CSV로 저장하며, 프록시 Visual Studio 솔루션을 생성합니다.
--mode dll --existing --pml C:\MyData\SomeBackup.pml --csv C:\Data\VulnerableDLLFiles.csv --solution C:\Data\Solutions --verbose


Spartacus의 새로운 기능은 로컬 COM 하이재킹 취약점을 식별하는 것입니다. 작동 방식은 다음과 같습니다.
RegOpenKey임.procmon.exe 또는 procmon64.exe가 아님.Drop Filtered Events 활성화.Auto Scroll 비활성화.ENTER를 누를 때까지 대기합니다.ENTER를 누르면 Process Monitor를 종료합니다.InprocServer32로 끝나고 결과가 NAME_NOT_FOUND인 모든 누락된 레지스트리 키를 식별합니다.HKEY_CURRENT_USER 아래에 있으면 HKEY_CLASSES_ROOT에서 해당 GUID를 검색하고 찾은 경우 세부 정보를 내보내기 CSV에 포함합니다.proxy 모드를 사용할 수 있습니다.COM 하이재킹의 경우 Spartacus는 로컬 시스템에서 잘못 구성된 COM 항목을 스캔하는 기능도 지원합니다:
HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE 전체를 열거합니다.InProcServer, InProcServer32, LocalServer 또는 LocalServer32라는 레지스트리 키를 찾습니다.모든 이벤트를 수집하여 C:\Data\logs.pml에 저장합니다. 취약한 모든 COM 정보는 C:\Data\VulnerableCOM.csv에 저장됩니다.
--mode com --procmon C:\SysInternals\Procmon.exe --pml C:\Data\logs.pml --csv C:\Data\VulnerableCOM.csv --verbose
기존 PML 파일을 처리하여 취약한 COM 항목을 식별합니다.
--mode com --existing --pml C:\Data\logs.pml --csv C:\Data\VulnerableCOM.csv --verbose
로컬 시스템 레지스트리를 열거하여 누락/잘못 구성된 COM 라이브러리 및 실행 파일을 식별합니다.
--mode com --acl --csv C:\Data\VulnerableCOM.csv --verbose


Spartacus는 악용하려는 DLL을 기반으로 스켈레톤 프로젝트를 생성하여 Visual Studio 솔루션 생성을 지원합니다.
DllMain 함수에서 페이로드를 실행해야 합니다.DllMain 외부의 함수에서 페이로드를 실행할 수 있습니다.version.dll을 악용하려는 경우 취약한 응용 프로그램이 호출하는 GetFileVersionInfoExW에서 임플란트를 실행할 수 있습니다.모든 내보내기를 리디렉션하는 솔루션을 생성합니다 (함수 프록시 없음).
--mode proxy --dll C:\Windows\System32\version.dll --solution "C:\data\tmp\refactor-version" --overwrite --verbose --external-resources
여러 DLL을 한 번에 입력할 수 있습니다.
--mode proxy --dll C:\Windows\System32\version.dll --dll C:\Windows\System32\userenv.dll --solution "C:\data\tmp\dll-collection" --overwrite --verbose --external-resources
가능한 많은 함수에 대한 프록시를 생성합니다 (Ghidra 출력 기반).
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose
위와 동일하지만 외부 자산 파일을 사용하여 솔루션을 생성합니다 (수정이 필요한 경우).
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose --external-resources
Ghidra가 함수 정의를 추출하지 못한 함수에 대해 미리 생성된 함수 프로토타입을 사용합니다.
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose --external-resources --prototypes C:\data\prototypes.csv
GetFileVersionInfoExW 및 GetFileVersionInfoExA 함수에 대해서만 프록시를 생성합니다.
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\version.dll --solution C:\Projects\spartacus-version --verbose --overwrite --external-resources --only "GetFileVersionInfoExW, GetFileVersionInfoExA"
기존 *.h 파일에서 함수 프로토타입 데이터베이스를 생성하여 Ghidra가 함수 정의를 추출하지 못한 함수에 대한 프록시 함수 생성을 지원합니다.
--mode proxy --action prototypes --path "C:\Program Files (x86)\Windows Kits" --csv C:\data\prototypes.csv --verbose
DLL의 내보내기를 나열하고 각 함수에 대해 미리 생성된 프로토타입이 있는지 확인합니다.
--mode proxy --action exports --dll C:\Windows\System32\version.dll --dll C:\Windows\System32\amsi.dll --prototypes ./Assets/prototypes.csv