Защита ядра Linux — очень сложная предметная область. Она включает большое количество сложно взаимосвязанных понятий, и было бы полезным иметь ее графическое представление. Поэтому я разработал карту средств защиты ядра Linux. Вот легенда:



Итак, карта содержит следующие объекты:

  • классы уязвимостей;
  • техники их эксплуатации для проведения атак;
  • механизмы выявления ошибок;
  • технологии защиты.

В свою очередь технологии защиты ядра разнородны. Одни входят в состав ванильного ядра Linux, другие поставляются отдельно по различным причинам (например, есть коммерческие средства обеспечения безопасности). Существуют механизмы защиты ядра, которые требуют поддержки аппаратного обеспечения. 

Таким образом, тема безопасности ядра Linux достаточно обширна, и разработанная карта помогает в ее изучении и анализе. Каждая линия, соединяющая объекты на карте, обозначает их взаимное влияние, суть которого следует выяснять в документации. Данный принцип может быть проиллюстрирован на фрагменте общей карты. На схеме 1 представлены свойства безопасности технологии STACKLEAK.



Схема 1. Свойства безопасности технологии STACKLEAK

PAX_MEMORY_STACKLEAK — это коммерческая технология защиты ядра Linux, противодействующая эксплуатации следующих типов уязвимостей: переполнение стека в глубину, использование неинициализированных переменных и утечка информации в пользовательское пространство. Карта содержит идентификаторы данных классов уязвимостей (CWE, Common Weakness Enumeration).

Технология STACKLEAK была привнесена в ванильное ядро Linux, что отражено на схеме. Есть также механизм отладки KMSAN, позволяющий обнаружить при тестировании ядра использование неинициализированных переменных и утечку информации в пользовательское пространство.

Стоит отметить, что данная карта не затрагивает вопрос уменьшения периметра атаки для ядра. В сущности, отключение почти любого функционала, уменьшающее размер исполняемого файла, сокращает и периметр атаки. А в данном проекте основное внимание направлено на средства безопасности, обеспечивающие самозащиту ядра Linux против эксплуатации уязвимостей.

На схеме 2 представлена полная карта для ядра версии 5.1 (по клику изображение откроется в полном размере).


Схема 2. Карта средств защиты ядра Linux v5.1

Карта постоянно развивается, ее нужно обновлять как минимум каждый релиз ядра. Поэтому удобно иметь исходник в текстовом виде и вести его в системе контроля версий. Кроме того, чтобы не приходилось вручную расставлять объекты с минимальным количеством пересечений связей, для создания карты был выбран язык DOT, а схема автоматически генерируется пакетом GraphViz с помощью следующей команды:

dot -Tsvg linux-kernel-defence-map.dot -o linux-kernel-defence-map.svg

Карта средств защиты ядра Linux — это открытый проект, лицензированный согласно GPL v3.0. Репозиторий расположен на GitHub. Данный проект крайне полезен для:

  • отслеживания актуального состояния безопасности ядра,
  • разработки моделей угроз ИС на базе GNU/Linux,
  • выбора соответствующих средств защиты.

Кроме того, карта средств защиты ядра Linux призвана помочь в изучении исходного кода, документации и других источников информации по данной теме:


А для автоматизации проверки опций безопасности в конфигурационном файле ядра Linux я создал проект kconfig-hardened-check, который активно развивается благодаря открытой коллективной работе. Утилита поддерживает архитектуры x86_64, arm64, x86_32 и arm.

Приглашаю к участию в разработке карты средств защиты ядра Linux и утилиты kconfig-hardened-check.  

Комментарии (10)


  1. KonstantinSpb
    24.06.2019 19:53

    … или купить grsecurity патч


    1. powerman
      24.06.2019 20:15
      +1

      Я бы купил, да только отказываются его продавать частным лицам и мелкому бизнесу! Даже цену не говорят. Кто купил, расскажите хоть, какой порядок у цены?


    1. a13xp0p0v Автор
      24.06.2019 20:16

      или купить grsecurity патч

      Да, карта наглядно показывает, насколько большой вклад grsecurity внесли в безопасность ядра. Эти парни отлично знают, что делают.

      Только с тем, чтобы купить у них поддержку, есть огромные сложности.


  1. VladSMR
    25.06.2019 11:42

    Спасибо за статью :-)

    Цитирую: «Существуют механизмы защиты ядра, которые требуют поддержки аппаратного обеспечения.»
    Нельзя ли немного подробнее про эту тему?
    Если конечно это не только MMU :-)


    1. a13xp0p0v Автор
      25.06.2019 12:08

      Средства защиты, которые требуют аппаратной поддержки, в легенде обозначены как «HW Defences» бирюзового цвета.
      Среди них:
      — SMEP (Supervisor Mode Execution Protection) для X86 и ее аналог PXN (Privileged eXecute-Never) для ARM,
      — SMAP (Supervisor Mode Access Prevention) для X86 и ее аналог PAN (Privileged Access-Never) для ARM.


  1. Self_Perfection
    25.06.2019 11:48
    +1

    Но почему не

    dot -Tsvg linux-kernel-defence-map.dot -o linux-kernel-defence-map.svg
    ? И обновлять отрендеренную карту можно будет вообще не смущаясь, прямо из pre-commit hook без опасений, что каждое обновление будет распухать репу на мегабайт.


    1. a13xp0p0v Автор
      25.06.2019 12:48

      Спасибо за дельный совет.
      Уже применил:
      github.com/a13xp0p0v/linux-kernel-defence-map/commit/eab4d2ba3e3d7d5f22e28381b733220f70d8b443
      (если у вас есть учетка на github, пришлите, пожалуйста, для ссылки)


      1. Self_Perfection
        25.06.2019 13:22

        На гитхабе я github.com/Self-Perfection


  1. d1g1
    27.06.2019 11:19
    +1

    Я думаю, что в итоговом перечне ссылок есть место также и проекту LKRG — Linux Kernel Runtime Guard www.openwall.com/lkrg


    1. a13xp0p0v Автор
      27.06.2019 13:58

      Спасибо, верное замечание.

      Добавил ссылку на модель угроз LKRG.
      И добавил LKRG в карту. Это объект «Out-of-tree Defence», который противодействует методам эксплуатации «Metadata Corruption» и «Changing Kernel Image».

      github.com/a13xp0p0v/linux-kernel-defence-map/commit/8749c74f68963967ceafd3c760cb259ce9851143