境界防御の限界を悟れ: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トラフィックをキャプチャしてみることから始めよう。そこには、まだ見ぬ脅威の「足跡」が残っているはずだ。
コメント