脆弱性診断の具体的な手順【情報処理安全確保支援士試験 平成30年度 春期 午後2 問2 設問4】

情報処理安全確保支援士試験 平成30年度 春期 午後2 問2 設問4

問2 Webサイトのセキュリティに関する次の記述を読んで、設問1〜6に答えよ。

(略)

【WebサイトZに対する診断の実施

 A社のある部署が、新規に構築したショッピング用のWebサイトZをリリースするに当たり、セキュリティ専門業者に診断を依頼した。その際に、診断チームのメンバのLさんにも診断を担当させることにした。WebサイトZの開発は、外部の業者のP社に委託しており、委託時にWebセキュリティガイドの最新版を渡している。WebサイトZの画面遷移図を図6に、画面遷移の仕様を表2に示す。

f:id:aolaniengineer:20200410044951p:plain

f:id:aolaniengineer:20200410045032p:plain

 Lさんは、WebサイトZに対して診断を実施し、結果をとりまとめた。Lさんは、Lさんの診断結果と、セキュリティ専門業者の診断結果とを比較した。すると、両者ともに検出したものが1件、セキュリティ専門業者だけが検出したものが3件あった。WebサイトZの診断結果を表3に示す。

f:id:aolaniengineer:20200410045515p:plain

f:id:aolaniengineer:20200410045543p:plain

g:30

SQLインジェクションの脆弱性に関する診断について、keywordの値を変化させた場合の該当商品数を求めるもので、実際にSQL文を想定して考えましょう。

Webサーバにおいて、SQL文として「SELECT COUNT(*) FROM 商品 WHERE 商品名='{$keyword}’」のようなコードが記述されているとします。

それを基に、表4のNo.3では、「SELECT COUNT(*) FROM 商品 WHERE 商品名=’bag’」となり「30」件となっています。

No.1では、「SELECT COUNT(*) FROM 商品 WHERE 商品名=’bag’ and ‘1’=’1’」となりますが、このとき、「商品名=’bag’」と「’1’=’1’」という条件式がandで繋がれているコード解釈となります。

「商品名=’bag’」は「30」、「’1’=’1’」は「真」となり、結果は「30」となります。

h:0

No.2では、「SELECT COUNT(*) FROM 商品 WHERE 商品名=’bag’ and ‘1’=’2’」となりますが、同様に、「商品名=’bag’」と「’1’=’2’」という条件式がandで繋がれているコード解釈となります。

「商品名=’bag’」は「30」、「’1’=’2’」は「偽」となり、結果は「0」となります。

 (イ)の脆弱性については、商品購入情報入力画面から、配達希望日を入力するために起動するカレンダ機能で検出された。カレンダ機能を図7に示す。

f:id:aolaniengineer:20200410045836p:plain

 セキュリティ専門業者が脆弱性を確認するためにカレンダを開き、そのカレンダが表示されているポップアップウィンドウのアドレスバーに入力したURLを図8に、警告ダイアログに”NG”を表示させたレスポンスの該当箇所を図9に示す。

f:id:aolaniengineer:20200410050441p:plain

f:id:aolaniengineer:20200410050505p:plain

i:‘);alert(‘NG

図9の「getElementById()」メソッドは、引数に指定されたidに相当するHTML要素オブジェクトを返すものです。

一方、警告ダイアログに”NG”と表示させるのは、「alert()」メソッドになります。

この異なる二つのメソッドを成立させるためには、構文の終わりを示す「;」が必要です。選択肢の中で、これに該当するものを選択します。

var returnobj = window.opener.document.getElementById(‘‘);alert(‘NG‘);

この脆弱性により、アドレスバーに任意の命令文を記載することで実行させることが可能になります。

 なお、(イ)の脆弱性は、WebサイトZとは異なるドメインのサイトから、図8のURLにアクセスさせられるような攻撃を受けた場合でも、現在普及しているWebブラウザの多くでは、スクリプトの実行時にエラーが発生し、攻撃が失敗する。しかし、Webブラウザの種類やバージョンによっては被害が発生するおそれがあるので、セキュリティ専門業者は修正することを提言した。

 (ウ)の脆弱性は、有料会員だけが購入できることになっている限定商品を一般会員が購入できてしまうというものであった。セキュリティ専門業者が確認した方法を表5に示す。

f:id:aolaniengineer:20200410051257p:plain

j:(う)の操作を実行するときに、codeの値を限定商品の値に書き替える

(ウ)の脆弱性の検出箇所は商品一覧画面からの遷移である(う)に該当する部分です。ここで、限定商品を購入できてしまうということですから、限定商品一覧からの遷移である(え)に該当する部分の仕様を確認すれば何かヒントが得られそうです。

表2の(う)と(え)を比較すると、URLが同じで、POSTデータのcodeの値のみが異なっていることに気付ければ、あとは想像力です。

一般会員が限定商品のcodeを知っていれば、POSTデータの値を書き換えてリクエストすることで、画面遷移が正常に行われてしまいます。

 表3の診断結果から、Qさんは脆弱性を作り込まないようWebセキュリティガイドラインに項目を追加した。さらに、XSSの脆弱性をよく作り込むパターン、アクセス制御の不備や認可制御の欠落及びクロスサイトリクエストフォージェリについて、診断手順書を改訂して、診断手順を追加した。改訂された診断手順書第2版を図10に示す。

f:id:aolaniengineer:20200410051826p:plain

k:権限が異なる複数のl:許可されている操作の違い

アクセス制御や認可制御の欠落を確認するには、与えられた権限を超えた操作ができてしまっていないかを確認することが重要です。そのためには、権限が異なるアカウントごとに、許可された操作の違いを確認する必要があります。

 WebサイトZで検出された脆弱性は、リリース前に修正するようA社のWebサイトZの担当者からP社に伝えた。Qさんが、脆弱性が作り込まれた原因をP社に確認したところ、いずれも確認不足であるとのことであった。

【出典:情報処理安全確保支援士試験 平成30年度 春期 午後2問2(一部、加工あり)】