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

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

OS コマンドインジェクションは、SQLインジェクションと同様、インジェクション攻撃の一種です。インジェクション攻撃とは、アプリケーションへのデータ入力を悪用して、アプリケーションが呼び出す外部システムを意図しない形で操作する攻撃です。SQLインジェクションの場合は、攻撃対象(外部システム)がデータベースですが、OSコマンドインジェクションでは、攻撃対象が WindowsやLinux などの OS(オペレーティングシステム)のシェルになります。

シェルは、OSのコマンドを実行する環境です。シェルを不正に操作できるということは、OS が実行できるさまざまなこと、たとえば、(意図しない)ファイルの参照、編集、削除、任意のプログラムの起動などが攻撃者によって可能になるということです。これは、SQL インジェクションと同じくらい影響の大きい、深刻な攻撃です。

OS コマンドインジェクションの実行方法と対策

OS コマンドインジェクションは、OS のシェルを呼び出すことができるプログラミング言語(Perl や PHP など)を使ってアプリケーションを構築している場合に起きます。プログラマーは、シェルを使って、ある決められた OS コマンドを呼び出す際に、そのパラメーター(引数)として(入力データを含む)データを追加して渡しますが、パラメーターを渡す方法が、SQLインジェクションの場合と同様、文字列をつなげるだけで行われるため、攻撃者がパラメーターを含むコマンド行全体を意図しない形に変えてしまうような操作が可能になってしまいます。

OS コマンドインジェクション対策としては、アプリケーションによって入力されたデータを信用せず、OS コマンドの呼び出しに影響を与えそうな文字を、別の無害な文字に変換する方法(サニタイズまたはエスケープと呼ばれる)があります。

クロスサイトスクリプティング(XSS)

クロスサイトスクリプティング (Cross Site Scripting:XSS) は、一言でいうならば「動的なWeb ページや Web アプリケーションの脆弱性を悪用した攻撃方法」です。動的な Web ページとは、ユーザーの入力内容や操作内容に応じて表示内容が変化するWebページです。たとえば、「入力内容の確認画面ページ」の表示内容は、その1つ前の「入力画面ページ」でみなさんが入力した値によって変わります。このことから、入力内容の確認画面ページは動的な Web ページの1つといえます。

他にも、カートの内容や、新規ユーザーの登録画面などはすべて動的な Webページです。クロスサイトスクリプティングの仕組みを理解するポイントはいくつかあるのですが、最初に理解しておいてほしいのは、「悪意をもった攻撃者が直接、みなさんのブラウザ (PC) を攻撃するのではない」という点です。右ページの図を見てください。段階的には次のような攻撃の流れになります。

①攻撃者は何らかの方法でユーザーのブラウザに不正なスクリプトを混入する
② ユーザーはそのことに気づくことなく、通常のWeb ページヘアクセスし、データを入力する
③入力したデータに不正なスクリプトが混入されているため、Web ページはユーザーを攻撃する(ブラウザの情報を不正に流出させる)Webページを戻してしまう
④結果的に、ユーザーは悪意のない Web ページからの攻撃により、データの破損や流出などの被害を受ける

攻撃者がなぜこのような回りくどい方法をとるのかというと、実はブラウザが持っているデータは、そのデータをやりとりしているサーバーしか取得できないからです(同一生成元ポリシー)。そのため、攻撃者はユーザーが直接やりとりしているWeb サーバーを利用する必要があるのです。XSS は、動的な Web ページや Web アプリケーションが急増した昨今、急激に増加している攻撃方法です。XSSを応用すると、キーロガー(ユーザーのキー入力の内容を盗む)のような高度な攻撃も可能になるため非常に危険です。十分に注意してください。