
lava v3.3.0
LAVA: 대규모 자동 취약점 추가
LAVA: 대규모 자동 취약점 주입
버그 탐지 도구를 평가하고 개선하는 것은 현재 정답 코퍼스(즉, 트리거 입력이 있는 알려진 버그를 가진 소프트웨어)의 부족으로 인해 어렵습니다. LAVA는 소프트웨어에 버그를 자동으로 주입하여 이 문제를 해결하려고 시도합니다. 모든 LAVA 버그는 이를 트리거하는 입력과 함께 제공되지만 일반 입력은 그렇게 할 가능성이 매우 낮습니다. 이러한 취약점은 합성되었지만, 우리는 여전히 현실적이라고 주장합니다. 왜냐하면 그것들이 프로그램 깊숙이 내장되어 있고 실제 입력에 의해 트리거되기 때문입니다. 우리의 작업은 대규모 정답 취약점 코퍼스를 필요에 따라 생성하는 접근 방식의 기초를 형성하여 엄격한 도구 평가를 가능하게 하고 도구 개발자에게 고품질 목표를 제공합니다.
LAVA는 MIT Lincoln Laboratory, NYU, Northeastern University 간의 협력의 산물입니다.
빠른 시작
Docker
LAVA의 master 브랜치 최신 버전은 Ubuntu 22.04를 기반으로 자동으로 도커 이미지로 빌드되어 Docker Hub에 게시됩니다. 대부분의 사용자는 PANDA와 LAVA가 런타임 종속성과 함께 설치되어 있지만 컨테이너 크기를 줄이기 위해 빌드 아티팩트나 소스 코드가 없는 lava 컨테이너를 사용하려고 할 것입니다.
lava 컨테이너를 사용하려면 Docker Hub에서 가져올 수 있습니다:
$ docker pull pandare/lava
또는 이 저장소에서 빌드할 수 있습니다:
$ DOCKER_BUILDKIT=1 docker build lava .
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 패키지를 다운로드하세요. 그런 다음 Python 패키지 pip install pyroclastic을 설치하세요.
최종 단계
host.json 활용
다음으로 init_host를 실행하여 ~/.lava 디렉토리에 host.json을 생성하세요.
이 파일은 LAVA가 머신에 특정한 설정을 저장하는 데 사용됩니다. 필요에 따라 이러한 설정을 편집할 수 있지만 기본값이 작동해야 합니다. vars.py를 참조하세요.
기억해야 할 몇 가지 값은 다음과 같습니다:
- pguser 데이터베이스 사용자의 이름이며, 현재 기본값은
postgres입니다. - host 모든 LAVA 버그가 있는 Postgres SQL 데이터베이스의 이름입니다. 현재 기본값은
database이지만, LAVA를 로컬에 설치한 경우localhost로 변경해야 할 가능성이 높습니다.
참고: Postgres SQL 데이터베이스를 위해 두 개의 환경 변수도 필요합니다:
POSTGRES_PASSPostgres SQL 사용자의 비밀번호입니다.POSTGRES_USERPostgres SQL 데이터베이스의 호스트 이름입니다.
프로젝트 구성
프로젝트 구성은 target_configs 디렉토리에 있으며, 모든 구성은 target_configs/projectname/projectname.json에 위치합니다.
이러한 구성 파일 내에 지정된 경로는 host.json 파일에 설정된 값을 기준으로 합니다.
Postgres SQL 데이터베이스 설정
앞서 언급했듯이 Postgres SQL 사용자를 생성해야 합니다. 다음을 위해 환경 변수를 사용하는 스크립트를 사용할 수 있습니다:
- 환경 변수에서 제공된 사용자 이름과 비밀번호로 사용자를 생성합니다.
- 호스트의 Postgres SQL 데이터베이스를 외부 소스(예: LAVA Docker 컨테이너)로부터의 트래픽을 수락하도록 업데이트합니다.
사용법
마지막으로 lava를 실행하여 실제로 프로그램에 버그를 주입할 수 있습니다.
target_configs 디렉토리에 있는 프로젝트의 이름을 제공하기만 하면 됩니다. 예를 들어:
lava -ak toy
이제 버그가 있는 toy 복사본을 갖게 됩니다!
새로운 대상에 버그를 주입하려면 몇 가지 수정이 필요할 것입니다. 지침은 How-to-Lava를 확인하세요.
문서
시작하려면 docs 폴더를 확인하세요.
저자
LAVA는 여러 사람이 수년간 개발한 결과물입니다. 기여자(알파벳 순)의 일부 목록은 다음과 같습니다:
- Andy Davis
- Brendan Dolan-Gavitt
- Andrew Fasano
- Zhenghao Hu
- Patrick Hulin
- Amy Jiang
- Engin Kirda
- Tim Leek
- Andrea Mambretti
- Andrew Quijano
- Wil Robertson
- Aaron Sedlacek
- Rahul Sridhar
- Frederick Ulrich
- Ryan Whelan