Как гарантируется подлинность пакетов Debian?

8

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

э.д.с.
источник

Ответы:

14

Проверка пакетов

Содержимое зеркал подписано с использованием ключей PGP, прямо или косвенно. Начиная с «корня» дистрибутива Debian:

  • Release, подписанный отдельной подписью Release.gpg, содержит хэши (MD5, SHA1, SHA256) всех индексов пакетов и хэши установщика ( InReleaseтеперь объединяет оба);
  • индексы пакетов ( например , binary-amd64) содержат хэши (MD5 и SHA256) пакетов.

Хеши и подписи проверяются такими инструментами, как apt-getиспользование ключей PGP, хранящихся в системе (управляемых apt-key). Таким образом, до тех пор, пока принимающая система работает нормально, по умолчанию ни один пакет не может быть установлен из архивов Debian, если он не был подписан (косвенно) ключом PGP архива. Любой злоумышленник на зеркалах не сможет заменить двоичные файлы, если они также не контролируют соответствующий ключ PGP.

Управление зеркалами

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

Ожидания сопровождающего

Обеспечение того, что пакеты «фактически являются теми, о которых думают сопровождающие», немного сложнее. Это путь, по которому идет пакет:

  • пакет готовится сопровождающим и подписывается ключом в наборе ключей Debian ( т. е. ключом, принадлежащим загружающему разработчику Debian или сопровождающему Debian, загружаемым на сервер ключей Debian и объединяемым группой обслуживания связок ключей);
  • подписанный пакет загружается в архив, где он проверяется (среди прочего, используемые ключи должны находиться в текущем наборе ключей и не должны истекать, подписи должны быть действительными, и если пакет был подписан DM, то DM должен иметь соответствующие разрешения для пакета);
  • все загруженные двоичные файлы помещаются в окончательный архив как есть (я немного упрощаю здесь, но это эффект);
  • любые отсутствующие двоичные файлы создаются buildd и подписываются ключом PGP buildd и передаются в окончательный архив (который знает, какие ключи buildd являются действительными, и проверяет файлы по ним);
  • все эти обновления в конечном итоге отправляются в зеркальную сеть с соответствующими обновлениями индекса (которые подписаны, как описано выше).

Если сопровождающий загружает двоичные файлы вместе с источником пакета, это файлы, которые в конечном итоге обслуживаются (на данный момент). Поскольку загрузка двоичных файлов теперь является необязательной, их все чаще и чаще пропускают, и в конечном итоге загруженные двоичные файлы будут удалены. (Это всегда имело место в Ubuntu.) Соответствуют ли другие двоичные файлы ожиданиям сопровождающего, зависит от сети buildd; поэтому buildd также являются критически важными системами, находящимися под пристальным наблюдением и с ограниченным доступом людей. Поскольку все артефакты подписаны, всегда можно проверить целостность файлов: сначала по ключу сопровождающего, затем по ключам buildds и, наконец, по ключу архива.

Как указывает plugwash , оригинальные зеркала не доступны на зеркалах, и любой DD может загрузить отсутствующий двоичный файл. Оригинальные подписи могут быть получены из архивов debian-devel-changes .

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

Стивен Китт
источник
Удивительно всеобъемлющий, но вы могли бы также разумно сказать, чтобы плакат ушел и прочитал документацию. :-)
Фахим Митха
@FaheemMitha Я колебался, но какая документация? Есть wiki.debian.org/SecureApt, но он не охватывает все ... Объединить все вместе довольно сложно, если только нет какой-то другой документации, о которой я не знаю!
Стивен Китт
Итак, имеют ли ОС Debian, которые запускают пользователи, предварительно встроенные открытые ключи PGP - которые связаны с закрытыми ключами в критических системах (где происходит подписывание) - и apt-getпроверяет пакеты, используя эти локальные предварительно встроенные ключи, потому что они доверяют им?
the_velour_fog
1
@the_velour_fog да, это (почти) верно; открытые ключи поставляются в debian-archive-keyringупаковке. apt-getпроверяет Releaseфайлы , используя эти ключи, и пакеты , используя хэш , содержащиеся в Releaseи Packagesфайлах.
Стивен Китт