HTTPリクエストヘッダーから推測できる攻撃|情報処理安全確保支援士 平成30年 春期午前Ⅱ試験 問2

出典:平成30年春期 午前Ⅱ 問2 分野:セキュリティ / 情報セキュリティ
Webサーバのログを分析したところ,Webサーバへの攻撃と思われるHTTPリクエストヘッダーが記録されていた。次のHTTPリクエストヘッダーから推測できる,攻撃者が悪用しようとしている脆弱性はどれか。ここで,HTTPリクエストヘッダーはデコード済みである。

〔HTTPリクエストヘッダーの部分〕
GET /cgi-bin/submit.cgi?user=;cat /etc/passwd HTTP/1.1
Accept: */*
Accept-Language: ja
UA-CPU: x86
Accept-Encoding: gzip,deflate
User-Agent: (省略)
Host: test.example.com
Connection: Keep-Alive
  • ア:HTTPヘッダーインジェクション
  • イ:OSコマンドインジェクション
  • ウ:SQLインジェクション
  • エ:クロスサイトスクリプティング
解説

このHTTPリクエストで注目する部分は、「user=;cat /etc/passwd」です。

これは、Webアプリケーションに対して、本来想定していないOSコマンドを実行させようとしている攻撃と考えられます。

部分 意味
user= Webアプリケーションに渡されるパラメータ
; UNIX系OSのシェルで、命令を区切る記号
cat ファイルの内容を表示するコマンド
/etc/passwd UNIX系OSでユーザーアカウント情報が記録されているファイル

本来であれば、userパラメータにはユーザー名などの通常の値が入る想定です。しかし、ここでは「;cat /etc/passwd」という文字列が入っています。

もしWebアプリケーションが、受け取ったuserパラメータを十分に検査せず、OSのシェルにそのまま渡してしまうと、次のように解釈される可能性があります。

本来実行されるコマンド ; cat /etc/passwd

セミコロン「;」は命令の区切りとして扱われるため、OSはこれを次の2つの命令として実行してしまうおそれがあります。

  • 本来実行されるコマンド
  • cat /etc/passwd

その結果、/etc/passwdの内容が読み取られ、ブラウザの画面などに表示されてしまう危険があります。

このように、入力値にOSコマンドを混ぜ込み、Webアプリケーションを通じて不正なコマンドを実行させる攻撃をOSコマンドインジェクションといいます。

つまり、このHTTPリクエストから推測できる脆弱性は、「利用者から受け取った値を適切に検査せず、OSコマンドとして実行してしまうOSコマンドインジェクション」です。

OSコマンドインジェクション

したがって、が適切です。

❌他選択肢が誤りの理由
ア:HTTPヘッダーインジェクション
⇒HTTPレスポンスヘッダーに改行コードなどを挿入し、不正なヘッダーやレスポンス本文を追加する攻撃です。本問では、HTTPヘッダーではなくURLパラメータにOSコマンドが埋め込まれています。
ウ:SQLインジェクション
⇒入力値に不正なSQL文を混入させ、データベースを不正に操作する攻撃です。cat /etc/passwdはSQL文ではなく、OS上でファイルを表示するコマンドです。
エ:クロスサイトスクリプティング
⇒Webページに不正なスクリプトを埋め込み、利用者のブラウザ上で実行させる攻撃です。本問の文字列はJavaScriptではなく、サーバ側でOSコマンドを実行させることを狙っています。
TSUNAGARU-ADVICE

まず押さえたいこと

このHTTPリクエストでは、URLのパラメータに「;cat /etc/passwd」が含まれています。セミコロンでコマンドをつなぎ、UNIX系OSのパスワード関連ファイルを表示しようとしているため、攻撃者はOSコマンドインジェクションを悪用しようとしていると考えられます。

迷ったときの判断軸

HTTPヘッダーインジェクションはHTTPヘッダーを不正に操作する攻撃、SQLインジェクションはSQL文に不正な条件や命令を混入する攻撃、クロスサイトスクリプティングはブラウザ上で不正スクリプトを実行させる攻撃です。この問題では、入力値がOSコマンドとして実行されることを狙っているため、「;」「cat」「/etc/passwd」などのOSコマンドらしい文字列に注目しましょう。

科目Bにつなげるために

科目Bでは、Webサーバのアクセスログ・CGI・入力パラメータ・実行権限・外部コマンド呼出し処理を組み合わせて問われることがあります。OSコマンドインジェクション対策では、入力値をそのままシェルに渡さず、安全なAPIの利用・入力値検証・実行権限の最小化を徹底する視点を持ちましょう。