Подписание кода: это функция безопасности?
![Подписание кода: это функция безопасности?](/public/uploads/img/1/4/13/31299.jpg)
Что такое подпись кода?
Было бы здорово, если бы пользователи могли знать, прежде чем устанавливать программы и активное содержимое (например, элементы управления ActiveX), заслуживает ли доверия код, но как это определить? Один из способов — проверить личность автора или издателя. Если он распространяется компанией, которую вы знаете и которой доверяете, вы можете разрешить это. Если он распространяется сомнительной компанией или о которой вы никогда не слышали, или, что еще хуже, если он распространяется анонимно, вы, вероятно, захотите дважды подумать, прежде чем устанавливать его.
Подписание кода позволяет узнать происхождение кода и не позволяет хакеру распространять «бесплатное программное обеспечение» от чужого имени (например, размещать вредоносную программу или вирус на веб-сайте для загрузки и утверждать, что это бесплатный инструмент от Microsoft). ). Помимо проверки личности издателя, подпись кода может защитить код от подделки (при изменении кода цифровая подпись становится недействительной). Таким образом, подпись кода обеспечивает две защиты безопасности:
- Аутентификация автора, издателя или распространителя кода
- Целостность самого кода
Как работает подпись кода
Подписание кода основано на использовании цифровой подписи, которая, в свою очередь, основана на цифровом сертификате, выданном доверенной третьей стороной (центром сертификации), которая подтвердила личность издателя программного обеспечения или контента. Например, Verisign и Thawte выдают цифровые идентификаторы для подписи кода разработчикам программного обеспечения. Когда разработчик регистрируется для получения цифрового удостоверения личности, он должен предоставить документы, удостоверяющие личность. Пара открытый/закрытый ключ генерируется при запросе сертификата. Закрытый ключ остается на компьютере запрашивающей стороны и никогда не отправляется в ЦС. Это не должно быть передано ни с кем. Открытый ключ отправляется в ЦС вместе с запросом сертификата.
После выпуска сертификата разработчик использует закрытый ключ, связанный с этим открытым ключом, для подписи своего кода. Когда пользователи загружают подписанный код, они получают копию сертификата, подтверждающего личность автора/издателя. Веб-браузер проверяет цифровую подпись, и пользователь знает, что код действительно исходил от этого конкретного разработчика.
Вот что происходит, когда разработчик подписывает код:
- Код проходит через одностороннюю хеш-функцию. Это создает «дайджест» фиксированной длины.
- Закрытый ключ разработчика используется для шифрования этого дайджеста.
- Дайджест объединяется с сертификатом и алгоритмом хеширования для создания блока подписи.
- Блок подписи вставляется в переносимый исполняемый файл.
Что происходит на другом конце (на компьютере, который загружает подписанный код)? Вот процесс:
- Сертификат проверяется, и из центра сертификации получается открытый ключ разработчика.
- Затем дайджест расшифровывается с помощью открытого ключа.
- Тот же алгоритм хеширования, который использовался для создания дайджеста, снова запускается в коде, чтобы создать второй дайджест.
- Второй дайджест сравнивается с оригиналом.
Если два дайджеста совпадают, вы знаете, что открытый ключ совпадает с закрытым ключом, использованным для подписи кода, и вы знаете, что код не изменился с момента его подписания.
Удостоверяющие центры выдают различные классы сертификатов подписи кода в зависимости от того, является ли издатель коммерческой компанией-разработчиком программного обеспечения, отдельным разработчиком программного обеспечения или конечным пользователем. В сертификате будет указано, является ли он коммерческим или индивидуальным. Коммерческие издатели должны предоставить номер Dun & Bradstreet, устав и т. д. и подписать обязательство не распространять вредоносный код. Они также должны платить значительно больше (400 долларов за коммерческий сертификат от Verisign на момент написания этой статьи). Физические лица также должны подписать обязательство и подтвердить свою личность, но процесс проверки личности менее строгий.
Примечание:
Одна из причин, по которой номера Dun & Bradstreet (DUN) используются в качестве идентификаторов, заключается в том, что они используются на международном уровне, в отличие от других идентификационных номеров, таких как номера социального страхования (SSN) и идентификационные номера работодателя (EIN).
Сертификаты могут быть отозваны, если закрытый ключ издателя будет скомпрометирован. При загрузке кода проверяется список отзыва сертификатов (CRL), и если сертификат был отозван, пользователь предупреждается об этом. ЦС может выдать новый сертификат издателю, который затем должен будет подписать код новым закрытым ключом. Аналогичным образом пользователи получают предупреждение, если срок действия сертификата издателя истек.
аутентикод
Authenticode — это технология подписи кода Microsoft. Поддержка встроена в операционные системы Microsoft и Internet Explorer. Сертификаты Authenticode могут быть выпущены Verisign и другими общедоступными центрами сертификации или частным центром сертификации. Authenticode можно использовать для подписи файлов Java.class,.cab-файлов,.ocx-файлов, элементов управления ActiveX и всех исполняемых файлов Win32 (PE-файлов).
Когда пользователь пытается загрузить программное обеспечение, в диалоговом окне Authenticode отображается информация об издателе, ЦС, выпустившем сертификат, и дате подписания кода. Затем пользователь может выбрать, устанавливать программное обеспечение или нет. Пользователь также может установить флажок, чтобы всегда доверять программному обеспечению этого издателя, чтобы не повторять этот процесс снова. С улучшениями безопасности, предоставляемыми пакетом обновления 1 для Windows XP, в диалоговое окно добавляется еще один флажок, который позволяет пользователям никогда не доверять программному обеспечению этого издателя (диалоговое окно SP2 показано на рисунке A.
Рисунок А
Щелчок по ссылке на имя издателя (в данном случае Microsoft Corporation) позволяет пользователю изучить свойства цифровой подписи, в том числе:
- Имя издателя
- Адрес электронной почты (если имеется)
- Дата и время подписания кода
- Контрподписи
Окно «Сведения о цифровой подписи» показано на рисунке B.
Рисунок Б
На вкладке «Дополнительно» отображаются сведения о подписи, включая номер версии, издателя, серийный номер, дайджест и алгоритмы шифрования, а также атрибуты проверки подлинности и отсутствия проверки подлинности.
Просто нажмите кнопку View Certificate на вкладке General, затем щелкните вкладку Details, чтобы просмотреть сведения о сертификате, как показано на рисунке C.
Рисунок С
Эта информация включает:
- Номер версии
- Серийный номер
- Алгоритм подписи
- Эмитент
- Дата выдачи («действителен с»)
- Срок действия («Действителен до»)
- Предмет
- Информация об открытом ключе, включая длину ключа (например, 2048 бит)
- Точка распространения CRL для доступа к списку отзыва ЦС
- Информация об использовании ключа (в данном случае цифровая подпись)
- Алгоритм отпечатка пальца и отпечатка пальца
- Расширенная информация об ошибке
Вы можете экспортировать сертификат, нажав кнопку «Копировать в файл». Это вызывает мастер экспорта сертификатов, который проведет вас через шаги копирования сертификата из хранилища сертификатов на ваш жесткий диск.
Преимущества и ограничения подписи кода
Технология подписи кода является важной частью вашего плана безопасности, если ваши пользователи загружают и устанавливают программы или активное содержимое. Он обеспечивает проверку личности издателя и уверенность в том, что код не был подделан после того, как он был подписан.
Однако важно помнить, что сам факт того, что код подписан, не гарантирует его безопасность (или отсутствие ошибок). Вы сами должны определить надежность конкретного издателя.
Административный контроль
Поскольку вы можете не захотеть оставлять решение за пользователями, вы можете использовать политики ограниченного использования программ, чтобы контролировать, какое программное обеспечение может работать, на основе сертификатов издателя. Для этого вы настраиваете правило сертификата, чтобы разрешать или блокировать контент на основе его подписи.
Вы также можете использовать параметр «Доверенные издатели» политик ограниченного использования программ, чтобы контролировать, каким пользователям разрешено выбирать доверенных издателей, и указать, что проверки списка отзыва сертификатов должны выполняться до того, как издатель станет доверенным. Если у вас включен параметр «Надежные издатели», элементы управления ActiveX не будут работать, если они не подписаны издателями, чьи сертификаты были добавлены в хранилище сертификатов.
Резюме
Хотя технология подписи кода используется практически всеми пользователями и администраторами Windows, многие не понимают ее значения и того, как она работает. Подписание кода — это механизм проверки подлинности для издателей программного обеспечения, основанный на цифровых подписях, подкрепленных цифровыми сертификатами. Подписанный код не обязательно является безопасным, но цифровая подпись обеспечивает подотчетность — то, чего часто не хватает в мире свободно распространяемого, а иногда и анонимно распространяемого программного обеспечения.