HiFuzz: иерархическое обучение с подкреплением для семантически-осознанного фаззинга процессоров
Фаззинг процессоров — это метод тестирования, который подает на вход процессору случайные или мутированные программы, чтобы найти ошибки и уязвимости. Однако традиционные подходы часто неэффективны, так как случайные мутации не учитывают семантику инструкций и не могут достичь глубоких архитектурных

Фаззинг процессоров — это метод тестирования, который подает на вход процессору случайные или мутированные программы, чтобы найти ошибки и уязвимости. Однако традиционные подходы часто неэффективны, так как случайные мутации не учитывают семантику инструкций и не могут достичь глубоких архитектурных состояний. Новая разработка HiFuzz решает эту проблему, используя иерархическое обучение с подкреплением для генерации тестовых программ, которые целенаправленно исследуют внутренние состояния процессора.
Что такое HiFuzz и как он работает
HiFuzz — это фреймворк для фаззинга процессоров, который использует иерархическое обучение с подкреплением. В отличие от традиционных мутационных фаззеров, HiFuzz генерирует тестовые программы в два этапа. Агент верхнего уровня, названный Program Agent, определяет глобальную структуру программы: последовательность базовых блоков и управляющие потоки. Агент нижнего уровня, Basic Block Agent, заполняет каждый базовый блок конкретными инструкциями, выбирая их из набора возможных. Такая иерархия позволяет создавать семантически осмысленные программы, которые могут достигать редких и глубоких состояний процессора.
Почему это важно для верификации процессоров
Современные процессоры становятся всё сложнее, и их верификация требует тестов, способных достигать редких и глубоких состояний. Традиционный мутационный фаззинг часто неэффективен из-за случайных изменений, которые не учитывают семантику инструкций. HiFuzz решает эту проблему, используя структурированную генерацию и внутренние сигналы вознаграждения, что повышает покрытие кода и скорость обнаружения ошибок. В частности, фреймворк использует адаптивный механизм покрытия и семантически-осознанный кодировщик базовых блоков, который даёт внутреннюю обратную связь агенту. Это позволяет преодолеть проблему разреженности наград, когда агент получает сигнал вознаграждения только при достижении нового покрытия.
Как HiFuzz превосходит существующие фаззеры
Эксперименты на трёх реальных RISC-V ядрах показали, что HiFuzz значительно превосходит современные фаззеры, включая AFL, libFuzzer и другие, по покрытию и количеству обнаруженных ошибок. В среднем HiFuzz достигал на 30% большего покрытия и находил в два раза больше уникальных ошибок по сравнению с лучшими альтернативами. Это достигается за счёт того, что иерархическое обучение с подкреплением позволяет генерировать программы, которые целенаправленно исследуют сложные пути выполнения, недоступные для случайных мутаций.
Какие проблемы решает HiFuzz
Одной из главных проблем в фаззинге процессоров является разреженность наград: агент получает сигнал вознаграждения только тогда, когда достигает нового покрытия, что происходит редко. HiFuzz решает эту проблему с помощью семантически-осознанного кодировщика базовых блоков, который предоставляет внутреннюю обратную связь агенту на каждом шаге. Это позволяет агенту учиться более эффективно, даже если новые состояния достигаются редко. Кроме того, иерархическая структура позволяет разделить задачу генерации программы на две подзадачи: выбор структуры и заполнение инструкциями, что упрощает обучение.
Кого затронет эта технология
Разработчики процессоров и верификаторы, особенно работающие с открытой архитектурой RISC-V, а также исследователи в области тестирования программного и аппаратного обеспечения. HiFuzz может быть интегрирован в пайплайны верификации и сократить время поиска уязвимостей. Также технология может быть полезна для компаний, разрабатывающих собственные процессоры, таких как Intel, AMD и ARM, а также для академических исследователей, изучающих методы верификации.
Что пока неизвестно и какие ограничения
Авторы не раскрывают детали реализации кодировщика и точные параметры обучения. Также неизвестно, как HiFuzz поведёт себя на других архитектурах, отличных от RISC-V. Исходный код фреймворка пока не опубликован, что затрудняет воспроизведение результатов и использование в промышленности. Кроме того, обучение иерархической модели требует значительных вычислительных ресурсов, что может быть ограничением для некоторых команд.
Какие перспективы у HiFuzz
HiFuzz открывает новое направление в фаззинге процессоров, используя иерархическое обучение с подкреплением. В будущем авторы планируют расширить фреймворк на другие архитектуры, такие как ARM и x86, а также улучшить кодировщик для более точной обратной связи. Возможна интеграция с симуляторами и эмуляторами для ускорения тестирования. Если исходный код будет опубликован, HiFuzz может стать стандартным инструментом для верификации процессоров.