【実務・中級編】 LDAP/LDAPS(ポート389/636)を用いたActive Directory内ネットワーク情報の列挙と標的選定 – サイバーセキュリティとプライバシー保護実践ガイド

境界防御の限界を悟れ:LDAP列挙が暴く「ランサムウェアの獲物」

ネットワークの境界にファイアウォールを立て、VPNで外堀を埋めれば安心——。そんな「城郭モデル」の幻想を抱いている諸君は、今すぐ目を覚ますべきだ。

近年のランサムウェア攻撃者は、組織内に潜り込んだ後、真っ先に「Active Directory(AD)」という名の地図を広げる。彼らはネットワークを闇雲にスキャンするような騒がしい真似はしない。静かに、しかし確実にLDAP(Lightweight Directory Access Protocol)を叩き、組織の命運を握る「バックアップサーバー」や「ドメイン管理者」の居場所を特定する。

今回は、この「LDAPを用いた内部偵察」のメカニズムを解剖し、どうやってこの静かなる脅威を検知・防御すべきか、現場の視点から紐解いていこう。

—

LDAPクエリ:静寂の中に潜む偵察者

AD環境におけるLDAPは、ユーザー認証の根幹を支えるプロトコルだ。TCPポート 389(非暗号化)または 636(LDAPS/暗号化)で通信される。

攻撃者が狙うのは、ADが持つ「ディレクトリ情報」だ。彼らは ldapsearch やPowerShellの Get-ADComputer を駆使し、以下のようなクエリを投げ込む。

(&(objectCategory=computer)(operatingSystem=*Server*))

このクエリが意味するのは「OS名に『Server』という文字列を含む、すべてのコンピューターオブジェクトをリストアップせよ」という命令だ。これ一つで、バックアップサーバーやファイルサーバー、データベースサーバーのホスト名とIPアドレスが一瞬で手に入る。

なぜこれが「境界防御」では防げないのか

理由は単純だ。これは組織内部の「正当な通信」として処理されるからだ。ADに認証された(あるいは認証情報を盗まれた)セッションからのLDAPリクエストは、ファイアウォールの外側からは見えない。境界防御の死角、すなわち「内部トラフィックの信頼」を逆手に取られているのだ。

—

偵察の挙動をコードで理解する

攻撃者が実際にどのような手順を踏んでいるのか、Pythonの ldap3 ライブラリを用いたサンプルで見てみよう。これは管理者であればデバッグや管理自動化で使う手法だが、攻撃者はこれを悪用する。

from ldap3 import Server, Connection, ALL

# ドメインコントローラーへの接続設定
server = Server('dc01.example.local', get_info=ALL)
# 認証情報をセット(盗んだクレデンシャルを使用する想定)
conn = Connection(server, user='DOMAIN\\username', password='password', authentication='SIMPLE')

if conn.bind():
    # サーバーオブジェクトを列挙するフィルター
    # objectCategory=computer かつ OSにServerを含むもの
    search_filter = '(&(objectCategory=computer)(operatingSystem=*Server*))'
    
    # 検索実行
    conn.search(search_base='dc=example,dc=local',
                search_filter=search_filter,
                attributes=['name', 'ipv4Address', 'operatingSystem'])
    
    # 結果の表示
    for entry in conn.entries:
        print(f"ターゲット発見: {entry.name} - {entry.ipv4Address}")
else:
    print("接続失敗")

このコードが実行される際、ネットワーク上ではドメインコントローラーに対して SearchRequest が送信される。ここに含まれる filter パラメーターを監視することが、防御の第一歩となる。

—

実践的な防御策:検知と制御

この手の攻撃を防ぐには、ネットワークの可視化と「最小権限の原則」の徹底が欠かせない。

1. LDAP通信の可視化と不審なクエリの検知

EDR(Endpoint Detection and Response)を導入しているなら、powershell.exe や cmd.exe からの ldapsearch 関連プロセスの実行を監視設定に加えよう。また、ドメインコントローラーのログ(イベントID 4662:オブジェクトへのアクセス)をSIEMに集約し、短時間に大量のLDAP検索を行っているアカウントをアラート対象にするのが鉄則だ。

2. ネットワークのセグメンテーション(マイクロセグメンテーション)

「全てのPCからドメインコントローラーの 389/636 にアクセスできる」という構成は、今すぐ見直すべきだ。特定の管理用端末以外からのLDAPアクセスを制限し、ADへのアクセス経路を絞り込む。

3. LDAPSの強制と署名の有効化

非暗号化のLDAP(389)は、中間者攻撃(MitM)の標的になりやすい。以下の設定をGPOで適用し、署名と暗号化を強制せよ。

  • LDAP サーバー署名要件: 「必須」に設定
  • LDAP サーバーチャネルバインディングトークン要件: 「サポートされている」に設定

—

最後に:防御は「疑うこと」から始まる

ネットワークエンジニアとして数々の現場を救ってきた経験上、言えることがある。「内部の通信は安全だ」という思い込みこそが、最大の脆弱性であるということだ。

LDAPによる列挙は、ランサムウェアが本格的な破壊活動を行うための「前哨戦」に過ぎない。パケットの波形を読み、誰が、何のために、どのディレクトリを覗いているのか。その「違和感」に気づけるかどうかが、組織が生き残れるかの境界線だ。

諸君、まずは自社の環境でADへのLDAPトラフィックをキャプチャしてみることから始めよう。そこには、まだ見ぬ脅威の「足跡」が残っているはずだ。

コメント

タイトルとURLをコピーしました