換金可能な情報の情報漏えい

換金可能な情報の情報漏えい

 ここでは、データベースに格納されたデータそのものである、個人情報などを取得する方法を例として取り上げる。

 例えば、ECサイトのデータベースにクレジットカード情報の含まれる会員情報が保管されているとする。その会員向けのサービスとして、クレジットカード以外の会員情報を表示するWebページがあるとする。

 その際に使用するSQL文に、クレジットカード情報の格納されたテーブルにアクセスするSQL文を挿入して、会員名などを表示する個所に、クレジットカード番号を表示させる方法がある。

select u.user_name,c.card_number, c.card_date from t_users u join t_card c on u.id = c.user_id where id=’$userid’ ;

 前提として使用するSQL文は上記のように、画面に表示する文字列をデータベースから取得する(図2-1)。

 「t_users」はユーザー情報が格納されているテーブル、「user_name」はそのテーブルに格納された会員名のカラムとする。さらに「t_card」というテーブルにクレジットカード情報が格納され、「card_number」「card_date」というカラムにクレジットカード番号や有効期限が保存されているものとする。

 その時、検索のキーワードとなる「$userid」の値がブラウザから送られるPOSTやGET、Cookieの値を参照している場合、「$userid」の値を以下のように改ざんして攻撃する。

「’ or 1=1 --」

 SQL文は以下のようになる。

select u.user_name,c.card_number, c.card_date from t_users u join t_cardc on u.id = c.user_id where id=’ ’ or 1=1 --’ ;

 「--」以降はコメントなので、SQL文は以下のようになる。

select u.user_name,c.card_number, c.card_date from t_users u join t_cardc on u.id = c.user_id where id=’ ’ or 1=1

 上記の例では、本来、特定の会員が登録しているクレジットカード番号と有効期限だけが表示されるが、改ざんされたリクエストでは、任意の会員の氏名とクレジットカード番号と有効期限が表示される(図2-2)。

 例では行数を制限していないので、データベースにカード番号を登録している会員の全レコードが対象となる。1レコードだけを上から下まで順番に取得していくように条件を組み込んで調整すれば、テーブルに格納しているすべてのデータを順番に少しずつ取り出すこともできる。

 この攻撃には、第3回で紹介した「バインド機構」「エスケープ処理」が対策として有効だ。

 この手法以外に、「パスワードの変更」の際に、条件を書き換えて、全ユーザーのパスワードを変更し、ユーザーになりすまし個人情報を取得する方法や、前述した「認証の迂回」の手口を使いクレジットカード情報などの個人情報を取得する方法もある。

Webサイトを攻撃するための有用な情報の漏えい

 Webサイトを攻撃するための有用な情報となる、システム情報やデータベースを構成する情報は、いろいろな方法で取得可能であるが、ここでは簡単に5つの方法を紹介する。

 1つ目が、データベースへのアクセス失敗時のエラーメッセージである。攻撃コードを挿入した際にデータベースのエラーメッセージが表示されれば、実行結果からアプリケーションの挙動を予測し、攻撃を繰り返すことで、以下のような情報を収集することができる。

・テーブル名
・カラム名
・カラムの型

 テーブルの情報を読み取る攻撃コードを決定するには、対象となるテーブル名、カラム名、カラムの型が必要となる。この攻撃はその手掛かりとなる情報を収集するために使われることが多い。

 2つ目がシステムカタログの閲覧だ。データベースのスキーマ情報が不明の場合、システムカタログなどのデータベースを参照するようなSQLを発行することで、スキーマ情報を得ることができる。実際にストアドプロシージャを動的に定義/実行し、システムカタログから情報を取得した後、標的とする型の列を改ざんする攻撃手法が存在する。

 3つ目がデータベースの種類、バージョンの取得だ。一部のデータベースではSQLに所定の文字列を与えることで、データベースの種類、バージョン情報を返すものがある。製品/バージョンがわかれば、攻撃者はそれに適した攻撃ができる。

 4つ目が任意のファイルの読み込み、書き込みだ。一部のデータベースでは、SQL文の中からサーバー内の任意のファイルを読み書きできる関数を持つ。それらの関数を実行することで、データベースサーバーにある一部のファイルを任意に操作できるので、データベースサーバーを乗っ取る攻撃に有用である。

 5つ目がスリープ機能を利用したレスポンス時間の差異だ。SQLインジェクションの攻撃を実施する際に、レスポンスに攻撃結果が表示されない場合、指定した攻撃が実行されたか否かを判断するために、攻撃の内容にレスポンス時間を遅くさせるための仕組みを組み入れる。レスポンス時間が遅れれば、攻撃が実行されたことがわかる。

 これらの攻撃については、「開発用のエラーメッセージをブラウザに表示しない」、第3回で紹介した「バインド機構」「エスケープ処理」が対策として有効だ。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30