SQLインジェクション
定義
SQLインジェクションとはWebアプリケーションがユーザー入力をSQLクエリに直接結合する実装上の欠陥を突き、攻撃者が任意のSQLコマンドをデータベースに実行させる攻撃です。例えばログインフォームのユーザー名欄に「admin' OR '1'='1」と入力するだけで認証を迂回できるアプリが今も存在します。データの窃取・削除・改ざん・認証バイパス、場合によってはOSコマンドの実行(xp_cmdshell等)まで可能な深刻な脆弱性です。OWASPが1990年代後半から注意喚起を続けているにもかかわらずOWASP Top 10の常連であり続けており、フレームワークの誤用やORMの生クエリ混在が原因で繰り返し発生します。プリペアドステートメント(パラメータ化クエリ)を使えばSQLコードとデータが完全に分離されるため根本的に防御でき、WAFはあくまでも補助的な対策と位置づけることが推奨されます。
詳細解説
1998年に初めて文書化されてから25年以上経過した今もOWASP Top 10に含まれる最重要の脅威です。プリペアドステートメント(パラメータ化クエリ)1つで根本的に防御できるにもかかわらず、フレームワークの誤用やORMのネイティブクエリ混在で継続的に発生しています。Blind SQLインジェクションはエラーが表示されない環境でも時間ベースの応答差分で情報を抽出できます。
ポイント
- プリペアドステートメントで根本防御(SQLとデータを分離する設計が重要)
- ORM(Hibernate・Active Record等)を正しく使えば大半のケースは自動防御される
- WAFは補助的対策であり根本解決にはならない
- Blind SQLiはエラーが出ない環境でも時間差・真偽応答で情報を抜き取れる
関連用語
同じカテゴリの用語(攻撃手法)
国家支援組織や高度な技術を持つ攻撃グループによる長期・潜伏型の標的型攻撃。数ヶ月〜数年かけて侵入・維持・情報収集を行う。…
認証済みユーザーに悪意のあるサイトを訪問させ、意図しないリクエストをターゲットサイトに送信させる攻撃。CSRFトークンと…
多数のホスト(ボットネット)から同時に大量のトラフィックを送り、標的サービスをダウンさせる攻撃。ボリューム型・プロトコル…
DNSリゾルバのキャッシュに偽の名前解決情報を注入し、正規ドメインへのアクセスを攻撃者が制御するサーバーに誘導する攻撃。…
攻撃者が通信キャリアのサポートに被害者を騙って電話番号を自分のSIMカードに移管させる攻撃。SMS認証(2FA)を乗っ取…
攻撃者が悪意のあるスクリプトをWebページに埋め込み、他ユーザーのブラウザで実行させる攻撃。反射型・蓄積型・DOMベース…