こんにちは、技術部の藤田です。
最近、攻撃遮断くんを導入されているお客様から、攻撃遮断くんで検知・遮断したアクセスについて、どんな条件のシグネチャ(攻撃を識別するためのルール)とマッチしたのかお問い合わせをいただくことがあります。
攻撃遮断くんには様々な攻撃を識別するためのシグネチャがありますが、なぜそのシグネチャが必要なのか知るためには、攻撃の手法について理解することが欠かせません。
そこで、今回はWEBアプリケーションに対する主要な攻撃の一つである、SQLインジェクションについて書いてみたいと思います。
SQLインジェクションは、WEBアプリケーションにおけるSQLの実行(データベースに対するアクセス)に関する攻撃です。SQLインジェクションの脆弱性が存在する場合、「データベース内の全ての情報が外部から盗まれる」、「認証なしでログインされる」など非常に重大な問題が発生する可能性があります。
例えば、ある会員制WEBサイトのログインページにおいて、「ID」と「パスワード」の二つの入力項目があるとします。
そして、それぞれの項目に入力された値がWEBアプリケーションに送信され、SQLの実行において下記のSQL文に変換されるとします。(usesテーブルから、idとpwが合致したレコード情報を取得する)
SELECT * FROM users WHERE id = 'ID欄の入力値' AND pw = 'パスワード欄の入力値';
通常のユーザーが操作した場合は、下記のようなSQL文が実行されます。(IDに「fujita」、パスワードに「abcd1234」を入力した場合)
SELECT * FROM users WHERE id = 'fujita' AND pw = 'abcd1234';
しかし、攻撃者が認証をすり抜けてログインする目的で、IDに「fujita」、パスワードに「’ OR ‘a’ = ‘a」という値を入力した場合、次のSQLが実行されてしまいます。
SELECT * FROM users WHERE id = 'fujita' AND pw = '' OR 'a' = 'a';
このSQLは、usersテーブルから、下記(1)と(2)に合致した条件のレコード情報を取得します。
(1)IDが’fujita’
(2)パスワードが”または’a’ = ‘a’
重要なのは「’a’ = ‘a’」の箇所です。この箇所は必ず成立するため、(2)が無条件で成立する(正しいパスワード入力しなくてもよい)状態になっています。
その結果、攻撃者がパスワードなしでログイン可能になってしまっています。
SQLインジェクションが発生する原因は、本来実行されるべきSQLの構文が変更されるためなので、対策としてはSQLの構文の変更を防ぐことが必要となります。
代表的な対策は、「プレースホルダ」の利用です。
プレースホルダを利用することで、SQLの構文が事前に確定し、ユーザーからの入力値等によって不正なSQLが実行されることを防ぐことができます。
※厳密には、プレースホルダには静的プレースホルダと動的プレースホルダの2種類があります。ここでは、より安全な静的プレースホルダを利用する想定で記載しています。
この場合、「攻撃手法」で記載したように、攻撃者がパスワードに「’ OR ‘a’ = ‘a」に入力したとしても、
「’ OR ‘a’ = ‘a」は単純な文字列として扱われるため、SQLの構文が変わることはありません。
WAFはファイアーウォールやIPS/IDSでは防ぐことができない、Webアプリケーションの脆弱性を悪用したサイバー攻撃を防ぎます。
SQLインジェクション以外の攻撃にも対応しているため、より安全にWebサイトを運用できるようになります。リソース不足によりWebアプリケーションを最新バージョンへ更新できない場合や、すぐにセキュリティパッチを適用できない状況でも、WAFを導入することでSQLインジェクション攻撃への対応が可能です。
なかでもクラウド型WAFは初期・運用コストが小さいため、手軽に対策できます。クラウド型WAFも選択肢が多いですが、導入しやすいものとしておすすめするものに「攻撃遮断くん」があります。システム変更不要のため最短翌営業日で導入でき、ユーザー側での運用は一切必要ないため低価格かつ簡単に高セキュリティを実現できます。
「攻撃遮断くん」の詳細資料は、こちらからダウンロード頂けます。
https://www.shadan-kun.com/
今回は、SQLインジェクションの攻撃手法と対策について書いてみました。
次回以降も、代表的な攻撃について取り上げていこうと思います。
この記事と一緒に読まれています
AWS WAFとは?基本用語や特徴、一般のクラウド型WAFとの違いをわかりやすく解説
2021.07.07
セキュリティ対策
2020.01.10
セキュリティ対策
Webアプリケーションのセキュリティ対策を行うべき5つの理由
2020.03.29
セキュリティ対策
2019.09.10
セキュリティ対策
2019.01.11
用語集