Tüm yazılar
·7 dk okuma·ShamashAi Ekibi

ShamashAi SOAR: Policy Kaosu Yerine Address Group Manipülasyonu

ShamashAi SOAR, FortiGate'te policy sıralamasını bozmadan tehdit IP'lerini nasıl blokluyor? Address group manipülasyonu sayesinde blast radius kontrolü, otomatik expire ve rollback garantisi. Policy edit'e alternatif mimari.

Cuma 19:23: 200 SSH Denemesi ve Tetiklenen Zincirleme

Cuma akşamı 19:23'te ShamashAi konsolu alarm veriyor: ssh:ahmet@dc01 hesabına 200 başarısız deneme — kaynak IP 185.220.101.47. Behavior baseline'a göre anomali skoru 9.2/10. Event pipeline tetikleniyor: BRUTE_FORCE_DETECTED eventi dbo.events tablosuna yazılır, SOAR motoru devreye girer, 1.8 saniye sonra aynı IP FortiGate'in Shamashai-Blocked adres grubuna eklenir, 60 dakika sonra otomatik silinir. Kimse policy'ye dokunmaz, hiçbir mevcut rule bozulmaz, geri dönüş garantilidir.

Ancak çoğu SOAR aracı bu kadar temkinli değildir. "Tehdit tespit ettik, hemen policy ekleyelim" mantığıyla hareket eden sistemler, firewall kurallarının hassas sıralamasını görmezden gelir, üretim trafiğini kırar, geri dönüşü karmaşıklaştırır. ShamashAi'nin SOAR Engine'i farklı bir mimari seçti: policy yazmaz, sadece adres grubu üyelerini manipüle eder. Bu yazıda, FortiGate entegrasyonunda neden address group yaklaşımını tercih ettiğimizi, teknik uygulamayı ve limitlerini detaylandırıyoruz.

Policy Edit'in Patladığı Noktalar

FortiGate gibi modern firewall'lar, rule sıralamasına hayati önem verir. Policy 1: internal→internet ALLOW; Policy 2: DMZ→DB DENY; Policy 3: any→any DENY gibi bir liste düşünün. SOAR aracı ortaya "IP 185.220.101.47 deny" policy'si enjekte ederse:

  • Sıralama riski: Yeni policy nereye girer? Listenin başına konursa (ID 0) mevcut kurallar kayabilir; sonuna konursa (ID 999) çalışmayabilir.
  • Blast radius: Wildcard source/destination kullanan acil policy, meşru trafiği de keser. Örneğin 185.220.0.0/16 gibi geniş subnet bloklarsan CDN hizmeti gider.
  • Rollback karmaşası: 50 SOAR aksiyonu 50 policy ekledi; hangisini ne zaman sileceksin? Policy ID'leri değiştiğinde audit log takibi zorlaşır.
  • Vendor lock-in: Her firewall vendor policy ekleme API'sini farklı tasarlar (Palo Alto rulebase hierarchy, Checkpoint layer structure, FortiGate sequence). SOAR motor her vendor için ayrı kod yazar.
ShamashAi bu riski ortadan kaldırmak için müşterinin önceden hazırladığı infrastructure'a yaslanır: siz bir kere Shamashai-Blocked adres grubu + deny policy tanımlarsınız, SOAR sadece grup üyeliğini güncelleriz.

ShamashAi'nin Address Group Mimarisi

Ön Hazırlık (Müşteri Tarafında)

Pilot kurulumda IT ekibi şu adımları tamamlar:

1. FortiGate'te address group oluşturulur: Shamashai-Blocked (member listesi başlangıçta boş). 2. Policy tablosuna deny rule eklenir: Source Shamashai-Blocked, Destination any, Action DENY, Schedule always, Log all sessions. Policy sırası müşteri tarafından belirlenir — genelde genel ALLOW kurallarından önce, kritik whitelist'lerden sonra konumlandırılır. 3. ShamashAi yönetim panelinde FortiGate cihazı eklenir: IP, API token, Shamashai-Blocked grup adı kaydedilir (dbo.devices tablosunda firewall_addrgrp sütunu).

Bu hazırlıktan sonra SOAR motoru tetiklediğinde policy'ye dokunmaz, sadece grup üyelerini yönetir.

SOAR Tetiklenme Süreci

Event pipeline'ı şöyle çalışır:

1. Event yakalama: Endpoint agent veya syslog BRUTE_FORCE_DETECTED eventi gönderir → dbo.events tablosuna event_type, source_ip, device_id, timestamp yazılır. 2. Correlation engine: Behavioral baseline (dbo.behavior_baselines) ile karşılaştırır. Skor > 8.0 ise SOAR tetiklenir. 3. SOAR karar: AI modülü (POST /ai/investigate-event) kontekst analizi yapar — IP reputation, geolocation, önceki olaylar. Karar: ACTION_BLOCK_IP. 4. Address object oluşturma: ShamashAi FortiGate API'sine POST /api/v2/cmdb/firewall/address isteği gönderir:

javascript // Node.js (Fastify route handler) const https = require('https'); const keepAliveAgent = new https.Agent({ keepAlive: true, maxSockets: 1 });

async function createAddressObject(ipAddress, fortigate) { const payload = { name: shamashai-auto-${Date.now()}, subnet: ${ipAddress}/32, comment: Auto-blocked by ShamashAi at ${new Date().toISOString()} }; const response = await fetch( https://${fortigate.ip}/api/v2/cmdb/firewall/address, { method: 'POST', headers: { 'Authorization': Bearer ${fortigate.apiToken}, 'Content-Type': 'application/json' }, body: JSON.stringify(payload), agent: keepAliveAgent } ); if (!response.ok) throw new Error(FortiGate API error: ${response.status}); return payload.name; }

5. Address group güncelleme: Oluşturulan address object Shamashai-Blocked grubuna eklenir:

javascript async function addToBlockedGroup(addressName, fortigate) { // Önce mevcut grup üyelerini al const getResponse = await fetch( https://${fortigate.ip}/api/v2/cmdb/firewall/addrgrp/Shamashai-Blocked, { headers: { 'Authorization': Bearer ${fortigate.apiToken} }, agent: keepAliveAgent } ); const currentGroup = await getResponse.json(); const members = currentGroup.results[0].member || []; members.push({ name: addressName });

// PUT ile grup güncelle const putResponse = await fetch( https://${fortigate.ip}/api/v2/cmdb/firewall/addrgrp/Shamashai-Blocked, { method: 'PUT', headers: { 'Authorization': Bearer ${fortigate.apiToken}, 'Content-Type': 'application/json' }, body: JSON.stringify({ member: members }), agent: keepAliveAgent } ); if (!putResponse.ok) throw new Error('Failed to update address group'); }

6. Audit log: dbo.soar_actions tablosuna kaydedilir:

sql INSERT INTO dbo.soar_actions ( event_id, action_type, target_device, target_ip, expire_at, status, created_at ) VALUES ( @event_id, 'BLOCK_IP', @device_id, @ip_address, DATEADD(MINUTE, 60, GETUTCDATE()), 'ACTIVE', GETUTCDATE() );

Otomatik Expire Mekanizması

ShamashAi backend'te soar_expire_loop servisi 60 saniyede bir çalışır:

javascript setInterval(async () => { const expiredActions = await db.query(` SELECT id, target_device, target_ip, created_at FROM dbo.soar_actions WHERE expire_at < GETUTCDATE() AND status = 'ACTIVE' `);

for (const action of expiredActions) { const addressName = shamashai-auto-${new Date(action.created_at).getTime()}; await removeFromBlockedGroup(addressName, action.target_device); await deleteAddressObject(addressName, action.target_device); await db.query(UPDATE dbo.soar_actions SET status = 'EXPIRED' WHERE id = @id, { id: action.id }); } }, 60000);

Default expire süresi 60 dakika; yönetici panelden değiştirilebilir (min: 10 dk, max: 24 saat). Expire sonrası address object FortiGate'ten silinir, grup üyelerinden çıkarılır.

Teknik Güvenlik Kontrolleri

Lockout Önleme

ShamashAi, yanlışlıkla kritik altyapıyı bloklamayı önlemek için IP validasyonu yapar:

javascript const FORBIDDEN_RANGES = [ '10.0.0.0/8', // RFC1918 private '172.16.0.0/12', // RFC1918 private '192.168.0.0/16', // RFC1918 private '127.0.0.0/8', // Loopback '100.64.0.0/10' // CGNAT (RFC6598) ];

function isBlockable(ip) { for (const range of FORBIDDEN_RANGES) { if (ipInRange(ip, range)) return false; } return true; }

Private, loopback veya CGNAT IP'ler SOAR tarafından bloklanamaz. Deneme yapılırsa dbo.audit_log tablosuna ACTION_REJECTED_PRIVATE_IP kaydedilir.

Rate Limiting ve Queue

FortiGate API DoS'a uğramaması için per-device request queue ve 1.1 saniye pacing uygulanır:

javascript const deviceQueues = new Map(); // device_id -> Promise chain

async function queueFortiGateRequest(deviceId, fn) { if (!deviceQueues.has(deviceId)) { deviceQueues.set(deviceId, Promise.resolve()); } const currentQueue = deviceQueues.get(deviceId); const newQueue = currentQueue.then(async () => { await fn(); await new Promise(resolve => setTimeout(resolve, 1100)); // 1.1sn pacing }); deviceQueues.set(deviceId, newQueue); return newQueue; }

Aynı FortiGate cihazına eş zamanlı 2+ istek gitmez; kuyruk sırasıyla işlenir. maxSockets: 1 ayarı sayesinde TCP connection pool'u da kontrollüdür.

HTTPS Keep-Alive

FortiGate API latency'sini düşürmek için HTTPS agent keep-alive kullanır. Pilot ortamlarda ölçülen ortalama yanıt süreleri:

  • Address object create: ~180ms
  • Address group PUT: ~220ms
  • Toplam SOAR aksiyon süresi: 1.8-2.3 saniye (validation + API + DB write dahil)

Policy Yaklaşımına Göre Avantajlar

| Kriter | Address Group (ShamashAi) | Policy Edit (Geleneksel SOAR) | |------------|-------------------------------|-----------------------------------| | Policy sıralaması | Dokunulmaz, müşteri kontrolünde | Her enjeksiyonda risk | | Blast radius | Grup member scope'u net | Policy wildcard'ı tehlikeli | | Rollback | Grup member silme = anında | Policy ID değişirse takip zor | | Vendor bağımsızlığı | Address group RFC standardı | Her vendor farklı policy API | | Audit trail | dbo.soar_actions tek kayıt | Policy change log dağınık | | Expire otomasyonu | Loop 60sn çalışır, garanti | Manuel cleanup veya cron | | İlk kurulum | 1 grup + 1 policy (5 dk) | SOAR'ın policy write yetkisi (güvenlik onayı zor) |

Address group yaklaşımı "infrastructure as code" felsefesine de uygundur: Shamashai-Blocked grubu Terraform/Ansible ile tanımlanabilir, SOAR motoru sadece data plane'de çalışır.

Diğer Firewall Vendor Desteği

ShamashAi dokümantasyonu şu anda sadece FortiGate entegrasyonunu detaylandırıyor. Pilot programda müşteri talebi gelirse Palo Alto (dynamic address group), Checkpoint (dynamic object) mimarileri için implementasyon planlanabilir — ancak address group mantığı tüm vendor'larda benzerdir. ShamashAi, policy edit yerine "vendor'ın sunduğu dynamic grouping" özelliğini tercih eder.

Uç Durumlar ve Dikkat Edilmesi Gerekenler

Address Group Limitleri

FortiGate firmware'ine göre bir address group'ta max member sayısı değişir (genelde 300-1000 arası). ShamashAi dbo.soar_actions sorgusunda status='ACTIVE' AND target_device=X sayısını kontrol eder; eşik aşılırsa en eski block'ları expire eder (FIFO mantığı). Dokümantasyonda bu eşik şu anda belirtilmiyor; pilot kapsamında müşteri FortiGate modeline göre belirlenir.

Çakışan SOAR Aksiyonları

Aynı IP için 2+ event tetiklenirse (örneğin hem brute-force hem de known-bad-IP), ShamashAi duplicate address object oluşturmaz. createAddressObject fonksiyonu önce GET /api/v2/cmdb/firewall/address ile aynı subnet'in mevcut olup olmadığını sorgular; varsa sadece dbo.soar_actions kaydı ekler, API çağrısı yapmaz.

FortiGate API Token Yetkileri

API token'ın firewall/address ve firewall/addrgrp üzerinde read/write yetkisi olmalı, ancak policy yetkisi GEREKMEZ. Bu minimal privilege yaklaşımı, güvenlik ekiplerinin onay sürecini hızlandırır.

Gerçek Dünya Senaryosu: Hafta Sonu Brute-Force Dalgası

Cumartesi sabahı 04:00'te 18 farklı IP'den dc01 sunucusuna SSH brute-force başlıyor (botnet koordinasyonu). ShamashAi event pipeline:

1. 04:03 → 18 IP için BRUTE_FORCE_DETECTED eventi → correlation engine tetiklenir. 2. 04:04 → AI modülü IP'leri threat intel DB ile cross-check eder (16/18 known-bad). 3. 04:05 → SOAR motoru FortiGate queue'ya 18 address object + 18 group update işlemi ekler. 4. 04:06-04:10 → 1.1sn pacing ile işlemler tamamlanır (toplam ~4 dakika). 5. 05:00 → İlk IP expire süresine ulaşır (60 dk), otomatik silinir. 6. 05:10 → Tüm 18 IP temizlenir, dbo.soar_actions status='EXPIRED'.

Bu süreçte kimse uyandırılmaz, manuel firewall change ticket açılmaz, policy sıralaması bozulmaz.

Raporlama ve Compliance

KVKK Madde 12 (Veri Güvenliği) ve ISO 27001:2022 Annex A.8.16 (İzleme faaliyetleri) kapsamında SOAR aksiyonları audit log'da saklanır. ShamashAi GET /compliance/evidence endpoint'i ile SOAR raporları JSON formatında dışa aktarılabilir:

{ "action_id": "a7c3f1e2-...", "event_type": "BRUTE_FORCE_DETECTED", "source_ip": "185.220.101.47", "action_type": "BLOCK_IP", "device": "FGT-HQ-01", "created_at": "2026-11-04T01:23:45Z", "expire_at": "2026-11-04T02:23:45Z", "status": "EXPIRED" }

GET /reports/evidence-pack endpoint'i ise tüm related event + SOAR action + audit log'u tek ZIP'te indirir (denetim sırasında sunulmak üzere).

Limitler ve Dürüst Notlar

  • Sadece FortiGate: Pilot sürümde address group manipülasyonu sadece FortiGate API'si ile test edildi. Palo Alto, Checkpoint, pfSense desteği roadmap'te.
  • Vendor-specific eşikler: FortiGate address group member limiti (300-1000) firmware'e göre değişir; ShamashAi bunu otomatik detect etmez, müşteri pilot kapsamında manuel bildirir.
  • Layer 7 blok yok: Address group IP-based blok sağlar; DNS-based veya FQDN-based blok için FortiGate FQDN address object kullanılmalı (ShamashAi şu an desteklemiyor).
  • Multi-site eşitleme: Aynı IP 3 farklı site FortiGate'te bloklanacaksa, SOAR motoru 3 ayrı API çağrısı yapar (merkezi grup senkronizasyonu yok).
  • Expire kesinliği: soar_expire_loop 60sn interval'de çalışır; teorik olarak +60sn gecikme olabilir (kritik sistemlerde manuel expire tetiklenebilir: POST /soar/expire/{action_id}).

Sonuç

ShamashAi SOAR Engine, firewall policy'lerini manipüle etmek yerine address group üyeliğini yönetir. Bu mimari seçimi blast radius kontrolü, rollback garantisi ve vendor bağımsızlığı sağlar. FortiGate entegrasyonunda POST /firewall/address + PUT /firewall/addrgrp/Shamashai-Blocked API çağrıları, 1.1sn pacing ve otomatik expire loop ile güvenli, izlenebilir bir blok mekanizması sunar. 60 dakika default expire, lockout önleme (private IP validasyonu) ve audit trail (dbo.soar_actions) sayesinde IT ekipleri güvenle SOAR otomasyonuna geçebilir.

Pilot programı 30 gün ücretsiz: shamashai.com.tr/iletisim

Paylaş

Bu konuyu projenize uygulayalım

Pilot programı kapsamında ürünü gerçek altyapınızda 30 gün ücretsiz deneyin.