SQLインジェクションとは?被害事例や対策について解説。データベースの守備をICT Solution!
インターネットでの個人情報の入力やオンラインバンキングによる送金が当たり前となった今、ユーザーが意識しなければならないのが「そのWebサイトは安全なのか?」「本当に信頼できるのか?」という点である。サービス提供者側には自社サイトを安全に運営する義務があるが、Webサイトの脆弱性を狙った攻撃も進化をしているのが現状だ。
攻撃手法や対策を知ることが防御の一手に繋がるのだが、そのような知識のない事業者も多いのではないだろうか。
そんな中、自社サイトがセキュリティインシデントの危険にさらされているとは思ってもいない“情シス”がここにもひとりーーー
──── 会社の近くの定食屋でお昼を食べながら通販サイトに夢中のにのまえ。────
はーぁ、最近サウナーとか言って若者までサ活するもんだから混むんだよな。あ、この温泉まんじゅう柄のサウナハットお洒落だな~!よし買おうっと。
クレジットカード情報を入力していると、店の天井端に置かれたテレビからセキュリティインシデントのニュースが流れる。
え!会員制サイトから会員情報が流出!?顧客のカード情報が10,000件も?これは怖い...。Webサーバー運営担当者が自分だと思うと寒気がするぞ...。あ、いやいや顧客側の立場で震えないとな。うーん、サウナハットは後で店で買うか。
原因はSQLインジェクションかぁ...なんか最近また増えてるような...。
──── その時、例のごとく多田野部長から電話が。────
にのまえくん、顧客情報漏洩のニュースは見たかね?
まさに私の弟が被漏洩者になってしまってたよ。暗証番号までは平気だったらしいが怖いもんだ。うちの子会社は大丈夫か?アプリ開発事業だのWeb制作だのやってただろう。SQL..ジャンクション?とかいうやつの対策が出来てないようなら相談に乗ってやってくれ。
あー...SQLジャンクションですね。分かりました。ちょっと調べてみます。
──── 電話を切ってにのまえはため息をついた。────
さて、知ったかぶりしちゃったけど、どうやって調べよう。
(店員)知ったかぶり出来てないぞ。SQLジャンクションじゃない。SQLインジェクションだ。
そう言いながら店員はにのまえの空いたグラスに水を注いだ。
うわぁ!情シスマンさん?!なんで定食屋の店員やってるんですか?
嗜む程度に副業もな。さて、休憩時間だ!いくぞはじめ!
そもそもSQLとは
SQLインジェクションを知る前にまずはSQLについて少し解説しよう。
SQLとは、リレーショナルデータベース(RDB)のデータを操作するためのコンピューター言語のことだ。
リレーショナルデータベースとは、異なる複数の表(テーブル)を統合し、テーブル同士の相関関係(リレーションシップ)を、コンピューターに理解させる仕組みを備えているものを指す。
例えば、図書館で借りたい本の在庫があるのか?どこの棚に置いてあるのか?等が分からないまま闇雲に探すとなると膨大な時間がかかってしまう。しかし近年では、多くの図書館で蔵書検索システムのようなものが用意されている。このシステムを利用すると、書名や出版年を手がかりに読みたい本がどこにあるのか、貸し出し中かどうかなどが瞬時にわかる。
これができるのも、蔵書検索システムというデータベースに書名や出版年、保管されている棚の位置、貸し出し状況などのデータテーブルとそれぞれの相関関係が格納されているからなのだ。
そして、私たちは蔵書検索システムの画面に書名などのキーワードを入力しているだけで、裏ではその入力情報を基にSQLを使ったクエリ(問い合わせ要求)が実行されるようになっているのだ。
SQLという言語を使ってリレーショナルデータベースを管理するシステム(RDBMS)に命令を出すことで、必要なデータをRDBに格納したり、格納したデータを取得(表示)しているということだ。
SQLインジェクションとは
SQLがなんとなく分かると、SQLインジェクションも理解しやすくなるだろう。
SQLインジェクションとは、アプリケーションの脆弱性が悪用され、本来サイト運営者が意図しない不当なSQL文が作成されてしまい、それを注入(injection)されることによってデータベースのデータを不正に操作される攻撃のことである。
具体的な被害としては、サイト上の情報を抽出・改ざん、新たな情報を書き込まれるといったことが挙げられる。
僕はどっちかというとインフラの方が得意で...プログラミングとかは守備範囲外なんですよね。
多田野部長にそう言えるか?はじめの会社の情シス担当ははじめしかいない。
子会社のWebサイトの安全を守るんだろう。今日は勉強だ!どんな攻撃なのかきちんと理解してくれよ?
うーん、子会社のWeb担当者に直接言って欲しいような...。まあでもそうですよね、勉強ですね!
SQLインジェクションの仕組みや攻撃方法とは
個人情報を扱うWebサイトを利用する場合、通常はID/パスワードを入力してログイン認証作業を経て利用が出来るようになるのがほとんどだ。システムが正常であれば、データベースの情報と入力されたID/パスワードと照らし合わせて、一致すればログイン成功、不一致ならばエラー画面が表示される。
しかし、Webサイトに脆弱性がある場合、このログイン画面(ユーザー登録画面や検索窓からも可能)に不正なSQL文を入力すると、システムが正しい入力と勘違いしてしまい、データベースへのアクセスを許可してしまう。こうして、不正なSQL文を入力されることで不正ログインや機密情報の漏洩、Web改ざんに至るのだ。不正なSQLは代表的なものであれば検索すれば簡単に出てくることからも、特別な知識や技能がなくとも実施できてしまう。
とはいえ、攻撃者はまず脆弱性のあるサイトを見つけるところから始めなければいけないのでは?と思う方もいるかもしれない。実は、攻撃者はどこに含まれているか分らない脆弱性を見つける為に、各サイトに対して一つひとつ手動でSQL文を入力するような試行錯誤はしない。
システムやソフトウェアの脆弱性を発見する手法として、サイト管理者が意図しない入力データを与えることで意図的に例外を発生させ、それに対してのレスポンス(挙動)を確認するファジングと呼ばれる手法がよく知られている。このファジングをAIに実行させれば、効率的に脆弱性を見つけられるようになり、更に悪用することで、脆弱性毎に最適な攻撃方法を組み立てられるようになる。よりにもよってうちの会社は狙われないだろうと未だに考えている企業があれば、直ぐにでも改めたいところだ。
SQLインジェクション攻撃の被害とは
SQLインジェクション攻撃を受けると、アカウントやクレジットカード情報の漏えい、不正サイトへの誘導やウイルス感染を目的としたWebサイト改ざんなどの被害が発生する。
情報漏えい
代表的なものとして挙げられるのが情報漏えいだ。直近であったSQLインジェクションによる被害でも多数の情報漏えいが確認されている。情報漏えいには多額の損害賠償が発生することもあり、企業・サービスとしての信頼を失うことにもつながる。
Webサイトの改ざん
Webサイトに改ざんをされることで、サイト内にウイルスを埋め込まれ、サイト利用者に感染が広がったり、新たな不正なサイトへの誘導を行われるなどの被害につながる。
また、サイト内の情報が改ざんされ、不正確な情報が掲載されることにより、利用者に不便が生じたり、サービスへの不信感にもつながるのだ。
実際にあったSQLインジェクションの被害事例
年々被害は増しており、2022年に入ってからも既に被害を公表している企業も複数ある。以下にて紹介しよう。
2022年1月、中学受験関連サービスを提供する企業のホームページデータを格納していたWebサーバーがSQLインジェクションの被害に遭い、最大28万106件のメールアドレスが流出した可能性があると発表した。
同月、ECサイト運営や店舗も構える楽器店にて、同社が運用しているWebサーバーがSQLインジェクションの被害に遭い、メールアドレス98,635件が流出した可能性があると発表。
2022年2月、ゲーミング家具のECサイトを運営する企業のホームページがSQLインジェクションの被害に遭い、こちらも2万3,435件のメールアドレス流出の可能性があると発表したのだ。
このように企業が不正アクセスに遭うと、一度に数万件の個人情報が悪意のある第三者に渡ってしまう。
1人の被漏えい者として「メールアドレスだけなら...」と安心してはいけない。入手したアドレス宛に直接別のマルウェアを仕込んだ迷惑メールが送られてきたり、そのメールアドレスを悪用して新たな個人情報を盗もうと試みる犯罪を誘発するからだ。
SQLインジェクションの代表的な攻撃手法である「ログインスキップ」は存在するログインIDさえわかればパスワードがなくてもログイン出来るというもの。ログインID=メールアドレスというWebサイトを運営している企業は多く存在しているので注意が必要だ。
また、流出するのはメールアドレスに限らない。2021年4月、宅配クリーニングサービスを提供する企業が運営するWebサイトで5万件を超えるクレジットカード情報(名義・カード番号・有効期限)が流出したことが発表された。セキュリティコードは流出していなかったとはいえ、クレジットカード情報の漏えいと聞くと、実被害が起こることを想像するのもたやすいだろう。
ニュースでカード情報流出って聞いた時、この会社やっちゃったなぁ~って思いましたけど、それがカード名義だけなのかカード番号もなのか、カード悪用が出来るまでの全ての情報だったのかまでは気にしませんでした。
うむ、ユーザーからすれば「カード情報の流出をした企業」で一括りだろうな。顧客の信頼を失わないように日頃から気を付けたいところだ。対策方法も見ていこう。
SQLインジェクションの基本的な対策方法とは
SQLインジェクション攻撃を回避する為に、または被害を最小化する為に予め打っておくべき対策があるのでご紹介しよう。
エスケープ処理をする
特別な意味を持つ記号文字が普通の文字として解釈されるように事前に処理する事で第三者からの攻撃を無効化する対策方法である。
また、バインド機構というメカニズムを利用すれば、独自のエスケープ処理が不要になり、エスケープ処理漏れも防ぐことも可能だ。
入力値を制限する
Webフォームでは、入力値を制限することが可能だ。フォーム入力において入力可能な文字列を英数字のみに制限すると、不正なSQL文で使われる特殊文字が入力されても、受け付けないようにすることができる。
エラーメッセージを非表示または必要最低限にする
SQLインジェクション攻撃の中には、標的のデータベースから返却されるエラーメッセージを元に、データベースの脆弱性やセキュリティの強度を確認する目的で実行されるものもある。
攻撃者は意図的に意図的にエラーメッセージを返却させようとするので、詳細なデータベースに関するエラーメッセージをWebページに表示させないというのも対策の一つになりえるのだ。
Webサイトのシステムなどを最新の状態に保つ
そもそも脆弱性を保持しておかないようにするのも重要だ。Webサイトを構築する全ての要素(php、CMSなど)において常に最新の状態を心がける事で攻撃を受けるリスクを軽減する事が出来る。
脆弱性診断サービスで定期チェック
第三者機関に自社サイトの脆弱性を定期確認してもらう事で、次に対応しなければいけない箇所はどこなのかを知る事が可能だ。
脆弱性診断サービスは自動診断型もあれば、攻撃者の視点で外部から手動でシステムを調査してくれるものもある。
WAFの導入
Webサイトの防御にはWAFが最適だ。SQLインジェクションだけではなく同じく脆弱性を悪用した攻撃であるクロスサイトスクリプティング等、多彩な攻撃に対応が出来る。
クラウド型のWAFであれば、アプライアンス型よりも運用工数が少ないので、導入のハードルも低いのではないだろうか。
アカウント権限の見直し
CMSなどの権限共有範囲を最小限にすることで被害やリスクを最小限にする事が出来る。「権限全部入り」のアカウントは使わないようにするのが基本だ。
管理者IDや特権ID(特別な権限を持つID)が「admin」や「user01」であれば、容易に推測されてしまうことも注意しよう。
僕が退職した時他の人に引継ぎやすいように、管理者IDを分かりやすいもので設定してたんですけど、これってー...。
うむ、だめだな!
やっぱりーー!
おすすめのSQLインジェクション対策サービスとは
「USEN GATE 02 攻撃遮断くん」は、外部公開サーバーへのあらゆる攻撃を遮断し安全・安心なサーバー運用を可能にするクラウド型のWAFである。情報漏えい、Web改ざん、踏み台、サービス妨害等の被害を防ぐ事が可能だ。専用ハードウェアは不要でエージェントをインストールするだけなので、サーバーの一時停止やネットワーク構成を変更することなくサービスを開始することができる。
無料トライアルも実施している。トライアル期間中に攻撃を受けなかった暁には「もしかして知らないうちに攻撃を受けてるのかも?」という不安を払拭するのに役立つかもしれないな。
なるほど、ちゃんと対策を打てばSQLインジェクションも怖くなさそうだ!早速子会社にセキュアなWebサイト運営についてアドバイスしてきます!
今回もこれで解決だな!強い情シスが企業を伸ばす!
また会おう!さらばだ!
解決
犯罪市場へのAI(人工知能)参入により攻撃はより手軽に正確に仕掛けられるようになっている。
サイバー攻撃は年々増加し、Webサイト等の公開用サーバーを運営する企業はサイバー攻撃への対策が必須である。Webサイト運営に携わる情シス担当の方や、これから着手する方の参考にしてほしい。
- 専用ハードウェアは必要ないため、サーバー構成などを変更することなく利用できる
- SQLインジェクションだけでなく、サーバーOS、Webサーバソフト、Webアプリケーション層を狙った多くの攻撃
- あらゆるOSに対応
本記事の著者
情シスマン
本メディアの主人公。職業はヒーローで、趣味はトラフィック監視。様々な武器を駆使して情シスにまつわる問題や悩みを解決している。ITをよく知らないのに、情シス担当になってしまった人の味方です。いや、正義の味方じゃなく、正義そのもの。困っている人がいたら、助けたいお人よし。