
lava v3.3.0
LAVA: 대규모 자동 취약점 추가
LAVA: 대규모 자동 취약점 추가
현재 버그 탐지 도구의 평가 및 개선은 ground truth 말뭉치(즉, 알려진 버그와 이를 트리거하는 입력이 있는 소프트웨어)가 부족하여 어렵습니다. LAVA는 소프트웨어에 버그를 자동으로 주입하여 이 문제를 해결하고자 합니다. 모든 LAVA 버그에는 이를 트리거하는 입력이 함께 제공되는 반면, 정상 입력이 그렇게 할 가능성은 극히 낮습니다. 이러한 취약점은 합성되었지만, 프로그램 깊숙이 내장되어 있고 실제 입력에 의해 트리거된다는 점에서 여전히 현실적이라고 주장합니다. 우리의 연구는 필요에 따라 대규모 ground truth 취약점 말뭉치를 생성하는 접근 방식의 기초를 형성하며, 이를 통해 엄격한 도구 평가를 가능하게 하고 도구 개발자에게 고품질의 목표를 제공합니다.
LAVA는 MIT 링컨 연구소, NYU, 노스이스턴 대학교 간의 협력의 결과입니다.
빠른 시작
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/을 실행하여 로컬로 설치할 수 있습니다.
참고: 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