Webサービスが広く普及するなか、脆弱性が放置されているWebサイトやWebアプリケーションが少なくないのが現状です。この脆弱性をついて第3者がSQL文を挿入し、データベースへ不正にアクセスしたりデータを改ざんしたり、情報を盗み取ったりするSQLインジェクションの被害が増加しています。本記事では、こうしたSQLインジェクションの仕組みや被害例、効果的な対策について解説します。
SQLインジェクションとは?
「SQLインジェクション」とは、第3者がWebサイトの脆弱性を悪用し、データベースへの不正なアクセスやデータの改ざん、情報窃取などを企むサイバー攻撃です。
「SQL(Structured Query Language)」は、最も普及しているデータベース言語のひとつです。ISO(国際標準化機構)によって標準化されており、データベースを操作・制御します。
SQLインジェクションでは、脆弱性が放置されたWebサイトの入力フォームや検索ボックスなどの入力欄に、不正な操作をさせるためのSQL文を挿入することで、データの削除や窃取、システムの認証を回避して不正にログインといった被害を発生させます。
関連記事:2023年のサイバー攻撃における代表的な事例や被害額まとめ
近年SQLインジェクションは増加傾向にあり、2023年1~3月には前年同期比で1.5倍もの被害件数が報告されています。
(参照元:株式会社サイバーセキュリティクラウド「『SQLインジェクション』が前年同期比で+150%増加 ~2023年1-3月『Webアプリケーションを狙ったサイバー攻撃検知レポート』を発表~」)
また、IPAの調査によると、2023年の脆弱性の種類・影響別累計届出件数において、SQLインジェクションは2番目に多く報告されています。
(参照元:IPA「ソフトウェア等の脆弱性関連情報に関する届出状況[2023年第3四半期(7月~9月)]」)
SQLインジェクション攻撃の仕組み
ユーザーがWebサイトのフォームに情報を入力した際、通常は入力値に基づいて、サーバに送信される適切なSQL文が生成されます。そのSQL文に従ってデータベースが操作され、適切な結果がユーザーに返ってくる仕組みです。
しかしWebサイトに脆弱性がある場合、悪意を持った第3者が入力欄から不正なSQL文を挿入すると、そのSQL文によってデータベース内のデータの改ざんや個人情報の窃取といった不正な操作が行われてしまいます。
SQLインジェクション攻撃の被害例
・情報が盗まれる
情報漏えいは、SQLインジェクションの代表的な被害のひとつです。
例えば、顧客の個人情報や企業の機密情報などの漏えいも多数発生しています。IDやパスワードの流出によりアカウントが乗っ取られたり、クレジットカード情報が悪用されて不正送金の被害に発展したりする恐れもあります。
・データベースのデータが改ざん・削除される
SQLインジェクションによるデータの改ざんでは、ECサイトにおける商品の紹介文や価格が書き換えられてしまうといった事例があります。Webサイトに偽の情報が掲載されていると企業の信用が損なわれてしまいます。
また、データベース内のデータをすべて削除・破壊される攻撃を受けて、事業継続が難しくなるケースもあります。
・Webサイトを改ざんされる
不正なSQL文の命令によってサーバのファイルが書き換えられ、Webページが改ざんされてしまうこともあります。閲覧するとマルウェアに感染してしまう悪質なサイトのURLがページに埋め込まれ、ユーザーがその悪質なサイトに誘導されてしまうという被害も報告されています。
・攻撃の踏み台にされる
SQLインジェクションによって乗っ取られたメールアカウントからスパムメールを大量に送付するなど、攻撃に利用されてしまうこともあります。
また、SQLインジェクションでバックドアという侵入経路がサーバに仕掛けられることで、知らないうちに別のサーバを攻撃する踏み台にされてしまう事例もあります。
SQLインジェクションの対策方法
SQLインジェクションの被害を受けてしまうと、企業価値の毀損やブランド力の低下など、大きな影響を及ぼします。従ってセキュリティの強化対策は、企業の将来性を左右する重要なポイントです。以下で、SQLインジェクションへの対策方法4点を紹介します。
・1. プレースホルダを利用する
Webサイト画面の入力値がそのままSQL文として読み込まれると、悪意のある第3者が入力した不正なSQL文が、そのまま実行されてしまいます。この問題を解決するには、プレースホルダを使ってSQL文を組み立てるのが有効です。
プレースホルダとは、SQL文の変数部分に当てはめる記号のことです。プレースホルダを入れることで、変数部分と操作命令に関わる特殊な文字列の部分がそれぞれ確定します。こうすることで、変数部分に特殊な文字列が入力されて不正なSQL文を生成しようとしても無効化できます。
プレースホルダは、次に解説する「エスケープ処理」と組み合わせることで、さらなる安全性を目指せます。
(参照元:IPA「安全なSQLの呼び出し方」)
・2. エスケープ処理 を行う
エスケープ処理とは、プログラム言語で利用される特殊な文字列や記号を、ルールに従って別の文字列に置き換えることです。SQLインジェクション対策の場合は、「シングルクォート(‘)」や「セミコロン(;)」などの記号が対象になります。
第3者によって挿入された、不正なSQL文に含まれる特定の文字列や記号を変換・削除し、攻撃を無効化します。なお、データベースごとに特殊記号の扱いは異なるので、それぞれのデータベースに合わせた対策が必要です。
・3. 動作環境をすべて最新に保つ
Webサイトを構築するためのCMS(WordPressなど)やOS、Webアプリケーションなど、すべての環境を最新の状態にアップデートすることも効果的です。
これらのアップデートは、バグ解消や機能追加だけではなく、脆弱性への対応も含まれています。サイバー攻撃は脆弱性を狙うため、動作環境をすべて最新の状態を保つことで、セキュリティを強化できます。
WordPressのセキュリティについて、詳しくは関連記事「WordPressのセキュリティ|脆弱性を狙った攻撃事例や対策」もご覧ください。
・4. WAFを導入する
「WAF(Web Application Firewall)」を導入すると、サーバに対して悪意のある通信が行われた場合は、自動的に通信をシャットアウトしてくれます。従来のファイアウォールでは防ぎきれなかった、Webサイトの脆弱性への攻撃防止が可能です。特にクラウド型のWAFであれば、常に自動で最新のセキュリティ環境を維持できます。
まとめ
SQLインジェクションの被害は近年増加しています。有効なセキュリティ対策方法としては、プレースホルダやエスケープ処理 の利用、動作環境のアップデート、WAFの導入などが挙げられます。
ペンタセキュリティのWAF、「Cloudbric WAF+」は、クラウド型のセキュリティプラットフォームです。常に最新のセキュリティ環境を維持できるので、SQLインジェクション対策にも役立ちます。
関連記事:Cloudbric WAF+
▼WAFをはじめとする多彩な機能がひとつに。企業向けWebセキュリティ対策なら「Cloudbirc WAF+」
▼製品・サービスに関するお問い合わせはこちら