Самые лучшие дистрибутивы Linux для десктопа в 2020 году
Логотипы пяти лучших дистрибутивов для начинающих пользователей Linux
Linux традиционно считается операционной системой для инженеров и программистов, но уже давно прикладываются реальные усилия, чтобы сделать Linux привлекательнее для остальных людей. Это очень важно, поскольку неустранимые архитектурные проблемы безопасности Windows и закрытая экосистема Apple не позволяют рассматривать их как надёжные варианты для массового использования.
Linux представлен в разных видах. Здесь невероятные возможности настройки, поэтому дистрибутивы разрабатываются исходя из разных потребностей и интересов пользователей. Например, кто-то переходит с Windows или macOS — и есть дистрибутивы, которые в точности повторяют их интерфейс. Другие сосредоточены, например, на максимальной безопасности или эффективном использовании ресурсов.
Посмотрим на самые популярные дистрибутивы Linux в 2020 году для домашнего десктопа, что рекомендуют для начинающих пользователей, опытных специалистов и на легковесные варианты для старых машин x86. И проголосуем за самый популярный дистрибутив.
Содержание
В интернете можно найти много рейтингов Linux-дистрибутивов от разных изданий. Здесь представлен кумулятивный рейтинг, который рассчитан по базе из пяти упомянутых по ссылкам выше. В конце проголосуем и попробуем составить рейтинг самых популярных дистрибутивов на Хабре.
В целом выбор конкретного дистрибутива зависит от того, что нам нужно: графический интерфейс, похожий на Windows или macOS? Лучшая безопасность? Возможность тщательной настройки ядра и всех аспектов системы?
Разные дистрибутивы Linux предназначены для конкретных типов пользователей. Например, Ubuntu проста в использовании, потому что предназначена для новичков. С другой стороны, Arch Linux создана для опытных пользователей, которые любят вводить команды в консоли. Давайте пройдёмся по разным категориям.
Лучшие дистрибутивы для начинающих
Ubuntu
Во многих рейтингах на первом месте для домашнего десктопа стоит Ubuntu. Несомненно, это один из самых популярных вариантов (посмотрим результаты голосования на Хабре). Система проста в использовании, у неё комфортный GUI. Внешний вид элементов легко настраивается, поддерживаются темы, хотя этим сейчас никого не удивишь.
Самое главное, что у Ubuntu большое сообщество, на Хабре раньше даже был отдельный хаб «Убунтариум». Но и сейчас легко найти многочисленные форумы, где можно попросить совета и просто пообщаться с единомышленниками. Главный ресурс — Форум русскоязычного сообщества Ubuntu. С этим сообществом вряд ли может кто-то может сравниться.
Linux Mint
В течение нескольких лет Linux Mint лидировал в счётчике Distrowatch, сейчас он опустился на третье место после MX Linux и Manjaro.
| Среднее за сутки количество заходов на страницу Distrowatch за последние 6 месяцев | ||
|---|---|---|
| 1 | MX Linux | 3713 |
| 2 | Manjaro | 2567 |
| 3 | Mint | 2313 |
| 4 | Ubuntu | 1615 |
| 5 | Pop!_OS | 1498 |
| 6 | Debian | 1355 |
| 7 | elementary | 1300 |
| 8 | Fedora | 1011 |
| 9 | Solus | 1011 |
| 10 | Zorin | 885 |
Цель проекта Linux Mint — предоставить пользователю «современную, элегантную и удобную операционную систему, которая одновременно является мощной и простой в использовании».
Linux Mint с окружением MATE
Дистрибутив обеспечивает полноценную поддержку форматов мультимедиа, включает некоторые проприетарные программы и поставляется в комплекте с обширным набором опенсорсных приложений. Linux Mint очень понравится новым пользователям Linux, потому что интерфейс похож на Windows 7. Все программы сгруппированы по категориям.
Систему можно собрать с окружением Cinnamon, MATE или Xfce. Linux Mint работает быстро, отлично подходит для старых компьютеров. Сделан на базе Ubuntu и Debian, использует те же репозитории.
Elementary OS
Многие дистрибутивы приспосабливают графический интерфейс для удобства пользователей, которые привыкли к Windows. А вот Elementary OS — один из немногих, который ориентирован на пользователей macOS, то есть очень похож на интерфейс «маков». Поэтому его называют одним из самых красивых дистрибутивов Linux.
Эта система тоже основана на Ubuntu LTS, что означает высокую стабильность. Используется среда рабочего стола Pantheon (на основе GNOME), которая копирует macOS. Приложения Pantheon — либо форки приложений GNOME, либо написаны с нуля на Vala (компилируемый язык программирования).
В комплекте установки идёт совсем немного программ, включая браузер Epiphany, почтовый клиент и несколько инструментов. Всё необходимое придётся устанавливать самостоятельно из AppCenter. Это единый центр для установки и обновления приложений.
Manjaro

Manjaro Linux
Дистрибутив Manjaro основан на Arch Linux. Хотя в основе лежит система, которая ориентирована на опытных специалистов, сам Manjaro на самом деле хорошо подходит для новичков. Простой и дружественный интерфейс, много GUI-приложений в комплекте.
В качестве среды рабочего стола можно установить Xfce, KDE или GNOME. Также официально поддерживается Net-версия без графического окружения для более опытных пользователей, желающих создать рабочее окружение на свой вкус.
Zorin OS
Zorin OS
Zorin OS — ещё один дистрибутив на базе Ubuntu, который входит в число самых простых в использовании, интуитивно понятных и красивых. Графический интерфейс особенно улучшился после выхода версии Zorin 15 в прошлом году. Целевой аудиторией являются начинающие пользователи Linux, привыкшие работать в Windows.
Zorin OS выпускается в четырёх редакциях: Lite, Core, Education и платная Ultimate. Автор дистрибутива — Артём Зорин, молодой парень из Дублина. Его родители — русские, переехавшие из Украины в Ирландию много лет назад. Над операционной системой Артём работает с 2008 года вместе с братом Кириллом. Они зарегистрировали коммерческую компанию и продают платные версии Zorin OS и другие продукты.

Авторы дистрибутива Кирилл и Артём Зорины в 2010 году. Фото: podcast.ubuntu-uk.org
Лучшие дистрибутивы для опытных специалистов
Идеальный дистрибутив для опытных пользователей — это тот, который поощряет интенсивное взаимодействие со всеми аспектами ОС и помогает достигнуть главной цели — построения идеальной системы. У пользователя полный контроль, какие пакеты устанавливать в систему.
Arch и Gentoo при инсталляции даже не предлагают вариантов по умолчанию, так что нужно вручную выбрать текстовый редактор, веб-браузер, читалку PDF и т. д. В остальных дистрибутивах есть настройки по умолчанию, но туда не включены кодеки и плагины для медиафайлов, их надо добавить самостоятельно.
Одно из главных преимуществ этих дистрибутивов заключается в том, что они легко настраиваются. Конечно, во всех дистрибутивах вы можете изменить фон рабочего стола, тему значков, определить сочетания клавиш, настроить управление питанием и внести множество других изменений во внешний вид и поведение всех. Но эстетическая конфигурация — это лишь малая часть общей картины. Представленные здесь дистрибутивы идут дальше, предлагая пользователям возможность вносить не только косметические изменения, но и настраивать практически всё, что можно настроить, в соответствии с вашими конкретными потребностями, включая ядро. Это резко контрастирует с обычными дистрибутивами, где вы проходите через процесс установки, а потом удаляете ненужные пакеты и настройки. Так никогда не получится собрать такую же хорошую (оптимизированную) систему, как построенную с нуля в соответствии с вашими спецификациями.
Например, Gentoo — это единственный дистрибутив, который во время инсталляции позволяет проверить ядро и удалить из него ненужные функции.
Fedora — это испытательный стенд инструментов и технологий, которые затем попадают в Red Hat Enterprise Linux. Это идеальный дистрибутив для тех, кто хочет быть на переднем крае разработки.
В то время как Slackware, Gentoo и Arch заставляют использовать консоль для многих задач настройки, у Fedora отличные инструменты GUI для настройки сети, брандмауэра и т. д. Fedora легко настроить как игровую станцию, медиасервер для стриминга контента или даже как веб-сервер.
Slackware стремится создать самый доступный Unix-подобный дистрибутив и ставит главными приоритетами стабильность и простоту использования, хотя многие жалуются на трудность в освоении. Нужно отметить, что у Slackware нет нормального репозитория и баг-трекера, то есть разработчики не следуют общепринятой методологии опенсорса.
Debian — чрезвычайно стабильная система, что делает её идеальной для серверов. Стабильность достигается благодаря тому, что ОС поставляется с более старыми пакетами, поэтому система не очень подходит для десктопа.
Как и Gentoo, дистрибутив Arch даёт доступ ко всем внутренностям системы, но считается попроще в использовании, чем Gentoo. Философия минимализма отличает Arch от большинства других дистрибутивов, которые стараются стать самыми функциональными и красивыми. Кроме ядра, Arch больше не предлагает никаких пакетов по умолчанию при установке, позволяя пользователям сформировать дистрибутив с нуля. Это даёт возможность собрать гораздо более быструю систему.
У Arch и Gentoo отличная система управления пакетами, в то время как Slackware здесь выделяется в худшую сторону.
Перечисленные пять дистрибутивов сильно отличаются по модели обновления. Fedora выпускает новый релиз раз в шесть месяцев, Debian — раз в два года, и процесс перехода на новую версию болезненный и времязатратный. Slackware выпускает новую версию без расписания, когда накопится достаточное количество новых функций (раз в несколько лет). Наконец, Arch и Gentoo применяют плавающий релиз (rolling release), постоянно обновляя систему по мере выхода новой версии каждого пакета. То есть пользователь устанавливает систему — и навсегда забывает об обновлениях, которые выполняются постоянно в фоновом режиме. Это просто отличная вещь.
Самые легковесные варианты для старых машин x86
К счастью, есть много легковесных дистрибутивов, которые усечены и настроены опытными специалистами. Они способны вдохнуть новую жизнь в старое оборудование.
Lubuntu
Дистрибутив Lubuntu рекомендуют почти в каждом обзоре. Многие знают, что это официальный вариант Ubuntu (как и другой легковесный дистрибутив Ubuntu MATE). Благодаря этому Ubuntu и Lubuntu пользуются одним и тем же программным обеспечением и репозиториями.

Lubuntu с рабочим столом
Это быстрый и лёгкий дистрибутив, который отлично подходит для старых компьютеров. К сожалению, с версии 18.10 перестали выходить 32-битные образы. Последняя Lubuntu 20.04 LTS работает с минималистичным рабочим столом LXQt. В системе реализовано эффективное энергопотребление, так что её можно рекомендовать для установки на ноутбуки. Минимальные системные требования: процессор Pentium 4, Pentium M, AMD K8 или выше, 1 ГБ оперативной памяти.
Linux Lite
Linux Lite также можно рекомендовать как вариант для новых пользователей. Не так давно он был одним из самых быстрорастущих дистрибутив. Если нужен дистрибутив, который одновременно прост в освоении, работает на старых ПК и приятно выглядит, то это идеальный вариант.

Linux Lite 5.0
Это отличная легковесная ОС, основанная на выпусках Ubuntu LTS. Она поставляется со всеми популярными и полезными приложениями. Linux Lite также считается одним из лучших дистрибутивов для тех, кто переходит на Linux с Windows (то есть он похож на Windows). Минимальные требования: процессор 1 ГГц, 768 МБ оперативной памяти, разрешение экрана 1024×768.
Puppy Linux
Puppy Linux — один из ветеранов среди легковесных дистрибутивов с 15-летней историей. Сейчас выпускаются различные версии в зависимости от базовой среды, например, версия Puppy Linux 8.0 (Bionic Pup) основана на Ubuntu Bionic Beaver (18.04), а Slacko Puppy 6.3.2 — на Slackware 14.1.

Puppy Linux
Создатель дистрибутива Барри Каулер отошёл от основного проекта, а теперь занимается смежным проектом под названием Quirky — это версия Puppy Linux, собранная «волшебными», как он их называет, скриптами Woof-CE. Скрипты могут скачивать пакеты некоторых других дистрибутивов, обрезать их прямо в Puppy-размер, а затем собирать Puppy Linux live-CD — и делать всё это полностью автоматически.
В дистрибутиве очень много разнообразных приложений, которые устанавливаются по желанию. В том числе довольно нестандартных, как Homebank для управления финансами или Samba для управления общими ресурсами. Версия Bionic Pup совместима с репозиториями Ubuntu, предоставляя доступ к обширной коллекции софта от родительского дистрибутива. Но если ограничиться минимальным набором пакетов, то Puppy Linux занимает на диске около 300 МБ.
Минимальные системные требования: процессор 600 МГц, 256 МБ оперативной памяти.
TinyCore
TinyCore — пожалуй, самый крошечный дистрибутив Linux. Самая лёгкая версия Core весит всего 11 МБ и идёт без GUI.
Базовая система TinyCore размером 16 МБ предлагает на выбор графические среды для рабочего стола FLTK или FLWM.
Можно установить CorePlus весом 106 МБ, там уже более продвинутые оконные менеджеры, такие как IceWM и FluxBox, есть поддержка Wi-Fi и другие необходимые нормальному человеку функции.
Этот минималистский дистрибутив не содержит большого количества приложений. После установки нет практически ничего, кроме терминала, базового текстового редактора и менеджера сетевых подключений.
TinyCore
TinyCore экономит на размере, требуя подключения к сети во время первоначальной настройки. Минимальный объём оперативной памяти 64 МБ, рекомендуемый — 128 МБ, процессор — i486DX. Выпускаются 32-битные и 64-битные версии, а также PiCore для устройств ARM, таких как Raspberry Pi.
Ubuntu MATE
Ubuntu MATE — это самый тяжёлый из легковесных дистрибутивов Linux. Его системные требования: процессор 1 ГГц, 1 ГБ оперативной памяти и 8 ГБ свободного места на диске.
В последней версии Ubuntu MATE 20.04 LTS реализована масса новых функций и улучшений, включая несколько вариаций цветовых тем, установка в один клик, экспериментальный ZFS и игровой режим от Feral Interactive.
Ubuntu MATE 20.04
MATE — одно из лучших окружений для десктопа, наряду с GNOME, KDE и Cinnamon. То есть это самый красивый вариант Linux, который можно установить на относительно старом железе.
Кроме всех упомянутых, нужно отметить самые быстрорастущие в последнее время дистрибутивы MX Linux и Linux Lite, однозначный выбор для приватности и безопасности Tails, для пентестинга Kali Linux, серверную систему CentOS (по сути, бесплатная версия RedHat Enterprise) и лучший дистрибутив для Raspberry Pi — Raspbian.
Стоит ещё добавить, что по своей архитектуре Linux фундаментально превосходит Windows в вопросах информационной безопасности. Это относится к любому дистрибутиву.
Что ж, теперь посмотрим на результаты опроса ниже. Победит ли ожидаемо Ubuntu или хабражители выберут другой вариант?
На правах рекламы
Арендуйте сервер любой конфигурации в течение минуты, с любой операционной системой (есть возможность установить ОС со своего образа). Используем только современное брендовое оборудование и лучшие ЦОД-ы. Эпичненько 
Заводим GNU/Linux на ARM-плате с нуля (на примере Kali и iMX.6)
Если вы покупали какой-нибудь не очень популярный одноплатник, то могли столкнуться с отсутствием для него образа любимого дистрибутива. Приблизительно то же самое случилось с планируемым Flipper One. Kali Linux под IMX6 просто нету (я готовлю), поэтому собирать приходится самостоятельно.
Процесс загрузки достаточно простой:
Сборка корневой файловой системы
LABEL=ROOTFS / auto errors=remount-ro 0 1
LABEL=BOOT /boot auto defaults 0 0
Наконец, можно примонтировать загрузочный раздел, он нам понадобится для ядра: `mount /dev/mmcblk0p1 /mnt/boot/`
Сборка Linux
Das U-Boot
Так как загрузчик интерактивный, для проверки его работы достаточно самой платы, запоминающего устройства и опционально устройства USB-to-UART. То есть, можно ядро и ОС отложить на потом.
Абсолютное большинство производителей предлагают использовать Das U-Boot для первичной загрузки. Полноценная поддержка обычно обеспечивается в собственном форке, но и в апстрим контрибьютить не забывают. В моём случае плата поддерживается в мейнлайне, поэтому форк я проигнорировал.
Cобираем сам загрузчик:
Готово, можно загрузиться. Загрузчик должен сообщить собственную версию, некоторую информацию о плате и попытаться найти образ ядра на разделе. В случае неудачи будет пытаться загрузиться по сети. В целом вывод довольно подробный, можно найти ошибку в случае проблемы.
Вместо заключения
А вы знали, что лоб у дельфина не костистый? Это буквально третий глаз, жировая линза для эхолокации!
Загрузка ОС на ARM
Недавно попросили в двух словах рассказать серьезным людям о загрузке операционной системы на ARM и дать оценку угроз безопасности этого процесса. Вообще ARM-процессоров и вообще ОС. Вы понимаете, все ведь слышали про эти ARM, и что такое ОС тоже все знают. Желательно, на уровне квадратиков со стрелками.
Загрузка ARM в четырех прямоугольниках — под катом.
Сразу ограничим уровень детализации. Нас интересует, что происходит, а не как, то есть конкретные инструкции процессора оставим в стороне. Постараемся найти общее у всех процессоров и всех ОС. Поищем угрозы безопасности.
Разновидности процессоров ARM
Если вы знаете про ARM, то этот раздел можно смело пропустить.
В производстве и эксплуатации сейчас встречаются процессоры ARM пяти архитектур: ARMv4, ARMv5, ARMv6, ARMv7 и ARMv8. Компания ARM дает этим архитектурам коммерческие названия, поэтому ARMv4 называется, например, ARM7, ARMv5 – ARM9, а название Cortex имеют процессоры на архитектурах ARMv6, v7, v8. Следующая таблица перечисляет основные разновидности.
| Архитектура | Коммерческое название | Распространенные виды | Запуск Linux |
| ARMv4 | ARM7 | ARM7TDMI | Нецелесообразно |
| ARMv5 | ARM9 | ARM926EJ-S | Да |
| ARMv6 | ARM11 | ARM1176JZF-S | Да |
| Cortex-M0 | Cortex-M0 | Нет | |
| ARMv7 | Cortex-M | Cortex-M3 | Нецелесообразно |
| Cortex-A | Cortex-A9 | Да | |
| Cortex-R | Cortex-R4 | Да | |
| ARMv8 | Cortex-A | Cortex-A53 | Да |
Например, кнопочные телефоны в основном используют ARM7, а смартфоны – Cortex-A. Современные смартфоны строятся преимущественно на ARMv8, единственных 64-битных. Процессоры ARM7 и ARM9 широко применялись в различных промышленных контроллерах, сетевом оборудовании, а сейчас фокус переходит на использование в них Cortex-A. В различной бытовой технике, мелких электронных приборах, в области безопасности и т.п. применяются микроконтроллеры Cortex-M.
Вообще все устройства ARM можно условно разбить на микроконтроллеры и Application Processor.
Виды ОС
Какие есть варианты запуска ОС:
В дальнейшем мы будем говорить только о запуске ОС (Linux, Android) или RTOS на ARM. По способу запуска “большие” RTOS попадают в одну группу с Linux, а “малые” RTOS объединяются с программами без ОС.
Для запуска Linux хорошо подходят процессоры ARM9, ARM11, Cortex-A. Усеченную версию Linux также можно загрузить на ARM7, Cortex-M4 и Cortex-M7, но это нецелесообразно.
Для запуска малых RTOS подходят микроконтроллеры и процессоры ARM7, ARM9, Cortex-M. В некоторых случаях для RTOS используют начальные модели Cortex-A, например, Cortex-A5. Большинство же процессоров Cortex-A столь сложны, что их возможности можно использовать только совместно с поставляемым производителем Linux/Android SDK, что и определяет выбор в пользу Linux.
Загрузчик ОС
С точки зрения разработчика системное ПО устройства делится на загрузчик и ОС. Основную функцию всегда выполняет программа, работающая под управлением ОС или RTOS.
Загрузчик обеспечивает загрузку ОС и сервисные функции, такие, как:
Таким образом, с точки зрения разработчика изделия запуск ОС выглядит следующим образом:
Здесь знаком // отмечен момент подачи питания или сброса процессора. Такой простой способ запуска был у некоторых процессоров ARM7. В последовавших за ними версиях процесс запуска в реальности сложнее, чем на приведенной схеме, но для разработчика конечного решения это обычно не существенно.
Схема “Загрузчик-ОС” очень удобна из практических соображений, ведь загрузчик берет на себя всю низкоуровневую работу:
В то же время, загрузчик зачастую слабо защищен или не защищен вовсе. В большинстве домашних роутеров достаточно открыть крышку и подключиться к разъему UART, чтобы войти в меню управления загрузчиком. В телекоммуникационном оборудовании более высокого класса вход в меню загрузчика зачастую возможен по недокументированной комбинации клавиш или нажатой кнопке в момент включения устройства. Иными словами, зачастую загрузчик не защищен от локального нарушителя.
Рассмотрим работу загрузчика на примере u-boot, загружающего Linux, по шагам.
Запуск загрузчика – предзагрузчик
Однако в реальности почти никогда не бывает, чтобы команды загрузчика выполнялись первыми после включения или сброса процессора. Это еще было на процессорах ARM7, но почти не встречалось далее.
Любое ядро процессора ARM при сбросе начинает исполнение с адреса 0, где записан вектор “reset”. Старые серии процессоров буквально начинали загружаться с внешней памяти, отображенной по нулевому адресу, и тогда первая команда процессора была командной загрузчика. Однако для такой загрузки подходит только параллельная NOR Flash или ROM. Эти типы памяти работают очень просто – при подаче адреса они выдают данные. Характерный пример параллельной NOR Flash – микросхема BIOS в персональных компьютерах.
В современных системах используются другие виды памяти, потому что они дешевле, а объем больше. Это NAND, eMMC, SPI/QSPI Flash. Эти типы памяти уже не работают по принципу: подал адрес — читаешь данные, а значит, для прямого исполнения команд из них не подходят. Даже для простого чтения тут требуется написать драйвер, и мы имеем проблему «курицы и яйца»: драйвер нужно откуда-то заранее загрузить.
По этой причине в современные процессоры ARM интегрировано ПЗУ с предзагрузчиком. ПЗУ отображено в памяти процессора на адрес 0, и именно с него начинает исполнение команд процессор.
В задачи предзагрузчика входят следующие:
Подобный предзагрузчик устанавливается как в процессорах ARM, таких, как Cortex-A, так и в микроконтроллерах, даже таких маленьких, как Cortex-M0. Вместе с предзагрузчиком процедура запуска ОС выглядит так:
Анализ угроз на этом этапе
Исходный код предзагрузчика пишется производителем процессора, а не компанией ARM, является частью микросхемы как продукта компании-производителя и защищен авторским правом. Например, в процессорах ARM компаний Atmel и NXP предзагрузчики написаны, соответственно, Atmel и NXP.
В некоторых случаях предзагрузчик можно прочитать из ROM и проанализировать, но иногда доступ к нему ограничен. Например, предзагрузчик процессора серии Psoc4000 компании Cypress был закрыт несколькими слоями защиты (но был взломан талантливым хакером).
Использования предзагрузчика в большинстве сценариев избежать нельзя. Можно рассматривать его как вариант BIOS, которого в ARM-системах нет.
Сам по себе предзагрузчик в ROM несет в себе угрозу нарушения порядка загрузки и выполнения произвольного кода. Но после того как управление передано загрузчику ОС, предзагрузчик уже безвреден. Мы можем просто не передавать ему управление, перенастроить все обработчики прерываний и так далее.
В некоторые небольшие микроконтроллеры производители интегрируют в ROM-библиотеки для работы с периферийными устройствами, которые требуется вызывать на протяжении всей работы микроконтроллера. В этом случае системное ПО (загрузчик и ОС) само периодически передает управление куда-то в область предзагрузчика, и схема передачи управления получается следующей:
Это в общем случае небезопасно, но встречается только в некоторых микроконтроллерах на архитектуре ARM. На таких микроконтроллерах обычно запускаются программы без ОС или малые RTOS, и дизайнер системы может оценить риски.
Загрузка с TrustZone
В процессоры ARM Cortex-A и Cortex-R встраивается технология TrustZone. Эта технология позволяет на аппаратном уровне выделить два режима исполнения: Secure (Безопасный) и Non-Secure (Гостевой).
Эти процессоры в основном нацелены на рынок смартфонов и планшетных компьютеров, и TrustZone используется для создания в режиме Secure доверенной “песочницы” для исполнения кода, связанного с криптографией, DRM, хранением пользовательских данных.
В режиме Secure при этом запускается специальная ОС, называемая в общем случае TEE (Trusted Execution Environment, доверенная среда исполнения), а нормальная ОС, такая, как Linux, Android, iOS, запускается в режиме Non-Secure. При этом права доступа к некоторым устройствам ограничены для нормальной ОС, поэтому ее еще называют гостевой ОС.
Из-за наложенных ограничений гостевая ОС вынуждена время от времени вызывать функции TEE для исполнения некоторых операций. TEE продолжает существовать параллельно с гостевой ОС все время, и гостевая ОС не может ничего с этим поделать.
Например, гостевая ОС использует функции TEE для:
Почему же разработчики систем соглашаются на такой режим функционирования? В процессоры с поддержкой TrustZone встроен и механизм Secure Boot в том или ином виде.
С Secure Boot предзагрузчик проверяет подпись загружаемого образа с помощью прошитого на этапе производства открытого ключа. Таким образом, гарантируется, что загружен будет только подписанный образ. Это функция безопасности.
То есть загрузка ОС становится следующей:
Далее действует лень — c TEE все работает, а без TEE даже не запускается. Разработчики используют SDK с TEE, вызывают закрытый бинарный код из ядра Linux и не волнуются.
Как проверить свой проект на обращения к TrustZone
Может даже показаться, что всей этой TrustZone не существует, по крайней мере, в вашей конкретной разработке. Проверить это совсем несложно.
Дело в том, что все процессоры с TrustZone стартуют в режиме Secure, а только потом переключаются в Normal. Если ваша ОС запущена в режиме Normal, то какая-то Secure OS (TEE) существует в системе и перевела ее в этот режим.
Лакмусовой бумажкой является обращение к TEE для включения кэш-памяти 2-го уровня. По какой-то причине архитектура ARM не позволяет этого делать из Normal World. Поэтому для включения кэша ядру ОС потребуется сделать хоть один вызов к TrustZone. Делается это единственной командой: smc #0, и вы можете поискать ее сами в ядре Linux или Android.
Разумеется, мы и сами поискали, и нашли такие вызовы в коде поддержки ряда процессоров Qualcomm, Samsung, Mediatek, Rockchip, Spreadtrum, HiSilicon, Broadcom, Cavium.
Загрузка ARM Cortex-A и анализ угроз
На схеме пунктиром обозначен путь обращения из ядра ОС в TEE.
В двух блоках — неизвестный нам код. Посмотрим, чем это грозит.
Технически, любой из компонентов системного ПО может содержать ошибки, намеренные закладки и так далее. Однако в большинстве случаев загрузчик, ОС и системное ПО можно проверить, изучив исходные коды. Сконцентрируемся на возможных угрозах, исходящих от предзагрузчика и TEE, исходные коды к которым закрыты.
Предзагрузчик работает на самом раннем этапе, когда схема подключения к процессору различных периферийных устройств еще не известна, никакие коммуникационные устройства (WiFi, 3G и т.д.) не настроены, коммуникационные протоколы не работают. При этом предзагрузчик – небольшая программа, с размером кода порядка нескольких десятков килобайт, и сложно представить размещение в нем полных стеков протоколов или серьезной эвристики по определению подключенных устройств. Поэтому предзагрузчик вряд ли таит в себе серьезные закладки, связанные со слежкой, передачей данных и т.п.
Гораздо более интересной точкой атаки является TEE, так как его функции вызываются в процессе работы ОС, когда все периферийные устройства работают, а коммуникационные протоколы настроены. Создание шпионской закладки в коде TEE позволяет практически неограниченно следить за пользователем СВТ.
В небольшом исследовании мы показали реализуемость закладки в TEE, незаметно перехватывающей системные вызовы ОС Linux. Для активации закладки нужно только одно обращение из ядра Linux в TEE (например, то самое, для кэша второго уровня), после чего система становится полностью управляемой. Это позволяет:
Выводы
Мы рассмотрели процесс загрузки различных микроконтроллеров и процессоров ARM.
У микроконтроллеров наиболее уязвимым местом в процессе загрузки является загрузчик ОС.
Современные процессоры ARM Cortex-A включают в себя TrustZone — и от этого никуда не уйти. TrustZone предполагает запуск перед ОС доверенной среды исполнения TEE.
TEE является самой уязвимой точкой в процессе загрузки ОС на ARM Cortex-A, потому что обращения к TEE приводят к выполнению закрытого системного кода, известного производителю, но скрытого от нас.
Без контроля над TEE невозможно обеспечить безопасность и доверенность исполнения любой ОС на ARM Cortex-A.




