インジェクション攻撃とは、攻撃者がサーバーに、データベースを操作するSQL文やコマンド、JavaScriptといったスクリプト文などを送って、想定外の動作をさせる攻撃を指す。主に、インターネット上に公開したサーバーに対して行われる。

 インジェクション攻撃で最も有名なのは、入力フォームのあるWebサーバーへの攻撃である。こうしたWebサーバーでは、バックグラウンドで動くデータベースから目的のデータを取り出すためにSQL文をよく使う。攻撃者はWebサーバーの入力フォームに不正な処理を実行させるSQL文を入力。サーバーがそれを読み込み、実行してしまうことで攻撃が成立する。データベースに登録しているデータを攻撃者の画面に表示したり、データベースの内容を改ざんしたりする。SQL文を使ったインジェクション攻撃は「SQLインジェクション」とも呼ばれる。

図●インジェクション攻撃の例
図●インジェクション攻撃の例
[画像のクリックで拡大表示]

 入力フォームがないサーバーでも、インジェクション攻撃は可能である。例えば、Webサーバーに対して不正なコードをパラメーターとしてURLに付けて送信することで、攻撃を成立させる。

 インジェクション攻撃には、入力データを厳しくチェックしたり、入力データに含まれるコードを実行できないようにしたりすることが対策になる。

 インターネット上に公開されたDNSキャッシュサーバーが一時保存するNSレコード(名前解決の情報)を不正に書き換える手法の1つも、インジェクション攻撃と呼ばれることがある。DNSキャッシュサーバーに対して、NSレコードを管理する正規のDNSサーバーとは別の偽サーバーに問い合わせるように、不正な応答パケットを送り付けるのである。

 DNSキャッシュサーバーは偽サーバーに問い合わせて、嘘のNSレコードに書き換えられてしまう。この結果、DNSキャッシュサーバーの利用者は、攻撃用のサーバーなどにアクセスさせられる。