Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
SigFlip — SigFlip — это инструмент для модификации (патчинга) PE-файлов (exe, dll, sys и т.д.), подписанных Authenticode, без аннулирования или нарушения существующей подписи. | Kitploit
Инструменты/GitHubGitHub/med0x2e/sigflip
Оборонительные ИнструментыМеханизмы персистентностиАнализ КодаЭксплуатацияЛатеральное перемещениеАнализ Бинарных ФайловRed TeamingРазработка Полезной Нагрузки
GitHubmed0x2e/sigflip

SigFlip

SigFlip — это инструмент для модификации (патчинга) PE-файлов (exe, dll, sys и т.д.), подписанных Authenticode, без аннулирования или нарушения существующей подписи.

Репозиторий
1.3k20963 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Что это?

SigFlip — это инструмент для модификации PE-файлов (exe, dll, sys и т.д.) с аутентикодной подписью таким образом, чтобы это не затрагивало и не нарушало существующую аутентикодную подпись. Другими словами, вы можете изменить контрольную сумму/хэш PE-файла, внедряя данные (например, шелл-код), не нарушая при этом подпись файла, проверки целостности или функциональность PE-файла.

SigInject шифрует и внедряет шелл-код в таблицу сертификатов [WIN_CERTIFICATE] PE-файла. Ключ шифрования выводится для использования с базовым загрузчиком BOF/C/C# (SigLoader). SigInject сохраняет изменения в изменённый PE-файл, сохраняя его подпись и действительность сертификата нетронутыми.

SigLoader — это базовый загрузчик, который принимает путь к изменённому PE-файлу, созданному SigInject, и ключ дешифрования в качестве параметров, затем извлекает и дешифрует встроенный шелл-код для использования с выбранным методом инжекции шелл-кода.

SigFlip проверяет, был ли успешно изменён хэш PE, а также корректно завершает работу в случае, если конечные точки защищены от подобной распространённой неверной конфигурации (см. раздел «Детали»).

Краткое примечание: SigFlip, SigInject и SigLoader доступны в виде BOF-скриптов и .NET-сборок. Единственное отличие в том, что функциональность SigInject реализована как часть SigFlip (-i), если вы решите использовать .NET-артефакты вместо BOF.

Зачем?

Он может использоваться в основном для постоянства, горизонтального перемещения или выполнения кода/команд и может помочь с:

  • Обходом белых списков приложений — изменение хэша PE-файла (например, msbuild.exe) без нарушения подписи.
  • Обходом EDR, полагающихся на хэши конкретных LOLBIN для обнаружения вредоносного кода/команд.
  • Загрузкой подписанных драйверов с другим хэшем, что может помочь обойти EDR, отслеживающие распространённые уязвимые подписанные драйверы по предопределённому списку хэшей.
  • Встраиванием зашифрованного шелл-кода в подписанный PE-файл и использованием стигера (sigloader) по вашему выбору для разбора, дешифрования, загрузки и выполнения.
  • Вендоры средств защиты конечных точек чаще всего классифицируют подписанные PE-файлы как безопасные, поэтому встраивание вашего неподписанного кода (шелл-код и т.д.) в подписанный PE-файл усложняет его обнаружение/маркировку.
  • Обходом вендоров средств защиты конечных точек, полагающихся в основном на стандартную WinVerifyTrust для проверки подписи.
  • Улучшением OPSEC и усложнением работы защитников, которые полагаются исключительно на стандартные утилиты проверки подписи, такие как signtool, sigcheck, Get-AuthenticodeSignature и т.д., для проверки аутентикодной подписи PE-файлов.
  • Использование и примеры:

    Компиляция/Сборка:

    Предварительно скомпилированные BOF не предоставляются в этом проекте; их можно скомпилировать с помощью Mingw-w64. Для .NET используйте VS или csc.exe для компиляции .NET-проектов (SigFlip, SigLoader). Для BOF следуйте шагам ниже:

    • ➜ 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 может работать, но может вызвать сбой активных beacon'ов. Подробнее см. 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\_ФАЙЛУ>" "<ПУТЬ\_К\_ВЫХОДНОМУ\_PE\_ФАЙЛУ (с расширением)>"
        • SigInject: Шифрует и внедряет шелл-код в таблицу сертификатов [WIN_CERTIFICATE] PE-файла. Ключ шифрования выводится для использования с базовым загрузчиком C/C#, подпись и действительность сертификата сохраняются:

          • SigInject "<ПУТЬ\_К\_PE\_ФАЙЛУ> <ПУТЬ\_К\_ВЫХОДНОМУ\_PE\_ФАЙЛУ (с расширением)>" "<ПУТЬ\_К\_ФАЙЛУ\_ШЕЛЛ-КОДА>"
        • SigLoader: Загружает зашифрованный шелл-код из PE-файлов, созданных SigInject, затем использует Early Bird queueuserapc для внедрения/запуска шелл-кода в жертвенный процесс. Логику инжекции шелл-кода можно настроить или заменить любой другой техникой внедрения кода:

          • SigLoader <ПУТЬ\_К\_PE\_ФАЙЛУ\_С\_ШЕЛЛ-КОДОМ> <КЛЮЧ\_ДЕШИФРОВАНИЯ> <ПУТЬ\_К\_ПРОЦЕССУ\_SPAWNTO> <ИДЕНТИФИКАТОР\_РОДИТЕЛЬСКОГО\_ПРОЦЕССА>
    3. Примеры

      • BOF:

        • Внедрение случайных данных в msbuild.exe (также известный как бит-флип msbuild.exe):
          • SigFlip "C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" "C:\lolbins\modified-msbuild.exe"
        • Внедрение шелл-кода в kernel32.dll (Порядок аргументов отличается; обязательно запишите ключ дешифрования):
          • SigInject "C:\Windows\System32\kernel32.dll" "C:\random\modified-kernel32.dll" "C:\shellcode\cobaltstrike_or_msf_shellcode.bin"
          • Sigloader "C:\random\modified-kernel32.dll" "КЛЮЧ\_ДЕШИФРОВАНИЯ" "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

    Детали:

    Это известная техника, используемая APT#10 в множестве кампаний и наборов вторжений.

    Аутентикодные цифровые подписи?

    Authenticode — это технология подписания кода от Microsoft, которая идентифицирует издателя программного обеспечения, подписанного с помощью Authenticode. Authenticode также проверяет, что программное обеспечение не было изменено после его подписания и публикации.

    Как это работает?

    Microsoft в основном полагается на формат подписи Authenticode для проверки целостности и происхождения PE-бинарных файлов. Согласно спецификации формата Authenticode для Portable Executable, подписи Authenticode могут быть «встроены» в PE-файл Windows в место, указанное записью «Таблица сертификатов» в каталогах данных необязательного заголовка. Когда Authenticode используется для подписи PE-файла Windows, алгоритм, вычисляющий хэш-значение файла Authenticode, исключает определённые поля PE. При встраивании подписи в файл процесс подписания может изменять эти поля, не влияя на хэш-значение файла. Эти поля следующие: контрольная сумма, RVA таблицы сертификатов, размер таблицы сертификатов и таблица атрибутов сертификатов. Таблица атрибутов сертификатов содержит структуру PKCS #7 SignedData, содержащую хэш-значение PE-файла, подпись, созданную закрытым ключом издателя программного обеспечения, и сертификаты X.509 v3, которые связывают ключ подписи издателя с юридическим лицом.

    Простыми словами, мы можем изменять или встраивать данные в поля, исключённые из расчёта хэша Authenticode, не беспокоясь о нарушении аутентикодной подписи и проверок целостности файла.

    Подробнее об этих исключённых полях:

    • RVA и размер таблицы сертификатов: Структура необязательного заголовка подписанного PE-файла содержит массив каталогов данных, включая запись каталога безопасности IMAGE_DIRECTORY_ENTRY_SECURITY, которая имеет два поля: RVA и Size.

      • RVA: смещение в файле (не смещение в памяти) к таблице атрибутов сертификатов.
      • Size: размер таблицы атрибутов сертификатов.
    • Таблица атрибутов сертификатов: структура данных WIN_CERTIFICATE, которая инкапсулирует подпись и сертификаты и имеет следующие поля:

      • dwLength: размер таблицы сертификатов.
      • wRevision: «ревизия» WIN_CERTIFICATE.
      • wCertificateType: тип инкапсулированных данных сертификата.
      • bCertificate: фактические данные сертификата. Для WIN_CERT_TYPE_PKCS_SIGNED_DATA это упомянутая выше структура PKCS#7 SignedData (которая содержит хэш-значение PE, подпись и сертификат x.509). Именно сюда SigFlip встраивает случайные данные или шелл-код.

    Исходя из этого, SifFlip делает следующее:

    1. Проверяет конфигурацию системы
    2. Загружает PE-файл и проверяет подпись PE-файла. Вычисляет хэш Sha1
    3. Получает смещение "e_lfanew" (указывает на PE FILE HEADER -> IMAGE_NT_HEADERS)
    4. Получает IMAGE_OPTIONAL_HEADER из IMAGE_NT_HEADERS
    5. Получает IMAGE_DATA_DIRECTORY из IMAGE_OPTIONAL_HEADER
    6. Получает поле IMAGE_DIRECTORY_ENTRY_SECURITY и извлекает RVA и SIZE таблицы атрибутов сертификатов (WIN_CERTIFICATE).
    7. Модифицирует PE-файл, добавляя в таблицу сертификатов дополнительные байты (случайные данные/шелл-код) по выбору.
    8. Обновляет размер в каталоге данных необязательного заголовка -> IMAGE_DIRECTORY_ENTRY_SECURITY
    9. Обновляет dwLength в WIN_CERTIFICATE (таблица сертификатов)
    10. Генерирует новую контрольную сумму PE и обновляет её (контрольная сумма OPT Header)
    11. Сохраняет итоговый PE с новым размером.
    12. Проверяет подпись изменённого PE-файла

    Первый шаг необходим для подтверждения того, что система неправильно настроена таким образом, чтобы допускать дополнение и внедрение шелл-кода в подписанные аутентикодом 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). Это также объясняет, почему RVA записи каталога данных IMAGE_DIRECTORY_ENTRY_SECURITY является смещением в файле, а не типичным смещением в памяти.

    Обнаружение/Предотвращение:

    • https://docs.microsoft.com/en-us/security-updates/SecurityAdvisories/2014/2915720?redirectedfrom=MSDN
    • После установки патча и правильной настройки ключей реестра перезагрузка системы не требуется, нужно только перезапустить Cryptographic Services. Служба Applocker также будет перезапущена, так как она зависит от криптографических служб.(@p0w3rsh3ll)
    • Yara-правило от Adrien; 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
    Скачать инструмент