テクニカルエンジニア(情報セキュリティ)過去出題問題平成18年 午後1 問1最終更新日 2006/06/18
|
Tomのネットワーク勉強ノート |
過去問(午後) |
テクニカルエンジニア(情報セキュリティ)過去問(午前・午後) |
テクニカルエンジニア(情報セキュリティ)過去問 平成18年 午後1 問1 |
問1 Webサイトのセキュリティに関する次の記述を読んで,設問1〜4に答えよ。
A社は,主として事業所向けに商品を販売している,従業員数80名の文房具卸売会
社である。A社ではこれまで,インターネットを電子メールとWebの閲覧にしか使っ
てこなかったが,このたびインターネットを利用した受注Webシステム(以下,Xシ
ステムという)を開発することに決めた。A社には情報システムを開発する部署がな
いので,現在インターネット接続を管理しているF主任をリーダとして,コンピュー
タに詳しい数名の従業員で構成した開発チームが,開発を行うことになった。
〔Xシステムの基本設計〕
Xシステムでは,利用者はインターネットからWebサイトにアクセスし,商品を選
択して発注すると,その利用者ID,発注商品名及び数量が営業担当の従業員に電子メ
ールで通知される。営業担当の従業員はその電子メールに従って,利用者あてに商品,
総品書及び請求書を発送する。当初の利用者数は1日当たり1,000人と想定している。
F主任は,開発に先立って,注意すべき事項について開発チーム内で話し合うことに
した。次は,そのときのF主任と開発テームの一員であるG君の会議である。
F主任:Xシステムでは,画面遷移にセッション管理が必要だな。
G君 :そうですね。セッション管理には,セッションIDを使う方式と,利用者ID
を使う方式があります。いずれの方式でも利用者のプラウザからサーバに利
用者を識別するデータを送信しますが,この送信方式にはクッキーを使う方
式,【 a 】フィールドを使う方式,URLのクエリストリングを使う方
式があるようです。それぞれの特徴を整理すると,表1のようになります。
利用者からのデータの送信にはPOSTメソッドとGETメソッドの両方を使
う予定ですが,送信方式はどの方式を用いるべきでしょうか。
表1 セッション管理用データの送信方式の特徴
方式 |
各方式の特徴 | |
利用できる環境 | HTTPリクエストヘッダのReferer フイールドからの情報漏えいの可能性 |
|
(ア)クッキーを使う方式 | プラウザがクッキーをサポート している必要がある。 |
【 b 】 |
(イ)【 a 】フィールドを 使う方式 |
HTMLフォームに限る。 |
なし (GETメソッド使用の場合は”あり”) |
(ウ)URLのクエリストリング を使う方式 |
上記(ア),(イ)の方式のような制 限はない。 |
【 c 】 |
F主任:表1の各方式の特徴の中で,利用者からのデータ送信に用いる方法を考慮し
て,情報漏えいの可能性が最も低い方式を選ぶのがよいだろう。Xシステム
の利用者の多くは事業所内からアクセスすると想定できるので,携帯電話か
らのアクセスは考慮しないことにしよう。
G君 :分かりました。
F主任:それから,クロスサイトスクリプティング脆弱性を悪用した攻撃など,利用
者から入力されるデータは,悪意のある可能性がある。利用者からの入カデ
ータを含むWebページを生成してプラウザに表示する場合には,@攻撃に利
用される文字を表2のように置き換える処理が必要だ。セキュリティ機能に
かかわる部分は一貫した考え方が必要だと思うので,まとめてG君に考えて
作成してもらいたい。
表2 文字の置換
元の文字 | 置換後の文字列 |
& | & |
【 d 】 | 【 e 】 |
> | > |
' | ' |
" | " |
G君 :分かりました。これまで,本格的にセキュリティ機能の設計やコーディング
を行ったことはないのですが,まず利用者認証とセッション管理について設
計し,Perlでコーディングしてみようと思います。セッション管理について
は,コーディングの負担を減らし,短期間で開発するために利用者IDを使
う方式にします。
F主任:その場合でも,セッション管理用データが不正に作り出せないような設計を
するように。また,総当たり法による攻撃も想定する必要がある。
〔設計レビュー〕
3日後,G君は利用者IDを使用したセッション管理用データ(以下,識別コードと
いう)の仕様とサブルーチンの基本仕様を作成し,一部分をコーディングして開発チ
ーム内でレビューを受けた。G君が作成した,識別コードを使用したセッション管理
の仕様を表3に,サプルーチンの基本仕様の一部を表4に,またコードの一部を図に
示す。
表3 識別コードを使用したセッション管理の仕様(抜粋)
項 目 | 要 件 |
利用者ID,パスワード | 利用者ID,パスワードの文字列長はともに6文字以上12文字以下とする。 |
識別コード | 60文字以上の英数字とする。 |
タイムアウト | 前画面からの遷移までに10分以上経過している場合は,タイムアウトエラーと
する。 |
表4 サブルーチンの基本仕様(抜枠)
ルーチン名 | 処理概要 | 引数 | 戻り値 |
clean_msg | 引数の文字列中の攻撃に利用され る文字を表2に従って置き換える。 |
1.文字列 | 処理された文字列 |
make_sid | 識別コードを作成する。 | 1.利用者ID(文字列) | 識別コードを表す文字列 |
encrypt |
第1引数の文字列を第2 引数の共 通鍵で暗号化する。 |
1.文字列(16文字以内) 2.128ビットの共通鍵を 表す文字列(32文字) |
暗号化された32文字の文字 列 |
now | 現在時刻を秒単位で得る。 | なし | YYYYMMDDhhmmss形式に よって現在時刻を表す14文 字の文字列 |
make_hash | 引数の文字列をハッシュ関数で計 算した値を返す。 |
1.文字列 |
ハッシュ値を表す32文字の 文字列 |
sub make_sid { my ($user_ID) = @_; my $enc_key = "4f583bd08d45092ca12408c8437ef4"; my $sid, $salt, $sid_time; $sid_time now; $sid_time =~ /..$/; $salt = $&; $sid encrypt($user_ID, $salt , $enc_key), $sid = $sid . $sid_time; $sid = $sid . make_hash($sid); return $salt , $sid; ) |
図 G君が作成したコード(抜粋)
次は,レビューにおけるF主任とG君の会話である。
F主任:識別コードの仕様について説明してくれないか。
G君 :はい。識別コードは,その生成時刻と利用者IDからなる文字列を基本情報と
して構成され,利用者がログイン後にWebサーバにアクセスする都度,生成
されます。生成時刻は,識別コードがWebサーバに返されたときにタイムア
ウトを判定するために付けています。利用者IDは,識別コードが不正に作
り出されることを防止するために,鍵長が128ビットの共通鍵暗号を使って
暗号化しています。共通鍵は128ビットの固定値ではなく,そのうち8ビッ
トを可変部分としました。8ビットを可変とすることで,毎回異なる識別コ
ードが生成されるので安全です。また,改ざんを検出するために,暗号化し
た利用者ID及びサーバの時刻情報に,それらのハッシュ値を連絡していま
す。このため識別コードは,【 f 】文字の利用者ID部分,【 g 】
文字の時刻部分,【 h 】文字のハッシュ部分を連結した文字列に,共通
鍵の可変部分を先頭に加えて,合計【 i 】文字で構成されます。
F主任:この識別コードの作り方では,暗号化された利用者IDの部分には同じ文字列
が現れることがある。また,A生成される識別コードは毎日異なるが,共通
鍵の作り方から判断して安全性が高くなっているとは言えない。さらに,プ
ログラムコードが漏えいした場合には,不正な識別コードを容易に作り出さ
れてしまう問題もある。より高い安全性を確保するためには,利用者IDな
ど意味のあるデータを含まないセッションIDを用いてセッション管理を行
う方がよいだろう。セッションIDはログイン時に生成することになるね。
開発の期間は多少長くなるかもしれないが,セキュリティの方が重要だ。セ
ッション管理の方式を見直してくれ。
G君 :はい,分かりました。
設問1 セッション管理方式について,(1),(2)に答えよ。
(1) 表1中の【 a 】に入れる適切な字句を10字以内で答えよ。
(2) 表1中の【 b 】,【 c 】に入れる適切な字句を,“あり",“なし"のいずれかで答えよ。
設問2 セキュリティを考慮したコーディングについて,(1),(2)に答えよ。
(1)本文中の下線@の処理は一般に何と呼ばれる処理か,10字以内で答えよ。
(2)利用者からの入カデータを含むWebページを生成してブラウザに表示する場
合の対策として,表2中の【 d 】 ,【 e 】に入れる通切な文字列を答えよ。
設問3 G君が設計した識別コードについて,(1),(2)に答えよ。
(1)本文中の【 f 】 〜【 i 】に入れる正しい数値を答えよ。
(2)本文中の下線Aで安全性が高くなっているとは言えないとF主任が指摘した
理由は何か。55字以内で具体的に述べよ。ただし,プログラムコードは漏えい
していないものとする。
設問4 G君は,F主任が指示したセッションIDを,暗号を使わずに設計することにし
た。このセッションIDの設計において,不正なセッションIDを容易に作り出す
ことをできなくするために,セキュリティの面で留意すべきことを二つ挙げ,そ
れぞれ20字以内で述べよ。
Tomのネットワーク勉強ノート |
過去問(午後) |
テクニカルエンジニア(情報セキュリティ)過去問(午前・午後) |
テクニカルエンジニア(情報セキュリティ)過去問 平成18年 午後1 問1 |