情報処理安全確保支援士 令和4春 午後1 問2 No.2

設問2 【脆弱性の調査】について、(1)〜(3)に答えよ。

(1)図2中の(c)に入れる適切な字句を、15字以内で答えよ。

解答:パストラバーサル


脆弱性1は、攻撃者が除却リスト対象外のディレクトリ配下のファイルにアクセスできるという危険性です。


例示されているURLを見ると、「/images..%2f」がついていることで、status.cgiへのアクセスが可能であると言われています。

「%2f」はASCIIコードで「/」を表すため、「..%2f」は「../」を表します。

つまり、公開されているimagesと同じ階層にある非公開の「status.cgi」へアクセスが可能です。


このように、サイトにアクセスする時に公開フォルダを起点として、ファイル・パスの値を操作することで、非公開のソースコードや設定ファイルにアクセスする攻撃を、「パストラバーサル(ディレクトリ・トラバーサル)」と言います。

引用:注意喚起:Apache HTTP Serverのパストラバーサルの脆弱性をついた攻撃について|SSK



(2)図2中の(d)に入れる適切な字句を、15字以内で答えよ。

解答:OSコマンドインジェクション


「IPアドレスの処理に脆弱性があり、任意のOSのコマンドを実行できてしまう」と記載されています。


このように、 ユーザからのデータ入力を受け付けるWebサイトで、入力時にシェル機能を操作する文字列を混入させることで、攻撃先サイトのOSを不正に操作する攻撃を「OSコマンドインジェクション」と言います。

アプリケーション側に送るパラメータ情報に不正なOSコマンドを含ませます。


今回の場合、POSTメソッドのリクエストパラメータにpingコマンドが入っています。

Webサーバは、クライアントからPOSTリクエストを受け付けると、当然リクエストの内容を解析して、処理した結果をレスポンスとしてクライアントに返します。

Webアクセスの流れ

ステップ1 : ユーザーがWebブラウザにURLを入力する
ステップ2 : WebブラウザがリクエストをWebサーバーへ送る
ステップ3 : Webサーバーがリクエストを解析して処理する
ステップ4 : WebサーバーがレスポンスをWebブラウザへ返信する
ステップ5 : Webブラウザが受信データを解析して表示する



ステップ3のリクエスト確認では、ヘッダやボディを見て処理します。
ボディには、クライアント側で入力した値が格納されています。

今回だと、addrのIPアドレスは利用者側で入力した値だよ。


クライアント側で入力されるボディには、OSコマンドを入れることが可能です。


おそらく、サーバー側で、下記のような処理があらかじめ用意されており、リクエストが来たら実行されるのでしょう。

/ping.cgi

body = json loads(request.body)
addr = body['addr']
os.exe('ping' + addr)


この処理では、pingとaddrを単純に結合させてOSコマンドとして実行します。


今回の場合、実行されるコマンドは以下になります。

ping 127.0.0.1;whoami;




(3)図3中の(e)〜(g)に入れる適切な字句を、解答群の中から選び、記号で答えよ。

脆弱性1の対策として、パス名の正規化をすることになりました。

流れとしては、URLデコード→パス名の正規化→除外リストとの比較となります。



①URLデコード

パーセントエンコーディングされたリクエストをパーセントなしに変換することをURLデコードと言います。

「http://192.168.0.1/images/..%2fstatus.cgi」を「http://192.168.0.1/images/../status.cgi」にします。



②パス名の正規化

パス名の正規化とは、問題文中に記載されているように、「相対パスで記述されたパス名を、相対パス記法を含まない形式に変換すること」です。

「http://192.168.0.1/images/../status.cgi」を
「http://192.168.0.1/status.cgi」に変換します。


③除外リストと比較

最後に、「http://192.168.0.1/status.cgi」が除外リストにあるかどうかを確認します。

除外リストにあれば、認証なしアクセス可能と判断します。