基本情報技術者試験「OSコマンドインジェクション」の問題
あるWebアプリは、利用者が入力したホスト名に対してサーバ上でネットワーク疎通確認コマンドを実行し、その結果を画面に表示する。入力値をコマンド文字列に連結してシェル経由で実行しているため、特定の記号を含む入力でサーバ上の任意コマンドが実行される脆弱性が指摘された。根本対策として、最も適切なものはどれか。
イコマンド名と各引数を分けて起動する方式に改め、入力値はシェルを通さず引数としてのみ渡す。
ア実行結果を画面に出す処理を見直し、エラー時にはその表示を省いて外部に漏れる情報量を減らす。
ウコマンドを動かすサーバのCPUとメモリを増強し、処理性能と余裕を確保するようにする。
エ利用者がホスト名を入力できる時間帯を業務時間内のみに限り、それ以外は受付を停止する。
正解
イ.コマンド名と各引数を分けて起動する方式に改め、入力値はシェルを通さず引数としてのみ渡す。
脆弱性の原因は、入力をコマンド文字列に連結しシェル経由で実行するため、セミコロンやパイプ等の記号がコマンドの区切りとして解釈される点にある。コマンド名と各引数を分けて起動し、入力値はシェルを通さず引数の一つとしてのみ渡せば、記号は単なるデータとして扱われ別コマンドの実行が成立しなくなる。これがOSコマンドインジェクションの根本対策である。
?選択肢ごとの解説
イ ○脆弱性の原因は、入力をコマンド文字列に連結しシェル経由で実行するため、セミコロンやパイプ等の記号がコマンドの区切りとして解釈される点にある。コマンド名と各引数を分けて起動し、入力値はシェルを通さず引数の一つとしてのみ渡せば、記号は単なるデータとして扱われ別コマンドの実行が成立しなくなる。これがOSコマンドインジェクションの根本対策である。
ア ×結果表示の省略は得られる情報を減らすだけで、入力がコマンドとして実行される動作そのものは残るため脆弱性は解消しない。
ウ ×CPUやメモリの増強は処理性能の話であり、任意コマンドが実行される注入脆弱性とは無関係である。
エ ×入力可能な時間帯の限定は攻撃機会を多少狭めるだけで、その時間内であれば注入は成立するため根本対策にならない。
✎くわしく
OSコマンドインジェクションもSQLインジェクション同様『データと命令の混同』が本質である。最も確実なのは外部コマンド呼出しでシェルを経由させず、コマンド名と引数を構造的に分離するAPIを用いること、あるいはそもそも外部コマンドに頼らず言語標準の機能で代替することである。
✓本番での押さえどころ
試験のコツ
『入力をコマンド文字列に連結しシェルで実行』はOSコマンドインジェクション。対策はシェルを介さない引数分離(または外部コマンドを使わない)。
覚え方
SQLは値を箱に、OSコマンドも『引数を箱に分けて渡す』。混ぜて文字列にしない。
よくある誤り
表示制御や運用制限で防げると考えがちだが、入力がコマンドとして解釈される構造を断たない限り任意コマンド実行は止まらない。
情報セキュリティの他の問題
A社の経理担当者が、取引先を装ったメールに添付された請求書ファイルを業務PCで開いたところ、見慣れない画面が一瞬表示されて消…B社のWebサービスで、複数の利用者アカウントに対し正しいIDとパスワードの組合せによるログインが短時間に外部から成立する事…C社では、退職予定者や異動者のアカウント権限の見直しが滞り、業務上不要になった共有フォルダへのアクセス権が残り続けている。情…D社のファイルサーバがランサムウェアに感染し、業務ファイルが暗号化された。D社は日次でバックアップを取得しているが、バックア…E社の従業員に、取引先銀行を名乗る『口座情報の更新が必要』というメールが届いた。本文中のリンク先URLにアクセスすると、銀行…F社は社外の従業員が、カフェなどの公衆無線LANを利用して社内システムへアクセスしている。通信内容が経路上で第三者に盗聴・改…
この問題を、AIの8-ways解説つきで。
無料ではじめる →基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。
ukamiru 過去問 · 基本情報技術者試験 · fe-b-sec-0102