
脆弱なコードと修正済みコード、攻撃シナリオ、ソース/シンク監査ノート、およびセキュリティトレーニングとツール評価のためのセキュアコーディングガイダンスを備えた包括的なJava脆弱性ラボ。
JavaSecLab - 総合的なJava脆弱性ラボJavaSecLabは、アプリケーションセキュリティの学習、コード監査の実践、セキュア開発トレーニング、セキュリティツールの評価のための総合的なJava脆弱性ラボです。Spring Bootをベースに構築されており、脆弱なコード、修正済みの実装、現実的な攻撃シナリオ、監査指向のsourceとsinkのメモ、修復ガイダンス、セキュアコーディングの解説、トラフィック分析の例を提供します。
目標は実践的です。脆弱性がどのように悪用されるかを理解するだけでなく、なぜコード内に存在するのか、そしてどのように修正すべきかをユーザーが理解できるようにすることです。


JavaSecLabは、幅広いJava Webセキュリティシナリオをカバーしています。具体的には以下の通りです。
デモサイト: http://whgojp.top/
デフォルトアカウント: admin/admin
JavaSecLabは意図的に脆弱に作られており、危険なエンドポイント、脆弱な依存関係、安全でない設定を含んでいます。自身のデプロイは分離された環境でのみ実行してください。パブリックインターネットに直接公開しないでください。
作者は企業のセキュリティ職務に従事し、脆弱性のライフサイクル全体を経験してきました。ペネトレーションテストやセキュリティ評価の後、脆弱性はTAPDやJiraなどのシステムを通じて開発チームに割り当てられることがよくあります。実際には、次の2つの疑問が繰り返し浮上します。
JavaSecLabは、脆弱性の動作、脆弱なコード、修復アプローチ、監査の考え方を結びつけるために作られました。テキストのみのレポートやPoCと比較して、このプロジェクトはコードの観点から脆弱性を理解することを重視しています。
コード監査では、まずsink(コマンド実行、SQL実行、ファイルアクセス、テンプレートレンダリング、デシリアライゼーション、レスポンス出力など)を特定するのが一般的なワークフローです。次に監査者は、対応するsource(リクエストパラメータ、ヘッダー、Cookie、アップロードファイル、シリアライズデータ、データベースの内容など)を特定するために逆方向に追跡します。JavaSecLabの多くのシナリオは、このsourceからsinkへの経路を中心に設計されており、学習とツール検証の両方に役立ちます。
同じ脆弱性タイプは、実際のシステムでは複数のトリガー経路を通じて現れることがよくあります。そのためJavaSecLabは、可能な限り主要な脆弱性クラスに対して複数のシナリオを提供し、異なるコーディングパターン、フレームワーク機能、ビジネスフローがリスクにどのように影響するかをユーザーが比較できるようにしています。
JavaSecLabには、学習者がリクエスト/レスポンスの動作とコード実行を結びつけられるよう、脆弱性トラフィック分析の例が含まれています。より明確なパケット、より良い再現手順、追加の分析例の貢献を歓迎します。

例えば、時間ベースのSQLインジェクションシナリオでは、レスポンスの遅延を通じてトラフィックパターンを観察できます。サーバーは約5秒後に応答します。

リポジトリをクローンします:
git clone https://github.com/whgojp/JavaSecLab.git
cd JavaSecLab

要件:
データベースを作成し、sql/JavaSecLab.sqlをインポートします。
src/main/resources/application.ymlでアクティブプロファイルをdevに設定します:
spring:
profiles:
active: dev
src/main/resources/application-dev.ymlでデータベース接続を更新します:
username: root
password: QWE123qwe
url: jdbc:mysql://localhost:13306/JavaSecLab?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true&allowMultiQueries=true
IDEAまたはMavenからアプリケーションを起動します。
デフォルトアカウント: admin/admin

要件:
オプション1: 公開イメージで起動する:
docker compose -f docker-compose.image.yml up -d
オプション2: イメージをローカルでビルドしてラボを起動する:
mvn clean package -DskipTests
docker compose -p javaseclab up -d
起動後にデータベースが空の場合は、手動でsql/JavaSecLab.sqlをインポートしてください。


その他のデプロイオプションとトラブルシューティングの注意事項については、デプロイガイドを参照してください。
JavaSecLabは脆弱なラボプロジェクトです。再現と教育のために、危険なエンドポイント、脆弱な依存関係、安全でない設定を意図的に保持しています。ローカルまたは分離されたネットワークでのみ実行してください。
推奨される注意事項:
このプロジェクトのセキュアコード例は、教育とデモンストレーションを目的としています。実際のビジネスシステムでは通常、認証、監査、レート制限、データ検証、依存関係のガバナンス、監視、アラート、多層防御が必要です。
Issueとプルリクエストを歓迎します。優れたコントリビューションには以下が含まれます。
私たちがフリーソフトウェアについて語るとき、それは自由を指しており、価格ではありません。
JavaSecLabはApache License 2.0の下でリリースされています。詳細はLICENSEを参照してください。
リリースノートとプロジェクトの履歴については、更新ログを参照してください。
作者のブログ: 今天是几号
アプリケーションセキュリティ、セキュア開発、SDL、DevSecOps、脆弱性ラボに興味がある方は、ぜひコミュニティグループにご参加ください。
JavaSecLabがお役に立ったなら、スポンサーシップをいただけると幸いです。サポートはオンライン環境の維持とプロジェクトの継続的な改善に使用されます。