民間企業や公的機関で運営されるシステムは、日々様々なセキュリティ攻撃のリスクにさらされています。
その脅威の一つがSQLインジェクションです。今回はSQLインジェクションとは何かを理解し、正しく対策を立てるための方法をご紹介します。
実際にシステム運用に携わる担当者の方のみならず、セキュリティ対策に関心のある一般の方にも理解できるようにまとめました。
5分程度で読める内容ですので、ぜひ最後までお付き合いください。
SQLインジェクションとは?
ここではSQLインジェクションの意味と仕組みについて説明します。
概要
SQLインジェクションは、日本語に即して言い換えると「不正なSQLを注入する」になります。
SQLはシステムにおけるデータの入れ物であるデータベースに指示を出し、データの持ち出しや書き換えをするためのプログラム言語です。
SQLインジェクションはデータの改ざんや盗難を目的として、SQLに不正な指示を埋め込んでデータベースに送り込むことを意味します。
SQLインジェクションの仕組み
通常のシステムであれば、SQLによるデータベースの参照や更新はシステムの中では日常茶飯事です。
入力フォームや検索窓など、ユーザーからシステムに命令を出す仕組みがあるのは皆さまもよくご存じでしょう。
セキュリティ対策がなされているシステムであれば、想定外のSQLが入力された時、指示をそのまま処理せずに回避する仕組みがあります。
しかし、システムに脆弱性が存在すると不正なSQLを見抜けずにそのまま処理してしまい、データベースの参照や更新を許してしまうのです。
クロスサイトスクリプティングとの違いは?
代表的なセキュリティ攻撃にクロスサイトスクリプティングがあります。
これもWEBサイトの脆弱性をついて攻撃するものです。SQLインジェクションとの違いはWEBサイトに悪意のあるプログラムを仕掛ける点です。
SQLインジェクションは外からの攻撃ですが、クロスサイトスクリプティングは待ち伏せする攻撃と言えます。
SQLインジェクションの被害
ここからはSQLインジェクションによって発生する被害について説明します。
個人情報・機密の漏洩
SQLインジェクションによる被害の中で、最も深刻なのが個人情報や機密の漏洩です。
多くのシステムでは、重要度の差はあるものの、データベースに機密性の高い情報を保持しています。
不正なSQLによって機密情報が抜き出されると、システムを運営する企業にとっては、様々な危機が訪れるでしょう。
例えば技術力を売りにする会社であれば、競合他社に技術を盗まれて競争力が低下します。
また、個人情報を扱う企業であれば、市場からの信用を失い、既存顧客が離れていくでしょう。
いずれにしても情報漏洩は深刻な被害につながります。
WEBサイトの改ざん
WEBサイトの改ざんも代表的な被害です。
SQLインジェクションが成功すると、データベースへの不正アクセスだけではなく、WEBサイトの内容も書き換えることができます。
よくある事例はWEBサイトを訪れるだけでウィルス感染するよう改ざんしてしまうパターンです。
特に多くのユーザーが訪れるWEBサイトが改ざんされてウィルスが埋め込まれると、ウィルス感染者は雪だるま式に増加します。
当然ながら、システム運営元の企業は対策を怠ったことへの責任を問われるでしょう。
SQLインジェクションが発生しやすい状況
SQLインジェクションの被害が発生しやすい状況とはどのようなものでしょうか。
ここでは人的リスクとシステムに関わるリスクに分類してみました。
当てはまる条件が多いほどSQLインジェクションのリスクが高いといえるでしょう。
- <人的なリスク>
- システム担当者の一人当たりの負荷が大きい
- システム担当者のセキュリティ対策の経験値が浅い
- システム担当者のSQLの知識が浅い
- <システムそのもののリスク>
- 自前の環境でシステムを構築している(オンプレミス型)
- システムで使っているソフトウェアのバージョン管理ができていない
- SQLインジェクションを想定した運用テストが行われていない
SQLインジェクションの予防策
ここからはSQLインジェクションを回避するための、4つの予防策について説明します。
中にはコストがかかる対策もありますが、情報漏洩などで発生する被害を考えると必要は投資です。
以下の4つの予防策をチェックして検討してみましょう。
プリペアドステートメントの導入
プリペアドステートメントは日本語で準備された構文を意味します。
データベースに指示を出すSQLの作成に際し、一定のひな型を作ることで悪意のあるSQLが混じるのを防ぐ仕組みです。
これによって攻撃者は好き勝手なSQLによる指示が出せないので、データベースへの侵入を防ぐことができます。
ただし、導入に際してはSQLのスキルを持ったSEに依頼する必要があります。
WAFの導入
WAFはWeb Application Firewallの略です。WEBサーバやネットワークに設置し、システムへの指示を解析することができます。
WAFによってSQLインジェクションも検出して防御することができるのです。
また、WAFを使えばセキュリティ対策のためにシステムそのものに手を入れる必要がありません。
少ない体制でシステムを運用せざるを得ない場合に強い味方となるでしょう。
WEBアプリケーションを最新に保つ
SQLインジェクションに限らず、最も基本的なセキュリティ対策です。
例えばブログサイトなどで使われるWordPressは最新版への更新を怠ると、脆弱性が一気に露出します。
また、システムが動作するOSの更新も要注意項目です。
OSやウィルスソフトを含め、バージョンを一括で可視化できるソフトもありますので導入を検討してみましょう。
テストの実施
実際にSQLインジェクションが発生した場合を想定したテストを行うことも重要です。
わざと悪意のあるSQLを作成して、対象のシステムに指示を出すことで脆弱性を診断することができます。
自社で行うことが難しい場合は、テストを代行してくれる企業がありますので、費用をかけてでも依頼することをおすすめします。
SQLインジェクションの被害にあってしまったら
どれほど対策を講じていたとしても、SQLインジェクションにあう可能性はゼロにはできません。
もし被害にあってしまったら、どうすればよいのでしょうか。
企業のシステム担当者としてSQLインジェクションを発見した場合は、いち早く経営層に報告を上げる必要があります。
なぜなら機密情報流出の可能性がある以上、すぐにシステムへのアクセス停止やユーザーへの周知などの動きが求められるからです。
システム担当者はSQLインジェクションを単なるバグやエラーと一緒にせず、会社の経営に直結する問題と考えるべきでしょう。
まとめ
今回はセキュリティ攻撃の一つであるSQLインジェクションについて説明しました。
数あるセキュリティ攻撃の中でも頻繁に発生し、情報漏洩につながりやすいのが特色です。
被害を防ぐため、まず自社のシステムがセキュリティの脆弱性を生みやすい状態になっていないかを確認しましょう。
そのうえで、SQLインジェクションがもたらす被害を理解した上で正しい対策を検討する必要があります。
また、場合によってはコストがかかる場合もありますが、情報漏洩の被害を考えれば必要な投資です。
経営層自らがセキュリティ対策を経営課題の一つとして認識し、先回りで対策を講じていくことが求められるでしょう。
万が一被害が発生した場合は、経営層の迅速な対応が求められます。
この記事がSQLインジェクションの被害からシステムを守るきっかけになれば幸いです。