
보안 테스트를 위한 OWASP 상위 10대 취약점이 포함된 취약한 REST API
취약한 API (OpenAPI 3 기반)

VAmPI는 Flask로 만들어진 취약한 API이며, OWASP API 보안 상위 10개 취약점을 포함하고 있습니다. API의 보안 문제를 탐지하는 도구의 효율성을 평가하기 위해 취약한 API가 필요하여 만들어졌습니다. 테스트 중에 API를 취약하게 할지 말지를 켜고 끌 수 있는 스위치가 포함되어 있습니다. 이를 통해 오탐/미탐 사례를 더 잘 다룰 수 있습니다. VAmPI는 학습/교육 목적으로도 사용할 수 있습니다. 취약점에 대한 자세한 내용은 erev0s.com에서 확인할 수 있습니다.
VAmPI의 작업 흐름은 다음과 같습니다: 미등록 사용자는 API에 포함된 더미 사용자에 대한 최소한의 정보를 볼 수 있습니다. 사용자는 등록 후 로그인하여 로그인 시 받은 토큰을 사용하여 책을 게시할 수 있습니다. 게시된 책에 대해 허용되는 데이터는 제목과 해당 책에 대한 비밀입니다. 각 책은 사용자마다 고유하며, 책의 소유자만이 비밀을 볼 수 있어야 합니다.
포함된 작업에 대한 간략한 설명은 다음 표에서 확인할 수 있습니다:
| 액션 | 경로 | 세부사항 |
|---|
| GET | /createdb | 데이터베이스를 생성하고 더미 데이터로 채움 |
| GET | / | VAmPI 홈 |
| GET | /me | 로그인한 사용자 표시 |
| GET | /users/v1 | 모든 사용자를 기본 정보와 함께 표시 |
| GET | /users/v1/_debug | 모든 사용자의 모든 세부 정보 표시 |
| POST | /users/v1/register | 새 사용자 등록 |
| POST | /users/v1/login | VAmPI에 로그인 |
| GET | /users/v1/{username} | 사용자 이름으로 사용자 표시 |
| DELETE | /users/v1/{username} | 사용자 이름으로 사용자 삭제 (관리자만) |
| PUT | /users/v1/{username}/email | 단일 사용자 이메일 업데이트 |
| PUT | /users/v1/{username}/password | 사용자 비밀번호 업데이트 |
| GET | /books/v1 | 모든 책 검색 |
| POST | /books/v1 | 새 책 추가 |
| GET | /books/v1/{book} | 제목으로 책과 비밀 함께 검색 |
자세한 내용을 보려면 VAmPI를 실행하고 http://127.0.0.1:5000/ui/를 방문하거나, swagger editor와 같은 서비스를 사용하여 openapi_specs 디렉토리에 있는 OpenAPI 명세를 제공하십시오.
Flask 애플리케이션이므로 실행하려면 모든 요구사항을 설치한 다음 app.py를 실행하면 됩니다.
모든 요구사항을 설치하려면 pip3 install -r requirements.txt를 실행하고, 그 다음 python3 app.py를 실행하십시오.
또는 선호한다면 Docker나 Docker Compose를 통해 실행할 수도 있습니다.
docker run -p 5000:5000 erev0s/vampi:latest
[참고: MacOS의 최신 버전에서 Docker를 실행하는 경우, AirPlay Receiver 서비스와 충돌을 피하기 위해 -p 5001:5000을 사용하십시오. 또는 시스템 환경설정 -> 공유 설정에서 AirPlay Receiver 서비스를 비활성화할 수 있습니다.]
docker-compose에는 두 개의 인스턴스가 포함되어 있습니다. 하나는 포트 5001에서 보안 구성으로, 다른 하나는 포트 5002에서 비보안 구성으로 실행됩니다:
docker-compose up -d
API가 실행 중인 경로에 /ui를 방문하면 Swagger UI를 사용할 수 있어 시작하는 데 도움이 됩니다!
http://127.0.0.1:5000/ui/
로그인 후 생성된 토큰의 시간 초과를 변경하거나 환경을 취약하지 않도록 변경하려면 애플리케이션을 실행하는 방식에 따라 몇 가지 방법을 사용할 수 있습니다.
python3 app.py로 일반적으로 실행하는 경우, app.py 자체에 정의된 alive 및 vuln 변수를 편집하기만 하면 됩니다. alive 변수는 초 단위로 측정되므로, 100을 입력하면 토큰이 100초 후에 만료됩니다. vuln 변수는 부울 값과 같아서, 1로 설정하면 애플리케이션이 취약해지고, 0으로 설정하면 취약하지 않게 됩니다.docker run 명령에 환경 변수를 전달하거나 Dockerfile을 편집하고 다시 빌드해야 합니다.
Docker 실행 예: docker run -d -e vulnerable=0 -e tokentimetolive=300 -p 5000:5000 erev0s/vampi:latest
vulnerable=1로 설정된 두 번째 컨테이너를 다른 포트에서 시작하여 두 환경 사이를 쉽게 전환할 수 있다는 것입니다.Dockerfile에는 두 개의 환경 변수가 설정되어 있습니다: ENV vulnerable=1 및 ENV tokentimetolive=60. docker build 명령을 실행하기 전에 자유롭게 변경하십시오.
/createdb 엔드포인트에 요청을 보내야 합니다.