Дебаггинг ядра
Дебажить ядро мы будем для того, чтобы посмотреть, как оно работает во время наших вызовов. Это позволит нам понять, как эксплуатировать уязвимость. Опытные читатели, скорее всего, знают о One gadget в , стандартной библиотеке C в Linux, позволяющей почти сразу запустить из уязвимой программы в userspace. В ядре же кнопки «сделать классно» нет, но есть другая, посложнее.
GDB и vmlinux-gdb.py
Настоятельно рекомендую тебе использовать GEF для упрощения работы. Это модуль для GDB, который умеет показывать состояния регистров, стека и кода во время работы. Его можно взять здесь.
Первым делом надо разрешить загрузку сторонних скриптов, а именно , который сейчас находится в корневой папке исходников. Как, собственно, и , файл с символами ядра. Он поможет впоследствии узнать базовый адрес модуля ядра. Это можно сделать, добавив строку в . Теперь, чтобы загрузить символы и вообще код, выполни команду . После этого надо запустить само ядро.
Версии ядра
Ядро Calculate Linux входит в состав пакета и имеет несколько версий и разновидностей, описываемых USE-флагами. Пример:
eix calculate-sources
sys-kernel/calculate-sources Доступные версии: (4.19.96) 4.19.96^bs (4.19.97) ~4.19.97^bs (5.4.12) 5.4.12^bs{tbz2} (5.4.13) ~5.4.13^bs {build desktop firmware fsync +grub minimal muqss pae symlink themes uksm +vmlinuz KERNEL="linux"} Установленные версии: 5.4.12(5.4.12)^bs{tbz2}(02:38:06 18.01.2020)(desktop firmware fsync grub minimal symlink themes vmlinuz -build -muqss -pae -uksm KERNEL="linux") Домашняя страница: http://www.calculate-linux.org Описание: Calculate Linux kernel image "calculate" /var/db/repos/calculate
Для стабильных версий ядра, а также для самой свежей версии ядра доступны бинарные пакеты для десктопа и сервера. На момент написания статьи стабильными являются версии ядра 5.4.12 и 4.19.96, а свежая версия версия — 5.4.13.
Ядро Calculate Linux разделяется на и версии по наличию USE-флага . Ниже приведён список остальных USE-флагов:
- — добавляет в зависимости пакет sys-kernel/linux-firmware или sys-firmware/eth-firmware
- — патчи повышения производительности в играх, использующих Proton от компании Valve
- — добавляет в зависимости загрузчик grub
- — устанавливает ядро без исходного кода
- — патч, добавляющий поддержку планировщика задач MuQSS
- — создаёт символическую ссылку /usr/src/linux на исходный код ядра
- — добавляет в зависимости пакет с темой для Plymouth
- — патч, добавляющий технологию совмещения одинаковых страниц памяти в одну, альтернатива ksm
- — компилировать и устанавливать ядро во время установки пакета
Переход на пониженную версию ядра
В случае сложностей, вызванных стабильностью работы системы, поддержкой оборудования или драйверов, вы можете установить пониженную версию ядра. Для перехода на версию 4.19.x выполните:
cl-update —sync-only
echo «>sys-kernel/calculate-sources-5» >> /etc/portage/package.mask/custom
emerge -a sys-kernel/calculate-sources
После этого перезагрузите компьютер, выбрав в меню загрузчика и указав ядро 4.19. После загрузки закончите обновление:
cl-update
Программа удалит ядро 5.4 и пересоберёт пакеты с модулями ядра.
Переход на самую свежую версию ядра
Установка самой свежей версии ядра оправдана только в том случае, если вы хотите получить какой-то функционал, недоступный на вашей версии ядра, либо добавить поддержку нового оборудования. Для установки последней версии ядра выполните:
echo «sys-kernel/calculate-sources» >> /etc/portage/package.keywords/custom
cl-update
Программа установит последнюю версию ядра, после чего обновит все модули. Может так случиться, что один из пакетов не скомпилируется с новым ядром. Если вы не используете этот модуль, то можете смело удалить пакет.
История разработки
Компания «РЕД СОФТ» начала заниматься разработкой дистрибутивов GNU/Linux c 2012 года в рамках исполнения государственного контракта с ФССП России «Доработка, разработка, внедрение и сопровождение подсистем автоматизированной информационной системы Федеральной службы судебных приставов». В данном проекте был создан дистрибутив ГосЛинукс со встроенными средствами защиты информации несанкционированного доступа и поддержкой отечественной криптографии, базировавшийся на CentOS 6, что являлось требованием ФССП РФ. С 2013 года началось пилотное внедрение разработанной операционной системы в структурных подразделениях федеральной службы.
На основе успешного опыта пилотного внедрения ГосЛинукс, компания «РЕД СОФТ» в 2014 году приступила к разработке дистрибутива под собственным названием, не связанным с конкретным заказчиком — РЕД ОС. По заявлениям разработчиков на официальном Youtube-канале, при разработке дистрибутива используется опыт мировых сообществ OpenSource (RedHat/Fedora, openSUSE, Debian/Ubuntu), при этом строго соблюдаются действующие международные и российские стандарты (POSIX, LSB и проч.). Что подтверждается экспертным советом по российскому ПО Минцифры России.
Суть методических рекомендаций ЦКИТ
Новую версию методических рекомендаций приняли 26 декабря 2019 года – их утвердил экспертный совет при Минкомсвязи. Документ запрещает добавлять в реестр отечественного ПО продукты, которые включают компоненты с открытыми GPL- и MPL-лицензиями.
Соответствующие нормы можно найти во втором разделе, посвященном проверке юридической чистоты ПО. Разработчик должен подготовить список сторонних компонентов, которые используются в продукте, указать правообладателей этих компонентов и лицензии для распространения. Лицензии GPL и MPL – под запретом:
Но такие компоненты являются основой Linux. На базе ядра этой системы работает более 40 российских ОС, включенных в реестр. В предыдущей версии рекомендаций и в постановлении №1236 ничего не было сказано о GPL- и MPL-лицензиях.
Поддержка ARM
ARM-компьютеры используются как мини-серверы под определенные задачи или в качестве контроллеров автоматизации, что делает их очень популярными и востребованными. ARM-сообщество Linux за последние пять лет превратилось в одно из наиболее активных, проведя колоссальную работу по поддержке 32-разрядных ARM-платформ, занимающих серьезную долю рынка, и эта работа в общем завершилась к выходу ветки 4.5. Ранее для каждого ARM-устройства необходимо было собрать собственное ядро, обеспечивающее поддержку только определенных устройств. Но проблема в том, что устройства становились сложнее, появилась возможность изменения конфигурации, да и сами пользователи на ARM-устройствах хотели использовать без лишних телодвижений обычные дистрибутивы. Но в итоге мы имели несколько сотен вариантов сборки ядра, что очень затрудняет использование Linux.
Результатом очистки и рефакторинга большого количества кода стало возможным включение в ядро кода поддержки ARMv6 и ARMv7, то есть теперь можем собрать универсальное ядро, способное загружаться на обеих системах. Здесь, наверное, нужно вспомнить и о продвигаемой в последнее время спецификации Device Tree, возникшей как часть разработок Open Firmware. Device Tree позволяет конфигурировать оборудование во время загрузки при помощи специальных dts-файлов, хранящихся в /boot/dtbs, и менять установки без пересборки ядра. Использование Device Tree становится обязательным для всех новых разработок ARM и не только устройств. Все это вместе дает уверенность, что дистрибутивы Linux в будущем можно будет спокойно запускать на любом ARM-устройстве. Параллельно Грег Кроу-Хартман (Greg Kroah-Hartman) из Linux Foundation выпустил патч, реализующий подобную возможность для ранних версий ядра. В arch/arm64 найдем код, обеспечивающий поддержку новой 64-битной архитектуры ARM (ARMv8). Добавлены новые функции для всех популярных архитектур ARM — Allwinner, Amlogic, Samsung, Qualcomm и поддержка новых ARM-плат различных разработчиков.
В чем проблема
Юридическая сила рекомендаций равна силе других документов, которые имеют отношение к реестру российского ПО. Новая редакция документа спровоцировала опасную ситуацию.
Рекомендации противоречат правилам, установленным правительством, и потенциально могут запустить процесс исключения из реестра практически всех ОС и десятков других программ на базе GPL- и MPL-компонентов.
Если российские ОС и другие продукты удалят из реестра, госорганы и госкомпании получат возможность закупать иностранное ПО, ведь российских аналогов у таких программ не останется. Эксперты проанализировали записи реестра и установили, что в нем нет ни одной на 100% отечественной ОС – все базируются на ядре Linux.
РЕД ОС 7.3
Эта новая версия операционной системывышла в 2021 году. Среди ее достоинств:
- использование самой свежей стабильной версии ядра Linux 5.10 LTS (долгосрочной поддержкой) ускорило взаимодействие ОС и “железа”;
- для полноценной работы сканеров и принтеров добавлены наиболее полные пакетные базы драйверов GutenPrint, OpenPrinting-PPDs, Foomatic; это значит, что под управлением РЕД ОС 7.3 даже старые устройства будут работать корректно;
- наличие собственного репозитория, находящегося на территории России, нивелирует даже теоретическую угрозу отключения из-за внезапно введенных ограничений или санкций;
- знакомый и привычный для пользователя интерфейс;
- качественная техническая поддержка;
- доступна на Yandex Cloud Marketplace в разделе “Виртуальные машины”.
Лучшие дистрибутивы Linux для старых компьютеров и ноутбуков
Lubuntu
Lubuntu является версией Ubuntu, разрабатываемой сообществом, с использованием легкой оболочки рабочего стола LXQt (ранее использовался LXDE). В комплекте идет так же набор «легковесного» программного обеспечения. Разработчики Lubuntu ставят перед собой цель запуска данного дистрибутива на старых и слабых компьютерах и ноутбуках, в том числе и на нетбуках. В остальном дистрибутив не особо отличается от Ubuntu, и использует самое последнее и свежее программное обеспечение.
- Большой набор предустановленных приложений
- Небольшие системные требования
Puppy Linux
Один из самых легковесящих дистрибутивов Linux — Puppy Linux. Дистрибутив способен полноценно работать на старых компьютерах с объемом оперативной памяти не менее 300МБ. Не смотря на свои более чем скромные системные требования, дистрибутив имеет в комплекте внушительный набор полноценно работающих программ — от офисного пакета, до мультимедиа проигрывателя.
К минусам данной системы можно отнести тот факт, что платой за его маленький размер является отсутствие многих современных функций как в самой системе, так и в её программном обеспечении
- Предустановлены все необходимые легковесные программы
- Способен запустится на компьютере 20 летней давности
- Как плата за «легкость» — отсутствие многих современных функций у системы и программного обеспечения
- Посредственное оформление
2. Fedora
Fedora — это дистрибутив сообщества разработчиков RedHat Linux. Это универсальный дистрибутив, разработанный и поддерживаемый проектом Fedora, который спонсируется Redhat. Он имеет обширное сообщество и в основном используется разработчиками в качестве центра для разработки и тестирования пакетов программного обеспечения, прежде чем они будут доступны для RHEL или CentOS.
Фактически, Fedora считается передовым дистрибутивом, поскольку в неё всегда входят самые свежие программные пакеты, драйверы и утилиты. Поэтому, если вы собираетесь выбрать Fedora, будьте уверены, что у вас всегда будут последние версии программного обеспечения.
Fedora хорошо известна своей простотой использования и настройки. Она поставляется с простым пользовательским интерфейсом и готовыми приложениями для повседневного использования. Это делает её популярным среди новичков, которые хотят попробовать дистрибутив на основе Redhat.
Fedora также считает безопасность главным приоритетом и фактически поставляется с SELinux (Security-Enhanced Linux), который представляет собой модуль безопасности ядра, который управляет правами доступа. ИТ-отдел также пошёл дальше и добавил брандмауэр, который уже включён по умолчанию.
Fedora поставляется в трёх основных редакциях с очень разнообразным приложением: рабочая станция Fedora для настольных и домашних пользователей, Fedora Server и Fedora IoT для экосистем Интернета вещей, таких как Raspberry Pi.
Последней версией Fedora на момент публикации этой статьи является Fedora 33.
Легковесные дистрибутивы Linux
Помимо свободы выбора, большинство пользователей ценит Linux за простоту. Здесь можно не только выбрать комплектацию будущей операционной системы, но и скачать готовые легкие дистрибутивы Linux, которые будут работать максимально производительно и без «отъедания» лишних ресурсов. Подобный вариант особенно полезен владельцам старых ноутбуков и компьютеров, чьи машины могут уже плохо справляться с требованиями новейших версий Windows и macOS.
Peppermint OS
Основа Debian, Lubuntu (LTS).Архитектура: i686, x86_64.Преимущества:
- простота установки;
- скорость работы;
- интеграция с облачной инфраструктурой;
- элегантный и удобный интерфейс.
Peppermint OS является одним из самых быстрых и легких дистрибутивов Linux. Он удачно сочетает привлекательный внешний вид гибридного рабочего стола LXDE / XFCE со строгим минимализмом базовой комплектации.
Peppermint OS обладает уникальным качеством — веб-ориентированностью, которая реализована в форме гибридной облачной инфраструктуры SSB (Site Specific Browsers). Скорость работы и гибкость в этом легком Linux поддерживается за счёт комбинации предустановленных облачных (SSB) и обычных десктопных приложений. Большинство приложений в Peppermint OS запускаются не локально, а в облаке через специальную утилиту Ice.
Lubuntu
Основа: Debian, Ubuntu.Архитектура: i686, x86_64.Преимущества:
- высокая производительность;
- скорость работы;
- поддержка ПО и репозиториев Ubuntu;
- энергоэффективность.
Любой список облегченных дистрибутивов Linux для старых компьютеров, ноутбуков и нетбуков будет неполон без этого официального ответвления от Ubuntu. Создателям Lubuntu удалось добиться оптимального баланса между легкостью, привлекательным внешним видом и производительностью.
С версии 20.04 LTS Lubuntu поставляется с легкой и менее ресурсоемкой (чем прежний вариант LXDE) дефолтной средой рабочего стола LXQt. Она включает в себя основные приложения и службы для повседневного использования, в том числе офисный пакет, программу чтения PDF-файлов, редактор изображений и мультимедийные проигрыватели.
Puppy Linux
Основа Linux kernel.Архитектура: i686, x86_64.Преимущества:
- расширенная функциональность;
- скорость работы;
- лёгкая настраиваемость;
- простота использования.
Лёгкий и простой в использовании дистрибутив Linux, помимо внешнего сходства с Windows, отличается тем, что при минимальных размерах он сохраняет свою полную функциональность. Скромный размер позволяет Puppy загружаться непосредственно в оперативную память (ramdisk). Поэтому все его приложения мгновенно запускаются и работают быстро, даже на старых компьютерах.
Puppy Linux — это не одна операционная система, а целое семейство относительно небольших дистрибутивов GNU / Linux, имеющих общие принципы и построенных с использованием одного и того же набора инструментов. Помимо официальных дистрибутивов Puppy, в это семейство входят и сотни кастомных производных (puplets), разнообразие которых позволит решить любые специфические задачи по настройке ОС под себя.
Кому не стоит переходить на Linux
Есть три весомых причины не переходить на Linux и остаться на “винде”.
Во-первых, если вы играете в топовые игры. Только крутые современные проекты могут удержать вас на Windows, поиграть в популярные сетевые игры вроде CS:GO, Dota 2, Team Fortress 2 или War Thunder можно и на Linux. Есть для бесплатной ОС как порты так и официально выходящие версии многих стратегий, симуляторов, аркад и экшенов.
Если игры для вас не самое главное и вы не против сыграть во что-то 2-5 летней давности, то можно смело переходить на Linux.
Во-вторых, если вы используете специализированное ПО, которые работает только под Windows. Всевозможные узконаправленные приложения, бухгалтерские или управленческие программы, ПО для взаимодействия с банками хоть и устанавливаются на Linux с определенными костылями, рисковать стабильностью рабочих инструментов вряд ли кто-то захочет.
Не радостная ситуация и с распространенным программным обеспечением для профессионалов. То же Photoshop или Pixelmator на Linux заменить практически не чем. Лучший из графических редакторов GIMP имеет довольно скромные возможности, остается только пытаться запустить нужное приложение через среду WINE.
В-третьих, если вы используете редкое оборудование. Подавляющее большинство компонентов компьютера без труда подружатся с Linux и будут работать без проблем. Однако, специфические графические планшеты, карты нелинейного монтажа или сложная аудиоаппаратура, с большой долей вероятности, просто на заведутся.
Если же вы используете популярные модели железа, ситуацию исправят несколько команд в терминале.
Во всех остальных случаях можете смело качать дистрибутив Linux и пробовать.
Возможные ошибки
Например:
Причина: в системе не установлен один из пакетов, содержащий необходимые библиотеки.
Решение: необходимо воспользоваться поисковиком, чтобы определить, какой именно пакет необходим для продолжения установки и воспользоваться командой yum install <имя пакета> для его установки.
2. Ошибка 127
Например: [include/generated/timeconst.h] Ошибка 127
Причина: как и с предыдущей ошибкой, в системе не установлен один из пакетов, содержащий необходимые библиотеки.
Решение: аналогично предыдущему примеру решения проблемы, необходимо воспользоваться поисковиком, чтобы определить, какой именно пакет необходим для продолжения установки и воспользоваться командой yum install <имя пакета> для его установки.
Networking support
В подпунктах включается поддержка протокола TCP/IP, в частности возможность включения/отключения IPv6. Поскольку автор не является специалистом в данной области, детально раздел не рассматривается. Сетевые администраторы, безусловно, найдут для себя множество полезных опций. Для домашнего же использования рекомендуется оставить опции по-умолчанию.
Скорее всего включать не понадобится. Обеспечивает поддержку инфракрасного модуля.
Для тех, у кого встроен модуль беспроводной передачи данных bluetooth. Как правило, сейчас это ноутбуки. Хотя ранее bluetooth был достаточно популярен и соответствующие устройства покупались и использовались на настольных ПК.
позволит выбрать из списка поддержку определённого устройства.
Для ноутбуков, где, как правило, радиопередатчик wifi-чипа включается нажатием клавиши «Kill Switch». Если эта клавиша не нажата и передатчик не включен, wi-fi не заведётся. Кстати, если параллельно у вас установлена Windows, обязательно оставьте под ней включенной кнопку wi-fi. В противном случае в linux при попытке включить интерфейс wlan вам будут объяснять, что Kill Switch отключен и включать его будет бесполезно.
Поддержка стандарта 802.11 для беспроводных сетей.
Ядро и драйверы
Продолжился перенос сложного и плохо поддерживаемого кода, написанного на ассемблере (x86/asm) на С, начатый еще в 4.0. Ядро теперь можно собирать с параметром -fsanitize=undefined. Сам параметр появился два года назад в GCC 4.9+ и активирует отладочный режим UBSan (Undefined Behavior Sanitizer), который детектирует неопределенное поведение, присущее языкам C и C++: использование нестатических переменных до инициализации, деление на ноль, целочисленное переполнение и так далее. Компилятор обычно предполагает, что такие операции никогда не произойдут, а в случае наступления результат может быть любой и зависит от самого компилятора. Теперь компилятор обнаруживает такие ситуации, выдает «runtime error:» (можно отключить ) и продолжает выполнение.
По умолчанию в каждой сборке ОС все библиотеки загружаются в определенные адреса, что позволяет легко реализовать атаку. Для увеличения безопасности используется ряд технологий, одна из них — случайное смещение при вызове mmap(), реализованное в виде ASLR (Address Space Layout Randomization). Впервые технология ASLR появилась в Linux в 2005 году в ядре 2.6 и выдавала для 32-битных систем 8-битное смещение (то есть 256 вариантов адресов, хотя на самом деле меньше), а для x64 — смещение уже 28-битное. Для x64 вариантов вполне достаточно, а вот для 32-битных систем, среди которых Android, этого на сегодня явно мало. Уже известны эксплоиты, умеющие подбирать адрес. В результате поиска решения проблемы написан патч, позволяющий устанавливать большую хаотичность для ASLR, через и (в системах x64 для x86-процессов). Для каждой архитектуры указываются минимальные и максимальные значения с учетом доступного адресного пространства. Для x86 значение может находиться в диапазоне от 8 до 16 бит или 28–32 (для x64-версии). Параметры по умолчанию можно задавать при сборке ядра.
Настройка ASLR в новом ядре
Расширены возможности DRM-драйвера для видеокарт NVIDIA (Nouveau) и Intel (поддержка будущего поколения чипов Kaby Lake), добавлена поддержка новых звуковых карт, USB-контроллеров, криптоускорителей. Производители графических карт Intel и NVIDIA уже давно отказались от использования режима UMS (Userspace Mode Setting) в своих open source драйверах в пользу KMS (Kernel Mode Setting), теперь пришла очередь драйвера ATI Radeon, в котором убран код режима UMS. С 3.9 было возможно его включать параметром DRM_RADEON_UMS или установкой в GRUB. Теперь остался только KMS (Kernel Mode Setting). Это нужно учитывать, если необходимо использовать старые драйверы или режим UMS (UMS иногда показывает большую производительность).
В драйвер AMDGPU добавлена экспериментальная поддержка технологии динамического управления питанием PowerPlay, позволяющая повысить производительность GPU для GPU Tonga и Fiji и интегрированных Carrizo и Stoney. В режиме PowerPlay GPU запускается в режиме низкого энергопотребления, но в случае возрастания нагрузки на графическую подсистему автоматически увеличивает частоту. По умолчанию PowerPlay отключен, для включения следует передать ядру параметр .
Новая версия Media controller API расширяет поддержку устройств Video4Linux и позволяет использовать функциональность мультимедиаконтроллера в других подсистемах, таких как DVB, ALSA и IIO.
В KVM (Kernel-Based Virtual Machine) много сделано для поддержки архитектуры s390 (теперь она может использовать до 248 vCPU), ARM/ARM64 и улучшения работы x86 в Hyper-V.
Установка ядра 4.5 в Ubuntu
Самый простой способ познакомиться с новым ядром — использовать сборку от Ubuntu Kernel Team. После всестороннего тестирования новое ядро попадает в , но обычно на это уходит время.
После перезагрузки можем работать.
Ядра Unix-подобных систем
Ядро Unix являлось первой практической реализацией новых идей и открытий 60-70-х годов XX века в области создания операционных систем.
Unix имеет простое монолитное ядро, в котором почти все представляется в виде файлов. Настройки хранятся в текстовых файлах, оборудование также имеет файловый интерфейс. Unix была написана на языке C, и это сделало ее переносимой с одной аппаратной платформы на другую. В Unix были впервые реализованы так называемые многозадачность и многопоточность, виртуальная память и многое другое.
В 80-х годах Unix-системы начали множиться и видоизменяться. Некоторые умы вовремя спохватились и создали специальные стандарты, обеспечивающие совместимость систем. Это значит, что программа, написанная для одной Unix-подобной системы, должна работать в другой. Стандарты назвали POSIX.