対象試験と出題頻度
詳細をクリックして確認
情報セキュリティマネジメント
基本情報技術者
応用情報技術者
★★★☆☆
ランクB(標準)
用語の定義
OSコマンドインジェクションとは、一言で言うと「Webアプリケーションの入力欄に不正なOSコマンドを紛れ込ませて、サーバーのOSを直接操作する攻撃」のことです。
イメージとしては、「お問い合わせフォームの名前欄に『田中;金庫を開けろ』と書いたら、受付係が名前を読み上げるついでに金庫を開けてしまう」ようなものです。
Webアプリケーションが内部でOSのコマンドを呼び出す仕組みを悪用し、攻撃者がサーバー上で任意のコマンドを実行できてしまう非常に危険な攻撃です。
解説
OSコマンドインジェクション(OS Command Injection)は、Webアプリケーションがユーザーからの入力値をOSのコマンドラインに渡す際、入力値の検証が不十分な場合に発生する脆弱性です。攻撃者は入力値にコマンドの区切り文字(セミコロン、アンパサンド、パイプなど)と追加のコマンドを含めることで、本来意図していないコマンドをサーバー上で実行させます。
- 攻撃の仕組み:例えば、ファイル名を入力して内容を表示するWebアプリがあった場合、攻撃者がファイル名の後ろにコマンド区切り文字と別のコマンドを追加すると、サーバー上でその追加コマンドも実行されてしまいます。
- SQLインジェクションとの違い:SQLインジェクションはデータベースを操作する攻撃ですが、OSコマンドインジェクションはサーバーのOS自体を操作する攻撃です。影響範囲がより広く、サーバー全体が乗っ取られる危険性があります。
OSコマンドインジェクションが成功すると、攻撃者はサーバー上で任意のコマンドを実行できるため、ファイルの閲覧・改ざん・削除、マルウェアのダウンロード・実行、他のシステムへの攻撃の踏み台化、機密情報の窃取など、甚大な被害が発生します。サーバーの管理者権限を奪取されると、システム全体が完全に制御されてしまう可能性もあります。
具体的な活用例・対策
OSコマンドインジェクション対策は、そもそもOSコマンドを呼び出さない設計が最も安全です。やむを得ず使用する場合は、厳格な入力値検証が必要です。
- OSコマンドを使用しない設計: 可能な限り、OSコマンドを呼び出す代わりにプログラミング言語のライブラリやAPIを使用します。これが最も根本的な対策です。
- 入力値の厳格な検証(ホワイトリスト方式): 許可する文字種を英数字のみに限定するなど、想定される入力パターンのみを許可します。コマンド区切り文字(セミコロン、パイプ、アンパサンドなど)を確実に排除します。
- エスケープ処理: OSコマンドに渡す前に、シェルで特別な意味を持つ文字(メタ文字)を無害化します。ただし、完全なエスケープは難しいため、補助的な対策として位置づけます。
- 最小権限の原則: Webアプリケーションの実行ユーザーに必要最小限の権限のみを付与し、万が一攻撃を受けても被害を最小化します。
- WAF(Web Application Firewall): 不正なコマンドパターンを検知・遮断するセキュリティ製品を導入します。
試験ではこう出る!
情報セキュリティマネジメント、基本情報技術者、応用情報技術者で出題されます。以下のキーワードとセットで覚えましょう。
【重要キーワード】
- シェル(コマンドラインインタプリタ)
- メタ文字(セミコロン、パイプ、アンパサンドなど)
- SQLインジェクションとの違い
- 入力値検証(バリデーション)
- 最小権限の原則
試験問題で「Webアプリケーションの入力値にOSのコマンドを挿入し、サーバー上で不正なコマンドを実行させる攻撃」や「シェルを経由してOSの機能を不正に呼び出す攻撃」といった記述があれば、それは「OSコマンドインジェクション」に関する記述です。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. OSコマンドインジェクションに関する説明として、最も適切なものはどれでしょうか?
- A. Webアプリの入力欄に不正なSQL文を挿入し、データベースを不正に操作する攻撃
- B. Webページに悪意のあるスクリプトを埋め込み、閲覧者のブラウザで実行させる攻撃
- C. Webアプリの入力値に不正なOSコマンドを挿入し、サーバー上で任意のコマンドを実行させる攻撃
正解と解説を見る
正解:C
解説:
OSコマンドインジェクションは、Webアプリケーションがユーザー入力をOSコマンドに渡す際の脆弱性を悪用し、サーバー上で不正なOSコマンドを実行させる攻撃です。攻撃が成功するとサーバー全体が制御される危険があり、SQLインジェクションよりも影響範囲が広くなる可能性があります。対策としてはOSコマンドを使用しない設計や、入力値の厳格な検証が有効です。
選択肢Aは「SQLインジェクション」の説明です。選択肢Bは「クロスサイトスクリプティング(XSS)」の説明であり、いずれもOSコマンドインジェクションとは異なる攻撃手法です。