В лекции подробно рассматривается аппаратная архитектура серверов, включая процессор, память, чипсет, а также процесс загрузки от включения питания до запуска операционной системы. Особое внимание уделяется NUMA, режимам работы процессора, загрузчикам, UEFI, Secure Boot, TPM и Management Engine.
Историческая справка и устройство сервера ⏱ 0:00
•Лектор Анатолий Мазуров, работает в команде эксплуатации общего стореджа Яндекса, в эксплуатации около 2500 серверов.•Начало с истории: первые ЭВМ были массивными, дорогими, потребляли много энергии; IBM System 360 ввела обратную совместимость, линейку совместимых мейнфреймов, программы могли работать десятилетиями.•Появление ARPANET, интернета, клиент-серверного взаимодействия; IBM PC (1981) с открытой архитектурой и модульностью, что привело к появлению BIOS и IBM PC-совместимых систем.•Сердцем IBM PC был процессор Intel 8086 (16-бит), родоначальник архитектуры x86; позже вышел 8088 (8-бит, совместимый на уровне ассемблера).•Современный сервер: стойка Яндекса поколения 4.0, серверы компактные, сравнимы с десятком ПК; задняя панель: четыре толстых контакта питания, так как сервер потребляет около киловатта; DCDC преобразователь с радиатором.•Материнская плата: сокеты ЦПУ (два, каждый ~300 Вт), слоты оперативной памяти рядом с процессором, ПЗУ для BMC и BIOS, сам BMC (микроконтроллер SED), PCH (центральная микросхема), слот для батарейки, перемычки.Аппаратная архитектура и NUMA ⏱ 20:00
•Разъём для модуля TPM расположен рядом с цифрой 8 на плате.•Логическая схема платы показывает множество линий подключения периферии и несколько линий передачи данных между процессорными сокетами.•Оперативная память подключается: 8 слотов к одному сокету и 8 к другому; для доступа к памяти другого сокета используется связь между сокетами.•Архитектура NUMA (Non-Uniform Memory Access) — стандарт для современных серверов; доступ к памяти другого сокета неэффективен.Мониторинг NUMA и батарейка ⏱ 22:33
•Нет мониторинга низкоуровневых вещей (например, загрузка PCI-шины) — инструмент есть только для процессоров Intel.•Батарейка нужна для сохранения часов; если она садится, часы сбрасываются, что может привести к проблемам с монтированием корневой файловой системы.Решение проблем NUMA ⏱ 25:06
•Использование NUMA-aware аллокаторов и прилипание процессов к ядрам для уменьшения задержек при обращении к удалённой памяти.Процесс загрузки системы ⏱ 25:36
•Начало загрузки: переход по reset vector в реальном режиме; запускается только одно ядро (Bootstrap CPU).•До инициализации памяти выполняется загрузка микрокода (для исправления уязвимостей, например, Spectre/Meltdown).•Оперативная память инициализируется после перевода кэша ЦПУ в специальный режим (Cache-as-RAM).•Далее инициализируется PCI-шина, обнаруживаются устройства, выполняется Option ROM (например, PXE для сетевой загрузки).PXE и загрузчики ⏱ 30:14
•PXE позволяет загружать серверы по сети без дисков; используется для автоматической преднастройки и установки ОС на новых серверах.•В Legacy-системах загрузка идёт с сектора 0 диска; в UEFI — с раздела со специальным типом, где находится загрузчик (например, GRUB).Роль BMC и IPMI ⏱ 32:48
•BMC (Baseboard Management Controller) — ARM-микрокомпьютер, запускается сразу при подаче питания.•Предоставляет IPMI-интерфейс для удалённого управления: включение/выключение, чтение сенсоров, просмотр event log.•Доступ к IPMI должен быть ограничен из-за высоких привилегий; часто выделяется в отдельную VLAN.Режимы работы процессора ⏱ 36:55
•Реальный режим (Real Mode) — наследие 8086: адресация через сегмент и смещение.•Защищённый режим появился в 80286 для изоляции программ и поддержки виртуальной памяти.•Процессор начинает работу в реальном режиме после подачи питания.Режимы работы процессора, организация памяти и BIOS ⏱ 40:00
•В защищённом режиме адресация памяти через сегментные дескрипторы нарушила совместимость с 8086, так как программы, использующие разные сегментные адреса для одной ячейки, могли не работать.•Для поддержки старых программ в 386 добавлен режим Virtual 86 — аппаратная виртуализация, позволяющая процессам работать как в реальном режиме; реальный режим сейчас почти не используется.•Память IBM PC была сложной: верхние адреса (UMA) заняты BIOS и видеопамятью, HMA — артефакт сегментации, позволяющий обращаться к памяти за 1 МБ, и Gate A20; BIOS предоставляет функции для DOS, а загрузчик загружается по фиксированному адресу.MBR, GPT, UEFI и Secure Boot ⏱ 47:47
•MBR требует сигнатуру 0x55 0xAA в последних двух байтах сектора; таблица разделов MBR использует 4 байта для адреса начала и размера, поэтому не поддерживает разделы >2 ТБ, хотя диск >2 ТБ возможен, но рискованно, если загрузчик выходит за 2 ТБ.•GPT — замена MBR, поддерживает диски до 9 ЗБ (на практике таких нет), имеет резервную копию таблицы в конце диска, защитный MBR, но нет места для stage 1.5 GRUB, поэтому требуется отдельный раздел (обычно 32 КБ) для core image.•UEFI — замена BIOS, разработана Intel и HP для Itanium, использует формат PE, имеет открытую реализацию TianoCore, читает FAT, а Secure Boot защищает от руткитов, внедряющихся в прошивку.Модуль совместимости и поиск прошивок ⏱ 60:04
•Модуль CSM (Compatibility Support Module) обеспечивает загрузку устаревших ОС (MS-DOS, FreeDOS) на системах с UEFI, эмулируя BIOS.•Производители постепенно отказываются от CSM, так как запуск таких ОС на современных серверах неактуален.•Для загрузки UEFI использует файловую систему FAT (любую версию: FAT12, FAT16, FAT32), которая поддерживается во всех ОС.•Возможен режим Virtual 8086, в котором программы работают в кольце защиты 3.Кольца защиты процессора ⏱ 62:37
•В процессоре два бита определяют уровень привилегий (кольцо).•Обычно используются только кольцо 0 (ядро) и кольцо 3 (пользовательский режим).•Переключение контекста между пользовательским режимом и ядром — дорогостоящая операция.•Кольцо -1 — гипервизор (режим виртуализации), кольцо -2 — SMM (System Management Mode), имеющий доступ ко всей памяти без проверки привилегий.TPM и Intel ME ⏱ 68:44
•TPM (Trusted Platform Module) — криптопроцессор, хранящий ключи и выполняющий криптооперации, с регистрами PCR для измеренной загрузки.•Ключи в TPM защищены от извлечения, если нет уязвимостей в прошивке.•Intel Management Engine (Intel ME) — скрытый сопроцессор в PCH, работает даже когда сервер выключен, но питание подано.•В AMD аналог — PSP (Platform Security Processor). Известны уязвимости, закрытые Intel.Южный мост и другие термины ⏱ 74:23
•PCH (Platform Controller Hub) — современный аналог южного моста, обеспечивает связь с медленными устройствами (сетевые карты, USB, диски).•Северный мост (устаревший) отвечал за быстрые коммуникации (память, видеокарты).•DMA (Direct Memory Access) — механизм, позволяющий южному мосту пересылать данные без участия процессора.•ECC-память (Error Correcting Code) — корректирует ошибки памяти, является стандартом для серверов; Google столкнулась с проблемой из-за сбоя памяти, что привело к её внедрению.•RTC (Real-Time Clock) — важен для точного времени; оптимизация системного вызова для его чтения критична для производительности.Вопросы и ответы ⏱ 78:55
•Кольца 1 и 2 обычно не используются, но применяются в микроядерных ОС (например, Minix) для драйверов.•Кольцо 1 также использовалось в одном из менеджеров виртуальных машин.•BMC (Baseboard Management Controller) на ARM-архитектуре, вероятно, из-за стоимости и энергоэффективности.•Перерыв перед следующей темой о Secure Boot.Вопросы и ответы — ARM, реальный режим, TPM ⏱ 80:05
•Переход на ARM: массового движения нет, но GPU-применения быстрее адаптируются.•Unreal Mode: в 286 возврат в реальный режим требовал сброса процессора с сохранением памяти; причина — доступно чуть больше 1 Мб памяти в 16-битном режиме.•TPM: защита от чтения секретных ключей — нет команды «прочитай секрет»; это процессор со своим хранилищем.•Перерыв 10-15 минут; затем лекция продолжилась с темы Secure Boot.Устройство защищенной загрузки и ее компоненты ⏱ 100:07
•Для Windows по умолчанию используются ключи Microsoft в хранилищах Secure Boot, что логично, т.к. пользователи не будут изучать OpenSSL для подписи своего ядра.•Основной ключ — Platform Key (PK), приватная часть которого должна храниться безопасно и не на той же системе; через Key Exchange Key (KEK) можно добавить несколько ключей для разных администраторов.•Все загружаемые модули и ядро ОС должны быть подписаны одним из ключей в цепочке; также существуют базы DB (разрешенные) и DBX (запрещенные) с хэшами программ.•Secure Boot останавливает загрузку при несовпадении подписи, в отличие от Trusted Boot, который не блокирует запуск, но фиксирует изменения в PCR-регистрах TPM.Trusted Boot и комбинирование с Secure Boot ⏱ 103:11
•Trusted Boot использует TPM и регистры PCR (от 0 до 7), куда записываются хэши модулей и конфигурации; на основе этих данных можно проверить целостность системы.•Полнодисковое шифрование: ключ шифрования привязывается к значениям PCR (например, 4, 5, 6, 7); расшифровка возможна только при совпадении значений, что защищает от подмены прошивки или конфигурации.•PCR 7 отвечает за флаг Secure Boot; привязка к нему гарантирует, что расшифровка произойдет только при активном Secure Boot, но одного PCR 7 недостаточно для полной защиты.•Trusted Boot не мешает загрузке системы, но если хэши изменяются (например, после обновления ядра), секрет не расшифруется — поэтому рекомендуется хранить recovery-ключ в холодном хранилище.Цепочка доверия и роль Management Engine ⏱ 110:49
•Intel Management Engine инициализирует PCH (Platform Controller Hub) — модуль, обеспечивающий взаимодействие CPU с периферией; без этого процессор не сможет работать с периферией.•Intel Boot Guard использует одноразовые программируемые перемычки (field programmable fuses) в чипсете для записи публичного ключа, которым проверяются самые первые этапы инициализации; обычно это ключ производителя или Intel/AMD.•Boot Guard гарантирует, что код прошивки первых этапов не был модифицирован, и позволяет доверять проверке Platform Key на последующих этапах.•Хотя Management Engine — черный ящик без документации, он выполняет критически важные функции безопасности.Процесс загрузки после Management Engine ⏱ 114:57
•После Management Engine загрузка идет на процессоре: обновление микрокода, переход в Real Mode (вектор сброса FF FF 0), затем в 32/64-разрядный режим.•В режиме Secure Boot проверяются подписи всех компонентов, заполняются PCR-регистры TPM.•Инициализируется оперативная память, настраивается оборудование, читаются расширения ПЗУ (например, сетевых карт) — они должны быть подписаны доверенными ключами, иначе не запустятся.•Дальнейшие этапы загрузки ОС не сильно отличаются от ранних 8086-совместимых компьютеров.Загрузка Linux в Secure Boot ⏱ 117:59
•Для загрузки Linux в Secure Boot используется специальный загрузчик shim, подписанный ключом Microsoft; он имеет собственное хранилище ключей, куда можно добавлять ключи через утилиту MokUtil.•Цепочка доверия: shim проверяет подпись ядра и модулей, которые должны быть подписаны доверенными ключами, связанными с верхним Platform Key в прошивке.•Если ключи Microsoft в хранилище Secure Boot, то для Linux требуется shim, иначе загрузка невозможна.•Для дальнейшего изучения загрузки ОС рекомендуется посмотреть прошлогоднюю лекцию Полины; также есть раздел со ссылками в слайдах.Заключительные рекомендации и ответы на вопросы ⏱ 120:08
•Спикер дал ссылки на дополнительные материалы: Intel Boot Guard, full discриption, кольца защиты (рекомендует читать на английском), статья на Хабре «Путешествие сквозь секреты прошивок».•Рекомендовал лекцию «Кит архитектура ВМ» (четвёртая снизу) Виктора Ашика, где показан запуск BIOS в эмуляторе QEMU с отладчиком GDB.•Ответы на вопросы: Secure Boot не влияет на скорость загрузки (криптооперации быстрые), но полнодисковое шифрование может нагрузить процессор при большом потоке ввода-вывода.•Зловредное ПО не может подписать свой модуль ядра без доступа к приватному ключу, а пользовательское ПО запускается, если его запустит пользователь.•Проверка UEFI через чек-суммы не распространена из-за сложностей хранения медиа и автоматизации в промышленных масштабах (проблемы с APMI).•Ключи Microsoft в прошивке, вероятно, из-за влияния Microsoft и корпоративного применения; про AMD информации меньше, так как Intel популярнее.Ключевые выводы
•Лектор Анатолий Мазуров работает в команде эксплуатации общего стореджа Яндекса, где в эксплуатации около 2500 серверов.•Без NUMA-aware аллокаторов и прилипания процессов к ядрам возникают задержки при обращении к удалённой памяти.•BMC — это ARM-микрокомпьютер, который запускается при подаче питания и предоставляет IPMI-интерфейс для удалённого управления.•Реальный режим процессора является наследием 8086, а защищённый режим появился в 80286 для изоляции программ.•MBR не поддерживает диски большого объёма из-за 4-байтовых адресов, в отличие от GPT.•TPM хранит ключи и выполняет криптооперации, а также имеет регистры PCR для измеренной загрузки.•Для загрузки Linux в Secure Boot используется загрузчик shim, подписанный ключом Microsoft.Заключение
Лекция охватывает все ключевые аспекты устройства и загрузки современного сервера, начиная от истории и заканчивая современными технологиями безопасности. Спикер дал ссылки на дополнительные материалы для углублённого изучения.