performing-dns-tunneling-detection について
セキュリティ運用やインシデント対応向けの DNS トンネリング検知スキルです。DNS クエリ名のエントロピーと統計的特徴を分析し、Python とパケットキャプチャの例で疑わしい通信を特定します。
主な機能
- 01クエリ名の Shannon エントロピー計算
- 02異常に長いクエリ名の検出
- 03TXT リクエストと固有サブドメイン数の集計
- 04ラベル内の文字分布の確認
- 05Scapy による PCAP ファイル分析
活用シーン
- 01インシデント対応で疑わしい DNS 通信を調査
- 02許可されたテスト環境で検知制御を検証
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill performing-dns-tunneling-detectionインストール後、Claude Code で/performing-dns-tunneling-detectionを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEreferences/api-reference.mdscripts/agent.py詳細
DNS トンネリング検出の実施
使用する場面
- DNS トンネリング検出を伴うセキュリティ評価を実施する場合
- 関連するセキュリティイベントに対するインシデント対応手順に従う場合
- 定期的なセキュリティテストや監査を実施する場合
- 実地テストを通じてセキュリティ制御を検証する場合
前提条件
- セキュリティ運用の概念とツールに関する知識があること
- 安全に実行できるテスト環境またはラボ環境にアクセスできること
- 必要な依存関係をインストールした Python 3.8 以降
- テスト活動に必要な適切な承認を得ていること
手順
クエリ名の特性に関するエントロピー分析と統計的手法を用いて、DNS トンネリングの兆候がないか DNS トラフィックを分析します。
import math
from collections import Counter
def shannon_entropy(data):
if not data:
return 0
counter = Counter(data)
length = len(data)
return -sum((c/length) * math.log2(c/length) for c in counter.values())
# Legitimate domain: low entropy (~3.0-3.5)
print(shannon_entropy("www.google.com"))
# DNS tunnel: high entropy (~4.0-5.0)
print(shannon_entropy("aGVsbG8gd29ybGQ.tunnel.example.com"))
主な検出指標:
- クエリ名のシャノンエントロピーが高い(サブドメインラベルで 3.5 超)
- クエリ名が異常に長い(50 文字超)
- 単一ドメインへの TXT レコード要求が大量にある
- 親ドメインごとの一意なサブドメイン数が多い
- ラベル内の文字分布が標準的でない
例
from scapy.all import rdpcap, DNS, DNSQR
packets = rdpcap("dns_traffic.pcap")
for pkt in packets:
if pkt.haslayer(DNSQR):
query = pkt[DNSQR].qname.decode()
entropy = shannon_entropy(query)
if entropy > 4.0:
print(f"Suspicious: {query} (entropy={entropy:.2f})")
コメント
Markdown 対応