SQLインジェクション(SQLi)の歴史は、Internet Explorer(Gen Zによれば文明の始まり)よりも古いものです。SQLインジェクションによって引き起こされた侵害は何千件もあり、それを防ぐための十分に文書化されたベストプラクティスやツールも無数に存在します。ですから、これらの侵害から教訓を得て、SQLiはもはや問題ではないはずです。
オープンソースおよびクローズドソースプロジェクトで発見されたSQLインジェクションの数を監視し、状況が改善しているかを確認しています。MOVEit SQLインジェクション侵害から盗まれたデータがAmazonのような企業に販売されているという最近のニュースを受け、当社が間もなく発表する2025年のState of Injectionレポートのプレビューをお届けすることにしました。
驚くべきことに、私たちは依然としてSQLインジェクションの防止が苦手です。
SQLインジェクションとは?
SQLiは、プログラムが信頼できないユーザー入力をSQLデータベースへのクエリで直接使用する際に発生する脆弱性です。悪意のあるユーザーは、独自のコードを挿入してクエリを操作し、機密データへのアクセス、認証のバイパス、またはデータの削除を可能にします。以下の例は、ユーザーログインページ用の安全でないSQLクエリがSQLi認証バイパス攻撃に対してどのように脆弱であるかを示しています。
コードインジェクションやクロスサイトスクリプティング(XSS)など、さまざまな種類のインジェクション攻撃があります。しかし、SQLiは非常に長い間、情報漏洩において重要な役割を果たしており、2024年になってもこれについて議論する必要があることは多くの人にとって驚きです。
SQLi攻撃の発生方法
1. 脆弱なクエリ
ユーザー入力がクエリに直接使用されている脆弱なクエリの例

2. SQLインジェクション攻撃
認証ページのユーザー入力フィールドにSQLが注入される

3. ペイロード付きクエリ実行ペイロードがパスワードチェックをコメントアウトするため、クエリはこのステップを無視します

SQLインジェクション:数字で見る
- オープンソースプロジェクトで発見された全脆弱性の6.7%はSQLiです。
- クローズドソースプロジェクトでは10%!
- オープンソースプロジェクトにおけるSQLインジェクションの総数(SQLiに関連するCVE)は、2264件(2023年)から2400件(2024年)への増加が予想されます。
- 全脆弱性に占める割合として、SQLインジェクションの人気は低下傾向にあります。2023年から2024年にかけて、オープンソースプロジェクトで14%、クローズドソースプロジェクトで17%の減少が見られました。
- セキュリティツールを初めて使用する際、スキャンされたクローズドソースプロジェクトの20%以上がSQLインジェクションの脆弱性を抱えています。
- SQLインジェクションの脆弱性を持つ組織では、コード内のSQLインジェクション箇所は平均で約30か所に上ります。
2023年および2024年これまでにオープンソースパッケージで発見されたSQLi脆弱性の数を調査しました。その後、Aikido Securityによって発見されたクローズドソースプロジェクトと比較しました。驚くことではありませんが、クローズドソースおよびオープンソースプロジェクトの両方で、依然として驚くべき数のSQLインジェクションが確認されています。2024年にオープンソースプロジェクトで発見された全脆弱性の6.7%がSQLインジェクション脆弱性であり、クローズドソースプロジェクトで発見された脆弱性の10%がSQLインジェクション脆弱性でした。これは大したことではないように見えるかもしれませんが、2024年になっても、私たちが知っている最も基本的な脆弱性のいくつかにまだ対処できていないことは、率直に言って衝撃的です。
唯一の良いニュースは、発見された全脆弱性に占める割合として、この数値がオープンソースプロジェクトにおいて2023年から14%減少し、クローズドソースプロジェクトにおいて17%減少していることです。しかし、オープンソースプロジェクトで発見されたSQLiの総数は、2023年の2264件から2024年末までに2400件以上に増加すると予想されています。


SQLインジェクションの防止
SQLインジェクションの防止方法に関する情報がインターネット上にはまだ十分ではないようですので、2025年に利用可能なオプションの概要を以下に示します。
1. プリペアドステートメントとパラメータ化クエリの使用
このブログ記事の冒頭の例では、信頼できないユーザー入力を直接クエリに使用しているため、脆弱なコードを示しました。これを避けるためには、プリペアドステートメントを使用する必要があります。これは、まずクエリを定義し、後でユーザー入力を追加することを意味します。これにより、コマンドとデータストリームが分離され、問題が完全に解決されます。これは優れた解決策ですが、常に可能であるとは限らず、また常に使用されているわけではありません!
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
user_id = 5 # 安全な入力例
# パラメータ化クエリを使用した安全なクエリ
cursor.execute("SELECT * FROM users WHERE id = ?", (user_id))
2. サーバーサイドの入力/スキーマ検証
入力検証はSQLiの防止に効果的です。例えば、APIがメールアドレスやクレジットカード番号を期待する場合、それらのケースに対する検証を追加するのは簡単です。
3. SQLiを発見するためにSASTおよびDASTツールを使用する
SQLiの最も恐ろしい要素の一つは、攻撃者によって容易に発見され、「ローハンギングフルーツな脆弱性」と表現されることが多いことです。この理由の一部は、DASTのようなツールが自動的にそれらを発見できるためです。これは私たちにとって有利に利用でき、これらのツールを開発プロセスに導入して早期に発見することができます。
Aikidoのような次世代SASTツールは、プラットフォーム内から直接問題を自動修正することも可能です。

4. インアプリファイアウォールを実装する
インアプリファイアウォールは、アプリケーション内のトラフィックとアクティビティを監視し、インジェクションやSQLiを含む攻撃を検出できます。これは、アプリケーション内部に存在し、予期されるクエリをトークン化し、クエリのコマンド構造を変更するリクエストをブロックできるため、従来のWAFよりも効果的です。
Aikidoの新製品の宣伝です ;) Zenは、ランタイムにおける安心のためのインアプリファイアウォールです。Zenを導入すれば、データベースに到達する前に、リアルタイムで重大なインジェクション攻撃やゼロデイ脅威を自動的にブロックします。
5. 可能な限り動的SQLを避ける
文字列連結による動的SQL生成は、SQLインジェクションに対して非常に脆弱です。可能な限り、SQL構造にユーザー生成コンテンツを使用しない静的で事前定義されたクエリとストアドプロシージャを使用してください。
6. アローリスティングとエスケープ
動的テーブルをクエリする場合や、ユーザー定義の列と方向で順序付けしたい場合など、動的SQLを避けられない場合があります。そのような場合、正規表現の許可リストまたはエスケープに頼るしかありません。エスケープとは、コード内で使用される「>」のような危険な文字を含むユーザー入力を安全な形式に変換することです。これは、それらの前にバックスラッシュを追加するか、記号コードに変換することによって行われます。これはデータベースの種類ごとに異なるだけでなく、文字セットなどの接続設定にも依存する場合があることに注意してください。
SQLiはいつかなくなるのでしょうか?
SQLi脆弱性の発見数がいくらか大幅に減少したという事実は希望をもたらしますが、ゲームDOOMよりも古い脆弱性が依然として環境にとってこれほど重大な脅威であることは、依然として残念なことです。実のところ、この状況が大きく改善するとは考えられません。より速くコーディングするためのツールを導入するにつれて、開発者はコアなコーディング原則から離れていっており、これらのAIツールは、インジェクション脆弱性を含む脆弱なコードを提案することで悪名高いのです。
しかし、すべてが悲観的というわけではありません。これらの脆弱性を発見し修正する上で遥かに効果的な新世代のSASTツールにおいて、大幅な改善が見られ、脅威の状況を劇的に変える可能性があります。
今回はここまでです。以下を忘れないでください:
Aikido AI SAST AutofixでSQLインジェクションを検出し、自動的に修正します。
確認Zen そして、発生するインジェクション攻撃を防止します
ボーナス:SQLの歴史
アプリケーションのセキュリティについて語り始めて以来、私たちはSQLインジェクションについて議論してきました。2003年の最初のOWASP Top 10チャートでは7位にランクインし、2010年にはインジェクションカテゴリに含まれ、2021年まで1位を占めていました。SQLインジェクションが関与した最初の大規模な攻撃として記録されているのは、アパレル企業のGuessが標的となり、クレジットカード番号が漏洩したケースです。それ以来、SQLインジェクションはセキュリティニュースの常連となっています。


