Zeek(旧Bro)入門|ネットワークの“飛行記録”で攻撃を見抜く
Wiresharkが「1つの通信を精密に見る顕微鏡」なら、Zeekは「ネットワーク全体を“意味のある記録”に変え続ける飛行記録装置」。通信ログの読み方から、暗号化通信の手がかり、Zeekスクリプト、Security Onionでの実習、SIEM連携まで、防御者の視点で日本語でやさしく解説します。
📋 この記事の目次
インシデントが起きてから「あのとき、ネットワークで何が起きていたのか」を知りたくても、記録がなければ何も分かりません。かといって、すべてのパケットを丸ごと保存し続けるのは現実的ではない——。この“ジレンマ”を解くのが Zeek(ジーク/旧称 Bro)です。Zeekは、流れる通信を黙って観察し、「誰が・いつ・どこへ・どのプロトコルで・どれだけ通信したか」を、軽くて検索しやすいログに変え続けます。まさに航空機のフライトレコーダー(飛行記録装置)。Wiresharkが1つの通信を深く解剖する顕微鏡なら、Zeekはネットワーク全体を見張り、後から追跡できるようにする監視基盤です。日本語でまとまった解説がまだ少ないこの分野を、DFIR完全ロードマップの一歩進んだ実践編として、基礎からていねいに解き明かします。
本記事は、守る側(青チーム)が、自分の管理するネットワークを監視して攻撃の兆候を見つけるための「ネットワークセキュリティ監視(NSM)」を学ぶ教育目的の解説です。通信の監視・キャプチャは、あなた自身が管理または正式に許可されたネットワークでのみ行ってください。他者の通信を無断で傍受・解析する行為は、電気通信事業法の「通信の秘密」や不正アクセス禁止法に関わり得ます。学習は、自分の検証環境(自宅ラボ)や、公開されている演習用のパケットデータ(pcap)で進めましょう。
🛰 Zeekとは? ネットワークの“飛行記録装置”
アラートを鳴らす道具ではなく、通信を“記録”に変える監視フレームワーク。その発想を理解しましょう。
Zeek=通信を高品質なログに変える、オープンソースの監視フレームワーク
Zeekは、ネットワークを流れる通信を受動的に観察し、プロトコルごとの構造化されたログを生成する、オープンソースのネットワークセキュリティ監視(NSM)基盤です。1990年代にローレンス・バークレー国立研究所のVern Paxson氏が“Bro”として開発し、2018年にZeekへ改称されました。単に「悪い通信を見つけてアラートを鳴らす」道具ではなく、「通信のすべてを、後から調べられる記録に変える」——ここがZeek最大の特徴です。
多くの人が最初に戸惑うのが、「ZeekはIDS(侵入検知システム)なの?」という点です。答えは“半分そう、半分違う”。SnortやSuricataのような典型的なIDSは、「既知の悪いパターン(シグネチャ)」に一致したらアラートを出します。一方Zeekは、シグネチャ照合もできますが、本領は「観測した通信を、淡々と意味のあるログに書き起こす」こと。たとえば1本のHTTP通信から、アクセス先URL・ユーザーエージェント・応答コード・転送量などを抽出し、http.log に1行として残します。悪いと決めつける前に、まず“事実”を記録する。この姿勢が、後からの追跡(フォレンジック)と脅威ハンティングを支えます。
🛰 Zeekの位置づけ——通信を観測し、“意味のあるログ”に変える
Zeekの真価は「3つのツールの役割分担」を知ると、はっきりします。下の表のとおり、Wireshark・Suricata・Zeekは“競合”ではなく“補完”の関係。とくにSuricataとZeekは併用するのが定番で、「既知の悪はSuricataで即アラート、振る舞いと記録はZeekで網羅」という組み合わせが、現代のNSMの王道です。
| 観点 | Wireshark | Suricata | Zeek |
|---|---|---|---|
| 役割 | 1つのpcapを精密に見る“顕微鏡” | シグネチャで既知脅威を検知(IDS/IPS) | 通信を構造化ログに変える“監視基盤” |
| 主な出力 | パケット詳細(GUI) | アラート | 豊富なトランザクションlog+notice |
| 得意 | 深掘り・1事象の解剖 | 既知の悪を素早く止める | 振る舞いの記録・事後追跡・ハント |
| 立ち位置 | 手動の精密解析 | Zeekと併用が定番 | SuricataとSIEMの間をつなぐ |
ひとことで言うと
Zeekは「ネットワークの出来事を、後から検索できる“台帳”に書き起こし続ける記録係」です。Wiresharkが“その瞬間”を拡大するなら、Zeekは“過ぎたこと”を遡れるようにする。だからインシデントの後でも、「3週間前のあの通信」をログから追えるのです。
🪵 Zeekのログ:通信を“意味のある記録”に変える
Zeekの主役はログ。怖がらなくて大丈夫、ただの“整理された表”です。
Zeekを動かすと、ディレクトリにたくさんの .log ファイルが生まれます。それぞれがプロトコルや観点ごとの“台帳”で、1行が1つの出来事(トランザクション)です。まずは代表的なログを押さえましょう。
| ログ | 記録される内容 |
|---|---|
conn.log | すべての接続の背骨。送信元/宛先のIP・ポート、プロトコル、継続時間、転送量、接続の状態。 |
dns.log | DNSの問い合わせと応答。どのドメインを、いつ引いたか。トンネリング検知の宝庫。 |
http.log | HTTPのURL・ホスト・ユーザーエージェント・メソッド・応答コード・転送量。 |
ssl.log | TLSのSNI(接続先名)・証明書・JA3フィンガープリント。暗号化通信でも手がかりが残る。 |
files.log | 通信から見えたファイルの種別とハッシュ(MD5/SHA1)。脅威情報との照合に直結。 |
x509.log | 証明書の詳細(発行者・有効期限・自己署名か)。怪しいTLSの判断材料。 |
notice.log | Zeekが“注目に値する”と判断した出来事。スクリプトやIntelの“気づき”の出口。 |
weird.log | プロトコル的に“おかしい”事象。回避・異常の兆候が紛れていることも。 |
この中で絶対の主役が conn.log です。ネットワーク上のあらゆる接続を1行ずつ記録する“背骨”で、ほかのログはここから枝分かれします。1行を読んでみましょう。
▲ duration(継続時間)や orig_bytes/resp_bytes(転送量)、conn_state(接続の状態:SF=正常終了、S0=応答なし、REJ=拒否 等)を見るだけで、通信の“性格”が浮かびます。
そして、すべてのログをつなぐ“背番号”が uid(ユニークID)です。1つの接続には固有のuidが振られ、同じuidが conn.log・http.log・files.log…に共通で現れます。だから「この怪しい接続(conn.log)は、どのURLへ行き(http.log)、どんなファイルを運んだか(files.log)」を、uidをたどるだけで串刺しに復元できる。これがZeekログの“魔法”です。
🧵 uid が全ログを縫い合わせる——1接続を“串刺し”で復元
🔎 Zeekで攻撃を狩る:何が見えるか
記録があるからこそ“狩れる”。Zeekログに浮かぶ、代表的な攻撃のサインを見ます。
Zeekログの価値は、攻撃の“足跡”が構造化された形で残ることにあります。シグネチャに頼らず、「振る舞いの異常」から脅威を狩る(ハンティング)——これがNSMの醍醐味です。代表的な4つの着眼点を見ましょう。
TLSの異常(JA3・自己署名)
中身は暗号でも、ssl.logのJA3(クライアントの指紋)や自己署名証明書・不審なSNIは見えます。マルウェア特有のTLSの“癖”を手がかりにできます。
DNSを使った密通・持ち出し
dns.logで「異常に長い・ランダムなサブドメイン」「大量のNXDOMAIN」「1ドメインへの問い合わせ集中」を探す。DNSに紛れた通信路や持ち出しの兆候です。
転送量の偏り&ファイル抽出
conn.logで「内→外のorig_bytesが突出」=持ち出しの疑い。files.logのハッシュを脅威情報と照合すれば、運ばれたマルウェアも特定できます。
こうした“狩り”は、特別なツールがなくても始められます。Zeekに付属する zeek-cut を使えば、巨大なログから必要な列だけを抜き出し、見慣れたコマンドで料理できます。下は「長時間つなぎっぱなしの接続=C2ビーコン候補」を炙り出す例です。
▲ zeek-cut は“列の抜き出し”専用ツール。あとは sort や awk など使い慣れたコマンドと組み合わせるだけ。正規表現でのログ解析の発想がそのまま活きます。
通信の大半がTLSで暗号化された今、Zeekは通信の“中身(本文)”までは読めません。見えるのは、接続先・タイミング・転送量・TLSの指紋(JA3)・証明書といった“メタデータ(外形)”です。ただ、これは弱点であると同時に強みでもあります。「いつ・誰が・どこへ・どれだけ・どんな癖で」は暗号化されても残るため、中身が読めなくても振る舞いの異常から攻撃を炙り出せるのです。逆に言えば、Zeek単体で何でも分かるわけではありません。Wiresharkでの深掘りやC2通信の解析、エンドポイントのログと突き合わせてこそ、点が線になります。
🧠 Zeekスクリプト:振る舞いをコードで捕まえる
Zeekの“本当の力”は、ログだけではありません。出来事に反応するスクリプトです。
ここまでは「Zeekが吐くログを読む」話でした。でもZeekの真骨頂は、独自のスクリプト言語を持ち、通信中に起きる“出来事(イベント)”に反応してロジックを走らせられることにあります。Zeekは通信を解析しながら、dns_request(DNS問い合わせがあった)、http_request(HTTP要求があった)、ssl_established(TLSが確立した)、connection_state_remove(接続が終わった)といったイベントを次々に発火させます。そこに「こういう出来事を見たら、こうする」という処理を書けるのです。
百聞は一見にしかず。下は「1時間を超える長時間接続を見つけたら、notice(注目イベント)に上げる」という、小さなZeekスクリプトです。
▲ event connection_state_remove(c) は接続が終わるたびに発火。c$duration(継続時間)を見て、1hr を超えたら NOTICE(...) で notice.log に記録します。これだけで“振る舞いベースの検知”が1つ完成です。
この“気づき”を束ねる仕組みが、Zeekの2つのフレームワークです。脅威ハンティングの現場では、この2つを押さえておくと一気に世界が広がります。
「注目すべき出来事」を一元化
スクリプトが見つけた異常を NOTICE で notice.log に集約。メール通知や、特定noticeの抑制(サプレッション)も設定でき、アラートの“出口”を整えます。
脅威情報(IOC)と通信を自動照合
悪性のIP・ドメイン・証明書・ファイルハッシュの脅威情報(IOC)を読み込ませると、流れる通信とリアルタイム照合。一致すれば即 notice に上がります。
「自分でスクリプトを書くなんて難しそう」と感じるかもしれません。でも安心してください。Zeekには最初から、有用なスクリプトが大量に同梱されています(標準で多くのプロトコル解析や検知ロジックが有効)。さらにコミュニティが公開するパッケージ(zkg)を入れれば、書かずとも高度な検知を足せます。まずは「既存のスクリプトを読む・使う」ところから始め、慣れてきたら上の例のような小さな1本を書いてみる——これが王道の学び方です。なお、より軽量なZeekシグネチャ(パターン照合)の仕組みもあり、用途で使い分けます。
Sigmaやマルウェア解析とつながる
Intel Frameworkに入れるIOCは、脅威インテリジェンスの成果物そのもの。マルウェア解析で得たC2ドメインやハッシュをZeekに食わせれば、“同じ脅威が他にも来ていないか”をネットワーク全体で見張れます。検知を“つくって終わり”にせず、循環させるのがコツです。
⚙️ 動かす・置く・育てる:導入と運用
最初の一歩は驚くほど簡単。“1つのpcapを食わせる”だけで、Zeekは動きます。
Zeekを学ぶ一番やさしい入口は、手元のパケットデータ(pcap)をオフラインで解析することです。Wiresharkで開いていたあの .pcap を、そのままZeekに渡してみましょう。サーバー構築は要りません。
▲ -r=pcap読み込み(オフライン)、-i=インターフェイス指定(ライブ)。同じZeekが、過去のpcap調査にも、常時監視にも使えます。
本格運用では、Zeekを「センサー」として、ネットワークの“通り道”に置きます。重要なのは設置場所。スイッチのSPANポート(ミラーポート)やネットワークTAPから通信の複製を受け取り、インターネットの出入口(境界)など、トラフィックが集まる“くびれ”に置くのが定石です。ここを押さえれば、最小のセンサーで最大の視界が得られます(この“キャプチャ位置”の考え方はWireshark実践ガイドと共通です)。導入の選択肢は、大きく3つです。
pcapをオフライン解析
zeek -r で、演習用pcap(例:malware-traffic-analysis.netの教材)を解析。サーバー不要で、Zeekログの読み方を安全に体得できます。
ライブ・センサー設置
SPAN/TAPから通信を受け、境界で常時監視。高トラフィックではZeekクラスタで複数CPUに負荷分散します。
Security Onionで丸ごと体験
Zeek+Suricata+Elasticを統合した無料のNSMディストロ。自宅ラボに導入すれば、現場と同じ“狩り”の環境が手に入ります。
とくに学習でおすすめなのが、無料のセキュリティ監視向けLinux「Security Onion」です。Zeek・Suricata・Elasticスタック・可視化ツールが最初から組み合わさっており、検証環境に入れるだけで、プロのSOCに近いハンティング環境が手に入ります。Zeekの商用版としては、Zeek開発者たちが設立したCorelightのセンサーもあり、大規模環境で広く使われています。まずはSecurity Onion(または素のZeek+pcap)で“触って慣れる”のが、遠回りに見えて最短です。
🏗 現代のNSMスタック——Zeekは“記録”の中核に座る
🎛 検知をつなぐ:SIEM・Sigma・脅威ハント運用
Zeekの記録は、ほかの仕組みと“つなぐ”ことで、検知と対応の力に変わります。
Zeekは“記録の達人”ですが、記録は使われて初めて価値になります。ここで効いてくるのが、これまでの記事で扱ってきた仲間たちです。ZeekのログをSIEM(Splunk等)へ流し込み、Sigmaで検知ルールを当てる——じつはSigmaにはZeekログ専用のログソース定義があり、「Zeekの conn.log や dns.log に対する検知ルール」をそのまま書けます。NSMの一連の流れを整理しましょう。
収集する(Collect)
境界のセンサーでZeekを動かし、conn/dns/http/ssl/files…のログを生成。「取れていない通信は、後から調べようがない」——まずは記録の網を張る。
集約する(Aggregate)
ZeekログをJSONでSIEMへ。SplunkやElasticに集めれば、横断検索・相関・ダッシュボードでの可視化ができる。
検知する(Detect)
ZeekのNotice/Intel、Sigmaルール、ベースラインからの逸脱で、怪しい通信を浮かび上がらせる。MITRE ATT&CKで“どの段階か”を整理。
狩る(Hunt)
怪しい接続のuidを軸に、ログを串刺しでピボット。「この接続→このドメイン→このファイル」と物語を復元し、仮説を検証する。
対応する(Respond)
確証が得られたらインシデント対応へ。Zeekの記録は、影響範囲の特定と“いつから・どこまで”の判断を支える“証拠”になる。
この流れの根っこにあるのが、NSMの大原則「予防は破られる前提で、見える化しておく」という考え方です(NSMを体系化したRichard Bejtlich氏の思想として知られます)。完璧に侵入を防ぎ切ることはできない——だからこそ、侵入されても“気づける”ように、ネットワークの出来事を記録し続ける。Zeekは、その“見える化”を最も豊かに実現する道具なのです。Velociraptorのようなエンドポイント可視化と組み合わせれば、“通信”と“端末”の両面から、攻撃を立体的に追えます。
□ ネットから隔離した検証環境を用意した(監視は自分が許可された範囲で)/□ 演習用pcap(malware-traffic-analysis.net等)を zeek -r で解析してみた/□ 生成された conn.log を zeek-cut で読み、列の意味をつかんだ/□ dns.log・ssl.log から“長いドメイン”や“自己署名証明書”を探してみた/□ Security Onion を自宅ラボに入れ、Zeek+Suricata+可視化の流れを体験した/□ 余裕が出たら、§4の例を真似て小さなZeekスクリプトを1本書いてみた。まずは「pcapを食わせる→ログを読む」。それだけで、ネットワークの見え方が一変します。
📚 用語集・FAQ・次に読む
つまずきやすい用語と、よくある疑問をまとめました。
ここまでに登場した言葉の“答え合わせ”として、用語集とFAQをまとめました。Zeekは奥が深い分野ですが、入口はこの記事の範囲で十分です。あとは安全な環境で手を動かしながら、少しずつ守備範囲を広げていきましょう。最初に conn.log を自分の目で読めたとき、ネットワークが“見える”感覚がきっとつかめます。
📖 用語集
| 用語 | 意味 |
|---|---|
| Zeek(旧Bro) | 通信を構造化ログに変えるオープンソースのネットワーク監視フレームワーク。 |
| NSM | ネットワークセキュリティ監視。通信を記録・検知・分析して攻撃に備える営み。 |
| conn.log | すべての接続を記録するZeekの“背骨”ログ。IP・ポート・時間・転送量など。 |
| uid | 接続ごとの一意のID。複数ログを串刺しで関連づける“背番号”。 |
| JA3 / JA3S | TLSのクライアント/サーバーの“指紋”。暗号化通信でもマルウェアの癖を見分ける手がかり。 |
| Notice Framework | 注目すべき出来事を notice.log に集約する、Zeekの“気づき”の仕組み。 |
| Intel Framework | IOC(脅威情報)を読み込み、通信とリアルタイム照合する仕組み。 |
| Suricata | シグネチャ型のIDS/IPS。Zeekと併用するのが定番。 |
| SPAN / TAP | 通信を複製してセンサーに渡す手段(ミラーポート/専用機器)。 |
| Security Onion | Zeek+Suricata+Elastic等を統合した無料のNSM向けLinux。学習に最適。 |
| zeek-cut | Zeekログから必要な列を抜き出す付属ツール。sort等と組み合わせる。 |
❓ よくある質問(FAQ)
プログラミング経験がなくても使えますか?
はい。最初は「ログを読むだけ」で十分価値があります。zeek -r でpcapを解析し、zeek-cut で conn.log を眺める——ここにプログラミングは要りません。スクリプトは“次の一歩”。同梱・公開済みのスクリプトを使うだけでも高度な検知ができ、書けるようになるのは慣れてからで大丈夫です。
ZeekとWireshark、Suricataはどう使い分けるの?
役割が違います。Wiresharkは1つの通信を精密に見る顕微鏡、Suricataは既知の悪をシグネチャで止めるIDS、Zeekは通信を記録に変える監視基盤です。競合ではなく補完関係で、実務では「ZeekとSuricataを併用し、深掘りはWireshark」という組み合わせがよく使われます。
通信が暗号化されていても役に立ちますか?
役に立ちます。中身(本文)は読めなくても、接続先・タイミング・転送量・TLSの指紋(JA3)・証明書といった“外形”は ssl.log 等に残ります。マルウェアのC2通信は、こうしたメタデータに“癖”が出ることが多く、暗号化されていても振る舞いから炙り出せるのがZeekの強みです。
まず何から始めればいいですか?
演習用pcap+zeek -rが最短です。Wireshark記事で紹介したような安全な教材pcapをZeekに食わせ、生成された conn.log を読んでみましょう。腰を据えて学ぶなら、Security Onionを自宅ラボに入れると、Zeek+Suricata+可視化を一気に体験できます。
Zeekのログはどこに送って活用するの?
多くの現場では、ログをJSONで出力してSIEM(Splunk・Elastic等)に集約します。そこにSigmaルールを当てたり、ダッシュボードで可視化したり。SigmaにはZeekログ向けのログソース定義もあり、「記録(Zeek)→検知(Sigma/SIEM)」がスムーズにつながります。
センサーはネットワークのどこに置けばいい?
トラフィックが集まる“くびれ”=インターネットとの境界が基本です。スイッチのSPAN(ミラー)ポートやTAPから通信の複製を受け取ります。これはWiresharkのキャプチャ位置と同じ考え方。高トラフィック環境では、Zeekを複数CPUに分散させるクラスタ構成で処理能力を確保します。
🧭 次に読む
🗺️ 全体像とネットワーク
🎯 検知とログ分析
📚 参考・出典(一次情報)
- Zeek 公式ドキュメント(docs.zeek.org)/Zeek プロジェクト(zeek.org、旧 Bro)
- Vern Paxson「Bro: A System for Detecting Network Intruders in Real-Time」(1998, LBNL)
- Security Onion 公式ドキュメント(securityonionsolutions.com)/Corelight(商用Zeekセンサー)
- Richard Bejtlich「The Practice of Network Security Monitoring」(NSMの体系)
- JA3(Salesforce, TLSフィンガープリント)/SigmaHQ(Zeekログソース定義)/MITRE ATT&CK


コメント