新年度ですね。
新人教育の季節ですね。
さて、今年配属された新人たち、コーディング経験のある方が多いようです。
ところが例年とは、ある一点が大きく異なっていたのです。
コーディング経験はあれど、サーバサイドアプリケーションも、コンソールアプリも、
ウィンドウアプリケーションも、ほとんど組んだことがない。
そう、イマドキ世代は、開発においてもスマホネイティブ世代だったのです。
また、Web アプリの開発をほとんど経験していないため、
避けては通れない教育課程があることにも気が付きました。
セキュアプログラミングについてです。
スマホアプリでは、(WebView でも使っていなければ) XSSも、CSRFもありません。
スタンドアロンアプリであれば、SQL インジェクションもろくに気にする必要がなく、
セキュリティに対して、そこまでシビアにならずに済んでしまうことは想像に難くありません。
Web アプリ開発を行うにあたり、これは教えなければなりません。
そこで、脆弱な Web アプリにどんなことが起きてしまうのか、実際に体験することができる、
「脆弱な Web アプリ」を開発してみました。
脆弱性テーマはSQLインジェクションです。
https://github.com/yo1000/insecure-user-admin.git
環境
- ORACLE Java 1.8.0_45
$ java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
アプリの起動
今回は、Web アプリを攻撃することで、実際にクラックされるシーンをイメージしてもらいたかったため、
各自の環境上に、Web アプリケーションを簡単に構築できるようにしました。
$ git clone https://github.com/yo1000/insecure-user-admin.git
$ cd insecure-user-admin
$ ./mvnw spring-boot:run
これだけです。
これで、Web アプリケーションの立ち上げ、サンプルデータのセットアップまで全て完了です。
研修課題
セットアップが完了したら、README.md
に記載のある通り、エクササイズ 1〜4 に取り組んでもらいます。
エクササイズ 1〜4 の内容は以下のとおり。
- 入力を工夫し、エラーを誘発して、実行される SQL を調べてみましょう。
- 調べた SQL をもとに、不正ログインしてみましょう。
- ログインしたユーザー管理システムで、パスワードを不正に入手しましょう。
- どのような対策をしておけば、このような不正を防止することが出来たか、考えてみましょう。
なお、簡単な答案については answer
ブランチに用意しておいたので、ご参考まで。
これでセキュアプログラミング意識しないと、どんなことが起きてしまうのか、
すこしでも実感持ってもらえるといいなー。