- 1.セキュアプログラミングとは
- 2.XAMPP(ザンプ)をインストールしてPHP
- 3.PHPの簡単なスクリプト
- 4.IPAのセキュアプログラミング
- 5.セキュアプログラミングのプログラム言語
- 6.同一源泉ポリシー
- 7.Use-After-Free
1.セキュアプログラミングとは
セキュアプログラミングとは、セキュリティの高いプログラミングをするという考え方です。具体的には、「脆弱性のある関数を使わない」、「入力値をチェックする」、「エラーメッセージをそのまま表示しない」、「CookieにSecure属性を加える」、ながあります。
IPAでは、以下のWebサイトにて、「セキュア・プログラミング講座」が掲載されています。
www.ipa.go.jp
2.XAMPP(ザンプ)をインストールしてPHP
セキュアプログラミングを理解するにあたり、実際にプログラミングしてみることはとてもいいことだ。
Webサイトを作るのに簡単なのはPHPなので、PHPで簡易なプログラムを組んでいきたい。
(1)PHPのインストール
XAMPPが便利だ。PHPだけでなく、MySQLやその他プログラムが一度にインストールできる。そして、Windowsでも動作する。検証にはもってこいだ。
https://www.apachefriends.org/jp/index.html
以下の「ダウンロード」タブから最新のファイルをダウンロード(青ボタン)しよう。
今回は、xampp-win32-1.8.3-4-VC11-installer.exe(125Mbyte)を取得した。
(2)インストール
入れるだけ。簡単である。全部インストールしてもいいのであるが、要らなさそうなものはチェックをはずした。とりあえず、PHPとMySQLがあればいいだろう。
デフォルトのフォルダは以下。ここに、PHPのプログラムファイルも入れる。
C:\xampp
(3)サービスの起動
ボタンを押すだけ。とりあえずPHPをやるために、最低限Apacheだけは起動しておこう。ついでにMySQLもかな。Apacheのエラーが出た場合には、なにか80番のWebサービスが既に起動している可能性がある。
コントロールパネルの「サービス」にて、それらしきサービスを停止しておこう。
(4)サービスの起動確認
以下のサイト(自分自身)にアクセスしてみよう。
http://127.0.0.1/index.php
「XAMPP Windows版へようこそ!」らしき画面がでれば無事にPHP動作環境が完了である。
(5)HTMLによるWebサーバとして
当然動作する。
apacheの設定も、実際のapacheと同じ階層になっていて、
C:\xampp\apache\conf\httpd.conf のhttpd.confファイルを設定する
コンテンツはデフォルトでは以下に配置する(上記のconfファイルにその旨の記載がある)
C:\xampp\htdocs
3.PHPの簡単なスクリプト
(1)XAMPPによるインストール
すでに述べた内容である。
(2)簡単なスクリプトを書く
「ログイン画面」を作っていく。
HTMLファイルに「ログイン画面」と書いてもいいが、せっかくなのでPHPのプログラミングで書く。
テキストファイルを開き、以下を記載する。
テキストファイル |
---|
<?php print('ログイン画面') ?> |
(3)ファイルを保存
このファイルを名前を付けて保存(login.php)とする。拡張子はphpとする必要がある。
これを、以下に入れるだけでよい。
C:\xampp\htdocs
(4)画面を表示してみる
http://127.0.0.1/login.php
以下のように、PHPプログラムで書いた「ログイン画面」という言葉が表示される。
4.IPAのセキュアプログラミング
試験で出題されるのはここからの内容である。
きちんと理解すれば、得意分野にできるであろう。プログラミングが得意な人からすると、さほどのボリュームとは感じないだろうが、逆に未経験の人からするとハードルが高い。
https://www.ipa.go.jp/archive/security/vuln/programming/index.html
また、以下の情報もある。
www.ipa.go.jp
情報処理安全確保支援士試験の過去問(H25SC秋午後1問1)に以下のように記載がある。
引用(H25SC秋午後1問1より) |
---|
そこで容易に検査できる方法はないかと探していたところ,基本的なXSS対策を実施しているかどうかを診断する“ウェブ健康診断仕様”(以下,Web健康診断という)が,“安全なウェブサイトの作り方”の別冊としてH)Aから公表されているとの情報を得た。 |
5.セキュアプログラミングのプログラム言語
平成24年度春期試験から、情報処理安全確保支援士試験(当時は情報セキュリティスペシャリスト試験)において、試験問題に出題するプログラム言語は、C++、Java、ECMAScriptの3言語となった。
https://www.ipa.go.jp/shiken/syllabus/ps6vr7000000i9dp-att/shiken_yougo_ver5_0.pdf
ECMAScript(エクマスクリプト)は聞き慣れないが、JavaScriptと考えていけばいいだろう。なので、情報処理安全確保支援士試験の対策としては言語を限定して対策をしよう。
6.同一源泉ポリシー
同一源泉ポリシー(same origin policy)に関しては、IPAの以下の資料に詳しい解説がある。
(旧リンク)http://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/706.html
情報処理安全確保支援士試験の過去問(H24SC秋午後1問1)の問題を見てみよう。
過去問(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(HyperText Transfer Protocol)10.Ajax - ネットワークスペシャリスト - SE娘の剣 -
正解は、aがエのXMLHttpRequestで、bがウのSame-Originである。
7.Use-After-Free
過去問(H30春SC午後Ⅰ問1設問1) |
---|
本文中の空欄a,空欄bに入れる適切な脆弱性名を,解答群の中から選び,記号で答えよ。 解答群 ア CSRF イ SQLインジェクション ウ Use-After-Free エ クロスサイトスクリプティング オ コマンドインジェクション カ バッファオーバフロー キ フォーマットストリングバグ ク レースコンディション |
問題文の該当部分は以下です。
該当部分 |
---|
確保済みメモリ領域を超えてデータを書き込んでしまう[ a ]と呼ばれる脆弱性の報告が以前から多かった。最近は解放したメモリ領域を後から使用してしまう[ b ]と呼ばれる脆弱性の報告も多くなってきている。 |
↓
↓
↓
↓
↓
[空欄a]
問題文には「確保済みメモリ領域を超えてデータを書き込んでしまう」とあります。これは知識問題で,正解は「バッファオーバフロー」です。
[空欄b]
空欄bの説明としては,「解放したメモリ領域を後から使用してしまう」とあります。正解は「Use-After-Free」です。2問とも,答えを知らないと解けない知識問題でした。しかし,「Use-After-Free」を日本語にすると,「解放したメモリ領域を後から使用」と関連性がありそうと感じた人もいることでしょう。
解答例:a カ b ウ
参考までに、他の選択肢を簡単に解説します。
■フォーマットストリングバグ
ストリングとは文字列のことです。IPAのセキュアプログラミング講座にには「フォーマット文字列攻撃は、printf() 等の関数の書式引数に外部からの入力データがそのまま渡るようになっている場合に起こり得る。」とあります。
■レースコンディション
IPAのセキュアプログラミング講座にはレースコンディションに関して、「並列動作する複数の存在(プロセスやスレッド)が同一のリソースへほぼ同時にアクセスしたとき、予定外の処理結果が生じる問題」と述べられています。イメージとしては、「ファイルを添付してメールを送ろうとしたら、同時に別の人がファイルを書き換えた。結果として、送るべきではないファイルを送ってしまった。」そんな感じです。
(旧リンク)https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c304.html