ここではSQLインジェクション(SQI)について、基本的な知識から仕組みや種類、XSSとの違いや攻撃を受けるとどうなるのか、その対策など、SQLインジェクション(SQI)を様々な角度から解説します。
SQLとは構造化照会言語と呼ばれるもので、多くのデータベースを維持するために使用されているプログラミング言語のことです。SQLデータベースの取得や変更のために使用される言語を用いた攻撃コードインジェクション・攻撃手法のひとつが、SQLインジェクション(SQI)です。
悪意を持つ攻撃者は、SQLのステートメントをWebサイトの入力フォームに挿入することでデータベースからデータ取得や破壊その他の操作を可能にし、管理者が想定していない被害をもたらすこともあります。
SQIは、データベース保護に使用されている言語であるSQLの特性を悪用したものです。SQLにはデータの抽出や抽出条件の指定、テーブルに含まれている項目すべてなど、様々な意味を持つ語句があります。これら語句の特性を理解した上で悪用するのがSQIです。例えば情報出力が成立する条件を本来とは異なる形で満たしてしまうことで、相手に被害を与えることが可能になります。
SQIは、5つの攻撃方法に分類できます。それぞれの種類について、詳しく紹介します。
入力へのレスポンスを収集することで脆弱性の有無を分析し、脆弱性を基にSQL構文を注入するスタイルです。SQLの命令文として解釈するようなシステムに対し、攻撃者は意図的に異常なSQL文を入力など、比較的簡単に実行可能なものです。そのため、被害の数が多いとされています。
Webアプリケーションに意図的に出力させるエラーメッセージからデータベースの脆弱性を探るためのものです。もちろん探って終わりではなく、探った脆弱性を基に様々な攻撃を仕掛けます。
データベースの複数の検索結果を1つにまとめるSQL構文である「UNION」を悪用します。本来実行されるSQLとは別のテーブルに対して実行することで、データベースの情報を不正に取得し、攻撃を仕掛ける手法です。
入力フォームを利用するものではなく、Webサーバーに直接入力情報送信するサイバー攻撃の一種です。入力情報の送信後、応答時間やTrue/Falseの結果から攻撃対象Webアプリケーションの構造を探り、攻撃する方法を模索します。
マルチプルステートメントと呼ばれる、セミコロンによって複数のSQLをまとめる機能を悪用したものです。一見安全に見えるアプリケーションではあっても、マルチプルステートメントによって不正なSQL構文が紛れ込むことで情報が改ざんされるなど、被害が生じます。
SQLインジェクションはXSSと似ていると指摘されることがありますが、攻撃の仕組み・対象が異なります。脆弱性のあるWebサイトに罠を仕掛けることで訪れたユーザーを攻撃するXSSに対し、SQLはWebサイトのデータベースに対して攻撃を仕掛けること。Webサイト運営者・企業に被害を与えるものです。
「他者への想定外の攻撃」は同じですが、攻撃対象者・攻撃方法は全く異なります。しかし、「Web上にて行われる悪意ある攻撃」として、一緒に取り上げられることが多いものです。
SQIを受けることで予想される被害を紹介します。
データベースへの不正アクセスを許すことになるため、情報漏洩が懸念されます。Webサイト・アプリケーションにアクセスするだけでは本来得ることができない情報も、データベースへのアクセスにより、確認できるからです。
データベースへの不正アクセスは「勝手に中身を見られるだけ」に留まりません。サイト内を弄られる可能性、つまり「サイトの改ざん」がとても大きな不利益をもたらします。どのように改ざんされるかは悪意を持つ不正アクセス者次第です。
データベースに残されているアカウント情報を見られた場合、アカウントを不正利用されるおそれも懸念されます。ログイン情報だけではなく、ECサイト等であればクレジットカード情報を不正利用される可能性があり、社会への影響が甚大なのが特徴です。
サイトそのものだけではなく、データベースのデータを改ざん、ひいては破壊されるリスクもあります。どのように改ざんされるかは攻撃者次第で、改ざん程度ではおさまらずサイトそのものを破壊されることもあります。
システムそのものを乗っ取られる可能性もあります。勝手にIDやパスワードを改ざんされた場合、本来の管理人がアクセスできなくなり、悪意のある攻撃者だけがアクセスできる状態となってしまいます。
SQL構文として悪用される特殊な文字を、無害な文字に書き換える手法です。そのままであれば何らかの挙動不審を起こすものですが、エスケープ処理を行うことで、SQLインジェクションそのものを無効化できます。SQL対策としては基本的なものです。
プログラミングにおいて外部から指定された要素を格納しておく場所を意味するプレースホルダを活用することで、SQL構文を「不正な構文」ではなく、あくまでも「単なる文字列」として判断するため、SQLの実効を防止できます。
Webフォーム上からの入力値を制限する方法も対策のひとつです。Webフォームに入力可能な文字列を制限することで、SQL構文にて用いられる特殊文字が入力されても意味をなさないものにする方法です。
ワードプレスなど、CMSを最新の状態に保つことも対策として有効です。最新版では報告された被害を防ぐための方法が付与されているケースもあります。ただし、アップデート後に生まれた新しいSQLには対応していない傾向にあるので、確認は必要です。
Web Application Firewallの頭文字からも分かるように、Webサイトをアプリケーションレベルにて防御するためのものです。
第三者が提供している脆弱性診断サービスを利用することで、Webサイトの脆弱性を把握できます。SQIは脆弱性をつくものです。そのため、自ら脆弱性を把握することで、狙われる攻撃を想定した対策を構築できます。
SQLインジェクション(SQI)とは何かや、考えられる被害、そして対策を紹介しました。SQLインジェクション(SQI)は脆弱性をついたもので、データベースへの不正アクセスを許すことで様々な被害が想定されます。SQLインジェクション(SQI)を受けないようにするには、自社だけで対策するのではなく第三者機関を利用することが大切です。
目次
目次