ソフトウェア結合テストの方式|情報処理安全確保支援士 平成30年 秋期午前Ⅱ試験 問22

出典:平成30年秋期 午前Ⅱ 問22 分野:システム開発技術 / 統合・テスト

この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コマンドインジェクション」です。

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

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

デバイスドライバ層の単体テストが未終了で、下位層がまだ十分に使えない状況です。

この段階でも、上位のアプリケーション層・ミドルウェア層を先に結合して確認するには、下位層(デバイスドライバ層)をスタブで代替して進められるトップダウンテストが適切です。

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

❌他選択肢が誤りの理由
ア:サンドイッチテスト
⇒サンドイッチテストは、上位・下位を並行して結合する方式であり、下位層側の準備が進んでいない状況では適しません。
ウ:ビッグバンテスト
⇒ビッグバンテストは、全モジュールをそろえて一括結合する方式であり、未終了の層がある段階では実施できません。
エ:ボトムアップテスト
⇒ボトムアップテストは、下位層から結合していく方式であり、デバイスドライバ層の単体テストが未終了の状況では進めにくいです。
TSUNAGARU-ADVICE

まず押さえたいこと

この問題では、結合テストの定義を暗記しているかではなく、どの層の単体テストが終わっていて、どの層がまだ使えないかを見て、実施可能な結合方法を判断することがポイントです。

迷ったときの判断軸

今回は、アプリケーション層とミドルウェア層の単体テストは終わっていますが、デバイスドライバ層は未終了です。そのため、下位層が未完成でも進めやすいトップダウンテストが適しています。下位層から積み上げる方式や、全てそろってからまとめて結合する方式は、この段階では取りにくいと整理すると判断しやすくなります。

科目Bにつなげるために

科目Bでは、テスト方式を名前で覚えるだけでなく、開発の進み具合や未完成の層を踏まえて、どの方式を選ぶべきかを判断させる形で問われます。各方式の特徴を、実施条件や使うスタブ・ドライバの考え方と結び付けて理解しておくことが重要です。※開発関連試験向け