Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Spartacus — Spartacus DLL/COM 하이재킹 툴킷 | Kitploit
도구/GitHubGitHub/accenture/spartacus
Defensive ToolsPayload GenerationCode AnalysisExploitationReverse EngineeringPenetration TestingBinary AnalysisRed TeamingArchived
GitHubaccenture/spartacus

Spartacus

Spartacus DLL/COM 하이재킹 툴킷

저장소 보기
1.1k1532년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

[!CAUTION] 이 저장소는 유지보수되지 않습니다. 최신 버전은 https://github.com/sadreck/Spartacus 에서 확인하세요.

Spartacus DLL/COM 하이재킹 툴킷 version

왜 "Spartacus"인가?

1960년 영화 스파르타쿠스를 보셨다면, 로마인들이 스파르타쿠스에게 자수하라고 요구하는 장면을 기억하실 것입니다. 진짜 스파르타쿠스가 일어났을 때, 다른 많은 사람들도 일어나 "나는 스파르타쿠스다"라는 대사를 사용하며 자신이 그라고 주장했습니다.

DLL 하이재킹에 취약한 프로세스가 DLL 로드를 요청할 때, 마치 "VERSION.DLL 누구야?"라고 묻는 것과 같으며, 여러 디렉터리가 "내가 VERSION.DLL이다", "아니, 내가 VERSION.DLL이다"라고 주장하기 시작합니다. 그래서 스파르타쿠스입니다.

이 도구는 다른 하이재킹 도구와 어떻게 다른가요?

  • Spartacus는 대부분의 과정을 자동화합니다. 원시 SysInternals Process Monitor 로그를 파싱하며, ProcMon을 몇 시간 동안 실행하여 2차 및 3차 DLL/COM 하이재킹 취약점을 발견할 수 있습니다 (예: 부모 앱의 특정 기능을 사용할 때 다른 DLL을 로드하고 또 다른 DLL을 로드하는 앱).
  • 취약한 DLL에 대한 Visual Studio 솔루션을 자동으로 생성합니다.
  • 대용량 PML 파일을 처리하고 관심 있는 모든 이벤트 출력을 CSV 파일로 저장할 수 있습니다. 로컬 벤치마크에서 800만 개 이벤트가 포함된 3GB 파일을 45초 만에 처리했습니다.
  • DLL 및 COM 하이재킹 취약점 모두 스캔을 지원합니다.
  • 자체 서명 인증서 생성 및 DLL 파일 서명을 지원합니다.
  • Ghidra 기능을 활용하여 내보내기 함수 시그니처를 추출하고 모든 것을 DllMain에서 실행하는 대신 개별 프록시 함수를 통해 페이로드를 실행할 수 있습니다. 이 기술은 Shantanu Khandelwal 님이 제공한 https://www.redteam.cafe/red-team/dll-sideloading/dll-sideloading-not-by-dllmain 의 워크스루에서 영감을 받아 구현되었습니다.
  • [방어] 모니터링 모드: 호출을 프록시하는 실행 중인 애플리케이션을 식별하려고 시도합니다. 즉, "DLL 하이재킹 진행 중"을 감지합니다. 이는 쉽게 찾을 수 있는 사항만 잡기 위한 것으로, 신뢰해서는 안 됩니다.

목차

  • 설치
  • 지원 기능
    • DLL 하이재킹
      • 사용법
    • COM 하이재킹
      • 사용법
    • DLL 프록시 생성
      • 사용법
    • DLL 파일 서명
      • 사용법
    • DLL 하이재킹 탐지
  • 명령줄 인수
  • 기여
  • 크레딧

설치

최신 버전의 Spartacus를 Releases에서 찾아 다운로드하세요. 또는 이 저장소를 클론하여 소스에서 빌드할 수 있습니다.

지원 기능

아래는 Spartacus가 지원하는 각 모드에 대한 설명입니다.

참고: 명령줄 인수가 v1에서 v2로 크게 변경되었습니다.

DLL 하이재킹

Spartacus의 원래 기능은 DLL 하이재킹 취약점을 찾는 것이었습니다. 작동 방식은 다음과 같습니다.

  1. 전달된 인수를 기반으로 ProcMon (PMC) 구성 파일을 즉시 생성합니다. 설정되는 필터는 다음과 같습니다:
    • 작업이 CreateFile임.
    • 경로가 .dll로 끝남.
    • 프로세스 이름이 procmon.exe 또는 procmon64.exe가 아님.
    • 최소 PML 출력 크기를 보장하기 위해 Drop Filtered Events 활성화.
    • Auto Scroll 비활성화.
  2. Process Monitor를 실행하고 사용자가 ENTER를 누를 때까지 대기합니다.
  3. 사용자가 프로세스를 실행/종료하거나 원하는 만큼 계속 실행합니다.
  4. 사용자가 ENTER를 누르면 Process Monitor를 종료합니다.
  5. 출력 이벤트 로그(PML) 파일을 파싱합니다.
    1. NAME_NOT_FOUND 및 PATH_NOT_FOUND DLL이 포함된 CSV 파일을 생성합니다.
    2. 위의 DLL을 비교하여 실제로 로드된 DLL을 식별하려고 시도합니다.
    3. 발견된 각 DLL에 대해 모든 내보내기 함수를 프록시하는 Visual Studio 솔루션을 생성합니다.

DLL 하이재킹 사용법

모든 이벤트를 수집하여 C:\Data\logs.pml에 저장합니다. 취약한 모든 DLL은 C:\Data\VulnerableDLLFiles.csv에 저장되고 모든 프록시 DLL 솔루션은 C:\Data\Solutions에 저장됩니다.

root@kitploit:~
--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 솔루션을 생성합니다.

root@kitploit:~
--mode dll --existing --pml C:\MyData\SomeBackup.pml --csv C:\Data\VulnerableDLLFiles.csv --solution C:\Data\Solutions --verbose

스크린샷

DLL Runtime

CSV Output

COM 하이재킹

Spartacus의 새로운 기능은 로컬 COM 하이재킹 취약점을 식별하는 것입니다. 작동 방식은 다음과 같습니다.

  1. 전달된 인수를 기반으로 ProcMon (PMC) 구성 파일을 즉시 생성합니다. 설정되는 필터는 다음과 같습니다:
    • 작업이 RegOpenKey임.
    • 프로세스 이름이 procmon.exe 또는 procmon64.exe가 아님.
    • 최소 PML 출력 크기를 보장하기 위해 Drop Filtered Events 활성화.
    • Auto Scroll 비활성화.
  2. Process Monitor를 실행하고 사용자가 ENTER를 누를 때까지 대기합니다.
  3. 사용자가 프로세스를 실행/종료하거나 원하는 만큼 계속 실행합니다.
  4. 사용자가 ENTER를 누르면 Process Monitor를 종료합니다.
  5. 출력 이벤트 로그(PML) 파일을 파싱합니다.
    1. 끝이 InprocServer32로 끝나고 결과가 NAME_NOT_FOUND인 모든 누락된 레지스트리 키를 식별합니다.
    2. 식별된 키가 HKEY_CURRENT_USER 아래에 있으면 HKEY_CLASSES_ROOT에서 해당 GUID를 검색하고 찾은 경우 세부 정보를 내보내기 CSV에 포함합니다.
    3. 수집된 모든 정보로 CSV 출력을 생성합니다.
  6. Spartacus는 COM 하이재킹을 위한 Visual Studio 솔루션을 자동으로 생성하지 않지만, 프록시 DLL을 생성해야 하는 경우 proxy 모드를 사용할 수 있습니다.

COM 하이재킹의 경우 Spartacus는 로컬 시스템에서 잘못 구성된 COM 항목을 스캔하는 기능도 지원합니다:

  1. HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE 전체를 열거합니다.
  2. InProcServer, InProcServer32, LocalServer 또는 LocalServer32라는 레지스트리 키를 찾습니다.
  3. 누락된 EXE/DLL 위치를 식별하고, 현재 사용자가 파일을 수정하거나 삭제할 수 있는 ACL 잘못 구성도 식별합니다.

COM 하이재킹 사용법

모든 이벤트를 수집하여 C:\Data\logs.pml에 저장합니다. 취약한 모든 COM 정보는 C:\Data\VulnerableCOM.csv에 저장됩니다.

root@kitploit:~
--mode com --procmon C:\SysInternals\Procmon.exe --pml C:\Data\logs.pml --csv C:\Data\VulnerableCOM.csv --verbose

기존 PML 파일을 처리하여 취약한 COM 항목을 식별합니다.

root@kitploit:~
--mode com --existing --pml C:\Data\logs.pml --csv C:\Data\VulnerableCOM.csv --verbose

로컬 시스템 레지스트리를 열거하여 누락/잘못 구성된 COM 라이브러리 및 실행 파일을 식별합니다.

root@kitploit:~
--mode com --acl --csv C:\Data\VulnerableCOM.csv --verbose

스크린샷

COM Runtime

CSV Output

DLL 프록시 생성

Spartacus는 악용하려는 DLL을 기반으로 스켈레톤 프로젝트를 생성하여 Visual Studio 솔루션 생성을 지원합니다.

  • 모든 호출을 합법적인 DLL로 내보내기 함수를 통해 리디렉션합니다.
    • 즉, DllMain 함수에서 페이로드를 실행해야 합니다.
  • Ghidra를 사용하여 대상 DLL에서 가능한 많은 함수 시그니처/정의를 추출하고 이에 대한 프록시 함수를 생성합니다.
    • 시그니처 추출이 불가능한 함수는 직접 합법적인 함수/DLL로 리디렉션됩니다.
    • 즉, DllMain 외부의 함수에서 페이로드를 실행할 수 있습니다.
    • 예를 들어, version.dll을 악용하려는 경우 취약한 응용 프로그램이 호출하는 GetFileVersionInfoExW에서 임플란트를 실행할 수 있습니다.

DLL 프록시 생성 사용법

모든 내보내기를 리디렉션하는 솔루션을 생성합니다 (함수 프록시 없음).

root@kitploit:~
--mode proxy --dll C:\Windows\System32\version.dll --solution "C:\data\tmp\refactor-version" --overwrite --verbose --external-resources

여러 DLL을 한 번에 입력할 수 있습니다.

root@kitploit:~
--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 출력 기반).

root@kitploit:~
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose

위와 동일하지만 외부 자산 파일을 사용하여 솔루션을 생성합니다 (수정이 필요한 경우).

root@kitploit:~
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose --external-resources

Ghidra가 함수 정의를 추출하지 못한 함수에 대해 미리 생성된 함수 프로토타입을 사용합니다.

root@kitploit:~
--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 함수에 대해서만 프록시를 생성합니다.

root@kitploit:~
--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가 함수 정의를 추출하지 못한 함수에 대한 프록시 함수 생성을 지원합니다.

root@kitploit:~
--mode proxy --action prototypes --path "C:\Program Files (x86)\Windows Kits" --csv C:\data\prototypes.csv --verbose

DLL의 내보내기를 나열하고 각 함수에 대해 미리 생성된 프로토타입이 있는지 확인합니다.

root@kitploit:~
--mode proxy --action exports --dll C:\Windows\System32\version.dll --dll C:\Windows\System32\amsi.dll --prototypes ./Assets/prototypes.csv

DLL 파일 서명

Spartacus는 이제 자체 서명 인증서 생성 (기존 파일에서 속성 복사) 및 DLL 파일 서명을 지원합니다.

DLL 파일 서명 사용법

C:\Windows\System32\version.dll의 속성을 사용하여 서명 인증서를 생성합니다 (서명된 DLL이어야 함).

root@kitploit:~
--mode sign --action generate --pfx "C:\Output\certificate.pfx" --password "Welcome1" --not-before "2022-12-31 00:00:55" --not-after "2026-01-01 00:00:01" --copy-from C:\Windows\System32\version.dll --verbose

기존/생성된 인증서를 사용하여 DLL에 서명합니다.

root@kitploit:~
--mode sign --action sign --pfx "C:\Output\certificate.pfx" --password "Welcome1" --path "C:\Input\MyFakeVersion.dll" --algorithm SHA256 --verbose

DLL 하이재킹 탐지

Spartacus는 또한 활성 DLL 프록시를 식별하려고 시도하는 --detect 모드를 가지고 있습니다. 그 논리는 다음과 같습니다.

  • 모든 프로세스를 열거합니다.
  • 각 프로세스에 대해 메모리에 로드된 DLL (모듈)을 로드합니다 (적절한 권한이 있다고 가정).
  • 동일한 이름의 DLL을 찾은 경우:
    • 두 파일 모두 OS 경로(예: Windows, System32, Program Files)에 있으면 무시합니다.
    • 파일 중 하나만 OS 경로에 있고 다른 하나는 사용자 쓰기 가능 위치에 있으면 플래그를 지정합니다.

이 기능을 사용하려면 --detect와 함께 Spartacus를 실행하기만 하면 됩니다.

실행 파일/DLL 자체 서명

Spartacus는 자체 서명 인증서를 생성할 수 있을 뿐만 아니라 컴파일된 DLL에 서명할 수 있는 --sign 모드를 지원합니다.

기존 파일에서 발급자/주체를 복사하여 자체 서명 인증서를 생성합니다.

root@kitploit:~
--mode sign --action generate --pfx "C:\Output\myCertificate.pfx" --password "Welcome1" --not-before "2023-01-01 00:00:04" --not-after "2025-01-01 00:00:42" --copy-from C:\Windows\System32\version.dll --verbose

그리고 해당 인증서를 사용하여 컴파일된 파일에 서명합니다.

root@kitploit:~
--mode sign --action sign --pfx "C:\Output\myCertificate.pfx" --password "Welcome1" --path "C:\Projects\Spartacus-AMSI\amsi.dll" --algorithm SHA256 --verbose

명령줄 인수

더 쉽게 사용하려면 CommandLineGenerator.html 파일을 사용하세요.

기여

오타, 버그, 새로운 기능 등 무엇이든 Spartacus는 기여를 매우 환영합니다. 단, 다음 사항에 동의해야 합니다:

  • 이 프로젝트의 MIT 라이선스에 동의합니다.
  • 풀 리퀘스트를 만들기 전에 이슈를 생성하여 작업 전에 논의하십시오. 내부 개발은 공개 GitHub 저장소를 통해 추적되지 않습니다. 그렇지 않으면 예를 들어 우리가 이미 동일하거나 유사한 기능을 작업 중이거나 다른 이유로 풀 리퀘스트가 거부될 위험이 있습니다.

크레딧

  • https://github.com/eronnen/procmon-parser/
  • https://www.redteam.cafe/red-team/dll-sideloading/dll-sideloading-not-by-dllmain
  • https://stmxcsr.com/persistence/com-hijacking.html
  • Spartacus 아이콘은 Darius Dan이 만든 Helmet 아이콘 - Flaticon | https://dariusdan.com/ 에서 가져왔습니다.
  • https://github.com/Danielku15/SigningServer
도구 다운로드
모드인수설명
--mode사용할 모드를 정의합니다. 옵션: dll, proxy, com, detect.
all--verbose자세한 출력을 활성화합니다.
all--debug디버그 출력을 활성화합니다.
all--external-resources기본적으로 Spartacus는 VS 솔루션 파일 등을 생성하기 위해 포함된 리소스를 사용합니다. 템플릿을 수정해야 하는 경우 이 인수를 사용하여 Spartacus가 ./Assets 폴더에서 모든 파일을 로드하도록 합니다.
dll, com--procmonSysInternals Process Monitor procmon.exe 또는 procmon64.exe의 위치 (파일)
dll, com--pmlProcMon 이벤트 로그 파일을 저장할 위치 (파일). 파일이 존재하면 덮어씁니다. --existing과 함께 사용하면 읽을 이벤트 로그 파일을 나타내며 덮어쓰지 않습니다.
dll, com--pmc사용자 정의 ProcMon (PMC) 파일을 정의합니다. 이 파일은 수정되지 않고 그대로 사용됩니다.
dll, com--csv실행 결과 CSV 출력을 저장할 위치 (파일).
dll, proxy--solution프록시 DLL의 솔루션이 저장될 디렉터리 경로.
dll, com--existingSpartacus가 기존 ProcMon 이벤트 로그 파일 (PML)을 처리해야 함을 나타내는 스위치. 이벤트 로그 파일을 지정하려면 --pml을 사용하십시오. ProcMon을 몇 시간 동안 실행했거나 부트 로깅에 사용한 경우 유용합니다.
dll--all기본적으로 Windows 또는 Program Files 디렉터리의 DLL은 건너뜁니다. 이 항목을 사용하여 출력에 해당 디렉터리를 포함합니다.
proxy--ghidraGhidra의 analyzeHeadless.bat 파일 경로. 단순히 DllMain이 아닌 특정 함수를 프록시하려는 경우 사용합니다.
proxy--dll프록시하려는 DLL의 경로이며 이 인수의 여러 인스턴스를 포함할 수 있습니다. 또한 C:\Windows\System32\*.dll과 같은 와일드카드를 포함할 수 있습니다. 단, 모든 경로는 *.dll로 끝나야 합니다.
proxy, sign--overwrite--solution (proxy) 또는 --pfx (sign) 파일이 이미 존재하는 경우 이 플래그를 사용하여 덮어씁니다.
proxy--only이 변수에 정의된 함수에 대해서만 프록시 함수를 생성합니다. 값은 쉼표로 구분됩니다 (예: 'WTSFreeMemory,WTSFreeMemoryExA,WTSSetUserConfigA').
proxy--action기본 작업은 VS 솔루션을 생성하는 것입니다. --action prototypes는 Windows SDK 폴더를 입력으로 받아 *.h 파일을 파싱하여 함수 프로토타입 데이터베이스를 생성합니다. --action exports는 DLL의 내보내기 함수를 표시하며 --prototypes와 함께 사용하면 함수 정의가 미리 생성되었는지 표시합니다.
sign--actionsign 모듈과 함께 --action을 사용할 때, generate (PFX 생성) 또는 sign (파일 서명) 중 하나를 사용합니다.
proxy--path현재 --action prototypes와만 작동하며 Windows SDK 디렉터리의 위치입니다.
proxy--prototypesprototypes.csv의 위치 (현재 ./Assets 폴더 내).
com--acl로컬 시스템에서 누락/잘못 구성된 COM 라이브러리 및 실행 파일을 열거합니다.
sign--subject--action generate와 함께 사용하여 인증서 주체를 지정합니다.
sign--issuer--action generate와 함께 사용하여 인증서 발급자를 지정합니다.
sign--copy-from--action generate와 함께 사용하여 발급자와 주체를 복사할 기존 서명된 파일을 지정합니다.
sign--not-before--action generate와 함께 사용하여 새 인증서가 유효한 시작 날짜를 정의합니다. 형식은 YYYY-MM-DD HH:MM:SS입니다.
sign--not-after--action generate와 함께 사용하여 새 인증서가 유효한 종료 날짜를 정의합니다. 형식은 YYYY-MM-DD HH:MM:SS입니다.
sign--pfx--action generate와 함께 사용하면 pfx 파일이 저장될 위치입니다. --action sign과 함께 사용하면 pfx 파일이 로드될 위치입니다.
sign--password--action generate와 함께 사용하면 --pfx 파일의 암호를 정의합니다.
sign--path--action sign과 함께 사용하면 서명할 실행 파일/DLL 파일의 위치를 정의합니다.
sign--algorithm--action sign과 함께 사용하면 서명에 사용할 해싱 알고리즘을 정의합니다. 옵션: MD5, SHA1, SHA256, SHA384, SHA512.
sign--timestamp--action sign과 함께 사용하면 타임스탬프 서버를 정의합니다 (예: http://timestamp.sectigo.com 또는 http://timestamp.digicert.com).