「セキュリティに対する重要性は理解したけれど、用語が難しくて」という声を聞くことがよくあります。そんな方に「今だから学ぶ!」と題して、連載でセキュリティの頻出用語を解説します。
第31回は、「SQLインジェクション」についてです。
SQLインジェクションは、Webアプリケーションに対する攻撃手法の1つです。SQLインジェクションのSQL(エスキューエル。欧米ではシークェルと発音することが多い)とは、リレーショナルデータベースに対して、データを追加、削除するなどの操作を行うための言語です。リレーショナルデータベースで著名なオラクルデータベース、MS SQL Server、MySQL、PostgreSQLなどを操作するためには、SQLを利用します。インジェクションとは、英語ではInjectionであり、「注入」という意味です。
SQLインジェクションとは、データを不正に取得するなど悪意を持ったSQL文を注入され(埋め込まれて)、データベースを不正に操作されることをいいます。
インターネット上でWebサイトを利用したサービスの提供が一般的になっています。一般消費者向けサイトでは、例えば、ログインID、パスワード、クレジットカード情報など重要な個人情報が入力、保存していることが多くあります。また、企業向けのシステムにおいても、受発注情報などのビジネス上大切な情報が保存されていることも珍しくありません。
これらの情報は、通常データベースに保存されており、ウェブからの命令によって適切な情報が引き出されたり、あるいは修正されたりします。このとき、WebアプリケーションはSQLを利用します。
SQLインジェクションでは、このSQLを利用することを利用して、不正なSQL文を実行させることで個人情報などを入手します。また、SQLのストアドプロシージャ等を利用してOS コマンドの実行することで、システムの乗っ取りを図ったり、別のシステムへの攻撃に踏み台にすることも可能になります。
SQLインジェクション攻撃に対応するためには、アプリケーション開発の段階でSQLに特別な意味を持つ記号文字(「'」「;」など)に対して、素通しにさせないなどの「エスケープ処理」を実施するなど、安全なウェブサイトの構築が必要です。
独立行政法人 情報処理推進機構では、知見をまとめたガイドを公開しています。
【参考】
安全なウェブサイトの作り方 (独立行政法人 情報処理推進機構)
【関連記事】
今だから学ぶ! セキュリティの頻出用語シリーズ 過去10記事
第30回:今だから学ぶ! セキュリティの頻出用語:ブルートフォースアタックとは?
第29回:今だから学ぶ! セキュリティの頻出用語:C&Cサーバーとは?
第28回:今だから学ぶ! セキュリティの頻出用語:ゼロデイ攻撃とは?
第27回:今だから学ぶ! セキュリティの頻出用語:CVEとは?
第26回:今だから学ぶ! セキュリティの頻出用語:ペネトレーションテストとは?
第25回:今だから学ぶ! セキュリティの頻出用語:レピュテーションとは?
第24回:今だから学ぶ! セキュリティの頻出用語 : 辞書攻撃とは?
第23回:今だから学ぶ! セキュリティの頻出用語 : ワームとは?
第22回:今だから学ぶ! セキュリティの頻出用語 : マクロウイルスとは?
第21回:今だから学ぶ! セキュリティの頻出用語 : 多要素認証とは?