
DonkAIは、OWASP Top 10 for LLM Applications(2025)のハンズオンラボです。実際のLLMは不要です。
OWASP Top 10 for LLM Applications (2025) のハンズオンラボ - 実際のLLMは不要です。
DonkAIは、1つのコマンドで実行できる意図的に脆弱なWebアプリで、LLM統合システムがどのように壊されるのかを、実際に壊しながら学ぶために使用します。OWASP LLM Top 10のすべてのカテゴリが、少なくとも1つのプレイ可能なチャレンジで表現されており、文書化されたブリーフ、ペイロードエディタ、回避すべき能動的防御、段階的なヒント、ユーザーごとの全試行履歴が用意されています。固定された演習セット以上の、拡張可能な教育ラボです。モジュール式アーキテクチャ(カテゴリごとに1ファイル、バックエンドとフロントエンド)により、新しい脆弱性の追加、既存の防御の強化、ワークショップ、コース、CTF向けのまったく新しいトラックの構築が簡単に行えます。
警告 このアプリケーションは、実際に機能する攻撃面(プロンプトインジェクション、IDOR、SQLインジェクション、ハードコードされた認証情報など)を意図的に露出しています。分離されたラボ環境でのみ実行し、できれば専用の仮想マシン内で実行し、オープンインターネット上に決してデプロイしないでください。
OWASP Top 10 for LLM Applicationsはリスクを明確にし、それらを議論するための語彙を提供します。これはLLMセキュリティに携わるすべての人にとって必読の書です。DonkAIは、その取り組みのハンズオン拡張版として設計されています。自分で攻撃を試し、偽物でありながら現実的なチャットボットに対して攻撃が成功するのを確認し、何が機能したのか、実際のシステムがどのように防御するのかを説明する解説を読むことができる、小さく決定論的なプレイグラウンドです。**舞台裏に実際のLLMはなく、スタック全体がルールベースです。**そのため、このラボは安価で、オフライン対応で、再現可能です。
2つのコマンドでフルスタックをクローン、ビルド、起動します:
git clone https://github.com/OWASP/DonkAI.git && cd DonkAI
docker compose up --build
その後、http://localhost:3000 を開き、alice / password123 でサインインし、左側のOWASPパネルから最初のチャレンジを選択します。
| サービス | URL / アドレス |
|---|---|
| Web UI | http://localhost:3000 |
| バックエンド (API + ドキュメント) | http://localhost:8000/docs |
| PostgreSQL | localhost:5432 — DB |
| ユーザー名 | パスワード | ロール |
|---|
ヒント — すべての状態(ユーザー、セッション、試行履歴)を消去して、クリーンな状態から開始するには:
docker compose down -v
OWASP LLM Top 10のすべてのカテゴリが、少なくとも1つのプレイ可能なチャレンジで表現されています。
カテゴリやチャレンジを追加・変更するには、チャレンジの拡張 を参照してください。
┌──────────────────┐ ┌──────────────────┐ ┌────────────────┐
│ React SPA │ ───► │ FastAPI │ ───► │ PostgreSQL │
│ :3000 │ │ :8000 │ │ :5432 │
│ webapp/ │ │ ml-service/ │ │ database/ │
└──────────────────┘ └──────────────────┘ └────────────────┘
このアプリケーションは意図的に脆弱です。デフォルト(パスワード、データベース認証情報、システムプロンプト内のハードコードされたシークレット)は教育コンテンツの一部であり、セキュリティ上の見落としではありません。ローカルまたは分離されたラボで実行し、共有ホストや公開インターネット上では決して実行しないでください。また、実際の本番データに対して決して実行しないでください。
ここで学んだテクニックは、自分が所有するシステム、またはテストするための明示的な書面による許可を得たシステムにのみ適用してください。
donk_ai_labalice | password123 | ユーザー |
bob | password123 | ユーザー |
admin | admin123 | 管理者 |
| # | カテゴリ | チャレンジ数 | バックエンドファイル |
|---|
| LLM01 | プロンプトインジェクション | 2 | llm01_prompt_injection.py |
| LLM02 | 機密情報の開示 | 2 | llm02_sensitive_info.py |
| LLM03 | サプライチェーン | 1 | llm03_supply_chain.py |
| LLM04 | データ・モデルポイズニング | 1 | llm04_data_poisoning.py |
| LLM05 | 不適切な出力処理 | 2 | llm05_improper_output.py |
| LLM06 | 過剰なエージェンシー | 2 | llm06_excessive_agency.py |
| LLM07 | システムプロンプトの漏えい | 2 | llm07_system_prompt_leak.py |
| LLM08 | ベクター・エンベディングの弱点 | 1 | llm08_vector_weaknesses.py |
| LLM09 | 誤情報 | 1 | llm09_misinformation.py |
| LLM10 | 無制限な消費 | 1 | llm10_unbounded_consumption.py |
| レイヤー | スタック | 役割 |
|---|
| フロントエンド | React | チャレンジUI、ペイロードエディタ、試行ごとの履歴ドロワーをレンダリングします。 |
| バックエンド | FastAPI | OWASPカテゴリごとに1つのルールベースのチャレンジエンジン - 完全に決定論的で、LLM呼び出しはありません。 |
| データベース | PostgreSQL | users、chat_sessions、chat_messages、exploit_attempts を保存します。 |