Различия между версиями 1 и 2
Версия 1 от 2006-11-20 12:42:52
Размер: 6885
Редактор: ppp83-237-29-29
Комментарий:
Версия 2 от 2006-11-20 12:44:16
Размер: 6973
Редактор: ppp83-237-29-29
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 2: Строка 2:
==== а также об официантке, самоделке, уникумах, горшке мёду, чёрной шляпе и о единстве в трёх лицах ==== ==== а также об официантке, самоделке, уникумах, горшке мёду, чёрной шляпе, о псевдосуперпользователе в частносте и о единстве в трёх лицах вообще...====

О надёжной и безопасной сборке пакета

==== а также об официантке, самоделке, уникумах, горшке мёду, чёрной шляпе, о псевдосуперпользователе в частносте и о единстве в трёх лицах вообще...==== Лекция подготовлена по материалам доклада Дмитрия Левина на Первой Конференции разработчиков свободных программ на Протве в 2004 году. Формулировки во многих случаях авторские.

Предыстрория: "самодельные" дистрибутивы

  • Обозримое число пакетов
  • Кждый член сообщества пользуется почти всеми пакетами
  • Разработчиков дистрибутива (maintainres) очень мало

Всё это позволяет:

  • Собирать пакеты на собственной машине безо всякой изоляции
  • Не (пере)собирать пакеты автоматически
  • Безраздельно доверять всем разработчикам
  • Оперативно отслеживать и исправлять (в основном, невольные) нарушения безопасности при сборке

Сборка на собственном ("боевом") компьютере

Ненадёжность

  • "Полная" сборочная среда (инструменты для сборки всей пакетной базы)

    • неоправданно большой размер
    • несовместимость инструментов для сборки различных пакетов
  • "Настраиваемая" сборочная среда
    • необходимость прав администратора для установки и удаления произвольных пакетов
    • необходимость удаления каких бы то ни было пакетов из работающей системы

  • Невозможность параллельной сборки пакетов с несовместимыми сборочными зависимостями
  • Уникальность и неповторимость образующейся сборочной среды

Небезопасность

  • Небезопасность самой хост-системы
    • запуск произвольного кода с правами администратора при установке пакетов, требуемых для сборки
  • Небезопасность пользователя, занимающегося сборкой
    • запуск произвольного кода с правами сборщика непосредственно во время сборки
  • Небезопасность сборок друг от друга
    • изменение сборочного окружения
    • непосредственное воздействие на последующие сборочные процессы

Дистрибутив как предмет атаки

Дистрибутив привлекателен как объект атаки ("объект атаки" -- "предмет атаки"):

  • Сборочный сервер -- все сборочные серверы
  • Пакет в пакетной базе -- компьютер любого пользователя этого пакета
  • Ключевой пакет в "коробочном" дистрибутиве -- все компьютеры с этим дистрибутивом
  • blackhat community

Слабые места при сборке дистрибутива:

  • большое число разработчиков разной квалификации
  • компрометация клиентского ПО, используемого разработчиком
  • компрометация ПО, собираемого разработчиком
  • непосредственная атака на сборочную систему

Hasher: надёжность, безопасность, масштабируемость

Пример сборочной среды "нового поколения" -- hasher, использующийся в ALT Linux === Требования к сборочной технологии == Технология сборки элементов дистрибутива должна

  • не снижать уровень безопасности хост-системы
  • обеспечивать собственную безопасность от атак со стороны пакетов
  • обеспечивать безопасность сборки одних пакетов от атак со стороны других пакетов
  • гарантировать надёжность (воспроизводимость) результатов сборки
  • обеспечивать приемлемый уровень производительности

Трёхпользовательская модель Hasher

Хост-система

Сборочная среда

C Вызывающий пользователь

Переключатель hasher-priv (root)

R Псевдо-root

U Псевдо-пользовтель

  • Сборочная среда изолируется от хост-системы с помощью chroot()

  • Псевдо-root не получает прав суперпользователя (fakeroot())

  • Выполняющийся от root переключатель hasher-priv

    • не выполняет самостоятельных действий (возмодна проверка на отсутствие НДВ)
    • около 50 Kb кода

"Путь пакета" в Hasher

  • Порождение среды (aptbox) для работы с apt (C)
  • Удаление предыдущей сборочной среды (U, R, C)
  • Создание каркаса новой сборочной среды (С)
  • Порождение базовой установочной среды (C, R)
  • Порождение базовой сборочной среды (C, R)
  • Проверка исходного пакета (U)
  • Порождение сборочной среды для пакета (U, C, R)
  • Сборка пакета (U)


Сайт Hasher: ftp://ftp.altlinux.org/pub/people/ldv/hasher

LecturesCMC/Distro2006/06_Hasher (последним исправлял пользователь eSyr 2009-09-13 07:00:40)