Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
SigFlip — SigFlip은 Authenticode 서명된 PE 파일(exe, dll, sys 등)을 기존 서명을 무효화하거나 손상시키지 않으면서 패치하는 도구입니다. | Kitploit
도구/GitHubGitHub/med0x2e/sigflip
Defensive ToolsPersistence MechanismsCode AnalysisExploitationLateral MovementBinary AnalysisRed TeamingPayload Development
GitHubmed0x2e/sigflip

SigFlip

SigFlip은 Authenticode 서명된 PE 파일(exe, dll, sys 등)을 기존 서명을 무효화하거나 손상시키지 않으면서 패치하는 도구입니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

무엇인가요?

SigFlip은 기존 Authenticode 서명에 영향을 주거나 깨뜨리지 않으면서 Authenticode 서명된 PE 파일(exe, dll, sys 등)을 패치하는 도구입니다. 즉, 파일 서명, 무결성 검사 또는 PE 파일 기능을 깨뜨리지 않고 데이터(예: 셸코드)를 삽입하여 PE 파일의 체크섬/해시를 변경할 수 있습니다.

SigInject는 셸코드를 암호화하여 PE 파일의 [WIN_CERTIFICATE] 인증서 테이블에 주입합니다. 암호화 키는 기본 BOF/C/C# 로더(SigLoader)와 함께 사용하기 위해 출력됩니다. SigInject는 수정된 PE 파일에 변경 사항을 저장하며 서명과 인증서 유효성을 그대로 유지합니다.

SigLoader는 SigInject로 생성된 수정된 PE 파일 경로와 복호화 키를 매개변수로 받아, 포함된 셸코드를 추출 및 복호화하여 선택한 셸코드 주입 방식과 함께 사용할 수 있게 해주는 기본 로더입니다.

SigFlip은 PE 해시가 성공적으로 변경되었는지 확인하고, 엔드포인트가 이러한 일반적인 잘못된 구성에 대해 강화된 경우 정상적으로 종료됩니다. (자세한 내용은 'Details' 섹션 참조).

참고: SigFlip, SigInject 및 SigLoader는 BOF 스크립트와 .NET 어셈블리로 제공됩니다. 유일한 차이점은 BOF 대신 .NET 아티팩트를 사용하기로 선택한 경우 SigInject 기능이 SigFlip(-i)의 일부로 구현된다는 점입니다.

왜 필요한가요?

주로 지속성, 측면 이동 또는 코드/명령 실행에 사용될 수 있으며 다음과 같은 경우에 도움이 됩니다:

  • 애플리케이션 허용 목록 우회, 서명을 깨뜨리지 않고 PE 파일 해시 변경 (예: msbuild.exe)
  • 특정 LOLBIN의 해시를 기반으로 악성 코드/명령 실행 탐지에 의존하는 EDR 우회
  • 서명된 드라이버를 다른 해시로 로드하여 미리 정의된 해시 목록을 사용하는 일반적인 취약한 서명된 드라이버를 감시하는 EDR을 우회하는 데 도움
  • 암호화된 셸코드를 서명된 PE 파일에 포함하고 원하는 스테이저(sigloader)를 사용하여 구문 분석, 복호화, 로드 및 실행
  • 엔드포인트 보안 공급업체는 대부분 서명된 PE 파일을 양성으로 분류하는 경향이 있으며, 서명되지 않은 코드(셸코드 등)를 서명된 PE 파일에 포함하면 탐지/플래그 지정이 다소 어려워짐
  • 기본적으로 WinVerifyTrust에 의존하는 엔드포인트 보안 공급업체 우회
  • OPSEC 개선 및 signtool, sigcheck, Get-AuthenticodeSignature 등 일반적인 서명 확인 유틸리티만 사용하여 PE 파일의 Authenticode 서명을 검증하는 방어자에게 도전

사용법 및 예제:

컴파일/빌드:

이 프로젝트는 미리 컴파일된 BOF를 제공하지 않습니다. Mingw-w64를 사용하여 컴파일할 수 있습니다. .NET의 경우 VS 또는 csc.exe를 사용하여 .NET 프로젝트(SigFlip, SigLoader)를 컴파일하고, BOF의 경우 아래 단계를 확인하세요;

root@kitploit:~
➜ i686-w64-mingw32-gcc -c sigflip.c -o sigflip.x86.o
➜ x86_64-w64-mingw32-gcc -c sigflip.c -o sigflip.x64.o
➜ x86_64-w64-mingw32-gcc -c SigLoader/sigloader.c -o sigloader.x64.o
➜ i686-w64-mingw32-gcc -c SigLoader/sigloader.c -o sigloader.x86.o

모든 오브젝트 파일이 sigflip.cna와 동일한 디렉토리에 있는지 확인한 후, sigflip.cna 스크립트를 Cobalt Strike에 로드하세요.

참고: 미리 컴파일된 BOF는 mingw-64 v8.0.0_3에서 테스트되었으며 호환됩니다. mingw-64 >= v9를 사용하면 작동할 수 있지만 활성 비콘이 충돌할 수 있습니다. 자세한 내용은 https://github.com/med0x2e/SigFlip/issues/2를 확인하세요.

Cobalt Strike:

  1. Execute-Assembly

    • execute-assembly SigFlip.exe -h
    • execute-assembly SigLoader -h
  2. BOF

    • Cobalt Strike에서 사용하려면 SigFlip.cna 스크립트를 로드하면 두 개의 새 명령(SigFlip 및 SigInject)이 등록됩니다. 다음과 같이 사용하세요;
      • SigFlip: 서명 또는 인증서 유효성을 깨뜨리지 않고 PE 파일(DLL, EXE, SYS, OCX 등)의 해시 변경:
        • SigFlip "<PE\_FILE\_PATH>" "<OUTPUT\_PE\_FILE\_PATH (with extension)>"
      • SigInject: 셸코드를 암호화하여 PE 파일의 [WIN_CERTIFICATE] 인증서 테이블에 주입, 암호화 키는 기본 C/C# 로더와 함께 사용하기 위해 출력되며 서명과 인증서 유효성을 그대로 유지:
        • SigInject "<PE\_FILE\_PATH> <OUTPUT\_PE\_FILE\_PATH (with extension)>" "<SHELLCODE\_FILE>"
      • SigLoader: SigInject로 생성된 PE 파일에서 암호화된 셸코드를 로드한 다음, Early Bird queueuserapc를 사용하여 희생 프로세스에 셸코드를 생성/주입, 셸코드 주입 로직은 원하는 다른 코드 주입 기술로 사용자 정의하거나 대체 가능:
        • SigLoader <PE_FILE_PATH_WITH_SH> <DECRYPTION_KEY> <SPAWNTO_PROCESS_PATH> <PARENT_PROCESS_ID>
  3. Examples

    • BOF:

      • msbuild.exe에 임의 데이터 주입 (일명 msbuild.exe 비트 플립):
        • SigFlip "C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" "C:\lolbins\modified-msbuild.exe"
      • kernel32.dll에 셸코드 주입 (인수 순서가 다르며 복호화 키를 기록해 두세요):

세부 사항:

이것은 APT#10이 여러 캠페인 또는 침입 세트에서 사용한 알려진 기술입니다.

Authenticode 디지털 서명?

Authenticode는 Authenticode 서명된 소프트웨어의 게시자를 식별하는 Microsoft 코드 서명 기술입니다. Authenticode는 또한 소프트웨어가 서명 및 게시된 이후 변조되지 않았음을 확인합니다.

어떻게 작동하나요?

Microsoft는 PE 바이너리의 무결성과 출처를 확인하기 위해 주로 Authenticode 서명 형식에 의존합니다. Authenticode PE 포맷 사양에 따르면 Authenticode 서명은 Windows PE 파일의 Optional Header Data Directories에 있는 Certificate Table 항목으로 지정된 위치에 '포함(embedded)'될 수 있습니다. Authenticode가 Windows PE 파일에 서명하는 데 사용될 때, 파일의 Authenticode 해시 값을 계산하는 알고리즘은 특정 PE 필드를 제외합니다. 파일에 서명을 포함할 때, 서명 프로세스는 파일의 해시 값에 영향을 주지 않고 이러한 필드를 수정할 수 있습니다. 이러한 필드는 다음과 같습니다: **체크섬, 인증서 테이블 RVA, 인증서 테이블 크기 및 특성 인증서 테이블(attribute certificate table). 특성 인증서 테이블에는 PE 파일의 해시 값, 소프트웨어 게시자의 개인 키로 생성된 서명, 그리고 소프트웨어 게시자의 서명 키를 법적 엔터티에 바인딩하는 X.509 v3 인증서가 포함된 PKCS #7 SignedData 구조가 포함되어 있습니다.

쉽게 말해, Authenticode 해시 계산에서 제외된 필드에 데이터를 수정하거나 포함시켜도 Authenticode 서명과 파일 무결성 검사가 깨질 걱정을 하지 않아도 됩니다.

제외된 필드에 대한 추가 세부 정보:

  • 인증서 테이블 RVA 및 크기: 서명된 PE 파일의 선택적 헤더 구조에는 보안 디렉터리 IMAGE_DIRECTORY_ENTRY_SECURITY 항목을 포함하는 데이터 디렉터리 배열이 있으며, 여기에는 RVA 및 크기의 두 필드가 있습니다.
    • RVA: 특성 인증서 테이블에 대한 파일 오프셋(메모리 오프셋이 아님).
    • 크기: 특성 인증서 테이블 크기.
  • 특성 인증서 테이블: 서명과 인증서를 캡슐화하는 WIN_CERTIFICATE 데이터 구조이며, 다음 필드를 가집니다:
    • dwLength: 인증서 테이블 크기.
    • wRevision: WIN_CERTIFICATE의 '개정(revision)'.
    • wCertificateType: 캡슐화된 인증서 데이터의 종류.
    • bCertificate: 실제 인증서 데이터. WIN_CERT_TYPE_PKCS_SIGNED_DATA의 경우 위에서 언급한 PKCS#7 SignedData 구조(PE 해시 값, 서명 및 x.509 인증서 포함)입니다. 이것이 바로 SigFlip이 임의의 데이터 또는 셸코드를 포함시키는 위치입니다.

이 모든 것을 염두에 두고, SigFlip은 다음을 수행합니다:

  1. 시스템 구성 확인
  2. PE 파일 로드 및 PE 파일 서명 확인 및 Sha1 해시 계산
  3. "e_lfanew" 오프셋 가져오기 (PE FILE HEADER -> IMAGE_NT_HEADERS 가리킴)
  4. IMAGE_NT_HEADERS에서 IMAGE_OPTIONAL_HEADER 가져오기
  5. IMAGE_OPTIONAL_HEADER에서 IMAGE_DATA_DIRECTORY 가져오기
  6. IMAGE_DIRECTORY_ENTRY_SECURITY 필드를 가져와 특성 인증서 테이블(WIN_CERTIFICATE)의 RVA 및 SIZE 검색
  7. 선택한 추가 바이트(임의의 데이터/셸코드)로 인증서 테이블을 패딩하여 PE 파일 블롭 패치
  8. 선택적 헤더 -> IMAGE_DIRECTORY_ENTRY_SECURITY 데이터 디렉터리 크기 업데이트
  9. WIN_CERTIFICATE(인증서 테이블) dwLength 업데이트
  10. 새 PE 체크섬 생성 및 업데이트 (OPT 헤더 체크섬)
  11. 최종 PE를 새 크기로 저장
  12. 수정된 PE 파일 서명 확인

첫 번째 단계는 시스템이 Authenticode 서명된 PE 파일에 패딩 및 셸코드 주입을 허용하도록 잘못 구성되었는지 확인하는 데 필수적입니다. 따라서 다음과 같은 정합성 검사가 수행됩니다:

  1. MS13-098 수정 사항(KB2893294)이 설치되지 않았는지 확인. 설치되었지만 레지스트리 키가 제대로 설정되지 않아 패치가 무용지물이 될 수 있음에 유의.
  2. 레지스트리 키 확인
    1. X86:
      • 레지스트리 키 "HKLM:\Software\Microsoft\Cryptography\Wintrust\Config"가 없는지 확인
        • -> 있는 경우 "EnableCertPaddingCheck" 레지스트리 값이 없는지 확인
    2. X64:
      • 레지스트리 키 "HKLM:\Software\Wow6432Node\Microsoft\Cryptography\Wintrust\Config"가 없는지 확인
        • -> 있는 경우 "EnableCertPaddingCheck" 레지스트리 값이 없는지 확인

수정된 PE가 자체 주소 공간이나 다른 프로세스의 주소 공간에 모듈로 로드될 때 주입된 데이터를 읽을 수 없는 이유는 무엇인가요?

Windows 로더는 인증서 데이터를 프로세스 주소 공간에 로드하지 않습니다. 따라서 셸코드와 같은 데이터를 추출하여 사용하려면 사용자 정의 로더(예: SigLoader)가 필요한 이유입니다. 이는 또한 IMAGE_DIRECTORY_ENTRY_SECURITY 데이터 디렉터리 항목 RVA가 일반적인 메모리 오프셋이 아닌 파일 오프셋인 이유를 설명합니다.

탐지/방지:

  • https://docs.microsoft.com/en-us/security-updates/SecurityAdvisories/2014/2915720?redirectedfrom=MSDN
  • 패치가 설치되고 적절한 레지스트리 키가 설정되면 시스템 재시작이 필요하지 않으며, 암호화 서비스만 다시 시작하면 됩니다. Applocker 서비스는 암호화 서비스에 종속되므로 함께 다시 시작됩니다.(@p0w3rsh3ll)
  • Adrien의 Yara 규칙; https://twitter.com/Int2e_/status/1330975808941330432

참고 자료

  • https://docs.microsoft.com/en-us/security-updates/SecurityBulletins/2013/ms13-098?redirectedfrom=MSDN
  • https://docs.microsoft.com/en-us/security-updates/SecurityAdvisories/2014/2915720?redirectedfrom=MSDN
  • http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/authenticode_pe.docx
  • https://msrc-blog.microsoft.com/2013/12/10/ms13-098-update-to-enhance-the-security-of-authenticode/
  • https://www.specterops.io/assets/resources/SpecterOps_Subverting_Trust_in_Windows.pdf
  • https://p0w3rsh3ll.wordpress.com/2014/05/24/testing-ms13-098-certificate-padding-check/
  • http://jsac.jpcert.or.jp/archive/2021/pdf/JSAC2021_202_niwa-yanagishita_en.pdf
도구 다운로드
  • SigInject "C:\Windows\System32\kernel32.dll" "C:\random\modified-kernel32.dll" "C:\shellcode\cobaltstrike_or_msf_shellcode.bin"
  • Sigloader "C:\random\modified-kernel32.dll" "DECRYPTION_KEY" "C:\Windows\System32\werfault.exe" 6300
  • Execute-Assembly:

    • msbuild.exe에 임의 데이터 주입:
      • execute-assembly SigFlip.exe -b C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe -o C:\Temp\MSBuild.exe
    • kernel32.dll에 셸코드 주입 (인수 순서가 다르며 복호화 키를 기록해 두세요):
      • execute-assembly SigFlip.exe -i C:\Windows\System32\kernel32.dll -s C:\Temp\x86shellcode.bin -o C:\Temp\kernel32.dll -e TestSecretKey
      • execute-assembly SigLoader.exe -f C:\Temp\modified-kernel32.dll -e TestSecretKey -pid 2354