Глоссарий
Подпись кода
Подпись кода это подпись на программе, которая называет издателя и показывает, что байты файла не менялись.
Что говорит подпись
Подпись связывает файл с сертификатом, а сертификат называет того, кто получил его в удостоверяющем центре, которому система уже доверяет. Изменится хоть один байт, и подпись перестанет сходиться.
Этим утверждение и исчерпывается целиком. Она говорит кто и говорит с тех пор не менялось, и ничего не говорит о том, что программа делает во время своей работы.
Как файл получает подпись
Порядок здесь важнее средств, и на каждой системе с собственными воротами он один и тот же.
Каждый шаг оставляет то, что машина потом проверит сама, ни у кого не спрашивая, и поэтому проверка работает даже с выдернутой сетью.
- 1
Издатель получает сертификат
Удостоверяющий центр проверяет компанию или человека и выдаёт сертификат, связанный с закрытым ключом.
- 2
Ключ лежит в железе
Ключи публично доверенной подписи с 2023 года живут на аппаратных носителях или внутри службы подписи.
- 3
Файл подписывают и ставят метку времени
Метка времени от доверенного источника оставляет подпись проверяемой и после того, как сертификат кончился.
- 4
Система проверяет это при запуске
Она проходит цепочку доверия, а потом сверяет записанные свёртки с тем файлом, который перед ней.
Что видно при первом запуске
Ворота у каждой системы свои, и работа, которую они перекладывают на открывающего файл, тоже везде разная.
Слова в окне переезжают от одного выпуска системы к другому, а устройство ответа остаётся на месте.
| Система | Подписано и знакомо | Без подписи |
|---|---|---|
| macOS | Открывается после проверки скачанного | Отказ, а дальше руками разрешить в разделе про безопасность |
| Windows | Имя издателя прямо в окне вопроса | Синий экран про репутацию, а кнопка спрятана за строкой подробнее |
| Linux | Пакеты из хранилища проверяет сам менеджер пакетов | У скачанного образа или архива таких ворот нет вовсе |
Какие ворота встретит эта машина
Эти две строки прочитаны в вашем браузере прямо здесь и называют систему под ним.
Ворота, которые встретят вас при первом запуске, принадлежат этой системе, а не скачанному файлу.
Ваша машина прямо сейчас
- Платформа
- измеряем на вашей машине
- Строка браузера
- измеряем на вашей машине
Прочитано в вашем браузере и показано здесь. Никуда не отправляется.
Подписано не значит безопасно
Сертификаты крали у настоящих издателей и покупали, заведя фирму ради одной этой покупки. Подписанные зловреды это давний и устойчивый жанр.
Подпись покупает не безопасность, а возможность спросить с виноватого. Сертификат можно отозвать, и всё подписанное под ним разом перестаёт быть доверенным на любой машине.
Часто путают с этим
Три соседних понятия стоят к этому так близко, что слова в разговоре подменяют одно другим, и делают это обычно продавцы.
Шифрование
Подпись оставляет файл читаемым для любого. Она доказывает происхождение, а шифрование прячет содержимое.
Свёртка на странице загрузки
Свёртка доказывает, что файл совпал с той страницей. Подпись едет внутри файла и называет издателя, которого проверил центр.
Нотаризация
Шаг, который Apple делает уже после подписи, и у него здесь есть своя отдельная страница.
Чего это не делает
- Это не говорит, что программа безопасна. Подпись называет издателя и ничего не утверждает о том, что код делает во время работы.
- Это не переживает правку. Один изменённый байт, и проверка не сходится: в этом весь смысл, и поэтому же изменённая копия чего угодно теряет подпись.
- Это не держится само по себе. Сертификат кончается, и только метка времени, снятая в миг подписи, оставляет старые файлы проверяемыми.
- Это не выглядит одинаково везде. Linux опирается на подпись целого хранилища, а не на подпись внутри каждого файла.
Проверить
Каждая строка здесь это команда, которую вы запустите у себя, на любой уже установленной программе.
- Что macOS говорит про уже установленную программу
- codesign --display --verbose=2 /Applications/<любая программа>
- Что отвечают про неё сами ворота
- spctl --assess --type execute --verbose /Applications/<любая программа>
- Где видна пометка карантина на скачанном файле
- xattr -l ~/Downloads/<скачанный файл>
- Тот же вопрос в Windows
- Get-AuthenticodeSignature <файл> | Format-List
Вопросы
- Подписанную программу можно запускать спокойно?
- Её можно проследить, а спокойствие это другое. Подпись говорит, какого издателя проверил центр, и ничего не говорит о поведении кода.
- Почему неподписанная программа иногда всё же открывается на Mac?
- Ворота встречают файлы, пришедшие с пометкой карантина от браузера или почты. Файл, собранный на самой машине, такой пометки не получает.
- Что такое Authenticode?
- Так подпись кода устроена в Windows. Подпись лежит внутри исполняемого файла, и имя издателя в окне вопроса читается из неё.
- Подпись стоит денег?
- Да, и заметных денег. Сертификат покупают в удостоверяющем центре и продлевают по сроку, а закрытый ключ держат в железе или в службе подписи.
- Подпись можно забрать обратно?
- Можно, и это делается не так уж редко. Центр отзывает сертификат, и системы перестают доверять подписанному под ним, включая файлы, которые уже лежат у людей на диске.
Шаг macOS, который идёт следом
Apple смотрит на подписанную сборку прежде, чем машина, впервые её увидевшая, откроет её без вопросов.