毎週木曜日に配信している「データサイン・ランチタイムトーク」の模様をレポートします。

当記事で取り上げるのは以下の配信です。

  • 配信日:2022年4月28日
  • タイトル:SQLインジェクション
  • 発表者:データサイン ビジネスディベロッパー 宮崎洋史

サイバー攻撃の典型的なパターンをご存じですか?

Webアプリケーションを対象とする不正アクセス事件はとどまるところを知りません。サイバー攻撃の手口とその対策はいたちごっこであり、実社会における犯罪と同様、「これさえやっておけば絶対安全」という決定的な対策は残念ながらありません。とはいえ、サイバー攻撃の手口に共通して見られる、いくつかのポイントを認識しておくことは、効果的な対策を講じる際に役立ちます。データサイン ビジネスディベロッパー 宮崎洋史はSQLインジェクションを例に解説しました。

SQLインジェクションは直訳すると、「リレーショナルデータベース管理システム(RDBMS)で用いられるSQL言語を注入(inject)する」という意味です。具体的な攻撃には、問い合わせ用のウェブフォームなどのテキストボックスに、悪意のあるSQL文を入力することで、ECサイトなどのシステム開発者が意図しない動作をRDBMSに起こさせて、データベースに保存されたID/パスワードや個人情報などを盗み出す行為があります。

犯罪組織やテロ組織は活動資金をサイバー攻撃から得ているという報道もあります。「SQLインジェクションなどのサイバー攻撃を防ぐことは、企業や個人の利益を守るだけでなく、世界を平和に導くことにもなるのです」(宮崎)

原理を踏まえた効果的な対策を講じましょう

SQLインジェクションの原理は、入力するデータの中にシングルクォーテーション(’)などの引用符や、区切り文字であるカンマやスペースなど、SQL文において「データの終端」を示す記号をわざと混入させ、SQL文の構造を犯罪者に都合がよいように変化させることにあります。この仕組みはクロスサイト・スクリプティングやOSコマンド・インジェクションなど、他のインジェクション系の脆弱性にも見られます。

基本的なSQLインジェクション対策にはいくつかあります。もし、SQLを文字列連結による組み立てで呼び出している場合は、前述の引用符や区切り文字などがデータの終端を表す特別な意味を持つ記号ではないことを、あらかじめアプリケーション側で設定するエスケープ処理が不可欠です。また、後からSQL構文が変化しないようにするプレースホルダを利用するシステム開発も、安全性を高めます。詳しい情報はIPA(情報処理推進機構)のウェブサイトなどをご覧ください。

「すでに稼働中のシステムの防御力を高めるには、WAF(Web Application Platform)を導入するのも手です。SQLインジェクションなどを検出、防御することができます。さらに万一、ウェブサイトからID/パスワードが漏洩した場合の被害拡大を抑えるために、データベースに保存するID/パスワードをあらかじめハッシュ値に置き換えることでそのまま第三者に丸見えになることを防ぐとよいでしょう。ランダムなデータ(ソルト)を付け加えると解読がさらに困難になります」(宮崎)

ID/パスワードの使い回しを避けましょう

もし、自分が利用するECサイトなどのウェブアプリケーションから、自分のID/パスワードなどの個人情報が漏洩し、盗難されたときに備えて、ユーザー個人ができる対策はあるでしょうか。

「複数のウェブサイトのログインで、同じパスワードを使い回さないことが大切です。万一、あるサイトのシステムから盗み取られた場合、他のサイトでも、なりすました第三者による不正アクセスを試みられる危険性があります。そしてIDも使いまわさないことがよいでしょう」(宮崎)

とはいえIDに用いるメールアドレスはせいぜい1つか2つしか持っていない、という方は多いはずです。

その場合は、データサインが提供する個人向けプライバシー保護アプリ「Bunsin」(ブンシン)がおすすめです。さまざまなサイトにログインするIDを、本当のメールアドレスを相手側に伝えることなく、ランダムに自動生成することが可能です。Bunsinアプリの利用に関心のある方は、ぜひこちらのページをご覧ください。

なお、もし皆さんが脆弱性のあるウェブサイトを発見された場合は、前述IPAの脆弱性関連情報の届出受付に速やかにご一報されることをお勧めします。