情報処理安全確保支援士(情報セキュリティスペシャリスト)試験に合格するためのサイトです。
過去問を多数引用しながら、基礎知識をしっかり学んでもらうように作ってあります。
また、情報処理安全確保支援士(情報セキュリティスペシャリスト)を楽しく学べるように工夫したいと思います。
カテゴリ:

9.サーバセキュリティ

セキュアプログラミングとは、セキュリティの高いプログラミングをするという考え方です。具体的には、「脆弱性のある関数を使わない」、「入力値をチェックする」、「エラーメッセージをそのまま表示しない」、「CookieにSecure属性を加える」、ながあります。
 IPAでは、以下のWebサイトにて、「セキュア・プログラミング講座」が掲載されています。
http://www.ipa.go.jp/security/awareness/vendor/programmingv2/index.html

1.クリックジャッキングとは
情報セキュリティスペシャリスト試験の過去問(H24SC春午前2問1)では、「 Webページのコンテンツ上に透明化した標的サイトのコンテンツを配置し,利用者が気づかないうちに標的サイト上で不正操作を実行させる。」とあります。ジャッキングとは、飛行機を乗っ取るハイジャックをイメージしてください。クリックを乗っ取ると考えればいいでしょう。

情報セキュリティスペシャリスト試験の過去問(H26年秋SC午後Ⅱ問2)で詳しく問われましたので、その内容を確認しましょう。
(Ⅱ)クリックシャッキングの対策
 クリックシャツキングの対策には,④HTTP応答ヘッダで“X-FRAME-OPTIONS”にDENYを指定することによって,自サイトをフレーム内で表示させないようにする方法がある。近年,クリックシャッキングによると思われる事件が発生しており,この応答ヘッダに対応したブラウザが増えている。

IPAの資料(https://www.ipa.go.jp/files/000026479.pdf)に、詳しい解説があるので、時間があれば読んでください。
この資料では、「クリックジャッキング攻撃とは、ユーザを視覚的にだまして正常に見えるウェブページ上のコンテンツをクリックさせ、別のウェブページのコンテンツをクリックさせる攻撃のこと」と述べられています。
クリックジャッキング_情報セキュリティスペシャリスト試験 
※出典:https://www.ipa.go.jp/files/000026479.pdf

ユーザには、後ろにある悪意のページしか見えていないのですが、実際には表側にあるサイトをクリックしているのです。このケースでは、勝手に「情報公開」にしてしまいます。
具体的な透過方法は、iframe等によりクリックさせたいサイトを読み込み、そのページをCSS(Cascading Style Sheets)の設定で透明にします。

2.対策
対策ですが、自社のWebサイトが攻撃者のサイトのiframe内で勝手に表示されないようにします。具体的には、ブラウザからコンテンツを要求されると,Webサーバはブラウザに対して「このサイトをiframe内で表示させないようにしてください」いう通知を送るのです。このとき、Webサーバからの通知に使うのが「X-FRAME-OPTIONS」というHTTPヘッダです。Webサーバが通知した「X-FRAME-OPTIONS」をブラウザが確認し,拒否が設定されていればブラウザはiframe内にコンテンツを表示しません。

セキュアプログラミングを理解するにあたり、実際にプログラミングしてみることはとてもいいことだ。
Webサイトを作るのに簡単なのはPHPなので、PHPで簡易なプログラムを組んでいきたい。

PHPのインストール
XAMPPが便利だ。PHPだけでなく、MySQLやその他プログラムが一度にインストールできる。そして、Windowsでも動作する。検証にはもってこいだ。
https://www.apachefriends.org/jp/index.html
以下の「ダウンロード」タブから最新のファイルをダウンロード(青ボタン)しよう。
xampp
今回は、xampp-win32-1.8.3-4-VC11-installer.exe(125Mbyte)を取得した。

インストール
入れるだけ。簡単である。全部インストールしてもいいのであるが、要らなさそうなものはチェックをはずした。とりあえず、PHPとMySQLがあればいいだろう。
install
デフォルトのフォルダは以下。ここに、PHPのプログラムファイルも入れる。
C:\xampp

サービスの起動
ボタンを押すだけ。とりあえずPHPをやるために、最低限Apacheだけは起動しておこう。ついでにMySQLもかな。Apacheのエラーが出た場合には、なにか80番のWebサービスが既に起動している可能性がある。
コントロールパネルの「サービス」にて、それらしきサービスを停止しておこう。
start











サービスの起動確認
以下のサイト(自分自身)にアクセスしてみよう。
http://127.0.0.1/index.php
「XAMPP Windows版へようこそ!」らしき画面がでれば無事にPHP動作環境が完了である。

XAMPPによるインストール
以下で確認してほしい。
XAMPP(ザンプ)をインストールしてPHP

簡単なスクリプトを書く
「ログイン画面」を作っていく。
HTMLファイルに「ログイン画面」と書いてもいいが、せっかくなのでPHPのプログラミングで書く。
テキストファイルを開き、以下を記載する。
<?php
print('ログイン画面')
?>

ファイルを保存
このファイルを名前を付けて保存(login.php)とする。拡張子はphpとする必要がある。
これを、以下に入れるだけでよい。
C:\xampp\htdocs

画面を表示してみる
http://127.0.0.1/login.php

以下のように、PHPプログラムで書いた「ログイン画面」という言葉が表示される。
login

HTTPのメソッドには8つのメソッドがある。
http://nw.seeeko.com/archives/50654465.html

POSTとGETの動作の違いをPHPのスクリプトで体験してみよう。
分かりやすさを優先して、余分なものは全て消してある。実際のプログラムはもう少し整形することになるだろう。
ここではあくまでも、仕組みをシンプルにお伝えすることを優先している。

スクリプトの内容
login.html
ログイン画面<br>
<FORM ACTION="result.php" METHOD="POST">
ID:<INPUT TYPE="text" NAME="id" VALUE=""><br>
Password:<INPUT TYPE="password" NAME="password" VALUE=""><br>
<INPUT TYPE="submit" VALUE="Login">
</FORM>

実際の画面は以下のようになる
login
result.php ※結果表示のスクリプト
<?php
print($_REQUEST['id']);
?>
さん、ログインしました。

POSTの場合
IDとしてuser1と、パスワードを入力してLoginボタンを押す。その後の画面(result.php)は以下のようになる。
post

GETの場合
login.htmlの赤字の「POST」部分を「GET」に変更して実行する。
GETの場合は、以下のように、入力した情報がURLに表示される。ログインIDやパスワードが漏えいするので、これはよくない。それで、POSTが使われる。
http://127.0.0.1/result.php?id=user1&password=pass
get
c2f058cb 

なるほど。
じゃあ、GETは使われないのですね?
そうでもない。Yahoo!やGoogleの検索ではURLに値が表示される。おそらくGETで処理しているはずだ。
以下は、Yahoo!にて「network」というキーワードで検索した結果である。URLに p=network の表示がある。
これにより、この検索結果のURLを保存しておいたり、誰かに共有することも可能であり、それは一つの利点である。
 また、Referer機能により、リンク先にリンク元の情報が送られる。このようにGETを利用してURLに情報が埋めこまれているから、どの検索エンジンのどのキーワードでリンク先に来たかが分かる。これによって、アクセス元の詳細な分析も可能になる。
yahoo
Googleの場合は、さらにシンプルである。
たとえば、「security」というキーワードを検索すると、結果のURLは以下
https://www.google.co.jp/#q=security

セッション管理には3つがあると述べたが、一番多いのはCookieである。
実際に試してみよう。session
PHPでプログラミングをする場合、以下を書くだけである。

  session_start();

プログラムとしては、以下のようになる。
login.php  ※ポイントのみの最低限に絞っている
<?php
  session_start();
?>

ログイン画面<br>
<FORM ACTION="result.php" METHOD="POST">
ID:<INPUT TYPE="text" NAME="id" VALUE=""><br>
Password:<INPUT TYPE="password" NAME="password" VALUE=""><br>
<INPUT TYPE="submit" VALUE="Login">
</FORM>
sef4 
これだけでCookieが設定されるとは便利ですね。
では、IEの「ツール」「インターネットオプション」「全般」「設定」「ファイルの表示」の中で、Cookieを探してみます。
あれ?無いですよ?
ファイルに保存されるのは、Cookieに有効期限を付けた場合のみだ。通常は、ブラウザを閉じるとCookieは削除されるので、わざわざファイルに保存する必要はない。
 
IEの開発ツールで見てみよう。F12を押して、三角のスタートボタンを押してキャプチャをする。Cookieタブを見ると、以下にようにPHPSESSIDとして確認できる。
cookie
※http:127.0.0.1になっているのは、Webサーバ上から直接アクセスしたため。

では、パケットキャプチャを詳しく見てみよう。
PC(192.168.1.103)からWebサーバ192.168.1.102にアクセスするとする。
http://192.168.1.102/login.php
WebサーバにはPHPのプログラムにて session_start() が記載されているので、ブラウザに対してSet-Cookieにてセッション情報を渡す。(上の図の②)
このとき、②のフレームが以下である。http









Webサーバからブラウザに対し、Set-CookieにてセッションIDが渡されているのが分かる。
その後、ブラウザからWebサーバへの通信(上の図の③)へは、以下のようにCookieのセッションIDを伝えながら通信をする。これにより、セッションを維持しながらの通信が可能になる。
session2
情報セキュリティスペシャリスト試験を目指す女性SE

【ポイント!】
WebサーバはHTTPヘッダのSet-Cookie(HTTPレスポンス)、クライアントはCookie(HTTPリクエスト)にCookie情報を入れて通信

参考1
過去問(H23SC春午後2問2)に、「利用者がパスワードを入力してログインすると, Set-CookieヘッダでセッションIDをブラウザに対して発行するようになっている。それ以降はセッション管理にこのセッションIDを利用するとともに, SSLによる通信の暗号化が図られている」とある。

参考2
Cookieの場所であるが、最近のIEでは「ツール」「インターネットオプション」「全般」「設定」「ファイルの表示」の中にある。他のテンポラリーファイルも混ざっているので見づらいが、よく探せばあるので、見ていただきたい。
cookie

HTTPでは、どのサイトから訪れたのかを記録するフィールドがある。これがrefererである。
これにより、ホームページのアクセス元の分析などが可能になる。どんなキーワードで検索されたかも分かるという利点もある。たとえば、Goolgeで「security」と入力して検索したとする。すると、検索結果は以下のようになる。
 https://www.google.co.jp/#q=security
 その検索結果のとあるサイトをクリックすると、Refererによって、上記のURLが通知される。このことから、Googleの「security」という検索キーワードをもとに、サイトを訪れたことが分かり、便利と言える。これは、検索エンジンがPOSTではなくGETメソッドを利用しているから、このようにURLに情報を付与する。
 しかし、セッション管理でGETメソッドを利用している場合、問題がある。URLにセッション情報が記載されるので、リンク先にセッション情報が漏えいする。

参考であるが、過去問H26年春SC午後Ⅰ問1では、以下の記述がある。
GETメソッドではなくPOSTメソッドを使用しておかないと、HTTPヘッダ内のフィールドが原因で、バナー広告に設定されたリンク先のWebサーバへセッションIDが漏えいすることが考えられるね。

★詳しくは、キャプチャを付けたり、図にして解説するつもりだ。

試験で出題されるのはここからの内容である。
きちんと理解すれば、得意分野にできるであろう。プログラミングが得意な人からすると、さほどのボリュームとは感じないだろうが、逆に未経験の人からするとハードルが高い。
http://www.ipa.go.jp/security/awareness/vendor/programmingv2/index.html


また、以下の情報もある。
https://www.ipa.go.jp/security/vuln/websecurity.html
過去問(H25SC秋午後1問1)に以下のように記載がある。
そこで容易に検査できる方法はないかと探していたところ,基本的なXSS対策を実施しているかどうかを診断する“ウェブ健康診断仕様”(以下, Web健康診断という)が,“安全なウェブサイトの作り方”の別冊としてH)Aから公表されているとの情報を得た。

平成24年度春期試験から、情報セキュリティスペシャリスト試験において、試験問題に出題するプログラム言語は、C++、Java、ECMAScriptの3言語となった。
http://www.jitec.ipa.go.jp/1_00topic/topic_20111026_sc_yougo.html

ECMAScript(エクマスクリプト)は聞き慣れないが、JavaScriptと考えていけばいいだろう。

同一源泉ポリシー(same origin policy)に関しては、IPAの以下の資料に詳しい解説がある。
http://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/706.html

情報セキュリティスペシャリスト試験の過去問(H24SC秋午後1問1)の問題を見てみよう。
マッシュアップサービスの実現に関しては,まず,  Ajax (Asynchronous JavaScript十XML)という技術を用いることを検討した。
Ajaxを用いると, Webページ全体を再描画することなく,現在表示されているWebページの表示の一部だけを更新することができる。例えば,[ a ]を利用するHTMLファイル群をブラウザがダウンロードして実行すると,非同期的又は同期的にWebサーバにアクセスし,そのレスポンスデータを用いてWebページを更新することができる。
しかし,通常,ブラウザではセキュリティ確保のための[ b ]ポリシが採用されているので,[ a ]を利用するHTMLファイル群をダウンロードして実行する際,FQDN,プロトコル又はポート番号のいずれかが,ダウンロードしたものと異なるURIにはアクセスできず, A社が想定するターゲット型広告サービスを実現できない。

設問1 本文中の[ a ],[ b ]に入れる適切な字句を解答群の中から選び,記号で答えよ。
解答群
ア APT          イ ATM          ウ Same-Origin
エ XMLHttpRequest  オ アノニマス     カ プライバシ
Ajax(エイジャックス)については、以下の記事も参照いただきたい。http://nw.seeeko.com/archives/50654480.html

正解は、aがエのXMLHttpRequestで、bがウのSame-Originである。

このページのトップヘ