Проверка целостности дистрибутивов

Материал из SysWiki

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

Необходимость проверки

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

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

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

Способы проверки

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

Проверка подлинности при помощи электронной подписи для файла

Для файла, подлинность которого нужно подтвердить, создаётся файл электронной подписи, который размещается рядом с ним. Обычно файл подписи имеет расширения .asc, .sig или .sign.

Проверка подлинности при помощи подписанных файлов контрольных сумм

Проверка подлинности коммита в репозитории git