Назад к обновлениям
New releaseSep 15, 2026

lava v3.3.1

LAVA: Масштабное автоматизированное добавление уязвимостей

Поделиться

LAVA: Автоматизированное добавление уязвимостей в больших масштабах

Publish Lava Package and Container

Lava Tests

Оценка и улучшение инструментов поиска ошибок в настоящее время затруднены из-за нехватки корпусов с эталонными данными (то есть программного обеспечения с известными ошибками и входными данными, которые их вызывают). 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.

Категории