
lava v3.3.0
LAVA: Масштабное автоматизированное добавление уязвимостей
LAVA: Автоматизированное добавление уязвимостей в больших масштабах
Оценка и улучшение инструментов поиска ошибок в настоящее время затруднены из-за нехватки корпусов с эталонными данными (то есть программного обеспечения с известными ошибками и входными данными, которые их вызывают). LAVA пытается решить эту проблему путём автоматического внедрения ошибок в программное обеспечение. Каждая ошибка LAVA сопровождается входными данными, которые её вызывают, тогда как обычные входные данные крайне маловероятно приведут к её срабатыванию. Эти уязвимости синтетические, но, как мы утверждаем, всё же реалистичные в том смысле, что они встроены глубоко в программы и вызываются реальными входными данными. Наша работа составляет основу подхода к генерации больших корпусов эталонных уязвимостей по запросу, что позволяет проводить строгую оценку инструментов и предоставляет высококачественную цель для разработчиков инструментов.
LAVA является продуктом сотрудничества между MIT Lincoln Laboratory, NYU и Northeastern University.
Быстрый старт
Docker
Последняя версия ветки master LAVA автоматически собирается как docker-образ на основе Ubuntu 22.04 и публикуется в Docker Hub. Большинство пользователей захотят использовать контейнер lava, в котором установлены PANDA и LAVA вместе с их runtime-зависимостями, но без артефактов сборки или исходного кода, чтобы уменьшить размер контейнера.
Чтобы использовать контейнер lava, вы можете загрузить его из Docker Hub:
$ docker pull pandare/lava
Или соберите из этого репозитория:
$ DOCKER_BUILDKIT=1 docker build -t pandare/lava:local .
Если Docker Engine работает непосредственно внутри WSL и шаги сборки не могут получить доступ к сети (например, APT сообщает Temporary failure resolving), попробуйте использовать сеть хоста WSL для сборки:
DOCKER_BUILDKIT=1 docker build --network=host -t pandare/lava:local .
Это относится только к шагам сборки; контейнеры, запускаемые позже, используют собственные сетевые настройки.
Рабочее пространство контейнера
Из рабочего пространства, содержащего target_bins/ и target_configs/, используйте
лаунчер, чтобы открыть оболочку или выполнить команду. Он монтирует рабочее пространство по тому же
абсолютному пути, чтобы пути, записанные в host.json, оставались действительными между запусками.
Замените /path/to/lava на каталог с лаунчером:
/path/to/lava/scripts/docker-shell.sh
/path/to/lava/scripts/docker-shell.sh -- lava-init
/path/to/lava/scripts/docker-shell.sh -- lava --help
Docker запускается с вашими UID/GID и хранит свой записываемый домашний каталог в
.lava-container-home/ внутри рабочей области. Если на хосте существует ~/.panda/,
лаунчер монтирует его как кэш PANDA контейнера, чтобы существующие QCOW-файлы и
файлы ядра переиспользовались. Загрузки и изменения кэша сохраняются в этом каталоге хоста.
Используйте --panda-cache /path/to/cache, чтобы выбрать другой существующий кэш.
Без кэша на хосте PANDA сохраняет загрузки в .lava-container-home/.panda/.
Лаунчер по умолчанию использует
pandare/lava:latest; используйте --image pandare/lava:v3.3.4, чтобы выбрать
релиз, или --image pandare/lava:local для локальной сборки, описанной выше.
PostgreSQL должен быть уже запущен. Экспортируйте POSTGRES_USER и
POSTGRES_PASSWORD для эндпоинта базы данных, доступного изнутри контейнера. Для базы данных в сети Docker передайте --network NETWORK и используйте имя её контейнера в качестве host.
localhost внутри Docker относится к самому контейнеру LAVA. После настройки:
/path/to/lava/scripts/docker-shell.sh --network NETWORK -- lava -ak toy
-k удаляет существующие данные проекта без подтверждения. Лаунчер заменяет
старый интерфейс, в котором первым указывалось имя проекта; теперь команды следуют после --.
HPC с Apptainer / Singularity
На выделенном вычислительном узле используйте среду выполнения, предоставляемую кластером. Один раз загрузите образ с указанием версии в постоянное хранилище, а затем повторно используйте его для заданий:
apptainer pull /path/to/scratch/lava-v3.3.4.sif docker://pandare/lava:v3.3.4
/path/to/lava/scripts/docker-shell.sh --runtime apptainer \
--image /path/to/scratch/lava-v3.3.4.sif -- lava-init
/path/to/lava/scripts/docker-shell.sh --runtime apptainer \
--image /path/to/scratch/lava-v3.3.4.sif -- lava -tc toy
Используйте --runtime singularity, если это установленная команда. Эти среды выполнения
используют идентичность и сеть пользователя хоста; настройте host.json для доступного
сервиса PostgreSQL и экспортируйте те же учётные данные. Лаунчер не запускает
базу данных и не запрашивает выделение ресурсов планировщиком. Запускайте его внутри интерактивного
выделения ресурсов вашего кластера или пакетного скрипта. Это не подтверждает, что образ релиза
поддерживает полный конвейер; проверьте установку образа и запустите
тестовый проект перед отправкой большого задания на майнинг.
Ubuntu, Debian
Локальная установка
В системе под управлением 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.
Финальные шаги
Использование host.json
Далее запустите init-host, чтобы сгенерировать host.json в вашем текущем рабочем каталоге.
Этот файл используется LAVA для хранения настроек, специфичных
для вашей машины. Вы можете редактировать эти настройки по необходимости, но значения по умолчанию
должны работать, см. vars.py.
Несколько значений, которые стоит иметь в виду:
- host — это имя базы данных Postgres SQL со всеми багами LAVA. В настоящее время по умолчанию используется
database, хотя если вы установили LAVA локально, вам, вероятно, следует изменить это наlocalhost
ПРИМЕЧАНИЕ: вам также нужны две переменные окружения для базы данных Postgres SQL:
POSTGRES_PASS— это пароль для пользователя Postgres SQL`POSTGRES_USER— это имя хоста для базы данных Postgres SQL
Конфигурации проектов
Конфигурации проектов расположены в каталоге target_configs, где
каждая конфигурация находится по пути target_configs/projectname/projectname.json.
Пути, указанные в этих файлах конфигурации, относительны значений, заданных
в вашем файле host.json.