大名エンジニアカレッジ(第1回 セキュリティ講座)を受けた

先日、大名エンジニアカレッジのWebエンジニア発展コースを受講してきた。

実はもともとはインフラ講座がお目当てだったが、想像以上にセキュリティについての講義が面白かったので、引き続きこの分野についても深く学習を続けていきたいなと思った。

大名エンジニアカレッジついて

daimyo-college.pepabo.com

なぜ受講したか

いくつかコースがあるのだが、今回僕が受講したWebエンジニア発展コースの対象者は

  • Webアプリは作れるようになったつもりなので、発展的な知識を求めている方
  • 特に、インフラの勉強や、セキュリティの勉強のきっかけが欲しい方

となっており、業務でインフラやセキュリティをしっかりやっていきたいという気持ちから受講することにした。

事前準備

今回はWebGoatという、わざと脆弱性を含ませたWebアプリケーションで、レッスン形式でセキュリティを学べるアプリケーションを使用した。

WebGoat用のDockerイメージが用意されているので、ローカルで構築して学習を進めることができた。

github.com

Webセキュリティについて

ここではWebセキュリティの重要性について学ぶことができた。

Webシステム・Webサービスは常に悪意のある攻撃者から狙われている。 scan.netsecurity.ne.jp

なぜセキュリティ事故が起こってしまうのかというと、

  • サーバー等の設定ミス・OSやソフトウェアの脆弱性
  • Webアプリケーションの脆弱性
    • 設計上の欠陥
    • プログラムのバグ

などが原因となっており、基本的にはシステムに欠陥があってそれが悪用されている。

Webアプリケーションの脆弱性には以下のようにさまざまな種類があり、 講座では実際の攻撃手法や対策方法について学ぶことができた。

SQLインジェクション

攻撃者がアプリケーションのセキュリティ上の不備を意図的に利用し、アプリケーションが想定しないSQL文を実行させることにより、データベースを不正に操作する攻撃手法。またはその攻撃を可能とする脆弱性

SQLインジェクションにより発生しうる脅威は

  • データベースに蓄積された非公開情報の閲覧・改ざん・消去
  • 認証回避による不正ログイン
  • ストアドプロシージャ等を利用したOSコマンドの実行

などがある

原理としてはアプリケーションが入力値を適切にエスケープしないままSQL中に展開することで発生する。

例えば次のように

SELECT * FROM users WHERE name = '<入力値>';

アプリケーションが入力値を適切にエスケープしていなければ、

入力値に't OR 't' = 'tのような文字列を与えると以下のようなSQLが発行されてしまい

SELECT * FROM users WHERE name = 't' OR 't' = 't';

条件文が常にとなるため全レコードが抽出されることになる。

SQLインジェクションの主な対策としては

などがあげられる。

パストラバーサルディレクトリトラバーサル

攻撃者がアプリケーションの実行場所以外からファイルやディレクトリにアクセスしたり、保存したりできる脆弱性

パストラバーサルにより発生しうる脅威は

  • ファイルアップロードの場合、重要なシステムファイルが上書きされる可能性がある
  • 個人情報や企業データといった機密情報の漏洩・流出
  • クレデンシャル情報の漏洩による横展開

などがあり、主な対策としては

などがあげられる。

yamory.io

XSSクロスサイトスクリプティング

スクリプトをWebサイトに送り込み、スクリプトを含むHTMLを出力し、ブラウザ上で実行させる。

  • セッション/クッキーの値が盗まれ、不正ログインされる恐れがある
  • サイト利用者の権限でWebアプリケーションの機能を悪用される。
  • Webサイトの内容が書き換えられ、フィッシングにより個人情報が盗まれる。

主な対策としては、入力値の制限やエスケープ(サニタイジング)を行うことが有用。

普段はLaravelやRuby on Railsと言ったフレームワークを使う事が多く、こういった対策がデフォルトとして用意されている?と思うので、 あまり意識したことなかったので、かなり勉強になった。

CSRF(クロスサイトフォージェリ)

ユーザーがログイン状態を保持したまま、別のサイトに用意したコンテンツ上の罠のリンクを踏ませること等をきっかけとして、インターネットショッピングの最終決済や退会等Webアプリケーションの「重要な処理」を呼び出すようユーザーを誘導する攻撃。

本人が意図しない形で情報・リクエストを送信されてしまうので、リクエスト強要とも呼ばれている。

主な対策として、

  • ワンタイムトークンを利用して正しいリクエストを識別する
  • カスタムHTTPヘッダを追加する

などがあげられる。

こちらのCSRF対策に関する具体的な実装例がとても参考になった。

yamory.io

脆弱性診断ツールを使って自動診断を体験

ここでは実際に脆弱性診断ツールを使用してわざと脆弱性を含ませたWebアプリケーションを自動診断させてみた。 今回はOWASP ZAPというツールを使用した。

OWASP ZAPは誰でも無料でWebアプリケーションの脆弱性をチェックできるツール。

使い方を間違えると、法に触れてしまうこともあるようなので、使用する際はかなり注意が必要!!!

qiita.com

まとめ

セキュリティについては、今後やらないといけないよなーとか思いつつなかなか手をつけられてなかったので、 今回講座を受けたことにより今後しっかり勉強するためのきっかけとなった。

実際にWebアプリケーションに手を加えながら脆弱性を体感していけたので、非常にわかりやすかった。

来週の第2回インフラ講座も非常に楽しみ🙌