SQLインジェクションは、Webサイトなどに入力した文字が、データベースへの命令の一部として扱われてしまう脆弱性です。悪用されると、情報が盗まれたり、データを書き換えられたりするおそれがあります。作る側は「プレースホルダ」という方法で防ぎ、使う側は修正版に更新することが基本です。
SQLインジェクションの意味
会員情報や商品の情報など、多くのWebサイトはデータをデータベースに保存しています。データベースを操作するときには、SQL(エスキューエル)という命令の言葉が使われます。
Webサイトの仕組み(Webアプリケーション)は、このSQLの命令文を組み立てます。そのとき、利用者が入力した検索語やIDなども使います。
IPA(情報処理推進機構)によると、この組み立て方に問題があると、攻撃者が命令を不正に書き換えられてしまいます。この問題を「SQLインジェクションの脆弱性」、悪用する攻撃を「SQLインジェクション攻撃」と呼びます。
何が起きているのか
本来、利用者が入力した文字は、ただのデータとして扱われるべきものです。
ところが、入力に特別な記号などが含まれていたときに、正しく処理されないことがあります。すると、その文字がデータベースへの命令の一部として読まれてしまいます。
MITREが管理する弱点の種類の一覧(CWE)では、SQLインジェクションは CWE-89 という番号です。入力がふつうのデータではなく、SQLの命令として解釈されてしまう弱点と説明されています。
起きると何が起きるか
IPAは、SQLインジェクションで起こりうる被害を挙げています。公開していない情報を見られることや、個人情報が漏れることです。
データを書き換えられたり、消されたりすることもあります。Webページの改ざん、パスワードの変更、システムの停止もありえます。
ログインの確認をすり抜けて、不正にログインされるおそれもあります。データベースの機能によっては、サーバーを乗っ取られ、ほかへの攻撃の踏み台にされることもあるとされています。
IPAは、データベースを使うWebサイトであれば、運営する組織に関係なく起こりうる問題だと説明しています。特に、個人情報などの大事な情報を保存しているサイトは注意が必要です。
作る側の対策
IPAは、Webサイトを作る人向けの資料「安全なウェブサイトの作り方」で、SQLインジェクションの対策を示しています。
根本的な対策は、SQLの命令文をすべて「プレースホルダ」で組み立てることです。プレースホルダは、命令文のひな形に値を入れる場所の印を置き、実際の値はあとから機械的に当てはめる方法です。こうすると、入力がSQLの命令として読まれないようにできます。
値の当てはめをデータベースの側で行う方式を、静的プレースホルダといいます。IPAは、原理的に脆弱性の可能性がなくなる点で、この方式が優れているとしています。
被害を減らす対策も挙げられています。データベースのエラーの内容をそのまま画面に出さないことです。データベースの利用者の権限を、必要な最小限にすることも勧められています。
米国のCISAとFBIも、2024年3月25日に文書を出しています。ソフトウェアを作る会社に向けて、SQLインジェクションをなくすよう求めるものです。
このサイトでの見方
製品を使っている側は、自分でプログラムを直すことはできません。IPAは、脆弱性の対策情報が出たら早急に対策するよう呼びかけています。開発元の修正版への更新が基本です。
このサイトの記事は、米国CISAのKEV(実際に悪用が確認された脆弱性の一覧)に載った脆弱性を解説しています。記事の「弱点の種類(CWE)」の欄に CWE-89 とあれば、SQLインジェクションの脆弱性です。
使っている製品の記事を見つけたら、記事の公式情報で修正版を確かめ、早めに更新しましょう。
出典
- https://www.ipa.go.jp/security/vuln/websecurity/sql.html
- https://www.ipa.go.jp/security/vuln/websecurity/about.html
- https://cwe.mitre.org/data/definitions/89.html
- https://www.cisa.gov/news-events/alerts/2024/03/25/cisa-and-fbi-release-secure-design-alert-urge-manufacturers-eliminate-sql-injection-vulnerabilities
- https://www.ipa.go.jp/security/10threats/omgdg50000008fi8-att/kaisetsu_2026_soshiki.pdf
- https://www.cisa.gov/known-exploited-vulnerabilities-catalog