Технологии безопасности

Почему нельзя безусловно доверять файлам, подписанным цифровыми сертификатами

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

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

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

Создание цифровой подписи файлов

Для выявления угроз, связанных с использованием цифровых сертификатов, рассмотрим последовательность действий при подписании файла электронно-цифровой подписью:

Certificates_1_ru

  1. Разработчик программного обеспечения компилирует файл.
  2. От файла рассчитывается одна из хэш-сумм: MD5, SHA1, SHA2.
  3. Хэш-сумма файла шифруется приватным ключом разработчика программного обеспечения.
  4. Полученный зашифрованный блок данных и цифровой сертификат добавляются в конец файла.

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

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

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

Использование доверенных сертификатов злоумышленниками

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

Внедрение вредоносного кода на этапе компиляции файла

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

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

На практике данная угроза встречается довольно редко, так как в крупных компаниях-производителях ПО Build-сервере достаточно хорошо защищен. Тем не менее, известны случаи проведения успешных целевых атак, направленных на подписание вредоносных файлов сертификатами доверенных компаний.

Кража приватного ключа

Иногда злоумышленникам удается проникнуть в корпоративную сеть компании и получить доступ к приватному ключу, который используется для подписания файлов. Используя приватный ключ, они могут подписать имеющийся вредоносный файл и выдать его за файл от легального производителя ПО.

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

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

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

Уязвимости в алгоритме проверки подписи исполняемых файлов

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

Certificates_2_ru

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

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

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

Использование легально полученного сертификата

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

Certificates_3_ru

Количество известных «Лаборатории Касперского» сертификатов, подлинность которых подтверждена удостоверяющими центрами

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

Такое отношение предоставляет злоумышленникам возможность легальной покупки сертификата для подписи создаваемого вредоносного и потенциально нежелательного ПО.

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

Недоверенные сертификаты

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

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

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

Следующий график показывает долю сертификатов, применяемых для подписания потенциально нежелательного ПО, среди всех недоверенных сертификатов (по данным «Лаборатории Касперского»).

Certificates_4_ru

Распределение недоверенных сертификатов по типам

Способы защиты от запуска программ, подписанных недоверенными сертификатами

Мы рассмотрели наиболее распространенные способы, которые злоумышленники используют для подписания своих файлов цифровыми сертификатами. В настоящее время проблема подписания вредоносных и потенциально нежелательных файлов цифровыми сертификатами становится все актуальнее: если на 2008 год было выдано 1500 сертификатов, использованных впоследствии для подписания вредоносного ПО, то в 2014 году таких сертификатов было уже более 6000.

Certificates_5_ru

Изменение количества недоверенных сертификатов, известных «Лаборатории Касперского»

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

Приведем несколько практических рекомендаций, позволяющих снизить вероятность запуска нового, еще неизвестного антивирусным сканерам вредоносного ПО, подписанного действительным цифровым сертификатом:

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

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

  3. Активировать обновление MS13-098.
    Опытным пользователям и системным администраторам рекомендуется включить обновление MS13-098 – оно устраняет ошибку, позволяющую включить в подписанный файл дополнительные данные, не нарушая при этом подписи файла. Подробнее об активации данного обновления можно прочитать в центре безопасности Microsoft.
  4. Не устанавливать в хранилище сертификаты от неизвестных удостоверяющих центров.
    Не рекомендуется устанавливать в хранилище корневые сертификаты от неизвестных удостоверяющих центров, так как в дальнейшем все файлы, которые были подписаны сертификатами, подтвержденными данным удостоверяющим центром, будут считаться доверенными.
  5. Использовать базу доверенных сертификатов, поставляемую производителями антивирусного ПО.
    Некоторые производители антивирусов, в том числе наша компания, включают в свои продукты базу доверенных и недоверенных сертификатов, которая регулярно обновляется вместе с антивирусными базами. Это позволяет оперативно получать информацию о еще не отозванных сертификатах, подписывающих вредоносное и потенциально нежелательное ПО. Файлы, подписанные недоверенными сертификатами из данной базы, подлежат усиленному контролю со стороны антивируса.

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

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

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

Почему нельзя безусловно доверять файлам, подписанным цифровыми сертификатами

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

 

Отчеты

StripedFly: двуликий и незаметный

Разбираем фреймворк StripedFly для целевых атак, использовавший собственную версию эксплойта EternalBlue и успешно прикрывавшийся майнером.

Азиатские APT-группировки: тактики, техники и процедуры

Делимся с сообществом подходами, которые используют азиатские APT-группировки при взломе инфраструктуры, и подробной информацией о тактиках, техниках и процедурах (TTPs) злоумышленников, основанной на методологии MITRE ATT&CK.

Как поймать «Триангуляцию»

Эксперты «Лаборатории Касперского» смогли получить все этапы «Операции Триангуляция»: эксплойты нулевого дня для iOS, валидаторы, имплант TriangleDB и дополнительные модули.

Подпишитесь на еженедельную рассылку

Самая актуальная аналитика – в вашем почтовом ящике