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

読み:おーえすこまんどいんじぇくしょん / 英語表記:OS command injection

Webアプリケーションが、利用者の入力をそのままOSのコマンドの一部として実行してしまう脆弱性を突き、攻撃者が任意のOSのコマンドをサーバ上で実行させる攻撃。

イマシルちゃんの解説

Webアプリケーションには、OSに処理を頼む命令「OSコマンド」を使うものがあるよ。
この命令を利用者の入力から組み立てるとき、入力の扱いに不備があると危険なんだ。
ただのデータのつもりだった文字が命令の一部になり、開発者の意図しない処理をサーバ上で実行させてしまうの。
これを悪用するのがOSコマンドインジェクションという攻撃だよ。
ファイルを盗まれたり書き換えられたりするおそれがあるんだ。
必要がなければOSコマンドを呼ばず、プログラム言語に用意された機能で処理することが、根本的な対策になるよ。

より深い解説

定義

OSコマンドインジェクションは、Webアプリケーションが、外部から受け取った値を使ってOSのコマンド(シェル)を呼び出すとき、その値にシェルの特殊な記号やコマンドを混ぜ込まれ、開発者が意図しないコマンドを実行されてしまう攻撃である。

起きる仕組み

例えば、入力されたホスト名に ping を実行する機能で、プログラムが次のようにコマンドを組み立てているとする。

ping -c 1 (入力された値)

入力に「example.com; cat /etc/passwd」と入れられると、シェルは「;」でコマンドを区切り、2つ目のコマンドも実行してしまう。

よく使われる記号意味
;コマンドを続けて実行する
|前のコマンドの出力を、次のコマンドに渡す
&& 、||前のコマンドの結果に応じて、次を実行する
バッククォートで囲む、$( )コマンドの実行結果に置き換える

PerlのsystemやPHPのexecのように、シェルを起動する関数に入力を渡す部分が危険な箇所になる。

被害

対策

対策内容
シェルを起動しないOSのコマンドを呼ばずに、言語の機能(ライブラリ)で処理する。これが根本的な対策
引数を分けて渡すシェルを介さず、コマンドと引数を別々に渡す関数を使う
入力の検証許可した文字(英数字など)だけを受け付ける
最小権限Webアプリケーションを、権限の小さいアカウントで動かす

インジェクション系の攻撃の比較

攻撃混ぜ込む先
OSコマンドインジェクションOSのコマンド(シェル)
SQLインジェクションデータベースへの命令(SQL)
HTTPヘッダインジェクションHTTPの応答ヘッダー(改行を混ぜて、ヘッダーや本文を追加する)

実際の試験ではここに出る!全2問

ネットワークスペシャリスト

午前Ⅱ

この用語が出てくる記事

↑