テクニカルエンジニア(情報セキュリティ)過去出題問題

平成18年 午後1 問1

最終更新日 2006/06/18
webmaster@tomnetwork.net

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 】
 > >
 ' &#39
 " "

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