Эта платформа генерирует фаззинг-таргеты для реальных проектов на C/C++/Java/Python с помощью различных больших языковых моделей (LLM) и проводит их бенчмаркинг на платформе OSS-Fuzz.
Сгенерированные фаззинг-таргеты оцениваются по четырём метрикам на основе самых актуальных данных из производственной среды:
Компилируемость
Сбои во время выполнения
Покрытие во время выполнения
Разница в построчном покрытии во время выполнения по сравнению с существующими написанными вручную фаззинг-таргетами в .
OSS-Fuzz
Ниже приведён пример результатов эксперимента от 31 января 2024 г.
Эксперимент включал 1300+ бенчмарков из 297 проектов с открытым исходным кодом.
В целом, этой платформе удаётся успешно использовать LLM для генерации корректных фаззинг-таргетов (обеспечивающих ненулевой прирост покрытия) для 160 проектов на C/C++. Максимальный прирост построчного покрытия по сравнению с существующими написанными вручную таргетами составляет 29%.
Обратите внимание, что эти отчёты не являются публичными, поскольку могут содержать нераскрытые уязвимости.
Использование
Ознакомьтесь с подробным руководством по использованию — в нём описано, как запустить эту платформу и сформировать отчёты на основе результатов.
Автономное выполнение и оценка агентов
Вы также можете запускать или оценивать отдельных агентов без проведения полных экспериментов, используя встроенную среду выполнения агентов.
Подробные инструкции по запуску отдельных агентов или последовательностей агентов приведены в документации платформы.
Сотрудничество
Интересуетесь исследовательскими или open-source коллаборациями? Пожалуйста, создавайте issue или пишите нам: [email protected].
Обнаруженные ошибки
На данный момент мы сообщили о 30 новых ошибках/уязвимостях, найденных с помощью автоматически сгенерированных таргетов, созданных этой платформой:
Эти ошибки можно было обнаружить только с помощью вновь сгенерированных таргетов. Они были недостижимы с помощью существующих таргетов OSS-Fuzz.
Текущие лучшие улучшения покрытия по проектам
Проект
Общий прирост покрытия
Общий относительный прирост
Всего покрыто строк OSS-Fuzz-gen
Новые покрытые строки OSS-Fuzz-gen
Существующие покрытые строки
Всего строк в проекте
phmap
98.42%
205.75%
1601
1181
574
1120
usbguard
97.62%
26.04%
24550
5463
20979
3564
onednn
96.67%
7057.14%
5434
5434
77
210
avahi
82.06%
155.90%
3358
2814
1805
3046
pugixml
72.98%
194.95%
9015
6646
3409
7662
librdkafka
66.88%
845.57%
5019
4490
531
1169
casync
66.75%
903.23%
1171
1120
124
1678
tomlplusplus
61.06%
331.10%
4755
3652
1103
5981
astc-encoder
59.35%
177.88%
2726
1745
981
2940
mruby
48.56%
0.00%
34493
34493
0
71038
arduinojson
42.10%
85.80%
3344
1800
2098
4276
json
41.13%
66.51%
5051
3339
5020
8119
double-conversion
40.40%
88.12%
1663
779
884
1928
tinyobjloader
38.26%
77.01%
1157
717
931
1874
glog
38.18%
58.69%
895
331
564
867
cppitertools
35.78%
45.07%
253
151
335
422
eigen
35.38%
190.70%
2643
1947
1021
* «Всего строк в проекте» — это объём исходного кода тестируемого проекта, скомпилированного и скомпонованного ранее существовавшими написанными вручную фаззинг-таргетами из OSS-Fuzz.
* «Общий прирост покрытия» вычисляется с использованием «Всего строк в проекте» в качестве знаменателя. «Общий относительный прирост» — это увеличение покрытия по сравнению с прежним количеством покрытых строк.
* При компиляции новых фаззинг-таргетов может быть включён дополнительный код тестируемого проекта, что приводит к высоким процентным приростам.
Цитирование этой работы
Для получения сведений о цитировании нажмите кнопку 'Cite this repository', расположенную в правой части этой страницы GitHub.