İçeriğe geç

(B) Güvenlik

Zeek ile Ağ Trafiği İzleme ve Tehdit Analizi Kurulumu

5 dk okuma

Ağ trafiği izleme tarafında imza tabanlı sistemler algılamayı üstlenirken, Zeek tüm trafiğin üstüne kapsamlı bir metadata katmanı bırakır. Bir zamanlar Bro adıyla anılan bu araç, 1990'larda Lawrence Berkeley Ulusal Laboratuvarında Vern Paxson tarafından başlatılan bir araştırma projesiydi. 2018 sonbaharında proje Zeek ismini aldı, 2019'da çıkan 3.0 sürümüyle birlikte binary, script ve log adları da yeni isme geçti, script motoru ve log mimarisi büyük ölçüde korundu. Bugün SOC ekiplerinin elindeki en zengin bağlantı kaynağı olarak kabul edilir.

Tasarım felsefesi

Zeek klasik anlamda bir IPS değildir. Trafik üzerinden geçen her bağlantıyı, protokolü, dosyayı ve sertifikayı ayrıştıran pasif bir analiz çerçevesidir. Yakaladığı paketleri bir olay akışına çevirir, script katmanı bu olayları dinler. Bu yüzden "imza yazmak" yerine "davranış tanımlamak" mümkün olur. Varsayılan kurulumda dinleme portu açmaz, ürettiği tek şey log dizinidir.

Kurulum yolları

İki yol var. Resmî dokümantasyon Ubuntu, Debian ve RHEL ailesi için hazır paket depoları sunar; paket yöneticisiyle kurulur ve güncellemeler sorunsuz geçer. Kaynaktan derleme ise cmake, make, bir C/C++ derleyicisi, flex, bison, libpcap geliştirme kütüphanesi, OpenSSL, zlib, SWIG ve Python 3 bağımlılıklarını ister. Derleme bittikten sonra binaryler kurulum önekine göre /usr/local/zeek/bin gibi bir dizine düşer, PATH değişkenine bu dizini eklemek gerekir.

Hangi yöntem seçilirse seçilsin, dağıtımın sürümüne ve Zeek major sürümüne göre dizin yapıları değişebiliyor. Dokümandaki kurulum sayfası o anki hedef sürüm için doğru yolu verir, oradan ilerlemek en güvenlisi.

zeekctl ve düğüm yapısı

Zeek, ZeekControl adlı yönetim aracıyla çalışır. Tek sensörlü kurulumda bile roller aynıdır: manager kümenin beyni, proxy konfigürasyon dağıtımını hafifletir, worker ise arayüzden paket okuyan asıl işçidir. Güncel sürümlerde logger adlı dördüncü bir rol daha vardır ve kümeye ait logları tek noktada toplar. Roller node.cfg dosyasında tanımlanır:

[logger-1]
type=logger
host=localhost

[manager]
type=manager
host=localhost

[proxy-1]
type=proxy
host=localhost

[worker-1]
type=worker
host=localhost
interface=eth0

Konfigürasyon sonrası zeekctl deploy tüm düğümlere kurulum yapar ve süreci başlatır. zeekctl status düğüm durumunu, zeekctl diag sorun çıkan worker için tanı bilgisini verir. Trafik yükseldiğinde aynı makineye ek worker tanımlayıp arayüzü paylaştırmak yerine, donanım izin veriyorsa birden fazla sensörü bir manager altında toplamak ölçeklenen yapıdır.

Log yığını

Üretilen loglar gün bazında dizinlenir ve varsayılan olarak sekmeyle ayrılmış düz metindir. Belli başlı dosyalar:

  • conn.log: her bağlantı için kaynak ve hedef adres, port, süre, iki yönlü bayt sayısı, tespit edilen servis
  • dns.log: sorgu, cevap, kayıt tipi
  • http.log: metot, host, uri, user_agent, durum kodu
  • ssl.log ve x509.log: SNI bilgisi, sertifika detayları, geçerlilik
  • files.log: aktarılan dosyalar ve hesaplanan özetler
  • notice.log: scriptlerin ürettiği uyarılar
  • weird.log: protokol davranışındaki anormallikler

Her kayda kısa bir uid değeri yazılır; aynı bağlantının http, ssl ve files kayıtları bu uid üzerinden birbirine bağlanır. Kolay bir başlangıç soruşturması bu yüzden tek grep zinciriyle yürür. Logları JSON formatına çevirmek için local.zeek içine bir satır yeterlidir:

@load policy/tuning/json-logs.zeek

Pcap analizi ve script dili

Canlı trafiğin yanında eldeki pcap dosyaları da işlenebilir: zeek -r kayit.pcap komutu logları bulunduğunuz dizine yazar. Aynı scriptler canlı sensörle pcap analizi arasında değişiklik gerektirmeden çalışır, olay tabanlı yapı sayesinde:

event ssh_auth_failed(c: connection)
    {
    print fmt("SSH kimlik doğrulama hatası: %s -> %s",
              c$id$orig_h, c$id$resp_h);
    }

Bu örnek her başarısız SSH denemesini basar. Aynı olayı bir sayaçla izleyip eşiği aşan kaynak adresi Notice çerçevesiyle notice.log kaydına düşürmek, brute force tarzı senaryoların klasik Zeek karşılığıdır. Özel scriptler site/local.zeek içinden @load ile devreye alınır.

zkg, intel ve dosya çıkarma

Ek yetenekler Zeek Package Manager ile kurulur; zkg install komutu topluluk deposundaki script paketlerini çeker. Eldeki göstergeleri beslemek için intel çerçevesi hazır gelir:

@load policy/frameworks/intel/seen
@load policy/frameworks/intel/do_notice

Sekmeyle ayrılmış IOC listesi tanımlandığında, trafiğe düşen bir eşleşme otomatik uyarıya dönüşür. Aktarılan dosyaları diske çıkarmak isteyenler için de tek bir satırlık hazır script vardır: @load policy/frameworks/files/extract-all-files. Çıkan dosyalar hash değerleriyle birlikte files.log kaydına bağlanır.

Suricata ile yan yana

Zeek ile Suricata rakip değil, tamamlayıcı iki araçtır. Aynı SPAN veya TAP üzerinden ikisine trafik verildiğinde Suricata imzalarla hızlı vuruş yapar, Zeek olay zincirini ve metadata zenginliğini sağlar. Çıktılar Filebeat üzerindeki Zeek modülüyle Elasticsearch gibi bir arama katmanına taşınır; soruşturma ekranında conn, dns ve http kayıtları uid ile birleştirilir.

Başlangıç için tek arayüzlü bir sensör, varsayılan policy seti ve JSON log çıktısı yeterli. Logları okumaya başladıktan sonra hangi scriptin yazılacağı kendiliğinden ortaya çıkar.

Açık kaynak

GitHub projeleri

Tümünü gör
wireguard-server-panel

WireGuard VPN sunucu paneli - İstemci yönetimi, QR kodları ve trafik istatistikleri için kendi sunucunuzda barındırılan web kullanıcı arayüzü (fork, aktif olarak geliştirilmekte)

Go

Laravel-NDFirewall

Rota Kapsamlı Laravel WAF - RCE, SQLi, XSS ve SSRF algılama özelliklerine sahip hafif bir Web Uygulaması Güvenlik Duvarı

PHP

Trustsslroot

Tek komutla çalışan özel PKI oluşturucu - Kendi kendini imzalayan kök CA ve sertifikaları anında oluşturun

Go

node_exporter

Hafif sistem metrikleri aktarıcısı - Güvenli erişim kontrolüne sahip, Linux için durum bilgisi barındırmayan tek ikili dosyalı izleme hizmeti

Rust

ipReconary

IP keşif ve alt ağ analiz aracı - Hızlı ağ taraması ve IP istihbarat toplama

Rust

Cloudfiltred

Cloudflare IP beyaz liste güvenlik duvarı - 80/443 numaralı bağlantı noktalarını yalnızca Cloudflare IP’leriyle sınırlayarak kaynak sunucunuzu doğrudan saldırılara karşı koruyun

Rust

LoadAlertTracker

Hafif sistem yükü izleme arka plan programı - Eşik değerleri aşıldığında Telegram, Discord ve Mattermost üzerinden gerçek zamanlı uyarılar

Rust

ctCertWatch

Sertifika Şeffaflığı günlüğü izleyicisi - Kimlik avı alan adlarını, marka taklitçiliğini ve yetkisiz SSL sertifikalarını gerçek zamanlı olarak tespit eder

Rust

DDNS-FW

Dinamik DNS Güvenlik Duvarı - DDNS aracılığıyla değişen IP adreslerini takip edin ve güvenli erişim kontrolü için güvenlik duvarı kurallarını otomatik olarak güncelleyin

Rust