Linux Plumbers Conference 2021 [part 2]

Продолжим рассматривать материалы конференции Linux Plumbers 2021, но на этот раз не будет привязываться к конкретному треку. Прежним останется только повышенный интерес к докладам, связанным с информационной безопасностью.

Compiler Features for Kernel Security

Доклад сразу пропускает общеизвестные опции компилятора, такие как стековые канарейки и позиционно-независимое исполнение.

Рассматривались следующие возможности компиляторов:

  • реализация отдельных “канареек” для каждого потока ядра, флаги:

    -mstack-protector-guard=sysreg

    -mstack-protector-guard-reg=sp_el0

    -mstack-protector-guard-offset=0

    поддерживаемые в компиляторах Clang и GCC платформы для указанных выше флагов: x86, powerpc, arm64, riscv(только GCC);

  • очистка регистров при выходе из функций (добавилась в GCC 11, рассматривал ее в первой части обзора конференции), флаг:

    -fzero-call-used-regs

    сделал pull request в карту средств защиты ядра Linux про CONFIG_ZERO_CALL_USED_REGS ядра, добавляющий сборку ядра с данной опцией;

  • автоматическая инициализация стековых (локальных) переменных (есть в Clang, реализуется в GCC 12), флаг:

    -ftrivial-auto-var-init={zero,pattern}

  • проверка выхода за границы массивов, флаги:

    -Warray-bounds

    -Wzero-length-bounds

    -Wzero-length-array //предупреждение об использовании массива нулевого размера, если он перекрывается другим массивом

    -fsanitize=bounds //проверка границ массивов

    -fsanitize=bounds-strict //проверка границ массивов

  • защита от переполнения типа int, флаги:

    -fsanitize=signed-integer-overflow //есть в GCC и Clang

    -fsanitize=unsigned-integer-overflow // есть только в Clang

  • флаги для Control Flow Integrity:

    -flto //Link Time Optimization
    -flto=thin //Link Time Optimization
    -mbranch-protection=pac-ret[+leaf] //backward edge Control Flow Integrity
    -fsanitize=shadow-call-stack //backward edge Control Flow Integrity
    -fcf-protection=branch //forward edge Control Flow Integrity
    -mbranch-protection=bti //forward edge Control Flow Integrity
    -fsanitize=cfi //forward edge Control Flow Integrity
    
  • меры защиты от Spectre v1

    -mspeculative-load-hardening

  • рандомизация структур в программах на языке C:

    __attribute__((randomize_layout))

.

A bug is NOT a bug is NOT a bug: Differences in bug classes, bug tracking and bug impact

Доклад про системы выявления и ведения записей об уязвимостях ядра Linux.

Рассмотрены уязвимости обнаруженные:

  • пользователями ядра;
  • автоматизированными системами тестирования;
  • компиляторами;
  • фазерами;
  • и статическими анализаторами,

а также системы интеграции всех этих данных.

Measuring Code Review in the Linux Kernel Development Process

Доклад про вклад разработчиков в процесс разработки ядра Linux. Intel, Google, IBM - компании с наибольшим количество сотрудников, участвующих в разработке ядра. drivers/hid/hid-ids.h - самый популярный файл, больше всего коммитов. 7.94% трафика обсуждения патчей формируют боты.

Detecting semantic bugs in the Linux kernel using differential fuzzing

Доклад про использование дифференциального фаззинга для обнаружения семантических ошибок средством syz-verifier. Суть метода в проведения фаззинга системных вызовов нескольких версий ядра Linux syzkaller’ом на одинаковых данных. При выявлении различий в выходных данных на разных версиях ядра, считается что хотя бы в одной из них имеется ошибка. Дальше дело за code review.

Firmware and Bootloader Logging

Доклад про логирование работы загрузчика GRUB2 и про возможность распространения данного подхода на прошивки и предзагрузчики.

Traceability and code coverage: what we have in Linux and how it contributes to safety

Доклад про тестирование и покрытие кода ядра Linux в рамках проекта Kernel CI (все тесты также open-sources, как я понял). Для сбора покрытия используется lcov. Представлены скрипты и конфигурационные файлы для сбора покрытия, задан вопрос в массы насколько тема покрытия кода ядра актуальна и нужна, и какой процент покрытия реально достижим (90% мне кажется очень круто, цифра 70 выглядит более реалистичной).

Guider: Linux Tracing using Python

Доклад про инструмент Guider, который предоставляет удобный графический интерфейс для различных функции трассировки Linux с использованием ftrace, ptrace и procfs. Написан на python, работает Linux и Android, ограниченно на Windows и MacOS. Функции:

  • мониторинг:
    • ресурсов;
    • задач;
    • функций (C, C++, Rust, Go, Java, Node.js, Python …);
    • системных вызовов;
    • файлов;
  • профилирование:
    • ресурсов (CPU, Memory, Network, Storage);
    • задач;
  • трассировка:
  • визуализация ресурсов, шедуллера, стека вызовов;
Written on October 2, 2021