
# Hands-on AI 보안 실습 플랫폼 프롬프트 인젝션, 에이전트 시스템 악용, 모델 조작, MCP 신뢰 경계 공격 등 50개 이상의 시나리오를 제공하는 실습형 AI 보안 랩 플랫폼입니다. Ollama + FastAPI + React를 사용하여 안전한 공격/방어 실습을 지원합니다.
AIVP는 4단계와 50개 이상의 랩(현재 코드베이스 전반에 50개 이상의 시나리오)에 걸친 실습형 AI 보안 랩 플랫폼입니다. Ollama + Llama 3.1, FastAPI 백엔드, React/Vite 프론트엔드를 결합하여 실무자들이 공격적·방어적 AI 보안 기술을 안전하게 연습할 수 있게 해 줍니다.
도움이 되셨다면 리포지토리에 ⭐ star / like를 눌러 주시고, fork하신 뒤 PR을 자유롭게 열어 주세요!
전용 실행 가이드인 RUN_STEPS.md를 사용하세요. 안정적인 랩 접근을 위한 사전 요구사항을 포함하여 수동(Vite + uvicorn) 및 (nginx + API + Redis, Ollama는 호스트에서) 방식을 다룹니다.
구성 동작은 활성 런타임 경로에서 엄격합니다. 필수 환경 변수 값이 누락되면 설계상 시작 시 실패할 수 있습니다.
이 플랫폼은 네 가지 교육 트랙을 다룹니다:
각 랩은 동적 랩별 비밀값(secret)과 명시적 검증을 사용하므로 안전한 환경에서 익스플로잇 성공 여부를 확인할 수 있습니다.
교육용으로만 사용 — 이 랩들은 로컬 시스템에서 공격적·방어적 AI 보안 시나리오를 시뮬레이션합니다. 소유하지 않았거나 테스트할 명시적 권한이 없는 실제 서비스, 데이터 또는 인프라를 대상으로 하지 마십시오. 이 랩들의 비밀값은 합성 데이터이며 랩별로 재생성됩니다. 프로덕션 자격 증명이 아닙니다. 사용에 따른 책임은 본인에게 있습니다. 어떠한 보증도 제공되지 않습니다.
POST /api/labs/{lab}/chat모델을 최소 한 번은 받아 두세요:
ollama pull llama3.1(또는 선호하는 다른 llama3.1 호환 변형)
apps/
api/ # FastAPI backend (SSE -> Ollama)
main.py
requirements.txt
.env.example
web/ # React + Vite frontend
src/
.env.example
팁: 시스템 RAM 16 GB로도 동작합니다. 32 GB라면 브라우저, Node, Python, IDE에 넉넉한 여유가 생깁니다.
리포지토리 루트(apps\api와 apps\web가 포함된 폴더)에서:
# 0) Ensure the model is available
ollama pull llama3.1
# 1) Backend venv + deps + run
cd apps/api
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
copy .env.example .env
uvicorn main:app --reload --port 8000
프론트엔드용으로 새 PowerShell 창을 엽니다:
cd apps/web
npm install
copy .env.example .env
npm run dev # http://localhost:5173
# 0) Model
ollama pull llama3.1
# 1) Backend
cd apps/api
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
uvicorn main:app --reload --port 8000
다른 셸에서:
cd apps/web
npm install
cp .env.example .env
npm run dev # http://localhost:5173
ollama serve).ollama pull llama3.1.:8000에서 실행합니다.:5173에서 실행합니다.프론트엔드는 백엔드에서 Server-Sent Events(SSE)를 스트리밍합니다.
apps/api/.env의 CORS origins에http://localhost:5173이 포함되어 있는지 확인하세요.
허용되는 Lab ID 형식 (백엔드 기준): PI-01, PI_01, pi01, p01 → 모두 PI_01로 정규화됩니다.
동적 비밀값은 백엔드 재시작 후 랩이 처음 사용될 때 생성됩니다. 비밀값을 재설정할 수도 있습니다:
POST /api/secrets/reset/{labId}
각 랩의 비밀값은 서로 다르며 백엔드 재시작 시(메모리 내) 재생성됩니다. 영속성이 필요하다면 파일/DB로 백업하는 것을 고려하세요.
apps/api/.env)OLLAMA_URL=http://localhost:11434
OLLAMA_MODEL=llama3.1
CORS_ORIGINS=http://localhost:5173
SERVER_SALT=change-me-in-production
AIVP_DEFAULT_MODE=off
ENABLE_TRAINING_LABS=false
OLLAMA_MODEL_TRAINING_LABS=llama3.1
REDIS_URL=redis://localhost:6379/0
REDIS_HOST=localhost
REDIS_PORT=6379
MEMORY_TTL_SECONDS=3600
SESSION_TTL_SECONDS=3600
AGENT_B_URL=http://localhost:8001
MM_API_BASE=http://localhost:8000
API_BASE_URL=http://localhost:8000
JIRA_URL=https://example.atlassian.net
GITHUB_API_BASE_URL=https://api.github.com
SLACK_API_BASE_URL=https://slack.com/api
apps/web/.env)# Local dev: full URL to the API (Vite proxies /api in vite.config as well)
VITE_API_BASE=http://localhost:8000/api
VITE_DEV_API_TARGET=http://localhost:8000
[email protected]
Docker / 프로덕션 방식 빌드는 **VITE_API_BASE=/api**를 사용하여 브라우저가 nginx 뒤에서 동일 출처(same-origin) 경로를 사용하게 합니다(RUN_STEPS.md → Option B 참조).
POST /api/labs/{lab}/chat — data: {"content": "..."} 형식의 SSE 스트림POST /api/secrets/validate — { labId, answer } → { success, message }POST /api/secrets/reset/{lab} — (선택 사항, 테스트용)스크린샷을 docs/screenshots/ 아래에 추가하고 여기에서 참조하세요:




``
apps/web 안에서 npm install을 실행하세요.
``
main.py에 from typing import Iterator를 추가하세요(또는 어노테이션을 제거하세요).
CORS / SSE 차단
CORS_ORIGINS에 http://localhost:5173이 포함되어 있는지 확인하세요.
Ollama 오류
ollama serve가 실행 중이고 모델이 받아져 있는지 확인하세요: ollama pull llama3.1.
curl로 빠른 확인
curl -N -X POST http://localhost:8000/api/labs/PI_01/chat \
-H "Content-Type: application/json" \
-d '{"prompt":"Say hello in one sentence."}'
data: {"content":"Hello …"}와 같은 스트리밍 라인이 보여야 합니다.
기여는 언제나 환영합니다! 다음을 따라 주세요:
제안 영역:
버그를 발견했거나 아이디어가 있다면:
이 프로젝트가 마음에 든다면 ⭐ star / like를 눌러 주시고 다른 사람들과 공유해 주세요!
MIT.