
LAVA: Масштабное автоматизированное добавление уязвимостей
Оценка и улучшение инструментов поиска ошибок в настоящее время затруднены из-за нехватки корпусов с эталонной разметкой (то есть программного обеспечения с известными ошибками и входными данными, которые их вызывают). LAVA пытается решить эту проблему путём автоматического внедрения ошибок в программное обеспечение. Каждая ошибка LAVA сопровождается входными данными, которые её вызывают, тогда как обычные входные данные крайне маловероятно приведут к её появлению. Эти уязвимости синтетические, но, как мы утверждаем, всё же реалистичные, в том смысле, что они встроены глубоко внутри программ и вызываются реальными входными данными. Наша работа лежит в основе подхода к генерации больших корпусов уязвимостей с эталонной разметкой по запросу, что позволяет проводить строгую оценку инструментов и предоставляет качественную цель для разработчиков инструментов.
LAVA является результатом сотрудничества между MIT Lincoln Laboratory, NYU и Northeastern University.
Последняя версия ветки master LAVA автоматически собирается как docker-образ на основе Ubuntu 22.04 и публикуется в Docker Hub. Большинству пользователей понадобится контейнер lava, в котором установлены PANDA и LAVA вместе с их runtime-зависимостями, но без артефактов сборки или исходного кода, чтобы уменьшить размер контейнера.
Чтобы использовать контейнер lava, вы можете загрузить его из Docker Hub:
$ docker pull pandare/lava
Или собрать из этого репозитория:
$ DOCKER_BUILDKIT=1 docker build lava .
В системе под управлением Ubuntu 22.04 вы должны иметь возможность просто запустить bash install.sh.
Обратите внимание, что этот скрипт установки установит пакеты и внесёт изменения в вашу систему.
Вы можете удалить бинарные файлы с помощью sudo apt-get remove lava.
После завершения установки бинарного файла вы можете установить локально, запустив pip install ..
ПРИМЕЧАНИЕ: пакет Python требует SQL-файл, сгенерированный при компиляции бинарных файлов, который размещается в python/src/pyroclastic/data/lava.sql.
Без этого файла пакет Python не будет работать корректно.
В качестве альтернативы вы можете вручную установить зависимости LAVA, а затем собрать из исходного кода.
Скачайте Debian-пакеты, расположенные в разделе releases. Затем установите пакет Python pip install pyroclastic.
Далее запустите init_host, чтобы сгенерировать host.json в вашем каталоге ~/.lava.
Этот файл используется LAVA для хранения настроек, специфичных
для вашей машины. Вы можете редактировать эти настройки по мере необходимости, но значения по умолчанию
должны работать, см. vars.py.
Несколько значений, которые стоит иметь в виду:
postgresdatabase, хотя, если вы установили LAVA локально, вам, вероятно, следует изменить это на localhostПРИМЕЧАНИЕ: Вам также нужны две переменные окружения для базы данных Postgres SQL:
POSTGRES_PASS Это пароль для пользователя Postgres SQL`POSTGRES_USER Это имя хоста для базы данных Postgres SQLКонфигурации проектов расположены в каталоге target_configs, где
каждая конфигурация находится по пути target_configs/projectname/projectname.json.
Пути, указанные в этих файлах конфигурации, относительны значений, заданных
в вашем файле host.json.
Как уже упоминалось, вам следует создать пользователя Postgres SQL. Вы можете использовать скрипт, использующий переменные окружения, для следующего:
Наконец, вы можете запустить lava, чтобы действительно внедрить ошибки в программу.
Просто укажите имя проекта, который находится в каталоге target_configs, например:
lava -ak toy
Теперь у вас должна быть копия toy с ошибками!
Если вы хотите внедрить ошибки в новую цель, вам, вероятно, потребуется внести некоторые изменения. Обратитесь к How-to-Lava за руководством.
Ознакомьтесь с папкой docs, чтобы начать работу.
LAVA является результатом нескольких лет разработки многими людьми; частичный (в алфавитном порядке) список участников приведён ниже: