エンジニアのためのセキュリティ攻略:共有&学習シリーズ - XXEインジェクション

XML外部エンティティ(XXE)インジェクション攻撃は、登場から数年経ってもなお横行している古典的な脆弱性と比べると比較的新しい手法です。しかし、現在ハッカーコミュニティで非常に人気があり、成功事例が増えるにつれてその脅威はさらに拡大しています。
実際、OWASPは現在、XXEインジェクションをWebサイトが警戒し、積極的に防御すべきトップ10の脆弱性の1つとして挙げています。しかし、心配はいりません。XXEインジェクションは、他のサイバー攻撃で使われるエクスプロイトと比べて特別強力というわけではありません。単に比較的新しく、あまり理解されていないだけです。この脆弱性は防止可能であり、完全に阻止することができます。
本エピソードでは、以下の内容を学びます。
- 攻撃者がXXEインジェクションを利用する仕組み
- XXEインジェクションが危険な理由
- この脆弱性を防ぐための技術
攻撃者はどのようにしてXXEインジェクションを引き起こすのか?
XXEインジェクションの脆弱性は、悪意のあるユーザーがXMLコードを送信できる場合に発生する可能性があります。攻撃者はこの機能を利用して、外部エンティティへの参照を作成します。この外部参照とコードは、デフォルト設定のまま、あるいは設定が不十分なXMLパーサーをすり抜けるように設計されています。
攻撃者は、XML標準がエンティティを何らかのストレージユニットとして定義しており、そのストレージが外部または内部に存在し得るという事実を悪用します。適切に使用すれば、XMLプロセッサがリモートリソースにアクセスできるようになります。しかし多くの場合、攻撃者はこの機能を悪用して、Webサイトの内部構造の調査、リモートリソースへのアクセスを試みる大規模なシステムプロセスを誘発することによるサービス拒否(DoS)攻撃の実行、さらにはローカルホストから攻撃者が制御するリモートホストへのデータダンプなどを行います。これは、XMLデータベースに含まれるパスワードや個人情報などの重要なデータを流出させるための優れた手法となっています。
攻撃に関与する実際のコードは非常に単純なものが多く、単にエンティティ機能を悪用するだけです。例えば、ハッカーがマスターパスワードファイルにアクセスする場合、以下のようなコードが使われる可能性があります。
<!ENTITY hackwithxxe SYSTEM file:///etc/password>
なぜXXEインジェクションは危険なのか?
XXEインジェクション攻撃が非常に危険であり、かつ蔓延しているのにはいくつかの理由があります。まず、現時点ではあまり理解されていない脆弱性であるという点です。そして、攻撃者がこれを悪用して得られる利益は甚大です。例えば、執拗な攻撃者は時間をかけて内部ネットワークの全パスをマッピングしたり、ポートスキャンを行ったりすることができます。これにはかなりの時間がかかるかもしれませんが、ターゲットネットワーク上のアクティブな防御機能によってハッカーの活動が検知される可能性はほとんどありません。なぜなら、彼らは信頼されたXMLパーサーによって処理されるサーバーに、単にXMLコードを送信しているだけだからです。
一度マッピングが完了すれば、攻撃者は同じXXEインジェクション技術を使用して必要なファイルをすべて取得できます。直接情報を盗み出すこともあれば、有効なユーザー資格情報を侵害して二次攻撃に利用することもあります。最後に、単に混乱を引き起こして悪意を働きたい攻撃者は、サービス拒否攻撃を誘発し、システムを停滞させるように設計された遠隔リソースへのアクセスをアプリケーションに強制するようなことも行います。
XXEインジェクションの脆弱性を排除する
XXEインジェクション攻撃の急増により、多くのXMLパーサーでは、デフォルトで外部エンティティ(DTDと呼ばれることもあります)を完全に無効にするようになっています。そのようなパーサーを使用する場合、重要なのはその機能を有効にしないことです。
しかし、DTDを許可するパーサーであっても、その機能を無効にすることは可能です。一般的には、以下のようなステートメントを使用して完全にブロックする必要がありますが、必要な正確なコードについては、使用しているフレームワークのドキュメントを確認してください。
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
セキュリティ原則に従い、すべてのユーザー入力はアプリケーション全体で適用されるフィルターを使用してサニタイズおよび検証されるべきです。GETおよびPOSTパラメータ、HTTPヘッダー、Cookieを含めることを忘れないでください。また、パーサーに処理させたい特定のDTDやコマンドのホワイトリストを作成し、それ以外をすべて拒否するように設定することも可能です。
ホワイトリストやフィルタリングは有効ですが、XXEインジェクション攻撃が増加している現状では、その機能が不要であればDTDサポートを完全に無効にすることを推奨します。
XXEインジェクションに関する詳細情報
詳細については、OWASPによるXXEインジェクション攻撃の解説をご覧ください。また、習得した防御知識は、サイバーセキュリティチームを最強の戦士へと育成するSecure Code Warriorプラットフォームの無料デモで試すことができます。この脆弱性やその他の脅威への対策について詳しくは、Secure Code Warriorブログをご覧ください。
AI主導の開発をリリース前にガバナンスする
AIを活用したリスク測定、コミット時のセキュアコーディングポリシーの強制、そしてSDLC全体を通じたセキュアなデリバリーの加速を実現します。
他のブログ記事を見る
セキュアコーディング、AIガバナンス、ソフトウェアリスク管理に関する専門的なコンテンツをご覧ください。
%252520%252520(3).avif)
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.

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
AIを活用した開発をリリース前にセキュアに
開発者のリスクを可視化し、ポリシーを適用することで、ソフトウェア開発ライフサイクル全体における脆弱性を未然に防ぎます。



.avif)