Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
kernel-c-to-rust-spike — Укрепление C-парсеров ядра с помощью переписывания на Rust + дифференциального фаззинга + формальной верификации. Первая цель: UVC (CVE-2024-53104). | Kitploit
Инструменты/GitHubGitHub/runtimeverification/kernel-c-to-rust-spike
Статический анализАнализ уязвимостейОбратная инженерияФаззингАнализ Бинарных ФайловСтатьи и ИсследованияОбучение и Образование
GitHubruntimeverification/kernel-c-to-rust-spike

kernel-c-to-rust-spike

Укрепление C-парсеров ядра с помощью переписывания на Rust + дифференциального фаззинга + формальной верификации. Первая цель: UVC (CVE-2024-53104).

Репозиторий
2853 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Укрепление ядра путём переписывания с C на Rust: парсер дескрипторов UVC

Можно ли укрепить критичный для безопасности парсер ядра Linux на C, переписав его на Rust, показав эквивалентность переписанной версии оригиналу и затем формально её верифицировав? Этот эксперимент проходит полный цикл на одной цели: парсере дескрипторов видео UVC (uvc_parse_format/uvc_parse_frame из drivers/media/usb/uvc/, v7.2-rc2), выбранном потому, что он нёс две независимые CVE, связанные с безопасностью памяти, с разницей в шестнадцать лет (CVE-2008-3496, CVE-2024-53104, последняя входит в каталог CISA KEV).

Цикл и что установил каждый шаг

  1. Извлечение C-листа (c/). Логика разбора скопирована из ядра байт в байт; заглушено только окружение (// SPIKE-STUB). Компилируется в библиотеку с C-ABI. Извлечённый лист включает проход подсчёта и выделение нужного размера, поэтому класс ошибок CVE-2024-53104 (разбор пишет за пределы того, что выделил подсчёт) достижим, а не абстрагирован.

  2. Переписывание на Rust (rust/). Тот же лист разбора на безопасном Rust, тот же C-ABI и структура результата. Каждое отклонение от C помечено // DEVIATION и задокументировано.

  3. Дифференциальный фаззинг (fuzz/). Стенд LibAFL на стабильном rustc прогоняет обе реализации на одном входе и сравнивает выходы поле за полем. Результат: после исправления одного расхождения при портировании в месте знакового переполнения, зависящего от компилятора, — ноль расхождений на 54 019 исполнениях при 93% покрытии рёбер. На точном коде v7.2-rc2 выход за границы недостижим (обе CVE исправлены). Опциональный негативный контроль (--features vuln, зеркально в обоих языках) возвращает несоответствие CVE-2024-53104: на одном и том же входе C выполняет запись за границы кучи (ASan), а Rust безопасно паникует. Подробности: fuzz/RESULTS.md.

  4. Формальная верификация (verify/). Точный Rust-лист извлекается через Charon и Aeneas в Lean 4 без sorry в сгенерированном коде и без блокировки из-за объединений (в отличие от эксперимента с Binder). Две теоремы, в verify/VERIFY-REPORT.md и ROADMAP.md:

    • Полная безопасность на любом входе (каждый исход — это ok / контролируемый fail / незавершение, но никогда исход неопределённого поведения): доказана, без sorry. Это делает явным, в виде проверенного утверждения, свойство безопасности памяти, которого нет у C.
    • Отсутствие паники на корректном входе (паника возникает только на некорректном входе, где она является намеренным безопасным поведением, заменяющим запись за границы в C): в работе. Инвариант соответствия подсчёта и записи, нарушение которого и есть CVE-2024-53104, доказан без sorry, вместе с двумя переиспользуемыми принципами рассуждения о циклах Aeneas и отсутствием деления для 5 структурно завершающихся циклов. Остаток сводится к именованному ядру функциональной корректности позиционного обхода (четыре сформулированные леммы); см. ROADMAP.md.

Статус

Цикл продемонстрирован от начала до конца на одной цели. Эквивалентность переписанной версии C показана дифференциальным фаззингом; различие в безопасности памяти сделано наглядным негативным контролем; Rust чисто извлекается в Lean, и его свойство полной безопасности проверено машиной. Для теоремы об отсутствии паники инвариант подсчёта (ядро CVE-2024-53104) доказан без sorry, а оставшаяся работа сведена к именованному ядру функциональной корректности, сформулированному, но ещё не доказанному. Полный статус доказательств и открытые леммы — в ROADMAP.md.

Структура

  • c/ — извлечённый C-лист и его заглушки
  • rust/ — переписанная версия на безопасном Rust
  • fuzz/ — дифференциальный фаззер LibAFL, результаты и контроль класса CVE
  • verify/ — извлечение Charon/Aeneas/Lean и теоремы
  • ROADMAP.md — статус доказательств и оставшиеся открытые леммы
  • OPEN_CHALLENGES.md — конкретные задачи, которые может взять участник
  • */README.md, fuzz/RESULTS.md, verify/VERIFY-REPORT.md — детали по каждому этапу

Окружение

Ядро v7.2-rc2 (эталон только для чтения). Rust stable 1.94.0. LibAFL 0.15. Charon 909ff09a (v0.1.220, --preset=aeneas), Aeneas c2015b86, Lean/mathlib v4.31.0.

Скачать инструмент