
LAVA: Масштабное автоматизированное добавление уязвимостей
Оценка и улучшение инструментов поиска ошибок в настоящее время затруднены из-за нехватки корпусов с эталонной достоверностью (т.е. программного обеспечения, имеющего известные ошибки с триггерными входами). LAVA пытается решить эту проблему, автоматически внедряя ошибки в программное обеспечение. Каждая ошибка LAVA сопровождается входным сигналом, который её активирует, в то время как обычные входные данные исключительно редко это делают. Эти уязвимости являются синтетическими, но, как мы утверждаем, всё ещё реалистичными в том смысле, что они встроены глубоко внутрь программ и активируются реальными входными данными. Наша работа формирует основу подхода к генерации больших корпусов уязвимостей с эталонной достоверностью по требованию, что позволяет проводить строгую оценку инструментов и предоставляет высококачественную цель для разработчиков инструментов.
LAVA является результатом сотрудничества между MIT Lincoln Laboratory, NYU и Northeastern University.
Последняя версия ветки master LAVA автоматически собирается как образ Docker на основе Ubuntu 22.04 и публикуется на Docker Hub. Большинство пользователей захотят использовать контейнер lava, в котором установлены PANDA и LAVA вместе с их зависимостями времени выполнения, но без артефактов сборки или исходного кода, чтобы уменьшить размер контейнера.
Чтобы использовать контейнер 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/.
ПРИМЕЧАНИЕ: Пакет Python требует файл SQL, сгенерированный при компиляции бинарных файлов, который помещается в python/src/pyroclastic/data/lava.sql.
Без этого файла пакет Python не будет работать корректно.
В качестве альтернативы вы можете вручную установить зависимости LAVA, а затем собрать из исходного кода.
Загрузите пакеты Debian, находящиеся в релизах. Затем установите пакет Python: pip install pyroclastic.
Затем запустите init_host, чтобы сгенерировать host.json в вашей директории ~/.lava.
Этот файл используется LAVA для хранения настроек, специфичных
для вашей машины. Вы можете редактировать эти настройки по мере необходимости, но значения по умолчанию
должны работать, см. vars.py.
Несколько значений, о которых стоит помнить:
postgresdatabase, хотя если вы установили LAVA локально, вам, вероятно, следует изменить его на localhostПРИМЕЧАНИЕ: Вам также потребуются две переменные окружения для базы данных Postgres SQL:
POSTGRES_PASS — пароль для пользователя Postgres SQLPOSTGRES_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 является результатом нескольких лет разработки многих людей; частичный (в алфавитном порядке) список участников приведен ниже: