Тегирование EXE файлов без повреждения цифровой подписи / Блог компании Alawar Entertainment / Хабр

Введение

Драйвер — это программа, обеспечивающая взаимодействие компьютера с оборудованием и устройствами. Без драйверов невозможна нормальная работа подключенного к ПК оборудования, например видеоадаптера или принтера.

В большинстве случаев драйверы поставляются вместе с Windows, или их можно найти, перейдя в центр обновления Windows на панели управления и проверив наличие обновлений. Если в Windows отсутствует нужный драйвер, то обычно его можно найти на веб-сайте производителя

При подключении к компьютеру нового устройства ОС Windows пытается найти и установить драйвер для этого устройства. Иногда можно увидеть уведомление, что драйвер не подписан, был изменен после подписывания или не может быть установлен ОС Windows. Всегда можно решить, следует ли устанавливать неподписанный или измененный драйвер.

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

Ближе к теме

Но что, если мы (авторы этих приложений) хотим передавать в них какую-либо дополнительную информацию, которая будет известна только в момент скачивания? Ведь любое изменение файла автоматически делает цифровую подпись недействительной. Какие у нас есть варианты?

  1. Дописывать в название отдаваемого файла требуемые для передачи данные, а веб-сервером через регулярные выражения перенаправлять подобные запросы на один физический файл.
    легко реализуемо;
    внутренности файла остаются нетронутыми и подпись всегда верна;
    передать можно лишь небольшой набор данных (например, несколько идентификаторов);
    при переименовании файла информация пропадает.
  2. Изменять данные внутри файла и переподписывать его при отдаче.
    передать можно любой объем данных;
    при переименовании ничего не теряется;
    переподписывание – очень долгий процесс, если речь идёт про отдачу сотен больших (100 MB ) дистрибутивов игр в секунду, как в нашем случае.
  3. Изменять данные внутри файла и НЕ переподписывать его, сохраняя при этом корректную цифровую подпись.
    передать можно любой объем данных;
    при переименовании ничего не теряется;
    не нужно переподписывать файл;
    это невозможно (или возможно?).

Видео инструкция по отключению проверки цифровой подписи драйверов

Обычно, даже после перезагрузки в обычном режиме, установленное таким образом устройство продолжает работать, однако в некоторых случаях драйвер слетает и приходится повторять процедуру. Отсюда частый вопрос о том, как отключить проверку цифровой подписи Windows 10 навсегда.

Выбор действия при установке драйвера

При установке нового драйвера Windows отобразит одно из предупреждений:

К сожалению, не существует надежных источников сведений, которые могут указать, кто опубликовал неподписанный драйвер. Любой может изменить содержимое неподписанного драйвера. Первоначальная версия неподписанного драйвера действительно могла прийти от изготовителя устройства, но если драйвер не подписан, то возможно, что кто-то его изменил.

Дополнительно

Установка неподписанных драйверов в Windows 8.1

Невозможное возможно


Фокус заключается вот в чём:

размер секции, описанный в IMAGE_DATA_DIRECTORY может отличаться от фактического размера структуры WIN_CERTIFICATE

, а при проверке цифровой подписи исключается

вся

секция, размер которой описан в IMAGE_DATA_DIRECTORY. При этом добавленное вручную содержимое в эту секцию уже не является частью цифровой подписи и по сути может содержать любой набор данных. Таким образом можно с легкостью добавлять любые данные в содержимое блока «Атрибуты таблицы сертификатов», предварительно изменив размер секции в структуре IMAGE_DATA_DIRECTORY, не повредив при этом цифровую подпись файла. Не забывайте про паддинг файла до размера, кратного 8 байтам.

Вы должны понимать возможные последствия при использовании этого метода, иметь в виду тип передаваемых данных, объем, возможную их обработку и потенциальные дыры, связанные с этим. В ваших же интересах передавать там только такую информацию, которую можно безболезненно удалить/заменить/испортить (в случае, если кто-то захочет это сделать намеренно), но при этом не потерять основную функциональность.

«Конечно, а как же контрольная сумма PE файла?» — спросите вы. Спешу вас успокоить — она не играет никакой роли при запуске и работе обычных EXE файлов. Контрольная сумма проверяется только на критически важных системных файлах, например на неё ориентируется сервис System File Checker (для диагностики пропавших или повреждённых системных файлов).

Немного теории

Ниже представлена структура Windows

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


Также показан формат блока цифровой подписи (структура

#7), используемый Microsoft.

Ключевой момент в этой схеме — наличие блоков, исключаемых при генерации и проверке цифровой подписи. Эти блоки описываются простейшими C структурами:

«Таблица сертификатов» в секции «Директории данных» – это структура IMAGE_DATA_DIRECTORY:

typedef struct _IMAGE_DATA_DIRECTORY {
    DWORD   VirtualAddress;
    DWORD   Size;
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;

где:

  • VirtualAddress — прямой указатель на атрибуты таблицы сертификатов в PE файле;
  • Size — размер этого блока в PE файле.

«Атрибуты таблицы сертификатов» – это структура WIN_CERTIFICATE:

typedef struct _WIN_CERTIFICATE
{
    DWORD       dwLength;
    WORD        wRevision;
    WORD        wCertificateType;   
    BYTE        bCertificate[ANYSIZE_ARRAY];
} WIN_CERTIFICATE, *LPWIN_CERTIFICATE;

элементы которой содержат следующие значения:

  • dwLength — размер секции Бинарных данных сертификата;
  • wRevision — используемая версия структуры WIN_CERTIFICATE;
  • wCertificateType — устанавливается в значение 0x0002 для цифровых подписей PE файлов. Значение определено в Wintrust.h как WIN_CERT_TYPE_PKCS_SIGNED_DATA;
  • bCertificate — набор данных, содержащий цифровую подпись в формате PKCS#7.


При подписывании PE файла секция атрибутов таблицы сертификатов всегда помещается в конец файла (блок «Оставшееся содержимое» отсутствует). Зная об этой особенности, можно провернуть небольшой трюк с очень заманчивыми результатами.

Отключение проверки в редакторе локальной групповой политики

Проверку подписи драйверов ранее можно было отключить (на сегодня метод не работает) с помощью редактора локальной групповой политики, однако эта возможность присутствует только в Windows 10 Pro (нет в домашней версии). Для запуска редактора локальной групповой политики, нажмите клавиши Win R на клавиатуре, а затем введите gpedit.msc в окно «Выполнить», нажмите Enter.

В редакторе перейдите к разделу Конфигурация пользователя — Административные шаблоны — Система — Установка драйвера и дважды кликните по параметру «Цифровая подпись драйверов устройств» в правой части.

Откроется оно с возможными значениями данного параметра. Отключить проверку можно двумя способами:

  1. Установить значение «Отключено».
  2. Установить значение «Включено», а затем, в разделе «Если Windows обнаруживает файл драйвера без цифровой подписи» установить «Пропустить».

Параметры проверки цифровой подписи

После установки значений, нажмите Ок, закройте редактор локальной групповой политике и перезагрузите компьютер (хотя, в общем-то, должно сработать и без перезагрузки).

Отключение проверки цифровых подписей драйверов в windows 8.1 и windows 8

В Windows 8 есть два способа отключить проверку цифровой подписи в драйвере — первый позволяет отключить ее однократно для установки конкретного драйвера, второй — на все последующее время работы системы.

Помогла ли вам эта статья?

ДАНЕТ

Способ 1: временное отключение проверки

Для вашего удобства мы разделим этот способ на две части. В первом случаем мы расскажем о том, как применить данный способ, если у вас установлена Windows 7 или ниже. Второй вариант подойдет лишь обладателям Windows 8, 8.1 и 10.

Если у вас Windows 7 или ниже

  1. Перезагружаем систему абсолютно любым способом.
  2. Во время перезагрузки жмем кнопку F8 для появления окна с выбором режима загрузки.
  3. В появившемся окне выбираем строку «Отключение обязательной проверки подписи драйверов» или «Disable Driver Signature Enforcement» и жмем кнопку «Enter».
  4. Временно отключаем проверку подписи в Windows 7

  5. Это позволит загрузить систему с временно отключенной проверкой драйверов на наличие подписи. Теперь остается лишь инсталлировать необходимое ПО.

Если у вас Windows 8, 8.1 или 10

  1. Перезагружаем систему, зажав предварительно клавишу «Shift» на клавиатуре.
  2. Перезагружаем Windows 10 или ниже

  3. Ждем, пока перед выключением компьютера или ноутбука не появится окно с выбором действия. В этом окне выбираем пункт «Диагностика».
  4. Выбираем пункт диагностика

  5. В следующем окне диагностики следует выбрать строку «Дополнительные параметры».
  6. Выбираем строку дополнительные параметры

  7. Следующим шагом будет выбор пункта «Параметры загрузки».
  8. Выбираем параметры загрузки

  9. В следующем окне ничего выбирать не нужно. Следует просто нажать кнопку «Перезагрузить».
  10. Начнется перезагрузка системы. В результате вы увидите окно, в котором необходимо выбрать нужные нам параметры загрузки. В нем необходимо нажать клавишу F7 для выбора строки «Отключить обязательную проверку подписи драйверов».
  11. Временно отключаем проверку подписи для Windows 10 и ниже

  12. Как и в случае с Windows 7, система загрузится с временно отключенной службой проверки подписи устанавливаемого ПО. Вы сможете инсталлировать нужный вам драйвер.
Читайте также:  Получить ЭЦП для ООО купить в Саратове — самая выгодная цена на официальном сайте

Независимо от того, какая у вас операционная система, этот способ имеет недостатки. После очередной перезагрузки системы, проверка подписей снова запустится. В некоторых случаях это может привести к блокировке работы драйверов, которые были инсталлированы без соответствующих подписей. Если такое произошло, вам следует отключить проверку насовсем. В этом вам помогут дальнейшие способы.

Способ 2: редактор групповой политики

Этот способ позволит вам отключить проверку подписей навсегда (или до того момента, как вы сами ее активируете). После этого вы сможете спокойно инсталлировать и пользоваться софтом, который не имеет соответствующего сертификата. В любом случае, этот процесс можно обратить и включить проверку подписи обратно. Так что бояться вам нечего. Кроме того, этот способ подойдет владельцам любой ОС.

  1. Жмем на клавиатуре одновременно клавиши «Windows» и «R». Запустится программа «Выполнить». В единственную строку вводим код gpedit.msc. Не забываем после этого нажать кнопку «ОК» либо «Enter».
  2. Запускаем окно групповой политики

  3. В результате откроется редактор групповой политики. В левой части окна будет находиться дерево с конфигурациями. Вам необходимо выбрать строку «Конфигурация пользователя». В открывшемся списке нажимаем два раза на папку «Административные шаблоны».
  4. Открываем раздел Административные шаблоны

  5. В открывшемся дереве открываем раздел «Система». Далее открываем содержимое папки «Установка драйвера».
  6. Открываем папку Установка драйвера

  7. В этой папке по умолчанию находятся три файла. Нас интересует файл с названием «Цифровая подпись драйверов устройств». Кликаем на этом файле два раза.
  8. Параметры цифровых подписей ПО

  9. В левой части открывшегося окна необходимо поставить галочку напротив строки «Отключено». После этого не забудьте нажать «ОК» в нижней области окна. Это позволит применить новые настройки.
  10. Окно настроек проверки подписи драйвера

  11. В результате обязательная проверка будет отключена и вы сможете инсталлировать софт без подписи. В случае необходимости в этом же окне необходимо просто установить галочку напротив строки «Включено».

Способ 3: командная строка

Этот способ весьма прост в использовании, но имеет свои недостатки, о которых мы расскажем в конце.

  1. Запускаем «Командную строку». Для этого жмем сочетание клавиш «Win» и «R». В открывшемся окне вводим команду cmd.
  2. Обращаем ваше внимание, что все способы, позволяющие открыть «Командную строку» в Windows 10, описаны в нашем отдельном уроке.
  3. Урок: Открытие командной строки в Windows 10

  4. В «Командной строке» необходимо ввести поочередно следующие команды, нажимая «Enter» после каждой из них.
  5. bcdedit.exe -set loadoptions DISABLE_INTEGRITY_CHECKS
    bcdedit.exe -set TESTSIGNING ON

  6. В результате у вас должна получиться следующая картина.
  7. Прописываем команды в Командную строку

  8. Для завершения вам необходимо лишь перезагрузить систему любым известным вам способом. После этого проверка подписи будет отключена. Минусом, о котором мы говорили в начале этого способа, является включение тестового режима системы. Он практически не отличается от обычного. Правда в правом нижнем углу вы будете постоянно видеть соответствующую надпись.
  9. Тестовый режим системы

  10. Если в будущем вам понадобиться включить обратно проверку подписей, вам необходимо лишь заменить параметр «ON» в строке bcdedit.exe -set TESTSIGNING ON на параметр «OFF». После этого снова произвести перезагрузку системы.

Обратим ваше внимание, что этот способ иногда приходится проделывать в безопасном режиме. Как запустить систему в безопасном режиме, вы можете узнать на примере нашего специального урока.

Урок: Как войти в безопасный режим в Windows

Воспользовавшись одним из предложенных способов, вы избавитесь от проблемы инсталляции сторонних драйверов. Если у вас возникли трудности с выполнением каких-либо действий, пишите об этом в комментариях к статье. Будем совместно решать возникшие трудности.

Устанавливать драйвера без цифровой подписи или нет

Невозможно с уверенностью определить, что файл без действительной цифровой подписи получен из указанного источника и не был подделан (возможно, с помощью вируса) после его публикации. Желательно избегать открытия файла, если нет уверенности в достоверности источника и безопасности содержимого файла.

Физическая подпись (wet signature)

Физическая подпись чернилами по бумаге по-прежнему остаётся базовым компонентом системы верификации документов, хотя в последнее время это уже не единственный и не самый надёжный способ верификации. Например, международная платёжная система MasterCard объявила об

при расчёте кредитной или дебетовой картой в США и Канаде. По статистике платёжной платформы, сейчас 80% покупок по карточке в США совершаются без подтверждения подписью, а с апреля 2021 года это количество может вырасти до 100%.

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

Несмотря на распространённость физической подписи, визуально достаточно сложно отличить настоящую подпись от подделки. Даже две подписи одного и того же человека могут существенно различаться. Без проведения экспертизы вы не можете быть уверены, что полученный документ действительно подписан конкретным человеком, особенно если подпись документа выполнялась без свидетелей.

Верификация рукописной подписи требует специальной процедуры. Есть автоматизированные системы верификации, в которых алгоритмы распознавания подписи опираются на алгоритмы распознавания образов или математические методы анализа кривых. Существуют также специализированные учреждения (центры судебных экспертиз), где специально обученные эксперты выполняют экспертизу подлинности рукописной подписи.

Но в любом случае ни автоматизированная, ни экспертная оценка не может на полностью гарантировать, что конкретный экземпляр подписи действительно соответствует оригиналу. Если же рукописная подпись «простая», то есть состоит из малого количества элементов (1-2 буквы), то надёжно определить её подлинность объективно невозможно.

И в любом случае для проведения экспертизы требуется один или несколько «оригиналов» рукописной подписи, когда носитель подписи собственноручно расписывается в присутствии свидетелей. Только после этого можно установить, принадлежит ли ему копия, которая проходит экспертизу.

Цифровая рукописная подпись

Наконец, стоит упомянуть ещё об одной интересной технологии — цифровой рукописной подписи. ЦРП пока не закреплена в российском законодательстве, но есть основания предполагать, что в будущем это произойдёт. Например, в соседней Беларуси цифровые рукописные подписи

в банковской сфере.

ЦРП можно проставить:

  • удалённо при помощи специальных программно-аппаратных средств (включая планшеты и дисплеи);
  • при личном присутствии клиента.

По сути, ЦРП представляет собой цифровой аналог физической подписи. Это определённая попытка смягчить недостатки, присущие физической подписи, в том числе сложность определения аутентичности подписи.

Экспертизу ЦРП можно проводить практически мгновенно, используя программный подход. Цифровой планшет регистрирует не только очертания символов подписи, но и другие параметры, которые анализируются в процессе экспертизы физической подписи — положение конца ручки (стилуса) в определённые моменты времени, угол наклона ручки и оказываемое на планшет давление.

Например, на иллюстрации ниже показан пример информации, собранной с планшета в процессе динамического распознавания цифровой рукописной подписи: координаты стилуса, давление, азимут и наклон.

В случае с физической подписью перечисленные характеристики анализируют эксперты. Анализ ЦРП выполняется программно по перечисленным характеристикам с использованием техник распознавания образов, таких как алгоритм динамической трансформации временной шкалы, скрытые марковские модели и векторное квантование (нейронные сети Кохонена).

Динамическое распознавание рукописной подписи является примером поведенческой биометрии. Методы, основанные на поведенческой биометрии, считаются лучше защищёнными от подделки, чем физиологическая биометрия со статическим распознаванием (отпечаток пальца, радужная оболочка глаза, геометрия ладони и т. д.), хотя здесь возникают определённые трудности из-за вариативности характеристик. В этой области идёт активная научно-исследовательская работа.

Читайте также:  Как скопировать сертификат с Рутокена на другой носитель и обратно

Первый международный конкурс программ по верификации рукописной подписи: SVC (Signature Verification Competition) состоялся в начале 2004 года. Сейчас ежегодно проводится конференция ICFHR (International Conference on Frontiers in Handwriting Recognition), в рамках которой организовано несколько конкурсов.

Таким образом, со временем собственноручная подпись может получить «вторую жизнь» в цифровую эпоху, если её признают надёжным методом биометрической верификации и примут соответствующее законодательство для легализации ЦРП.

Цифровые подписи в исполняемых файлах и обход этой защиты во вредоносных программах

image

Хабрапривет!

Ну вроде как удалось решить вопросы с кармой, но они ником образом не касаются сегодняшней темы, а лишь объясняют некоторое опоздание её выхода на свет (исходные планы были на ноябрь прошлого года).

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

ТЕОРИЯ

Идея и технология электронной подписи для исполняемых файлов возникла ещё в эпоху Windows NT. C момента появления Windows Vista компания Microsoft начала активную компанию по продвижению этой технологии. По задумке производителя, подписанный код может идти только от доверенного автора этого кода, а следовательно гарантированно не наносит вреда системе и защищён от ошибок (три ха-ха).

Тем не менее, поскольку в механизме подписи чаще всего используется довольно сложный криптоустойчивый механизм, общее доверие к подписанному коду распространилось. Не ушли от этого и антивирусные вендоры. Верно: если код подписан, то он явно не может быть вирусом, а потому ему можно доверять априори, тем самым снизив вероятность ложных срабатываний. Поэтому в большинстве современных антивирусных продуктов по умолчанию стоит обход проверки подписанных файлов, что повышает скорость сканирования и снижает вероятность ложных срабатываний. Более того, зачастую подписанные программы автоматически заносятся в категорию «доверенных» поведенческих анализаторов ака хипсов.

Становится ясно, что подписав свои творения валидной подписью, вирусмейкер получает довольно богатую аудиторию клиентов, у которых даже с активным и регулярно обновляемым антивирусом произойдёт заражение. Очевидно, что это — весьма лакомый кусочек, что легко заметно на примере уже ставшего знаменитым вируса Stuxnet, где код был подписан валидными сертификатами Realtek (позже сообщалось и о подписях от JMicron).

Но у этого подхода есть и оборотная сторона: после выявления скомпрометированной подписи она немедленно отзывается, а по самому факту подписи АВ-вендоры ставят сигнатурный детект, понятно, что с 100%-ным срабатыванием. Учитывая то, что приобрести украденный сертификат, необходимый для подписывания крайне дорого, ясно, что вирусмейкеры заинтересованы в тотальном обходе механизма проверки подписи, без валидных private-ключей или с помощью самостоятельной генерации таких ключей. Это позволит обходить защиту не только антивирусных продуктов, но и устанавливать драйвера и ActiveX-компоненты без предупреждений, да и вообще как-то пробиться в мир х64, где без подписей ничего не установить вообще.

Но об этом — подробнее на практике.

ПРАКТИКА

Кто-то из великих сказал, что чтобы опередить врага, надо начать мыслить как он. Итак, если мы вирусмейкеры, то что мы можем сделать?

1. Скопировать информацию о сертификате с какого-нибудь чистого файла.

Это наиболее популярный способ на данный момент. Копируется информация подписи до мельчайших подробностей, вплоть до цепочки доверенных издателей. Понятно, что такая копия валидна только на взгляд пользователя. Однако то, что отображает ОС вполне может сбить с толку неискушённого и быть воспринято как очередной глюк — ещё бы, если все издатели правильные, то почему это подпись невалидна? Увы и ах — таких большинство.

2. Использовать самоподписанные сертификаты с фэйковым именем.

Аналогично выше описанному варианту за исключением того, что даже не копируется цепочка в пути сертификации.

3. Подделать MD5.

Несмотря на то, что слабость алгоритма MD5 уже давно описана (тут и тут), он до сих пор часто используется в электронных подписях. Однако реальные примеры взлома MD5 касаются или очень маленьких файлов, или приводят к неправильной работе кода. На практике не встречаются вирусы с поддельными взломанными подписями на алгоритме MD5, но тем не менее такой способ возможен теоретически.
4. Получить сертификат по обычной процедуре и использовать его в злонамеренных целях.

Одна из наиболее распространённых методик авторов так называемых riskware, adware и фэйковых антивирусов. Примером может послужить фэйковый Perfect Defender (стандартный развод: «просканируйтесь бесплатно — у вас вирус — заплатите нам и мы его удалим») существует с подписями нескольких контор:
• Jeansovi llc
• Perfect Software llc
• Sovinsky llc
• Trambambon llc

Как это делается хорошо могут рассказать наши отечественные разработчики винлокеров, мелкими буквами пишущие про «программу-шутку» и т.д., таким образом оберегаясь от статьи о мошенничестве. Так и живём…

Интересно, что реально существуют абсолютно нормальные программы с такими именами владельцев:
• Verified Software
• Genuine Software Update Limited
• Browser plugin

Понятно, что если уж этому верить, то ошибиться при первом взгляде на сертификат несложно.

Следует также отметить, что отнюдь несложно получить подпись от сертификационных центров. Например RapidSSL для проверки использует просто e-mail. Если переписка ведётся из адресов типа admin, administrator, hostmaster, info, is, it, mis, postmaster, root, ssladmin,
ssladministrator, sslwebmaster, sysadmin или webmaster@somedomain.com — очевидно, что пишет владелец домена, верно? (ещё три ха-ха). А вот славная компания Digital River (DR), промышляющая аутсорсингом и электронной коммерцией, вообще предоставляет сертификаты всем своим клиентам. Немудрено, что MSNSpyMonitor, WinFixer, QuickKeyLogger, ErrorSafe, ESurveiller, SpyBuddy, TotalSpy, Spynomore, Spypal и вообще около 0,6% из всех подписанных DR файлов являются малварью, а потенциально нежелательными являются и того больше — более 5% всех подписанных DR файлов.

Справедливости ради отмечу, что подписать х64-драйвер далеко не так просто, в этом случае пока нарушений не замечено.

5. Найти какого-нибудь работника доверенной компании и попросить его подписать Ваш код.

Без комментариев. Все любят деньги. Вопрос только в сумме 🙂

6. Украсть сертификат.

На данный момент известно три больших семейства троянцев, «заточенных», в частности, под похищение сертификатов. Это:
• Adrenalin
• Ursnif
• Zeus
• SpyEye (возможно)

Тем не менее пока не замечено массовых случаев использования украденных сертификатов в новых версиях этих троянцев. Возможно, это козырь в рукаве? Время покажет…

7. Заразить систему разработки доверенного разработчика и внедрять злонамеренный код в релизы до подписания.

Яркий пример такого заражения — вирус-концепт Induc.a. Вирус внедряет код на этапе компиляции, заражая систему разработки. В итоге разработчик даже не знает, что в его программе появился невидимый «довесок». Релиз проходит подпись и выходит в свет с полноценным сертификатом. Видишь суслика? А он есть! 😉

К счастью, Induc.a является только PoC, выполняя только заражение систем разработки без реализации какого бы то ни было дополнительного вредоносного функционала.

Ну а теперь — обещанные вкусняшки.

УЯЗВИМОСТЬ ИЛИ КАК Я ПРОВЁЛ ЭТИМ ЛЕТОМ

Как видим, вариантов обхода подписи достаточно много. В нашем примере будет рассмотрен модифицированный вариант 1 и 2, описанные выше.

Итак, что нам потребуется?
— MakeCert.exe
— cert2spc.exe
— sign.exe
— ruki.sys
— mozg.dll

Читайте также:  Приобрести ключ эцп

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

Итак, создадим какой-либо сертификат доверенного издателя. Попробуем максимально скопировать информацию о том же VeriSign:
MakeCert.exe -# 7300940696719857889 -$ commercial -n CN="VeriSign Class 3 Code Signing 2009-2 CA" -a sha1 -sky signature -l "https://www.verisign.com/rpa" -cy authority -m 12 -h 2 -len 1024 -eku 1.3.6.1.5.5.7.3.2,1.3.6.1.5.5.7.3.3 -r -sv veri.pvk veri.cer

В результате выполнения мы получим veri.pvk и veri.cer, пригодные для подписывания.

Теперь создадим дочерний сертификат с использованием полученных только что:

MakeCert.exe -# 8928659211875058207 -$ commercial -n CN="Home Sweet Home" -a sha1 -sky signature -l "http://habrahabr.ru/" -ic veri.cer -iv veri.pvk -cy end -m 12 -h 2 -len 1024 -eku 1.3.6.1.5.5.7.3.3 -sv kl.pvk kl.cer

В итоге получим kl.pvk и kl.cer, которые будут доверенными сертификатами от недоверенного издателя. Цепочку можно продолжать долго, задуривая наивного пользователя. Но итог будет один: сертификат не будет валидным, потому как в цепочке есть один недоверенный элемент. НО!

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

Установим на нашу тестовую виртуалку любой монитор реестра, после чего внесём наш искомый сертификат от якобы VeriSign в доверенные. Отследим, где произошло изменение — и voila! Мы можем сделать дамп соответствующей ветки реестра, после чего засунуть её в инсталлер. В итого, наш инсталлер вносит в реестр инфу, автоматически превращая сертификат первичного издателя в доверенный и валидируя всю цепочку.

Чтобы окончательно не открывать все карты, скажу только, что в моём случае дамп реестра имел вид
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftSystemCertificatesAuthRootCertificatesA61F9F1A51BBCA24218F9D14611AFBA61B86C14C]
«Blob»=hex:04,00,00,…..

ну или если только для текущего пользователя, то
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USERSoftwareMicrosoftSystemCertificatesRootCertificatesA61F9F1A51BBCA24218F9D14611AFBA61B86C14C]
«Blob»=hex:04,00,00,…..

Внеся в реестр эти данные, программа с фэйковой цепочкой подписи автоматом проходила проверку по sigverif.exe. Ну а подписать наш код с помощью полученного сертификата вообще просто, достаточно батника:

cert2spc.exe kl.cer kl.spc
sign.exe -spc kl.spc -v kl.pvk -n "My Installer" -i "http://habrahabr.ru" -ky signature -$ commercial -a sha1 -t "http://timestamp.verisign.com/scripts/timstamp.dll" myprogram.exe
del kl.spc

Обратите внимание на использование таймстампа timestamp.verisign.com/scripts/timstamp.dll — теоретически вполне возможно использование собственного сервера на собственном домене, что позволит каждый раз видеть, что кто-то проверил подпись нашей программы на своём компьютере, а значит получать IP и время проверки. Правда удобно? 😉

Самое забавное, что на момент написания материала в далёком октябре-ноябре 2021-го Kaspersky Internet Security 2021 не отслеживала указанные ветки реестра, а проверку валидности цепочки оставляла на усмотрение ОС, которую мы довольно просто надули. Не знаю, что сейчас, но вроде как некоторые ветки заблокировали… Проверяйте, отписывайтесь!

Нужно отметить, что для простановки подписей возможно использование и специфичного, недоступного в паблике софта. Понятно, что подписи он не ломает, но даёт куда более гибкие возможности для заполнения полей X500, что ещё лучше создаёт видимость валидности. Вот тут возможно скачать любопытный пример. В архиве — файл популярной замены Блокноту bred3_2k (офсайт) с и без подписи Microsoft 🙂 Чтобы подпись полностью стала валидной, достаточно внести в реестр изменения, содержащиеся в файле key .reg. Аналогично, файл key -.reg эти изменения отменяет. Отследите путь сертификации — он любопытен 🙂

Сразу обращаю внимание на то, что автор «примера» прописал собственный таймстамп-сервер, так что любые манипуляции приведут к тому, что автор узнает Ваш IP — и дальше, как описывалось. Если хотите, то можете отследить эти обращения и отписаться в комментах 😉

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

В статье использован материал презентации Jarno Niemela (F-Secure).

Электронная подпись

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

В России юридически значимый сертификат электронной подписи выдаёт удостоверяющий центр (центр сертификации). Правовые условия использования ЭП регламентирует ФЗ РФ от 6 апреля 2021 года № 63-ФЗ «Об электронной подписи». Последние изменения в этот закон внесены в декабре 2021 года и о них рассказывалось на «Хабрахабре». Вот два самых важных нововведения:

1. Ведомствам издателям сертификатов запрещено вносить с сертификаты дополнительные поля и требования их обязательности. Теперь имея одну единственную квалифицированную ЭП вы можете быть авторизованы и использовать все государственные информационные системы.

2. Теперь неважно, кем именно выдан сертификат ключа ЭП, поскольку все сертификаты проверки позволяют построить цепочки сертификатов до Головного Удостоверяющего центра, так что пользователям остаётся иметь в доверенных только сертификат ГУЦ.

Важно отметить, что все российские квалифицированные подписи действуют только на территории РФ, и для проверки подписи необходимо дополнительно устанавливать корневой сертификат соответствующего национального удостоверяющего центра. Таким образом, основными клиентами российских УЦ являются госструктуры, которые обязаны работать с ГОСТами. А международные цифровые подписи, например компании

, можно использовать по всему миру, в том числе в России.

Самые большие в мире доверенные службы для электронных документов — доверенный список Adobe (AATL) и программа Microsoft Root Trust. Удостоверяющие центры и поставщики услуг доверенной службы, включённые в этот список, выпускают основанные на сертификатах цифровые идентификаторы и службы отметок времени, которые соответствуют законным и нормативным требованиям в мире, таким как стандарт ЕС eIDAS.

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

В качестве заключения: кто и как этим пользуется?

Эту возможность использует Google при распространении своих продуктов через автоматический апдейтер Google Omaha. Возможно, вы замечали, что при загрузке Google Chrome или Google Earth, вам предлагают сделать некоторые настройки ещё перед скачиванием, например, установить вместе с Earth браузер Chrome.

Также эту возможность удобно использовать в различных партнёрских сетях – отдача дистрибутивов с трекингом партнёра — необходимость в различных компаниях.

Механизм по отдаче файлов с веб-сервера с использованием этой фичи может быть реализован с помощью самописного плагина для nginx, виртуальной файловой системы на основе FUSE, или ещё каким-нибудь более экзотическим способом (расскажите в комментах, если придумали свой вариант).

Информацию о цифровых подписях PE файлов можно почерпнуть из этого документа: Windows Authenticode Portable Executable Signature Format.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector