Подпись приложения¶
Подпись приложения — это цифровая подпись, удостоверяющая подлинность и целостность программного обеспечения (ПО), а также подтверждающая личность разработчика (издателя) приложения. Она представляет собой криптографический механизм, который позволяет операционной системе, браузеру или магазину приложений проверить, что файл не был изменён после подписания и что он исходит от заявленного автора. Подпись приложения является обязательным требованием для распространения ПО через официальные каналы (например, App Store, Google Play, Microsoft Store) и для установки на многие современные платформы (включая Windows, macOS, iOS, Android).
¶История
Необходимость подписи приложений возникла с ростом числа вредоносных программ и проблем с безопасностью в 1990-х годах. Первые попытки внедрения цифровых подписей для ПО были предприняты компанией Microsoft в рамках инициативы Authenticode, представленной в 1996 году для Windows. Эта технология позволяла разработчикам подписывать исполняемые файлы (.exe, .dll) с помощью сертификатов, выпущенных удостоверяющими центрами (УЦ). В начале 2000-х годов, с появлением мобильных платформ, подпись стала обязательной для установки приложений на устройствах с закрытыми экосистемами (например, iOS). В 2010-х годах, после массовых атак на цепочки поставок ПО, подпись приложений стала стандартом де-факто для всех крупных платформ, включая Windows (с требованиями UEFI Secure Boot и Windows Defender SmartScreen) и macOS (с Gatekeeper).
¶Принцип работы
Подпись приложения основана на асимметричной криптографии. Разработчик создаёт пару ключей: закрытый (приватный) и открытый (публичный). Закрытый ключ используется для создания цифровой подписи, которая представляет собой зашифрованное хеш-значение файла (или набора файлов). Открытый ключ включается в сертификат, который выпускается доверенным удостоверяющим центром. При установке приложения система проверяет подпись: расшифровывает её с помощью открытого ключа из сертификата, вычисляет хеш файла и сравнивает с расшифрованным значением. Если хеши совпадают, файл считается подлинным и не изменённым. Если подпись отсутствует, недействительна или сертификат не доверенный, система может заблокировать установку, выдать предупреждение или ограничить функциональность приложения.
¶Виды подписей приложений
Подписи приложений можно классифицировать по нескольким признакам.
¶По типу сертификата
- Самоподписанные сертификаты: создаются самим разработчиком без обращения к УЦ. Они не обеспечивают доверия к личности издателя, так как любой может создать такой сертификат. Используются для тестирования, внутреннего распространения или в открытых экосистемах (например, на Linux). Не принимаются большинством магазинов приложений и операционными системами по умолчанию.
- Сертификаты, выпущенные УЦ: проходят проверку личности разработчика и выдаются центрами, включёнными в список доверенных корневых сертификатов операционной системы (например, GlobalSign, DigiCert, Let’s Encrypt). Такие подписи гарантируют, что издатель прошёл верификацию, и обеспечивают доверие системы.
- Расширенная валидация (EV): сертификаты с усиленной проверкой, требующие предоставления юридических документов и подтверждения регистрации компании. Используются для приложений, требующих повышенного доверия (например, банковские или корпоративные). В Windows такие подписи отображаются с зелёным цветом и именем компании.
¶По способу подписания
- Подпись одного файла: применяется к отдельному исполняемому файлу (например, .exe, .dll, .msi). Проверяется при запуске или загрузке файла.
- Подпись всего пакета: используется для установочных пакетов (например, .appx, .msix, .apk, .ipa). Подпись накладывается на весь архив, включая все файлы и метаданные. При изменении любого компонента подпись становится недействительной.
- Подпись кода (code signing): общий термин для подписи исполняемых файлов и скриптов (например, PowerShell, JavaScript в контексте Windows). Включает подпись с временной меткой (timestamp), что позволяет подписи оставаться действительной даже после истечения срока действия сертификата.
¶Применение на различных платформах
¶Windows
В Windows подпись приложений используется для проверки драйверов, исполняемых файлов и установщиков. Начиная с Windows 10, система требует подписи для всех драйверов, загружаемых в режиме ядра. Для обычных приложений подпись не обязательна, но её отсутствие может вызвать предупреждение от Windows Defender SmartScreen или UAC (User Account Control). Microsoft также требует подписи для приложений, распространяемых через Microsoft Store. Для подписания используются сертификаты Authenticode.
¶macOS
В macOS подпись приложений является обязательной для запуска приложений, не прошедших проверку Gatekeeper. Система проверяет подпись и сертификат разработчика, который должен быть зарегистрирован в программе Apple Developer Program. Приложения, подписанные с помощью сертификата Apple, могут быть запущены без дополнительных предупреждений. Для распространения через App Store используется отдельный тип подписи — App Store Distribution.
¶Android
В Android подпись приложений (APK или AAB) обязательна для установки через Google Play и для установки на устройствах с включённой проверкой подлинности. Подпись создаётся с помощью инструмента jarsigner или apksigner. Существует два типа подписей: v1 (JAR) и v2/v3 (APK Signature Scheme). Начиная с Android 9, рекомендуется использовать v2/v3, которые обеспечивают более надёжную защиту от модификации. Google Play также требует подписания приложений с помощью сертификата, выпущенного Google Play Console.
¶iOS
В iOS подпись приложений (IPA) является обязательной для установки на любые устройства. Все приложения, распространяемые через App Store, подписываются сертификатом Apple. Для тестирования и корпоративного распространения используются сертификаты разработчика или Enterprise-сертификаты. Подпись включает в себя не только код, но и метаданные, такие как идентификатор пакета (Bundle ID) и права (Entitlements).
¶Linux
В Linux подпись приложений не является обязательной и используется реже, чем на других платформах. Однако для дистрибутивов, таких как Ubuntu (с Snap), Fedora (с Flatpak) и Arch Linux, подпись может применяться для проверки целостности пакетов. Для традиционных пакетов (deb, rpm) подпись обычно реализуется через GPG-ключи репозиториев, а не отдельных приложений.
¶Критика и ограничения
Подпись приложений, несмотря на свою полезность, имеет ряд недостатков и подвергается критике. Основные проблемы включают:
- Уязвимость цепочки поставок: если злоумышленник получает доступ к закрытому ключу разработчика, он может подписывать вредоносные приложения от имени легитимного издателя. Примеры таких атак включают инцидент с SolarWinds (2020) и атаку на CCleaner (2017).
- Стоимость: сертификаты, выпущенные УЦ, особенно EV-сертификаты, могут быть дорогими (от нескольких сотен до тысяч долларов в год), что затрудняет их использование для небольших разработчиков и проектов с открытым исходным кодом.
- Сложность управления: разработчики должны следить за сроками действия сертификатов, своевременно их обновлять и безопасно хранить закрытые ключи. Потеря ключа или истечение срока сертификата может привести к невозможности обновления приложения.
- Отзыв сертификатов: если сертификат скомпрометирован или отозван, все приложения, подписанные этим сертификатом, могут перестать запускаться на устройствах, что создаёт проблемы для пользователей и разработчиков.
- Централизация контроля: подпись приложений даёт платформам (Apple, Google, Microsoft) возможность блокировать или удалять приложения по своему усмотрению, что вызывает споры о монополии и цензуре.
¶Интересные факты
- В 2023 году компания Apple отозвала сертификаты разработчика у нескольких компаний, включая Meta (организация признана экстремистской и запрещена в РФ), после того как выяснилось, что они использовали Enterprise-сертификаты для распространения приложений за пределами корпоративной среды.
- В 2021 году злоумышленники смогли подписать вредоносное ПО для macOS, используя украденные сертификаты разработчика, что привело к временному отключению Gatekeeper компанией Apple.
- В России с 2022 года введены требования об обязательной подписи приложений, распространяемых через официальные магазины приложений (например, RuStore), с использованием сертификатов, выпущенных российскими удостоверяющими центрами, аккредитованными Минцифры.
¶Источники
- Microsoft. «Authenticode Code Signing and Verification». Документация по Windows.
- Apple. «Code Signing Guide». Документация для разработчиков Apple.
- Google. «APK Signature Scheme». Документация Android.
- «The State of Software Supply Chain Security 2023». Отчёт ReversingLabs.
- Федеральный закон РФ от 27.07.2006 № 149-ФЗ «Об информации, информационных технологиях и о защите информации» (в редакции 2022 года).
- «Code Signing: A Comprehensive Guide». DigiCert, 2022.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →
