
AI 레드팀 플랫폼. 자율 LLM 에이전트가 Kali 컨테이너 내부에서 침투 테스트를 처음부터 끝까지 수행하고 보고서를 작성한다. LangGraph plan/act 엔진, LiteLLM을 통한 프로바이더 비종속 모델, PDF/JSON/SARIF 출력. FastAPI + React.
REDCELL은 LLM 에이전트 팀을 침투 테스트에 투입합니다. 오케스트레이터가 작업을 계획하고 목표를 실행 에이전트에게 전달하면, 실행 에이전트는 Kali 컨테이너 내부에서 실제 도구를 실행하고 결과를 보고합니다. 운영자 콘솔에서 실행 상황을 지켜보고 조종할 수 있습니다. 오케스트레이터를 구동하는 채팅, 실시간 에이전트 그래프와 활동 피드, 에이전트가 구동하는 브라우저의 실시간 화면, 에이전트가 잡아낸 리버스 셸의 터미널, 그리고 작업이 끝나면 인계할 보고서가 포함됩니다.
모델은 LiteLLM을 통해 교체 가능하므로 OpenAI, Anthropic, Google, GLM, DeepSeek, Kimi, 로컬 Ollama 등 지원되는 무엇이든 연결할 수 있습니다. 모든 실행은 진행 중에 체크포인트를 남기므로, 충돌이나 재시작이 발생해도 중단된 지점부터 이어서 진행됩니다.
run_command가 처리합니다.docker exec를 통해 Kali 컨테이너에서 실행됩니다. 세션마다 localhost 또는 저장된 서버를 선택할 수 있으며, 원격 서버는 호스트 네트워킹으로 SSH를 통해 동일한 컨테이너를 실행합니다.flowchart LR
UI["Operator console<br/>React + Vite"] -->|REST + WebSocket| API["FastAPI"]
API --> PG[(PostgreSQL)]
API --> RS[(Redis<br/>pub/sub + queue)]
API --> S3[(MinIO<br/>files & reports)]
RS --> W["Worker (arq)"]
W --> ENG["Engine<br/>LangGraph + LiteLLM"]
ENG -->|docker exec| KALI["Kali container<br/>local or remote over SSH"]
KALI --> TGT["Targets"]
W -->|events / chat / shell| RS
RS -->|stream| APIAPI는 에이전트를 실행하지 않습니다. 실행을 큐에 넣으면 워커가 이를 실행하고, 워커는 출력을 Redis 채널에 게시하며, API가 이를 WebSocket을 통해 브라우저로 중계합니다.
Python 3.12, FastAPI, async SQLAlchemy + asyncpg, Alembic, arq, LangGraph, LiteLLM, ReportLab, PostgreSQL, Redis, MinIO, asyncssh. 프런트엔드: React 18, Vite, TypeScript, Tailwind, TanStack Query, xterm. 도구: Python은 uv, 프런트엔드는 bun.
# 1. infrastructure (Postgres, Redis, MinIO)
docker compose -f docker-compose.dev.yml up -d
# 2. Python deps, database, and seed data
uv sync --group live
uv run rc db upgrade
uv run rc seed # admin user, provider catalog, buckets
# 3. copy the env template
cp .env.example .env
# 4. run the three processes (separate terminals)
cd apps/api && uv run uvicorn app.main:app --host 127.0.0.1 --port 8080
cd apps/worker && uv run arq worker.settings.WorkerSettings
cd apps/web && bun install && bun run dev
또는 프로세스 관리자로 세 가지를 한 번에 시작할 수 있습니다(Procfile에 선언되어 있음): pipx install honcho 후 honcho start.
http://localhost:5183 을 열고 admin / admin으로 로그인합니다.
실행은 기본적으로 실제 도구를 실행합니다. Settings에서 프로바이더 API 키를 추가하고 Docker가 Kali 이미지(martian56/kali:latest)를 풀할 수 있는지 확인하십시오. 대신 미리 준비된 출력으로 시험 실행하려면 .env에서 REDCELL_RUN_MODE=sim을 설정하십시오.
REDCELL을 겨냥할 의도적으로 취약한 앱들, 모두 로컬:
docker compose -f docker-compose.targets.yml up -d
# DVWA http://localhost:8081 · Juice Shop http://localhost:3000 · WebGoat http://localhost:8082
퍼블리시된 이미지로 서버에서 REDCELL을 실행하고 Caddy 리버스 프록시 뒤에 두면, 웹 앱과 API가 하나의 오리진을 공유하고(CORS 없음) HTTPS가 자동으로 처리됩니다. 새 서버에서:
git clone https://github.com/martian56/redcell.git
cd redcell
./deploy.sh
이 스크립트는 Docker가 없으면 설치하고, REDCELL에 어떻게 접근할지 묻습니다:
https://your-domain을 서비스합니다.답변을 .env에 기록하고, 이미지를 풀한 뒤 스택을 시작합니다. 생성된 관리자 비밀번호는 docker compose logs init-secrets로 확인한 뒤 admin으로 로그인하여 변경하십시오. 나중에 접근 방식을 바꾸려면 ./deploy.sh를 다시 실행하고 다른 옵션을 선택하면 됩니다.
포트 80과 443만 공개되며, Postgres, Redis, MinIO, API, 웹 앱은 내부 네트워크에 남습니다. 저장된 파일은 API를 통해 스트리밍되므로 오브젝트 스토리지는 절대 노출되지 않습니다. 각 모드의 세부 사항은 docs/DEPLOY.md를 참조하십시오.
백엔드 구성은 루트 .env 하나이며(.env.example 참조), API와 워커 모두 읽습니다. 알아둘 만한 항목:
REDCELL_RUN_MODE: live(기본값) 또는 sim.REDCELL_DATABASE_URL, REDCELL_REDIS_URL, REDCELL_S3_*: 인프라.REDCELL_SECRET_KEY: 저장된 자격 증명을 암호화하는 Fernet 키. 프로덕션으로 가기 전에 실제 키를 설정하십시오.프로바이더 API 키, 실행 이미지, 범위 가드레일, 보고서 브랜딩은 Settings 페이지에 있으며 데이터베이스에 저장되고, 필요한 경우 암호화됩니다.
apps/
api/ FastAPI: routers, WebSocket streams, auth
worker/ arq worker: runs engagements and report generation
web/ React operator console
packages/
core/redcell_core/ engine, models, repositories, storage, bus, reporting
api-client/ the single typed client the UI talks to (mock + HTTP)
docker/ Kali execution image, web/api images, Caddy config
docker-compose.yml full stack behind a Caddy reverse proxy (self-host)
docker-compose.dev.yml Postgres + Redis + MinIO
docker-compose.targets.yml local vulnerable targets
deploy.sh interactive self-host deploy
기여를 환영합니다. 설정, 테스트, 관례는 CONTRIBUTING.md와 행동 강령을 참조하십시오. 보안 문제는 공개 이슈가 아니라 SECURITY.md를 통해 비공개로 보고하십시오.
이것은 보안 전문가, CTF, 본인 소유의 랩을 위한 방어 및 허가된 공격 도구입니다. 테스트에 대한 서면 허가가 없는 시스템에 사용하지 마십시오. 유지관리자는 오용에 대해 책임지지 않습니다.