A男:急に部長に、全サイズの稲庭うどん三つくれって言われたよ!
B子:SMLイナニワウドン 3つずつ? 多くない?
A男:SML稲庭ウドン3つずつって、全部で9つのインナニワウドン!?そんなに食うのかな?
B子:きっとあなたの聞き間違えでしょ!?
   部長は新しいシステムのリリースに向けて、SQLインジェクションの対策はとれているのか?って、
   確認してきたんだと思うよ!
A男:あっ、なるほど!じゃあちゃんと調べて対策しないとね!

SQLインジェクション

過去ニュースで、クレジットカード情報やメールアドレスが流出するといった事件について、一度は耳にしたことがあるかと思います。それらは「SQLインジェクション」というサイバー攻撃による被害だったかもしれません。昨今さまざまなサイバー攻撃が存在しますが、サイバー攻撃に対する適切な企業対策を取らないと、情報を抜き取られたり、サイトやアプリを乗っ取られたりする恐れがあります。今回はサイバー攻撃の1つである「SQLインジェクション」について解説します。

SQLインジェクションとは

「SQLインジェクション」とは、特定のサイトやアプリ(※1)に通常とは異なった命令を与えることで、データを不正取得するサイバー攻撃のことです。

「インジェクション(injection)」は英語で「注入する」という意味で、プログラムに不当な文字列を挿入してデータを操作することを指します。インジェクションは近年警戒するべきセキュリティリスク Top10(※2)に常にランクインする代表的なサイバー攻撃と言えます。そのインジェクションの中でも代表的なのが「SQLインジェクション」です。

(※1)SQLという機械の言語を用いたサイトやアプリ。
(※2)参考 : OWASP Top10 2021

SQLインジェクションの位置付け

SQLインジェクションの仕組み

「過去に登録したサイトに、名前とパスワードを入力してログインするシステム」を例にあげてSQLインジェクションの仕組みを解説します。

以前登録したサイトにログインする場合、
・名前とパスワードを入力することでログインできます
・システムに#を入力すると、その行の#以降の文章を無視します(※)

※本来の使い方だと、#はシステムに影響しないようコメントを挿入したいときに使います。
 SQLだと – – や/* のような記号を使います

SQLインジェクションの仕組み

一般の方の使い方を見ていきましょう。

SQLインジェクションの仕組み

一般的な利用方法では、名前・パスワードの両方が一致するアカウントがあった場合ログインできます。(画像2参照)

SQLインジェクションを用いるハッカーは、どのようにパスワードを知らない他人のアカウントにログインするのでしょうか。

SQLインジェクション対策済みのシステム

SQLインジェクション対策を施していれば、名前とパスワードが異なるので、他人のアカウントにはログインできません。(画像3参照)

SQLインジェクション対策をしていない場合はどうでしょうか。

SQLインジェクション対策をしていないシステム

#以降の文章を無視するというシステムの仕様を悪用して、名前の最後に#をつけることでパスワードの読み込みを無効にしています。このようにすれば、パスワードがわからなくても他人のアカウントにログインできます。(画像4参照)
これがSQLインジェクションの仕組みの一例です。

参考 : 独立行政法人 情報処理推進機構(IPA)SQLインジェクション対策について

SQLインジェクションで起こりうる被害

・顧客情報の漏洩
SQLインジェクションの代表的な被害です。お客様のデータを扱う企業にとって、情報流出自体が大きな被害ですが、流出した情報が悪用されることによる二次被害が発生する恐れがあります。例えば、クレジットカード情報が漏洩し、悪質な海外サイトでカード情報の売買が行われていた場合カードの不正利用が発生するなどの二次被害に繋がります。

・データの書き換え、破壊
仮想通貨サイトや、各ECサイトのポイントデータなどが不当に書き換えることで、サイト内の通貨やポイントを増やし、金銭的な利益を不正に取得されるなどの事例があります。
最悪の場合データが破壊されてしまえば、システムの存続が困難になる場合があります。

・システムの乗っ取り
Webサイトを乗っ取り、コンピュータウィルスを埋め込むことで、サイトを訪問した人のパソコンをウィルスに感染させる等の事例があります。

代表的な事例を紹介しましたが上記にあげた全ての被害に共通して、SQLインジェクションを許してしまえば、サイトやアプリの信頼を著しく損なうという悪影響があります。

※事例はIPA SQLインジェクション対策についてを参考に記載。

SQLインジェクションの対策

SQLインジェクションを防ぐ根本的な対策方法は「エスケープ処理」を実装することです。
エスケープ処理とは、システム内で特別な効果を持つ文字を、特別な効果を持たない普通の文字として扱うようにする処理のことです。

前述した事例では、システムにとって、#が以降の文章を無視するという特別な効果を持っています。この効果を悪用されたことで不正ログインが起きてしまいました。そこで、外部から入力された#が特別な効果を持たないように設定することで、不正ログインを防ぐことができます。これがエスケープ処理です。

他の対策としては、想定する文字のみしか入力できないようにすることも有効です。

前述した事例では、名前に#が入力できなければ、不正ログインはできませんでした。そこで、名前欄に入力できる文字を平仮名だけに制限することで、SQLインジェクションを予防することができます。

SQLインジェクションの対策

システムのどの部分に対策を取るべきか、を判断するには、それぞれのシステムを診断し判断する必要があります。
脆弱性診断を行い、システムの具体的な弱点を発見することをお勧めします。

脆弱性診断については、こちらの記事も参考にしてみてください。
【脆弱性診断とは?必要性や費用も解説】ー脆弱性診断でよくあるお悩みー

テスト専門会社GENZでは、セキュリティエンジニアが、プロの視点から脆弱性診断を実施し、セキュリティリスクを可能な限り軽減します。第三者から診断を受けることは、顧客にシステムの安全性をアピールすることにもつながります。

まとめ

「SQLインジェクション」とは、特定のサイトやアプリに通常とは異なった命令を与えることで、データを不正取得するサイバー攻撃の手法のことです。

SQLインジェクションによる被害は、情報漏洩やデータの書き換え、システムの乗っ取り等があり、エスケープ処理などの対策をとることが必要です。

株式会社GENZでは、脆弱性診断も含めたITに関するお困りごとに幅広く対応しております。
サイバー攻撃の対策をしたいけれど何からしてよいかわからない、という場合でも大丈夫です。脆弱性診断の結果をもとに、お客様のシステムに合った対策を提案させていただきます。システムの機能面に不安があれば、システムテストと脆弱性診断を一括でご依頼いただくことも可能です。

GENZと共にお客様のシステムをより良いものにしてみませんか。

SQLインジェクション

お問い合わせ