読者です 読者をやめる 読者になる 読者になる

CodeIQ Blog

自分の実力を知りたいITエンジニア向けの、実務スキル評価サービス「CodeIQ(コードアイキュー)」の公式ブログです。

『セキュア設計に関する初級問題』解説記事と集計結果~正答率の低かったのは「セッション固定化」の問題でした #セキュリティ

CodeIQ中の人、millionsmileです。

セキュア設計してますか?(←長嶋茂雄さん風)

何かと話題のセキュリティですが、知っておくことに越したことはないですし、システム開発しているならば、知っておかないとマズイこともたくさんあります。

そんなわけで、今回はセキュリティのプロフェッショナルであるセキュアスカイ・テクノロジーの新井さんにセキュア設計に関する選択式問題を出していただきました!

全体的にCodeIQの挑戦者は正答率がとても高かったようです。出題者の新井さんより、各問の正答率と、最も正答率が低かった「 セッション固定化(セッションフィクセイション)」について詳しく解説していきます!

f:id:codeiq:20130819171511j:plain
https://codeiq.jp/ace/codeiq_securesky_tech_arai_mikiya/q353
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

出題内容と正答率

はじめまして、セキュアスカイ・テクノロジーの新井幹也といいます。
先日、セキュリティ分野に関する多肢選択式の問題を5問出題させてもらいました。
さっそくですが、各問題の正解と各選択肢の回答数について以下に掲載します。


Q1: 脆弱性を修正するコストが最も高くなるフェーズを下記の中から1つ選択してください。

選択肢 正解 回答数
A) 要件定義・設計時 1
B) 実装時 1
C) テスト時 3
D) 運用開始後 90
正答率 90/95 = 約95%


Q2: プログラム中の「メモリ管理」が上手く行われていないときに発生する脆弱性を下記の中から1つ選択してください。

選択肢 正解 回答数
A) バッファオーバーフロー 86
B) ガベージコレクション 1
C) スワップ 6
D) メモリインターリーブ 2
正答率 86/95 = 約91%


Q3: ハッシュ関数の特徴を下記の中から1つ選択してください。

選択肢 正解 回答数
A) 原文が同じでも実行のたびに結果が異なる 3
B) 最も処理に時間が掛かる暗号化方式の一つである 1
C) ハッシュ値から原文を再現することが困難 91
D) 暗号化時と復号時で用いる鍵が異なる 0
正答率 91/95 = 約96%


Q4: セッション固定化(セッションフィクセイション)の脆弱性対策として最も適切なものを下記の中から1つ選択してください。

選択肢 正解 回答数
A) セッションIDの有効期限が切れたら新たなセッションIDを発行する 31
B) ログイン成功後に新たなセッションIDを発行する 57
C) ログイン失敗後に新たなセッションIDを発行する 1
D) ログアウト時に新たなセッションIDを発行する 6
正答率 57/95 = 約60%


Q5: Webサイトへのサーバ証明書導入による効果として不適切なものを下記の中から1つ選択してください。

選択肢 正解 回答数
A) オンラインビジネスにおける信頼度が向上する 6
B) 通信が暗号化されるので通信を盗聴されても個人情報が漏えいしない 9
C) Webアプリケーションへの攻撃を防御できる 62
D) 接続するWebサーバの正当性を確認できる 18
正答率 62/95 = 約65%


ご覧のように、Q1~Q3についてはほぼ100%に近い正答率となっています。
いずれもシステムを開発・運用する上でのセキュリティに関する基本的な事項ですが、CodeIQに挑戦するような方々の間では十分に浸透している知識と言えそうです。
Q4、Q5についても正答率は60%を超えており、かなりの方がご存知のセキュリティに関する話題と言えそうです。
Q4のセッション固定化(セッションフィクセイション)は代表的なWebアプリケーションの脆弱性となります。
また、Q5はサーバ証明書の特性を問う問題となっています。
今回は、最も正答率の低かったQ4のセッション固定化(セッションフィクセイション)の問題について少々掘り下げて解説します。

セッション固定化(セッションフィクセイション)

◇問題点と攻撃シナリオ

通常、WebアプリケーションではWebサイトにアクセスしてきているユーザを一意に特定するために、ユーザごとにセッションIDと言われるランダムな値を発行します。
セッション固定化(セッションフィクセイション)の脆弱性とは、Webサイトにアクセスしている間に、このセッションIDの値がまったく変化しない場合に発生する問題となります。

実際に被害が起こる攻撃シナリオの例として以下のようなものが考えられます。

1. 攻撃者がWebサイトへアクセスし、セッションIDを入手
2. 攻撃者が入手したセッションIDをなんらかの方法を用いて被害者に利用させる
セッションIDをCookieに保存している場合であれば、クロスサイトスクリプティングの脆弱性やヘッダインジェクションの脆弱性を利用してセッションIDを被害者に利用させる方法などがあります。
3. 被害者がログインID・パスワードとともにセッションIDをWebサイトに送信してログイン
このセッションIDは被害者でログイン済みのセッションIDとなります。
4. 被害者がセッションIDを用いて個人情報へアクセス
5. 攻撃者が1で入手したセッションIDを用いてアクセス

4で被害者が送っているセッションIDと5で攻撃者が送っているセッションIDは同一の値となります。
このため、Webアプリケーション側では5のアクセスは攻撃者によるアクセスではなく被害者によるアクセスであると判断することになります。
その結果、攻撃者が被害者へとなりすますことが可能となります。

◇対策

今回、選択肢は以下の4つとなっています。各選択肢の違いは新たなセッションIDを発行する「タイミング」となっています。

A) セッションIDの有効期限が切れたら新たなセッションIDを発行する
B) ログイン成功後に新たなセッションIDを発行する
C) ログイン失敗後に新たなセッションIDを発行する
D) ログアウト時に新たなセッションIDを発行する

このうち、対策として効果があるのは「B) ログイン成功後に新たなセッションIDを発行する」となります。

先ほどの攻撃シナリオで言えば、3のログインが成功した後に新たなセッションIDを発行することになります。
このとき、新たに発行したセッションIDをログイン済みのセッションIDとします。
その結果、4で被害者が送信するセッションIDは新たに発行されたセッションIDとなり、5で攻撃者が送信するセッションIDとは異なる値となります。
以上より、Webアプリケーション側からは4と5のアクセスは異なるユーザからのアクセスとみなされるため、先ほどのシナリオのような攻撃は成立しなくなります。

その他の選択肢にある「タイミング」はいずれも対策としては不適切です。
回答として、「A) セッションIDの有効期限が切れたら新たなセッションIDを発行する」が多く選ばれていますが、セッションIDの有効期限が切れるよりも早く攻撃者が5のアクセスを実施する可能性があるため、やはり対策としては不適切と言えます。

まとめ

95名の挑戦者のうち、全問正解された方が38名、4問正解された方が31名と、多くの方に正答いただけたようです。
多くのみなさんの挑戦、ありがとうございました!
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

いかがでしたか?説明がとてもわかりやすいですね。忍び寄る悪にやられないよう、みなさんも知恵をつけて防衛しましょう。

セキュア設計してますか?

エンジニアのための新しい転職活動!CodeIQのウチに来ない?の特集ページを見る