Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Formal Verification of a Linux Security Module

Denis
July 09, 2018

Formal Verification of a Linux Security Module

Формальная верификация модуля безопасности Linux. Презентация про проект AstraVer ИСП РАН. Доклад представлен на сессии коротких докладов летней школы Мастерчейн. НИУ ВШЭ, Москва, 09 июля 2018.

Denis

July 09, 2018
Tweet

More Decks by Denis

Other Decks in Research

Transcript

  1. Летняя школа Masterchain, Москва, 2018 Модуль безопасности ядра Linux (Linux

    Security Modules) фото фото Ядро Процесс Ресурс Модуль Безопасности (SELinux, AppArmor, …) Структуры данных Интерфейс LSM Стандартные проверки доступа Проверка аргументов Системный вызов Реализует интерфейс
  2. Летняя школа Masterchain, Москва, 2018 Вопросы корректности работы системы с

    модулем безопасности (1) фото фото 1. Код модуля безопасности • Правилен ли код модуля безопасности? • Корректно ли модуль безопасности реализует модель безопасности (функциональные требования)? 2. Интерфейс взаимодействия с ядром • Правильно ли модуль безопасности использует интерфейсы ядра? 3. Корректность работы всей системы • Правильно ли ядро работает вместе с модулем безопасности?
  3. Летняя школа Masterchain, Москва, 2018 Вопросы корректности работы системы с

    модулем безопасности (2) фото фото 1. Код модуля безопасности • Дедуктивная верификация кода модуля безопасности ядра (разработка формальных спецификаций) 2. Интерфейс взаимодействия с ядром • Трансляция формальных спецификаций в исполняемые проверки (assert) 3. Корректность работы всей системы • Динамическая верификация (runtime verification) работы ядра ОС на соответствие формальной модели
  4. Летняя школа Masterchain, Москва, 2018 1.Формальная спецификация кода на Си

    (1) (функция) фото фото • Что можно сказать о функции по её коду? • Это чистая функция; • Она вычисляет среднее между двумя целыми числами; • При определённых условиях возможно целочисленное переполнение.
  5. Летняя школа Masterchain, Москва, 2018 1.Формальная спецификация кода на Си

    (2) (контекст вызова) фото фото • Контекст: функция двоичного поиска; • Индексы l и h неотрицательны, l не превосходит h; • Возможна ошибка выхода за границу массива при целочисленном переполнении в avr.
  6. Летняя школа Masterchain, Москва, 2018 1.Формальная спецификация кода на Си

    (3) (требования к функции) фото фото • Описать контекст вызова: : × → ⊤, ⊥ , ≡ ≥ 0 ∧ ≥ 0 ∧ ≤ • Описать требования, которым должны удовлетворять результаты: : ×× → {⊤, ⊥} , , ≡ = + 2
  7. Летняя школа Masterchain, Москва, 2018 1.Формальная спецификация кода на Си

    (4) (модель ошибки) фото фото • Формализовать понятие ошибки (целочисленное переполнение): _: → {⊤, ⊥} _ ≡ _ ≤ ≤ _ • Формализовать код программы: функция , которая возвращает результат (, ) в соответствии со своим программным кодом, если завершается и завершается без ошибки, иначе возвращается специальное значение • Доказать полную корректность: ∀, , ⇒ , ≠ && , , ,
  8. Летняя школа Masterchain, Москва, 2018 1.Формальная спецификация кода на Си

    (5) (Frama-C ACSL) (исправление ошибки) Статический анализ Условие верификации Исправление кода Уточнение спецификаций
  9. Летняя школа Masterchain, Москва, 2018 2.Трансляция спецификаций в исполняемые (Frama-C

    E-ACSL) Динамический анализ Спецификации Исполняемый код
  10. Летняя школа Masterchain, Москва, 2018 3.Формальная модель. Функциональные требования (Event-B)

    (непротиворечивость требований) Входные параметры Модельная операция Предусловия для операции Обновление состояния модели
  11. Летняя школа Masterchain, Москва, 2018 3.Работа ядра вместе с модулем

    безопасности Динамический анализ Ядро Модуль Тесты Трасса Воспроизведение на модели • Сбор трассы системных вызовов • Ядро + модуль безопасности • Запросы на доступы • Тесты и фаззинг (syzkaller) • Воспроизведение трасс на формальной модели • Поиск ошибок: на модели доступ запрещен, в системе был дан
  12. Летняя школа Masterchain, Москва, 2018 Дополнительная информация • Проект AstraVer

    – верификация модуля безопасности дистрибутива Astra Linux (сертификация МО, ФСТЭК, ФСБ) http://www.ispras.ru/technologies/astraver_toolset/ • «Моделирование и верификация политик безопасности управления доступом в операционных системах» П.Н. Девянин, Д.В. Ефремов, В.В. Кулямин, А.К. Петренко, А.В. Хорошилов, И.В. Щепетков http://www.ispras.ru/publications/2018/security_policy_mo deling_and_verification/ • Базовая кафедра «Системное программирование» ИСП РАН ВШЭ https://cs.hse.ru/dse/sp/ • Спецификации библиотечных функций ядра Linux https://github.com/evdenis/verker/
  13. 101000, Россия, Москва, Мясницкая ул., д. 20 Тел.: (495) 621-7983,

    факс: (495) 628-7931 www.hse.ru Public Key Fingerprint 7654 0336 0294 0DF1 920F E403 B522 95B0 3350 301F [email protected]
  14. Летняя школа Masterchain, Москва, 2018 Определения • Верификация - проверка

    соответствия программного обеспечения предъявляемым к нему требованиям; • Дедуктивная верификация – представление корректности программы как набора математических утверждений, называемых условиями верификации, выполнение которых проверяется автоматическими или интерактивными доказателями теорем; • Спецификация - набор требований и параметров, которым удовлетворяет некоторый объект (представлена в виде мат. модели, тестовых наборов, формальной спецификации)
  15. Летняя школа Masterchain, Москва, 2018 Предположения о работе системы •

    Компилятор и линковщик работают корректным образом • В программном обеспечении, использующемся при верификации, не произошло ошибок • Компьютер функционирует таким образом, как мы думаем об этом (rowhammer) • Нижележащий слой ПО (например, ОС, прошивка сетевой карты, микрокод процессора) функционирует в рамках нашего представления о том, что он должен делать и что не должен делать (и ещё не содержит ошибок) • Пользователь компьютера, если он есть, специально не «пакостит» • Выполнены предположения о входных данных программы, о начальном состоянии
  16. Летняя школа Masterchain, Москва, 2018 Что дает формальная верификация •

    Гарантии того, что программное обеспечение функционирует в точном соответствии с требованиями, к нему предъявляемыми, на всех входных данных, начальных состояниях, при любом поведении окружения * ** • * В предположении что все предположения выполнены • ** И не осталось предположений, которых мы не занесли в списочек
  17. Высшая школа экономики, Москва, 2016 Стек инструментов дедуктивной верификации фото

    фото CIL CIL with annotations С program with ACSL annotations Jessie program (with annotations built-in) Jessie translator Why3 support Why3 VC generator Why3 WhyML modules Verification conditions in Why3ML VC transformations Why3 encoders + drivers Logical formulas/scripts in SMT-LIB/SMT-LIBv2/native format Coq, PVS, Isabelle proof templates Why3 transformation/proof/shapes database Alt-Ergo Z3 CVC4 Coq PVS Why3 IDE ... Jessie2 CIL visitors (rewriters) Frama-C Jessie plugin Why3 Isabelle ...
  18. Летняя школа Masterchain, Москва, 2018 Логическая формула для солверов: код

    + спецификации Высшая школа экономики, Москва, 2016 function to_int bint : int function of_int int : bint predicate in_bounds (n:int) = -2147483648 <= n && n <= 2147483647 constant a, b, o1, o2: bint axiom H0: a >= of_int 0 && b >= of_int 0 && b >= a axiom H1: to_int o1 = 2 axiom H2: to_int o2 = (to_int a + to_int b) goal avr_safety: in_bounds 2 -> in_bounds(to_int a + to_int b) -> not to_int o1 = 0 -> in_bounds(div (to_int o2) (to_int o1))