Coders Conquer Security:シェア&ラーンシリーズ - XQueryインジェクション

2019年2月28日発行
ジャープ・カラン・シン著
ケーススタディ

Coders Conquer Security:シェア&ラーンシリーズ - XQueryインジェクション

2019年2月28日発行
ジャープ・カラン・シン著
リソースを見る
リソースを見る

XQueryインジェクション攻撃は、より広く普及しているSQLインジェクション攻撃の弟分のように考えられることがあります。この2つの攻撃は根本的な原因が似ており、攻撃者が攻撃のきっかけとして利用するコマンドも非常に似ています。ただ、XQueryインジェクション攻撃は、XMLデータに対するXPathクエリの際にのみ発生します。このため、XQueryインジェクション攻撃は、XPathインジェクションと呼ばれることもあれば、XPathを利用した攻撃と呼ばれることもあります。

大多数のWebサイトでは、ユーザーのログイン認証情報、顧客情報、個人の識別情報、機密データなどの重要な機能にXMLデータベースが使用されているため、XQuery攻撃の攻撃対象はかなり大きくなっています。

このエピソードでは、以下のことを学びます。

  • 攻撃者によるXQueryインジェクションの使用方法
  • XQueryのインジェクションが危険な理由
  • この脆弱性を修正することができる技術

攻撃者はどのようにしてXQueryインジェクションを引き起こすのか?

多くのコンピュータ言語と同様に、XPathのコードはシンプルに設計されています。実際、XPath は標準的な言語であり、すべての記法や構文の記述は、それを使用するアプリケーションに関係なく変更されません。つまり、XPath クエリを操作するためのコマンドはよく知られており、自動化することも可能なのです。

XPath クエリは、どのような情報を検索するかを XML データベースに指示するシンプルなステートメントです。最も単純な例では、ユーザーレコードが存在するかどうかを確認して、そのユーザーのログイン認証情報を取得するために使用されます。問題は、XPathクエリーにはユーザーの入力が含まれるため、ハッカーがクエリーを操作して、保護すべき情報を返すことができることです。

例えば、ログインセキュリティを回避しようとする場合、攻撃者は XPath クエリの最後に変数を追加して、プロセス全体を回避することができます。例を挙げると、次のようになります。

//Employee[UserName/text()=anyone or 1=1 or a=a And Password/text()=doesnotmatter]

ここでは、User Nameフィールドは、1=1またはa=aの記述により、どのユーザーにもマッチするようになっています。クエリの最初の部分だけが真であればよいので、パスワードフィールドは問題になりません。

XQueryインジェクションはなぜ危険なのか?

XQueryインジェクション攻撃が危険である第一の理由は、攻撃者がログインやアカウントのセキュリティを回避することができるからです。また、アプリケーションによって異なることのない標準的な言語を使用して、自動化された方法で実行することができます。攻撃者は、ウェブサイトやアプリケーションを自動的にスキャンして、この脆弱性を発見したらすぐに行動することができます。あなたのアプリに脆弱性があれば、攻撃者はそのアプリを侵害します。アカウントのセキュリティを侵害するだけでなく、XQuery攻撃はデータの流出にも利用できます。例えば、攻撃者はXMLデータベースからすべてのレコードを転送することができます。

XQueryインジェクション攻撃の排除

同様の脆弱性と同様に、重要な防御策の1つは、単純にユーザーの入力を信用しないことです。ユーザーが情報を入力する際には、それがデータベースへの問い合わせであるかどうかにかかわらず、そのプロセスを精査する必要があります。これは、物理的な建物の窓やドアを保護することと同じです。なぜなら、これらの窓やドアは人がアクセスできる主な方法だからです。

XQuery のインジェクション対策としては、フィルタリングによるユーザー入力のサニタイズや、ホワイトリストによるユーザー入力の検証を行うことで実現しています。また、SQL クエリのプリペアド・ステートメントと同様に、パラメータ化された XPath インターフェイスを使用することもできます。

最後に、すべてのアプリケーションに最小の特権を適用するようにしてください。これは、すべてのアプリケーションのクエリを実行するために、読み取り専用の特権を持つユーザーを作成することを意味します。

これらの技術を用いることで、ウェブサイトやアプリケーションに対するXQueryインジェクションの試みをすべて阻止することができます。

XQuery Injectionsの詳細情報

さらに、OWASPがXQuery Injectionsについてどのように述べているかを見ることができます。また、サイバーセキュリティチームを究極のサイバー戦士に育成するSecure Code Warrior プラットフォームの無料デモで、新たに得た防御知識を試すこともできます。この脆弱性やその他の脅威への対策についての詳細は、Secure Code Warriorブログをご覧ください。

リソースを見る
リソースを見る

著者

Jaap Karan Singh

もっと知りたい?

セキュアコーディングに関する最新の知見をブログでご紹介しています。

当社の豊富なリソースライブラリは、安全なコーディングアップスキルに対する人間的なアプローチを強化することを目的としています。

ブログを見る
もっと知りたい?

開発者主導のセキュリティに関する最新の研究成果を入手する

ホワイトペーパーからウェビナーまで、開発者主導のセキュアコーディングを始めるために役立つリソースが満載のリソースライブラリです。今すぐご覧ください。

リソース・ハブ

Coders Conquer Security:シェア&ラーンシリーズ - XQueryインジェクション

2024年1月22日発行
Jaap Karan Singh著

XQueryインジェクション攻撃は、より広く普及しているSQLインジェクション攻撃の弟分のように考えられることがあります。この2つの攻撃は根本的な原因が似ており、攻撃者が攻撃のきっかけとして利用するコマンドも非常に似ています。ただ、XQueryインジェクション攻撃は、XMLデータに対するXPathクエリの際にのみ発生します。このため、XQueryインジェクション攻撃は、XPathインジェクションと呼ばれることもあれば、XPathを利用した攻撃と呼ばれることもあります。

大多数のWebサイトでは、ユーザーのログイン認証情報、顧客情報、個人の識別情報、機密データなどの重要な機能にXMLデータベースが使用されているため、XQuery攻撃の攻撃対象はかなり大きくなっています。

このエピソードでは、以下のことを学びます。

  • 攻撃者によるXQueryインジェクションの使用方法
  • XQueryのインジェクションが危険な理由
  • この脆弱性を修正することができる技術

攻撃者はどのようにしてXQueryインジェクションを引き起こすのか?

多くのコンピュータ言語と同様に、XPathのコードはシンプルに設計されています。実際、XPath は標準的な言語であり、すべての記法や構文の記述は、それを使用するアプリケーションに関係なく変更されません。つまり、XPath クエリを操作するためのコマンドはよく知られており、自動化することも可能なのです。

XPath クエリは、どのような情報を検索するかを XML データベースに指示するシンプルなステートメントです。最も単純な例では、ユーザーレコードが存在するかどうかを確認して、そのユーザーのログイン認証情報を取得するために使用されます。問題は、XPathクエリーにはユーザーの入力が含まれるため、ハッカーがクエリーを操作して、保護すべき情報を返すことができることです。

例えば、ログインセキュリティを回避しようとする場合、攻撃者は XPath クエリの最後に変数を追加して、プロセス全体を回避することができます。例を挙げると、次のようになります。

//Employee[UserName/text()=anyone or 1=1 or a=a And Password/text()=doesnotmatter]

ここでは、User Nameフィールドは、1=1またはa=aの記述により、どのユーザーにもマッチするようになっています。クエリの最初の部分だけが真であればよいので、パスワードフィールドは問題になりません。

XQueryインジェクションはなぜ危険なのか?

XQueryインジェクション攻撃が危険である第一の理由は、攻撃者がログインやアカウントのセキュリティを回避することができるからです。また、アプリケーションによって異なることのない標準的な言語を使用して、自動化された方法で実行することができます。攻撃者は、ウェブサイトやアプリケーションを自動的にスキャンして、この脆弱性を発見したらすぐに行動することができます。あなたのアプリに脆弱性があれば、攻撃者はそのアプリを侵害します。アカウントのセキュリティを侵害するだけでなく、XQuery攻撃はデータの流出にも利用できます。例えば、攻撃者はXMLデータベースからすべてのレコードを転送することができます。

XQueryインジェクション攻撃の排除

同様の脆弱性と同様に、重要な防御策の1つは、単純にユーザーの入力を信用しないことです。ユーザーが情報を入力する際には、それがデータベースへの問い合わせであるかどうかにかかわらず、そのプロセスを精査する必要があります。これは、物理的な建物の窓やドアを保護することと同じです。なぜなら、これらの窓やドアは人がアクセスできる主な方法だからです。

XQuery のインジェクション対策としては、フィルタリングによるユーザー入力のサニタイズや、ホワイトリストによるユーザー入力の検証を行うことで実現しています。また、SQL クエリのプリペアド・ステートメントと同様に、パラメータ化された XPath インターフェイスを使用することもできます。

最後に、すべてのアプリケーションに最小の特権を適用するようにしてください。これは、すべてのアプリケーションのクエリを実行するために、読み取り専用の特権を持つユーザーを作成することを意味します。

これらの技術を用いることで、ウェブサイトやアプリケーションに対するXQueryインジェクションの試みをすべて阻止することができます。

XQuery Injectionsの詳細情報

さらに、OWASPがXQuery Injectionsについてどのように述べているかを見ることができます。また、サイバーセキュリティチームを究極のサイバー戦士に育成するSecure Code Warrior プラットフォームの無料デモで、新たに得た防御知識を試すこともできます。この脆弱性やその他の脅威への対策についての詳細は、Secure Code Warriorブログをご覧ください。

弊社製品や関連するセキュアコーディングのトピックに関する情報をお送りする許可をお願いします。当社は、お客様の個人情報を細心の注意を払って取り扱い、マーケティング目的で他社に販売することは決してありません。

フォームを送信するには、「Analytics」のCookieを有効にしてください。完了したら、再度無効にしてください。