ブログ

コーダーがセキュリティを制する:共有&学習シリーズ - XMLインジェクション

June 20, 2019
Jaap Karan Singh

XMLインジェクションは、ハッカーがXMLデータベースをホストするシステムを侵害するために編み出した、厄介な攻撃手法です。これには、医薬品から映画まで、あらゆる詳細な情報を格納する従来のデータベース全般が含まれます。XMLデータストアの中には、ユーザーの認証に使用されるものもあり、そこに新しいXMLコードを注入することで、ホストシステムが正規のものとして受け入れる新しいユーザーを作成できてしまうのです。

攻撃者がXMLインジェクションを実行するには、XMLデータベースに依存している、あるいは少なくともアクセスしているアプリケーションが必要です。そのような環境でユーザー入力が適切に検証されていない場合、データストアに不正なXMLコードが追加される可能性があります。攻撃者のスキル次第では、XMLコードの追加によって甚大な被害が生じたり、データベース全体へのアクセス権を奪われたりすることさえあります。

読み進めていくと、XMLインジェクションが以前解説したSQLインジェクションと密接に関連していることがわかるでしょう。ターゲットとするデータベースの種類は異なりますが、攻撃の仕組みは非常に似ています。幸いなことに、対策も同様です。一方の攻撃を防ぐ方法を学べば、もう一方の対策にも大いに役立ちます。

本エピソードでは、以下の内容を学びます。

  • XMLインジェクションの仕組み
  • なぜこれほど危険なのか
  • 完全に阻止するための防御策

攻撃者はどのようにXMLインジェクションを仕掛けるのか?

XMLインジェクションは、権限のないユーザーがXMLコードを作成し、既存のXMLデータベースに挿入できた場合に成功します。これには、XMLデータベースに依存または接続しているアプリケーションと、攻撃者が攻撃を仕掛けるための保護されていないデータ経路の2つが必要です。

ユーザー入力がサニタイズ(無害化)されていない、あるいは適切に制限されていない状態でサーバーに送信されると、XMLインジェクションはほぼ確実に成功します。これにより、攻撃者は通常のクエリ文字列の末尾に独自のコードを書き込んだり、注入したりできるようになります。成功すれば、サーバーを騙してXMLコードを実行させ、レコードの追加や削除、さらにはデータベース全体を露呈させることも可能になります。

ハッカーは、通常のクエリにXMLコードを追加することでXMLインジェクション攻撃を実行します。これは検索フィールドからログインページまで、あらゆる場所で行われる可能性があります。Cookieやヘッダーが含まれることもあります。

例えば、登録フォームにおいて、ユーザー名やパスワードのフィールドの後に以下のようなコードを追加するケースが考えられます。


<user></user>
<role>administrator</role>
<username>John_Smith</username><password>Jump783!Tango@12</password>

この例では、管理者権限を持つ「John_Smith」という新しいユーザーが作成されてしまいます。この新しいユーザーは、パスワードの複雑性ルールを遵守しているようですが、残念ながらその正体は攻撃者です。

ハッカーは、必ずしも毎回このような大きな成果を狙うとは限りません。クエリを操作してサーバーから返されるさまざまなエラーメッセージを記録することで、XMLデータベースの構造を把握できる場合があります。そして、その情報は他の攻撃を強化するために利用されます。

なぜXMLインジェクションはこれほど危険なのか?

XMLインジェクション攻撃の危険度は、ターゲットとなるXMLデータベースにどのような情報が格納されているか、あるいはその情報がどのように利用されているかによって異なります。例えば、ユーザー認証にXMLデータベースが使用されている場合、XMLインジェクションによって攻撃者にシステムへのアクセス権を与えてしまう可能性があります。最悪の場合、ターゲットネットワークの管理者権限を奪取される恐れもあり、これは極めて危険な状況です。

従来のデータベースに対するXMLインジェクションの場合、情報の窃取、誤ったデータの追加、あるいは重要なデータの上書きといった危険があります。XMLコードの習得はそれほど難しくなく、一部のコマンドは非常に強力で、情報フィールド全体を上書きしたり、データストアの内容をすべて表示させたりすることが可能です。

一般的に、価値のない情報を格納するためにデータベースを構築する人はいません。ハッカーはそのことを知っているため、データベースを標的にします。もしそのデータに従業員や顧客の個人情報が含まれていれば、侵害されることで社会的信用の失墜、経済的損失、多額の罰金、さらには訴訟に発展する可能性があります。

XMLインジェクション攻撃の阻止

XMLインジェクションは、実行の難易度が低く、XMLデータベースが広く普及していることから、比較的よく見られる攻撃です。しかし、こうした攻撃は古くから存在しており、実行を完全に防ぐための確実な対策がいくつか確立されています。

攻撃を阻止する最善の方法の一つは、アプリケーションを設計する際に、プリコンパイルされたXMLクエリのみを使用するようにすることです。これにより、クエリの機能は許可されたアクティビティのサブセットに限定されます。プリコンパイルされたクエリ関数と一致しない余分な引数やコマンドが含まれている場合、それらは実行されません。それほど厳格な制限を設けない場合は、パラメータ化を利用することも可能です。これは、ユーザー入力を特定の種類のクエリやデータ(整数のみなど)に制限するものです。これらのパラメータから外れるものはすべて無効とみなされ、クエリは強制的に失敗します。

また、プリコンパイルされたクエリやパラメータ化されたクエリと併せて、カスタマイズされたエラーメッセージを使用することも推奨されます。クエリ失敗時にデフォルトの詳細なエラーメッセージを返すのではなく、アプリケーション側でそれらの応答をインターセプトし、より汎用的なメッセージに置き換えるべきです。理想的には、ユーザーにクエリが失敗した理由は伝えても、データベース自体に関する情報は一切与えないようにします。カスタムメッセージをいくつかの選択肢に限定しておけば、攻撃者は失敗したクエリから有用な情報を収集することができなくなります。

XMLインジェクションは、登場当初は非常に高い成功率を誇っていました。しかし、それから長い年月が経過した現在では、突破不可能な防御策を容易に構築できるようになっています。

XMLインジェクションに関する詳細情報

詳細については、OWASPによるXMLインジェクションの解説をご覧ください。また、学んだ防御知識を試すには、Secure Code Warriorプラットフォームの無料デモをご利用ください。このプラットフォームでは、サイバーセキュリティチームを究極のサイバー戦士へと育成します。この脆弱性やその他の脅威への対策について詳しくは、Secure Code Warriorブログをご覧ください。


タグライン

AI主導の開発をリリース前にガバナンスする

AIを活用したリスク測定、コミット時のセキュアコーディングポリシーの強制、そしてSDLC全体を通じたセキュアなデリバリーの加速を実現します。

デモを予約する
リソースライブラリ

他のブログ記事を見る

セキュアコーディング、AIガバナンス、ソフトウェアリスク管理に関する専門的なコンテンツをご覧ください。

すべて表示
導入事例
フィルターラベル
これはdivブロック内のテキストです。

Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

詳細はこちら
導入事例
フィルターラベル
これはdivブロック内のテキストです。

Security as culture: How Blue Prism cultivates world-class secure developers

Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed

詳細はこちら
導入事例
フィルターラベル
これはdivブロック内のテキストです。

セキュリティ文化の統一:Sageはいかにしてチャンピオンプログラムを構築したか

Sageがどのようにして柔軟かつ関係性を重視したアプローチでセキュリティを強化し、200名以上のセキュリティチャンピオンを育成して、目に見えるリスク低減を実現したのかをご紹介します。

詳細はこちら
ブログ
フィルターラベル
これはdivブロック内のテキストです。

2026年サイバーセキュリティ意識向上月間:企業防衛に不可欠なAIセキュリティの理解

主要なAI企業の多くが、安全対策が追いつくまでの間、AI開発を世界的に減速させるよう公に呼びかける事態となっています。しかし現実には、深刻なセキュリティ問題はすでに顕在化しています。AI導入に伴う金銭的コストやリスクが増大し続ける中、多くのセキュリティリーダーや経営陣は差し迫った状況に追い込まれています。

詳細はこちら
ブログ
フィルターラベル
これはdivブロック内のテキストです。

イネーブラー8:プログラムのブランディング

セキュアコーディングプログラムを成功させるには、優れたコンテンツ以上のものが必要です。イネーブラー8では、ブランディングによって参加を「憧れのステータスを得る体験」へと変える方法を解説します。

詳細はこちら
ブログ
フィルターラベル
これはdivブロック内のテキストです。

すべての従業員が今、AIサイバーセキュリティの最前線に立っている

エンタープライズテクノロジーの状況は、手遅れになるまで誰も予測できなかったほどの速さで変化しています。私たちは今、人間が書いたコードと基本的なコパイロット支援の時代から、エージェント型開発ライフサイクル(ADLC)の時代へと正式に足を踏み入れました。自律型AIエージェントは、複数の機能にわたってかつてない効率性をもたらす一方で、全く新しい種類のセキュリティリスクや規制リスクも引き起こしています。

詳細はこちら

AIを活用した開発をリリース前にセキュアに

開発者のリスクを可視化し、ポリシーを適用することで、ソフトウェア開発ライフサイクル全体における脆弱性を未然に防ぎます。

デモを予約する
該当する項目が見つかりません。