Secure Coding Dojoは、安全なコーディングトレーニングを提供するためのプラットフォームです。 独自の脆弱性を含むトレーニングアプリケーション(Insecure.Incウェブサイト)が付属していますが、トレーニングポータルは他のトレーニングアプリケーションと組み合わせて使用できます。 このプラットフォームの強みは、拡張性と、一般的に使用されている開発コラボレーションプラットフォームSlackとの統合です。 トレーニングポータルはクラウド上に簡単にセットアップでき、AWS Elastic Beanstalkのセットアップ手順は以下で確認できます。
Dojoのデプロイとインストールの詳細については、wikiも必ずご確認ください。
トレーニングポータルとInsecure.Incアプリケーションの雰囲気をつかむには、デモをダウンロードしてください。
また、/screenshotsもご覧ください。

以下の手順でDojoの基本構成をセットアップできます。高度な構成と統合についてはwikiを確認してください。
Dockerの最新版をインストールします。
リポジトリをGit cloneします。
リポジトリのルートディレクトリに移動します。
Dojoファイルのマウントポイントとして環境変数DATA_DIRを設定します。*nix/macでは.bash_profileを次のように変更します。
export DATA_DIR="/YOUR_DATA_DIR"
Macでは、Docker > Preferences > File SharingでDockerにこのディレクトリへのアクセスを許可する必要があります。
ターミナルを再起動します。
次のコマンドで実行します。
docker-compose up
アプリケーションセキュリティの概念を教えるオープンソースのトレーニングサイトは新しいものではありませんが、これらのサイトの対象読者はペンテスターや倫理的ハッカーでした。 Secure Coding Dojoは主に開発者向けの配信プラットフォームとして設計されています。その理由は次のとおりです。
コンプライアンスを保証するものではありませんが、このトレーニングはPCI 6.5.aなどのコンプライアンス要件を満たすために使用できます。SANS 25/ OWASP Top 10 / PCI 6.5へのマッピングに関するInsecure.Incカリキュラム文書を参照してください。
トレーニングポータル
Insecure.Inc
トレーニングポータル
Insecure.inc
トレーニングポータル
Insecure.Inc
wikiを確認してください。
詳細はwikiをご覧ください。
認証用のSlackアプリを作成する必要があります。
Google認証もconfig.jsonで設定できます。Googleデベロッパーアカウントが必要で、Google APIコンソール(https://console.developers.google.com)からOAuth資格情報を取得する必要があります。
同じ場所でドメインと承認済みリダイレクトURIを設定します。たとえばlocalhostセットアップの場合、リダイレクトURLは次のようになります: http://localhost:8081/public/google/callback
小規模なチームや事前構成済みイメージの場合、SlackやGoogle認証が利用できないことがあります。このシナリオでは、ローカルのフラットファイルを使用した認証を設定できます。
詳細はwikiを確認してください。
DBを設定しない場合、トレーニングポータルはローカルのSQLite DBを使用します。
MySQLをインストールして、DBとそのDBの資格情報を作成することもできます。後で必要になるので、ユーザー名とパスワードを控えておいてください。
OS環境変数として暗号化キーを設定する必要があります。*nix/macでは.bash_profileを次のように変更します。
export ENC_KEY="put something random here"
export ENC_KEY_IV="put something random here"
以下は、参加者が独自のチャレンジコードを生成するのを防ぐためのものです。
export CHALLENGE_MASTER_SALT="put something random here"
既存のレッスンのモデルに従って、新しいレッスンを追加できます。
チャレンジは./trainingportal/static/lessonsで定義されています。
definitions.jsonファイルは、対応するHTMLチャレンジの説明、プレイリンク、および対応するコードブロックをコードブロックIDによって指定します。
既存の定義済みの例に従って、新しいものを作成します。
.
+-- /trainingportal/static/lessons
| +-- modules.json //configuration file where lesson modules are defined
| +-- /attack-grams //visual representations of attacks included in challenge descriptions
| +-- /blackBelt //lesson module
| +--definitions.json //individual lesson definitions
| +--cwe494.md // html or markdown file including the lesson description
| +--cwe494.sol.md //solution for the lesson
| ....
| +--quiz.html
| +-- /secondDegreeBlackBelt
コードブロックは./trainingportal/static/codeBlocksで定義されています。このフォルダも同様の構造で、定義JSONと各チャレンジ用の多数のHTMLファイルが含まれています。
.
+-- /trainingportal/static/codeBlocks
| +-- codeBlocksDefinitions.json //configuration file where code blocks are defined
| +-- authenticationByDefault.html //code block description html
| ...
| +-- useStrongDataEncryption.html