情報処理安全確保支援士試験 令和4年度 春期 午後1 問2
【出典:情報処理安全確保支援士試験 令和4年度 春期 午後1 問2(一部、加工あり)】
[脆弱性の調査]
NAS-Aにおける脆弱性修正プログラムの適用状況を確認したところ、数週間前にリリースされた製品Xの脆弱性修正プログラム(以下、パッチMという)が未適用であった。パッチMは、Web管理機能に関する二つの脆弱性(以下、脆弱性1と脆弱性2という)について対策したものである。脆弱性1及び脆弱性2の概要を図2に示す。
パッチMでは、脆弱性1の対策として、認証なしアクセスの処理の流れにパス名の正規化の処理を加え、さらに、図3に示す順序にした。パス名の正規化とは、相対パスで記述されたパス名を、相対パス記法を含まない形式に変換することである。
c:パストラバーサル
「これは、URLに“..%2f”を使用した(c)と呼ばれる攻撃手法である。」
「..%2f」の「%2f」は、パーセントエンコーディング処理によって、「/」を「2f」というASCIIコードに変換したものです。
したがって「http://192.168.0.1/images/..%2fstatus.cgi」は「http://192.168.0.1/images/../status.cgi」と同じものとなります。
パーセントエンコーディングするのは、攻撃とみなされるのを防ぐために行われています。
そして、「../」は一つ上の階層を示すので、「http://192.168.0.1/status.cgi」と同じものとなり、本来は認証が必要な階層にアクセスできてしまうことになります。
このような攻撃手法のことをパストラバーサルと言います。(パスを横断(トラバーサル)して不正にアクセスする)
d:OSコマンドインジェクション
「IPアドレスの処理に脆弱性があり、任意のOSのコマンドを実行できてしまう。(中略)これは(d)と呼ばれる攻撃手法である。」
「任意のOSのコマンドを実行」という文字通りで、OSコマンドインジェクションが正解です。
Web管理機能としてIPアドレスを指定してpingを実行する機能で、本来、画面上でIPアドレスを指定する部分に、例の「addr = 127.0.0.1;whoami」とIPアドレスと任意のコマンドを指定することで、「ping 127.0.0.1;whoami」が実行され、pingとwhoamiの実行結果が画面に表示されることになります。
(whoamiは自分のユーザ名を表示)
e:URLデコード、f:パス名の正規化、g:除外リストとの比較
「パッチMでは、脆弱性1の対策として、認証なしアクセスの処理の流れにパス名の正規化の処理を加え、さらに、図3に示す順序にした。パス名の正規化とは、相対パスで記述されたパス名を、相対パス記法を含まない形式に変換することである。」
脆弱性1のパストラバーサル攻撃では、URLに「http://192.168.0.1/images/..%2fstatus.cgi」を指定すると「http://192.168.0.1/images/../status.cgi」と解釈され、「http://192.168.0.1/status.cgi」にアクセスできてしまうものでした。
本来であれば、除外リストに指定されていないディレクトリとして処理されるべきですが、パーセントエンコーディングや相対パスによって除外リストを通過することになっていると思われます。
したがって、除外リストとの比較を行う前に、パーセントエンコーディングや相対パスの記法を除く処理を行うことが必要です。
まずパーセントエンコーディングされた値を元に戻す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」を除外リストとの比較を行うことで、正しい処理を行うことができます。