LDAPインジェクション攻撃の解説と対策方法をまとめてみた

2019.01.11

サイバー攻撃用語

LDAPインジェクション攻撃の解説と対策方法をまとめてみた

LDAPインジェクション攻撃をご存知ですか。インジェクション攻撃とは、サービスへのリクエストに攻撃用の文字列を付加して、脆弱性のあるサイトに不正にログインを行い、情報を盗んだり、Webページを改ざんしたりする攻撃です。過去にご紹介しているSQLインジェクション攻撃OSコマンドインジェクション攻撃は特に有名ですが、LDAPにもインジェクション攻撃があります。
今回は、LDAPの概要と、LDAPインジェクション攻撃手法及び対策について解説いたします。

目次

LDAPとは

LDAPはLightweight Directory Access Protocolの略で、ディレクトリサービスに接続するために使用される通信プロトコルのひとつです。
ディレクトリサービスとは、ネット上に分散して存在する様々な情報を一元的に管理している仕組みで、例えばユーザIDから所属部署や電話番号、メールアドレスなどを検索することができます。こう聞くと、データベースを連想すると思いますが、ディレクトリサービスは一種の分散型データベースです。ただし一般的なデータベースと違い、階層構造(木構造)を持ち、検索がとても速いという特徴があります。LDAPは様々なサービスで使用されていて、有名なところではWindowsで使用されているActive Directoryがあります。

LDAPは情報の検索以外にも、LDAP認証という認証システムを構築することもできます。簡単にまとめると、入力されたユーザIDでLDAPサーバに問い合わせを行い、該当があればパスワードの正当性をチェックして認証する、といった流れです。正当性が認められれば、認証を突破し、サイト内に入ることができます。逆に正当性が認められなければ、サイト内に入ることは拒絶されます。
LDAPには基本的にテキストデータが使用されており、LDAPサーバ上で管理されている情報もテキストベースです。

LDAPインジェクション攻撃の方法と影響

LDAPサーバへの問い合わせは、検索フィルタという文字列で行われます。例えば以下のような文字列です。

(&uid=ユーザID)(userPassword=パスワード )

画面から入力されたユーザIDとパスワードを直接編集して、上記の検索フィルタ文字列を編集するプログラムがあったとします。

例えば以下のような編集です。

"(&uid=" + ユーザID + ")(userPassword=" + パスワード

普通に入力すれば、例えばユーザID:tanaka、パスワード:samplepwdだとすると、

(&uid=tanaka)(userPassword=samplepwd))

という検索フィルタ文字列ができます。

しかし、ここで悪意を持つ攻撃者が、ユーザIDに”tanaka)|(objectClass=*“、パスワードに”hoge“と入力したとします。
結果、検索フィルタ文字列は、

(&uid=tanaka)|(objectClass=*)(userPassword=hoge))

となります。
objectClass=すべて、の指定が入っているので、ユーザIDがtanakaであれば、パスワードが間違っていても検索にヒットします。これがLDAP認証なら、認証成功となってしまいます。

別の例で、検索フィルタ文字列に以下のような文字列を使用しているとします。

(&uid=ユーザID)

通常はユーザIDにtanakaのようにIDを入力します。この場合は検索フィルタ文字列は以下のようになります。

(&uid=tanaka)

結果は、ユーザID=tanankaの検索結果がLDAPサーバから返却されます。
しかし、悪意のある攻撃者がユーザID”*”と入力すると、検索フィルタ文字列は(&uid=*)となり、すべてのユーザの情報が返却されてしまいます。
このように、LDAPインジェクション攻撃が成功すると、LDAP認証を突破して不正に認証されたり、他のユーザの情報を盗まれたりします。

LDAPインジェクション攻撃の対策

LDAPインジェクション攻撃は、検索フィルタ文字列に、LDAPクエリとして意味がある文字(メタ文字)を混ぜ込むことで行います。対策としては、入力された文字列(パラメータ)に含まれるメタ文字をエスケープするのが確実です。
例えばPHPの場合、ldap_escape関数が提供されています。(PHP5.6から)
エスケープするのが困難な場合は、パラメータにメタ文字が含まれる場合はエラーとして受け付けないのも有効です。すなわち、メタ文字はIDとしては認めないというルールをつくっておくわけです。先ほどの例で「*」をIDとしては認めないというルールを設定しておけば、認証を突破する事を防げます。
検索フィルタ文字列を正規表現でチェックするのも良い対応策です。

プログラムでの対策の他、WAF(Web Application Firewall)を導入して対策する方法もあります。WAFはLDAPインジェクションだけでなく、他の様々なインジェクション攻撃やサイバー攻撃を防ぐことができるため、全体的にセキュリティを向上する効果が期待できます。重要なのは、現在運用中または現在開発中のサイトが、LDAPインジェクション攻撃に対して脆弱性が無いことを確認することです。診断にはセキュリティ診断ツールを使用するか、または第3者機関の診断サービスを利用すると良いでしょう。
もし、LDAPインジェクション攻撃に対して脆弱性があることがわかったら、直ちに対策しましょう。セキュリティパッチが提供されているならそれを適用し、自社開発であればアプリケーションをセキュアに修正することが重要です。可能ならば、1つのセキュリティ対策だけでなく、複数のセキュリティ対策を重ねることで脆弱性が発生しないようにすることが大事です。

LDAPインジェクション攻撃はクラウド型WAFで対策!

クラウド型WAF「攻撃遮断くん」は、最新の攻撃パターンにも自動的に対応していくため、セキュリティパッチをすぐに適用できない状況や、定期的に脆弱性診断が出来ない状況でも、セキュアな環境を保てます。
簡単な導入作業と手間をかけずに運用できるため、たとえセキュリティ担当者が不在でも手軽に対策できます。

まとめ

今回は、LDAPの概要と、LDAPインジェクション攻撃手法及び対策について解説しました。
LDAPはディレクトリサービスにアクセスするための通信プロトコルです。広く利用されています。LDAPインジェクション攻撃に対する脆弱性がある場合は、IDやパスワードなどのパラメータにメタ文字を差し込むことでLDAP認証を不正に突破され、なりすましなどのトラブルを引き起こしたり、LDAPデータベースの情報を大量に盗まれる恐れがあります。現在公開中のサイトや開発中のアプリケーションに脆弱性がないことをしっかりと確認しましょう。一度不正突破されて、IDを悪用されたり、データベースの情報を盗まれる=情報漏洩してしまうと、企業として世間の信頼を失ってしまうことになるので十分に注意する必要があります。対策はパラメータにメタ文字をエスケープするもしくは、メタ文字をエラーにしてしまうなどプログラムで対応するだけでなく、WAFを導入するなど様々な手法があります。念には念を!で複数の対策を併用することをお勧めします。

記事の中でご紹介したクラウド型WAF「攻撃遮断くん」の詳細資料は、こちらからダウンロード頂けます。

クラウド型WAF 攻撃遮断くん Web Application Firewall
https://www.shadan-kun.com/

 

(2018/1/18 執筆、2019/1/11修正・加筆)

  • 国内商用Webサイトが受けやすいサイバー攻撃とは?|サイバー攻撃の統計データから傾向を読み解く|今すぐ無料で資料をダウンロード
  • 御社のセキュリティ対策は本当に大丈夫ですか?約80%の企業が対策不足と言われています。Webセキュリティをいますぐ確認!3つのチェックポイント。今すぐ無料で資料ダウンロード

この記事と一緒に読まれています