境界防御は死んだ。ならば「端末の健康診断」を自動化せよ:NACによる隔離戦略のリアル
ネットワークエンジニアの皆さん、お疲れ様です。境界防御の時代はとうに終わりを告げました。「社内ネットワークなら安全」なんて幻想は、ランサムウェアが横行する今の現場では通用しません。今日のテーマはNAC(Network Access Control)によるホストポスチャ(Health Check)です。
パッチ未適用のPCを放置することは、爆弾を抱えたままオフィスに招き入れるのと同じ。今回は、現場で泥臭く生き抜くための「端末検疫と隔離」の技術的裏側を深掘りします。
—
1. ホストポスチャ:なぜ「健康診断」が重要なのか
ランサムウェアの侵入経路は、メールの添付ファイルやドライブバイダウンロードだけではありません。VPN経由で接続したノートPCが既に感染しており、そこから水平移動(Lateral Movement)を始めるケースが後を絶ちません。
NACのホストポスチャは、接続要求があった瞬間に端末の状態を評価します。
- OSパッチ適用状況: 既知の脆弱性(CVE-XXXX-XXXX)が放置されていないか。
- AV/EDRの稼働状態: セキュリティエージェントが死んでいないか。
- 定義ファイルの鮮度: 3日前のシグネチャで現代の脅威と戦えるのか。
これらが一つでも欠けていれば、即座に「隔離VLAN」へ追放する。これがゼロトラスト時代の必須作法です。
—
2. 通信フロー:認証から隔離までの裏側
標準的なIEEE 802.1X認証をベースにすると、通信は以下のシーケンスを辿ります。
1. Supplicant(端末): RADIUSリクエストを送信。
2. Authenticator(スイッチ/AP): 認証情報をRADIUSサーバーへ転送。
3. Posture Server: 端末へ「健康診断書を出せ」と要求。
4. Health Check: エージェントがOS情報を収集し、JSON形式等でサーバーへPOST。
5. Policy Decision: サーバーが準拠/非準拠を判定し、RADIUS VSA(Vendor Specific Attribute)をAuthenticatorへ返送。
6. Enforcement: 準拠なら本番VLAN、非準拠なら隔離VLAN(VLAN ID: 666など)へポートを動的割り当て。
—
3. 実践:ポスチャ情報の送信とAPIハンドリング
現場の運用で最も多いのが、「エージェントが収集したデータをどう検証するか」です。サーバーサイド(Python想定)で受け取る際の簡易的な実装イメージを見てみましょう。
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/api/v1/posture/check', methods=['POST'])
def check_posture():
data = request.json
# 評価項目:パッチレベルとAV稼働状況
# 現場の運用ポリシーに基づき、厳格にチェックする
patch_level = data.get('os_patch_level')
av_status = data.get('av_active')
signature_date = data.get('signature_age_days')
if patch_level >= 20231001 and av_status == True and signature_date < 3:
# 準拠:本番ネットワークへ誘導
return jsonify({"status": "compliant", "vlan": 10}), 200
else:
# 非準拠:隔離ネットワークへ(ここで自動的にVLANタグを切り替える)
return jsonify({"status": "non-compliant", "vlan": 666, "reason": "outdated_av"}), 200
if __name__ == '__main__':
app.run(port=8080)
Tips: トラブルシューティングの勘所
もし隔離がうまくいかない場合、まず疑うべきは RADIUS のアトリビュートマッピングです。特に Tunnel-Private-Group-ID が正しくスイッチ側に伝わっているか、パケットキャプチャで Access-Accept パケットを解析してください。
—
4. 隔離の極意:VLAN隔離だけでは不十分
「VLANを分けたから安心」というのは少し甘い。隔離VLANに置かれた端末が、Active Directory等のDNSサーバーと通信できないと、パッチ適用すらできません。
隔離VLANのACL(アクセスコントロールリスト)設定例:
! 隔離VLAN用のACL定義(必要なサーバー以外は遮断)
ip access-list extended ISOLATION_POLICY
permit udp any any eq 53 ! DNS許可(名前解決は必須)
permit ip any host 10.0.50.10 ! WSUS/パッチ配布サーバーのみ許可
deny ip any any ! 他の全セグメントへの通信を拒否
この「必要最低限の通信路」を確保することが、迅速な復旧(リカバリー)への鍵です。
—
5. 最後に:エンジニアとして守るべき矜持
NACの導入は、しばしば現場のユーザーから「ネットワークが重い」「繋がらない」と文句を言われます。しかし、それは「あなたの端末が危険だからです」と言い切る強さが、セキュリティエンジニアには必要です。
設定を自動化し、監視を徹底し、異常を検知したら問答無用で隔離する。このドライな仕組みこそが、結果として組織のデータとエンジニア自身の平穏を守ることになります。
次回の記事では、このポスチャ情報を活用した「動的な動的マイクロセグメンテーション」について、より実践的な設定を共有します。それでは、また現場でお会いしましょう。
コメント