ブログ

Coders Conquer Security: Share & Learnシリーズ - LDAPインジェクション

January 17, 2019
Jaap Karan Singh

非常に多くのコンピュータシステムで、LDAP(Lightweight Directory Access Protocol)が使用されています。これは、あらゆるIP(インターネットプロトコル)ネットワーク上で分散ディレクトリ情報サービスを維持するために利用されるものです。つまり、基本的にはユーザーを管理するための仕組みとして機能しています。

LDAPは、ユーザーがさまざまなアクションを実行する権限を持っているかどうかを確認するために、アプリケーションの認証ソースとしてよく利用されます。特に、組織内で定義された役割に関連して使用されます。例えば、経理部門の担当者だけが会社の会計ソフトを使用できるといったケースです。アプリケーションは、ユーザーが設定された権限の範囲内で操作を行っていることを確認するために、LDAPテーブルを参照するようにプログラムされることが一般的です。

悪意のあるユーザーがLDAPクエリを操作すると、問題が発生する可能性があります。これにより、本来許可されない不正なクエリをサーバーに実行させたり、パスワードなしで権限のないユーザーやセキュリティレベルの低いユーザーに管理者レベルのアクセス権を付与させたりする恐れがあります。  

LDAPインジェクションは複雑な問題ですが、このエピソードでは以下について学びます。

  • 仕組み
  • なぜこれほど危険なのか
  • どのように防御策を講じるべきか

攻撃者はどのようにLDAPインジェクションを利用するのか?

LDAPベースの攻撃が長年人気を博している理由の一つは、ほぼすべてのコンピュータシステムでLDAPが使用されているという事実にあります。LDAPはオープンソースであり、非常に優れた機能を持つため、これに代わる選択肢があまり生まれていないのです。

LDAPは本質的に、IPベースのコンピュータシステムやネットワーク内の有効なユーザーを追跡するデータベースです。ユーザーは、システム、ネットワーク、サーバー、アプリケーション、さらには同じネットワーク上の他のユーザーに関する情報を共有することができます。

LDAPでは、情報は「識別名(Distinguished Name)」、略してDNと呼ばれるデータベースの行やレコードに相当する形式で保存されます。各DNは一意です。例として、大企業のシカゴ経理オフィスで働くユーザーのDNは、以下のようになります。

cn=James Smith, ou=Corporate Accounts, dc=Chicago, do=Parkview  

各DNが一意であることを保証するために、「+」、「/」、「=」などのさまざまなコードをレコードに追加できます。また、レコードの前後にスペースを挿入することも可能です。これにより、シカゴのパークビューオフィスにある経理部門に同姓同名のジェームズ・スミスが2人いたとしても、それぞれ個別のDNを持つことができます。

アプリケーションは一般的に、特定のDNに関するクエリをユーザーが送信できるようにするためにLDAPを使用します。例えば、給与明細の誤りについて問い合わせるために、経理部門の正しい連絡先を探す場合などがこれに当たります。LDAPインジェクションは、検索クエリ内のユーザー提供パラメータが検証されていない場合に発生します。その場合、ハッカーは正常な検索を操作して認証メカニズムを回避したり、任意の追加クエリを実行したりできます。これにより、サーバーを騙して本来表示されるべきではない結果(ユーザーのパスワードなど)を表示させたり、有効なパスワードの有無にかかわらず、ネットワーク内の高セキュリティ領域へのアクセスをアプリケーションに許可させたりする可能性があります。

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

LDAPインジェクションの最大の危険性は、世界中のIPコンピュータネットワークの大部分にこのプロトコルが普及していることにあるでしょう。これは、情報を盗もうとするハッカーや、ネットワーク上の権限を昇格させようとするハッカーにとって、格好の足がかりとなります。訓練を受けたハッカーであれば必ずLDAPインジェクションの脆弱性を確認するため、セキュリティチームは常にこれらの穴を塞いでおく必要があります。

具体的には、多くのアプリケーションが、組織内のユーザーやグループに関する限定的な情報や、DNに含まれるその他の情報を有効なユーザーが検索できるようにプログラムされています。例えば、あるアプリでは、LDAPを使用してシカゴの経理担当者の連絡先を検索できるかもしれません。その結果、先ほどの例のジェームズ・スミスが表示されます。権限設定にもよりますが、これはLDAPクエリとして完全に正当な利用方法と言えます。

危険が生じるのは、悪意のあるユーザーがクエリにフィルタリングされていないパラメータを追加し、検索の性質を変えて、本来提供されるべきではない情報をサーバーから引き出そうとする場合です。例えば、「user=*」という文字列を追加することで、攻撃者は組織内の全ユーザーの情報を取得できてしまいます。これは本来、決して許可されるべきではないことです。

LDAPを認証に使用しているアプリケーションの場合、問題はさらに深刻になります。攻撃者は、例えばLDAPクエリの末尾に「(&)」という文字列を使用することで、引数が真であるとサーバーに誤認させることができます。アプリがLDAPを使用してパスワードを検証している場合、LDAPインジェクションを通じて「真」の引数を強制することで、権限のないユーザーがパスワードなしで管理者としてネットワークにログインできてしまう可能性があります。

LDAPインジェクションをネットワークから排除する(L-DON'T)

LDAPインジェクションを防ぐ最善の方法の一つは、LINQtoADや、インジェクション対策を目的として設計されたフレームワークを導入することです。ネットワークですでにLDAPクエリを活用しているアプリケーションが存在する場合、これは難しいかもしれません。しかし、そのような場合であっても、今後導入するすべての新しいアプリケーションには、インジェクション耐性のあるフレームワークを使用することが推奨されます。

LDAPを使用する既存のアプリケーションにおいても、ホワイトリストによる検証や入力サニタイズを行うことで、インジェクション攻撃への対策を強化できます。可能な限り、ユーザー入力は信頼できる値の範囲内に制限してください。それが難しい場合は、LDAPクエリに組み込まれるユーザー入力を事前にサニタイズする必要があります。GET/POSTパラメータ、Cookie、HTTPヘッダーも攻撃の経路となるため、忘れずに処理してください。入力サニタイズ用の関数を自作することは避け、信頼性の高いサードパーティ製のセキュリティライブラリや、フレームワーク標準のAPIを使用してください。

個別の修正に加え、LDAPクエリを実行するアプリケーションに必要最小限のネットワーク権限のみを付与するといった、基本的なセキュリティ対策も有効です。これにより、万が一LDAPインジェクション攻撃が成功してしまった場合でも、被害を最小限に抑えることができます。

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

詳細については、OWASPによるLDAPインジェクションの解説や、インジェクション対策のチートシートをご覧ください。また、サイバーセキュリティチームを育成する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を活用した開発をリリース前にセキュアに

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

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