LDAPインジェクション攻撃

2018.01.18

サイバー攻撃用語

image

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

目次

LDAPとは

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

LDAPクライアントはTCPポート389を使ってLDAPサーバにアクセスし、エントリ(管理されている情報の塊)を検索・追加・削除したりできます。
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から)
エスケープするのが困難な場合は、パラメータにメタ文字が含まれる場合はエラーとして受け付けないのも有効です。検索フィルタ文字列を正規表現でチェックするのも良い対応策です。

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

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

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

まとめ

今回は、LDAPの概要と、LDAPインジェクション攻撃手法及び対策について解説しました。
LDAPはディレクトリサービスにアクセスするための通信プロトコルです。広く利用されていますが、LDAPインジェクション攻撃に対する脆弱性がある場合は、パラメータにメタ文字を差し込むことでLDAP認証を不正に突破されたり、LDAPデータベースの情報を大量に盗まれる恐れがあります。現在公開中のサイトや開発中のアプリケーションに脆弱性がないことをしっかりと確認しましょう。

関連記事