Cuma 14:32, üçüncü kez sistem çöktü
IT yöneticisi Mustafa, ekranında Zoom'da bekleyen satıcı temsilcisine bakarken, sunucu odasındaki üçüncü SIEM node'unun tekrar reboot olduğunu görüyor. Elasticsearch cluster'ı split-brain durumunda, Logstash pipeline'ları durdurulmuş, Kibana 502 veriyor. Telefonunda WhatsApp'tan danışman firmanın proje yöneticisi "Kafka broker'ları restart edelim mi?" diye soruyor. Şirketin SIEM kurulumu 8 aydır devam ediyor — 6 fiziksel sunucu, 18 sanal makine, 4 farklı yazılım stack'i, 2 danışman firma, 1 tane de Mustafa'nın sabrı kalmış.
Bu hikaye binlerce Türk firmasında yaşanıyor. SIEM projesi demek: yıllarca süren procurement süreci, karmaşık mimari tasarım, dedicated ekip, sürekli danışman ihtiyacı, ve sonunda "Biz sadece log topluyoruz" dediğiniz bir sistem demek. ShamashAi bu döngüyü kırmak için tasarlandı: 3 ana bileşen, 1 veritabanı, 30 dakika kurulum, IT yöneticisi tek başına yönetebilir.
Klasik SIEM mimarisi neden bu kadar şişkin?
Enterprise SIEM'ler on yıllık teknik borçla geliyor. Log ingestion için Logstash/Fluentd, depolama için Elasticsearch/Solr, arama motoru için ayrı cluster, korelasyon için CEP engine, reporting için BI tool, orchestration için Kafka... Her bileşen kendi cluster'ını istiyor, kendi HA mekanizmasını kuruyor, kendi yedekleme stratejisini gerektiriyor.
Sonuç: 100 cihazlı bir firma için bile minimum 8-12 sunucu, 3-4 farklı programlama dili bilgisi, dedicated DevOps kaynağı şart. Kurulum 6-12 ay sürüyor, danışman maliyeti SIEM lisans bedelini geçiyor. Ve en kötüsü: Sistem production'a alındıktan sonra Mustafa gibi IT yöneticileri "Ben bu sistemi yönetemiyorum" diyor, danışman firmayla yıllık bakım sözleşmesi imzalıyor.
ShamashAi bu kompleksliği reddediyor. Orta ölçekli Türk firmaları için gerçekten gerekli olan nedir sorusundan yola çıkıyoruz: log toplama, event korelasyon, anomali tespiti, otomatik müdahale, compliance raporlama. Bunları 3 servis + 1 SQL Server ile sağlıyoruz.
ShamashAi'nin 3 bileşeni
1. Backend (Node.js Fastify)
ShamashAi'nin kalbi Node.js 20 üzerinde koşan Fastify framework'ü ile yazılmış TypeScript servis. ~150 endpoint sunuyor, tüm business logic burada:
- Event ingestion: Agent'lardan gelen logları alır, normalize eder,
dbo.eventstablosuna yazar. Zod schema validation ile veri kalitesi garanti. - Korelasyon motoru: Her yeni event için bellekte tutulan rule engine'i tetikler. Örneğin
BRUTE_FORCE_DETECTEDevent_type'ı üretmek için son 5 dakikadakiAUTH_FAIL_USERolaylarını sayar. - Anomali tespiti:
dbo.behavior_baselinestablosundaki normal davranış kalıplarıyla karşılaştırma. Örneğin "ahmet" kullanıcısı normalde 09:00-18:00 arası login olur, gece 03:00'te girerseBEHAVIORAL_ANOMALYfırlatır. - SOAR engine:
POST /soar/blockvePOST /soar/quarantineendpoint'leri ile otomatik müdahale. ÖrneğinKNOWN_BAD_IPevent'i geldiğinde firewall'a bloke komutu gönderir. - Compliance API:
GET /compliance/evidenceendpoint'i ile KVKK Madde 12 veya ISO 27001:2022 Annex A.12.4.1 (log tutma) için kanıt paketi üretir. SQL Server'dakidbo.audit_logvedbo.eventstablolarından filtrelenmiş Excel/PDF export. - AI asistan:
POST /ai/investigate-eventendpoint'i ile GPT-4o mini entegrasyonu. Event context'ini alır, tehdit analizi yapar, önerilerde bulunur.
Örnek endpoint yapısı (backend tarafında):
javascript // Node.js Fastify endpoint - event ingestion fastify.post('/api/events/ingest', { schema: { body: z.object({ agent_id: z.string().uuid(), event_type: z.enum(['AUTH_FAIL_USER', 'BRUTE_FORCE_DETECTED', 'M365_RISKY_SIGNIN']), timestamp: z.string().datetime(), source_ip: z.string().ip(), details: z.record(z.any()) }) } }, async (request, reply) => { const { agent_id, event_type, timestamp, source_ip, details } = request.body; // SQL Server'a INSERT await sql.query` INSERT INTO dbo.events (agent_id, event_type, timestamp, source_ip, details_json) VALUES (${agent_id}, ${event_type}, ${timestamp}, ${source_ip}, ${JSON.stringify(details)}) `; // Korelasyon kontrolü if (event_type === 'AUTH_FAIL_USER') { const recentFails = await sql.query` SELECT COUNT(*) as fail_count FROM dbo.events WHERE event_type = 'AUTH_FAIL_USER' AND source_ip = ${source_ip} AND timestamp > DATEADD(MINUTE, -5, GETDATE()) `; if (recentFails.recordset[0].fail_count >= 10) { // BRUTE_FORCE_DETECTED event üret await triggerSoarAction('block_ip', { ip: source_ip }); } } reply.code(201).send({ status: 'ingested' }); });
2. Web (Next.js + React)
Next.js 16 + React 18 ile yazılmış web arayüzü, ~42 sayfa. Tailwind CSS ile modern tasarım, PWA (Progressive Web App) + Web Push desteği:
- Dashboard: Son 24 saatte
BRUTE_FORCE_DETECTED,BEHAVIORAL_ANOMALY,CERT_EXPIRINGevent'lerini gösteren kartlar. Grafana benzeri vizüalizasyon ama SQL Server'dan direkt çeker, Prometheus/InfluxDB yok. - Event Explorer:
dbo.eventstablosunu filtreleme arayüzü. "Son 7 gündekiM365_RISKY_SIGNINevent'leri bul" gibi sorgular. - Incident Management:
dbo.incident_groupstablosundaki gruplandırılmış olaylar. Örneğin aynı source_ip'den gelen 15AUTH_FAIL_USERevent'i tek incident haline gelir. - SOAR Logs:
dbo.soar_actionstablosundaki otomatik müdahale kayıtları. Hangi IP'ye ne zaman bloke gönderildi, sonucu ne oldu. - Compliance Reports:
GET /reports/evidence-packendpoint'ini çağıran sayfa. Tarih aralığı seç, hangi cihazlar, hangi event_type'lar, PDF indir. - Topology Map:
dbo.sitesvedbo.devicestablolarından çekilen ağ haritası. Hangi agent hangi cihazlara bağlı, kaç event üretiyor.
Örnek sayfa komponenti:
javascript // Next.js page - SOAR action logs import { unstable_after as after } from 'next/server';
export default async function SoarLogsPage() { const response = await fetch('http://localhost:3001/api/soar/logs', { next: { revalidate: 30 } // 30 saniye cache }); const logs = await response.json(); return ( <div className="container mx-auto p-6"> <h1 className="text-2xl font-bold mb-4">SOAR Action Logs</h1> <table className="w-full border-collapse"> <thead> <tr className="bg-gray-100"> <th className="p-2 text-left">Timestamp</th> <th className="p-2 text-left">Action</th> <th className="p-2 text-left">Target</th> <th className="p-2 text-left">Status</th> </tr> </thead> <tbody> {logs.map(log => ( <tr key={log.id} className="border-b"> <td className="p-2">{new Date(log.timestamp).toLocaleString('tr-TR')}</td> <td className="p-2">{log.action_type}</td> <td className="p-2">{log.target_ip || log.target_user}</td> <td className="p-2"> <span className={px-2 py-1 rounded ${log.status === 'success' ? 'bg-green-200' : 'bg-red-200'}}> {log.status} </span> </td> </tr> ))} </tbody> </table> </div> ); }
3. Agent (.NET 8 Windows Service)
Windows Server'larda koşan .NET 8 Windows Service. Şirketin tüm cihazlarından log toplar, backend'e gönderir. 10 paralel connector ile eşzamanlı veri toplama:
- Windows Event Log: Security, System, Application log'larını okur. Event ID 4625 (failed logon) →
AUTH_FAIL_USERevent_type'ına dönüştürür. - Active Directory: LDAP query ile user/group değişikliklerini izler. Yeni privileged user eklenirse alert.
- Microsoft 365: Graph API ile mailbox access, risky sign-in, file share events.
M365_RISKY_SIGNINevent_type'ı buradan üretilir. - Fortigate/Cisco: Syslog listener ile firewall log'ları.
KNOWN_BAD_IPmatch'i için threat intelligence feed'leri kontrol eder. - SQL Server: Agent kendi cihazındaki SQL Server'ı da izler. Failed login, permission change, backup failure.
- IIS: W3C log parse. Suspicious HTTP request pattern'leri (
/admin/login50 kez 5 dakikada).
Air-gap destek: Agent, backend'in aynı sunucuda yüklü olduğu senaryolarda localhost üzerinden konuşur. DMZ'deki bir Windows Server'da hem agent hem backend koşabilir, dışarı internet bağlantısı gerekmez.
Örnek agent kodu:
csharp // .NET 8 Windows Service - Event Log okuma using System.Diagnostics.Eventing.Reader; using Microsoft.Extensions.Hosting;
public class EventLogCollector : BackgroundService { private readonly HttpClient _httpClient; private readonly string _backendUrl; public EventLogCollector(IConfiguration config) { _backendUrl = config["ShamashAi:BackendUrl"] ?? "http://localhost:3001"; _httpClient = new HttpClient(); } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { var query = "*[System[(EventID=4625)]]"; // Failed logon var watcher = new EventLogWatcher(new EventLogQuery("Security", PathType.LogName, query)); watcher.EventRecordWritten += async (sender, args) => { if (args.EventRecord != null) { var eventData = new { agent_id = Environment.MachineName, event_type = "AUTH_FAIL_USER", timestamp = args.EventRecord.TimeCreated?.ToString("o"), source_ip = ExtractIpFromEvent(args.EventRecord), details = new { event_id = args.EventRecord.Id, user = args.EventRecord.Properties[5]?.Value?.ToString(), workstation = args.EventRecord.Properties[13]?.Value?.ToString() } }; try { await _httpClient.PostAsJsonAsync($"{_backendUrl}/api/events/ingest", eventData); } catch (HttpRequestException) { // Offline queue'ya at (LiteDB) await SaveToLocalQueue(eventData); } } }; watcher.Enabled = true; await Task.Delay(Timeout.Infinite, stoppingToken); } }
1 SQL Server, hepsi burada
ShamashAi'nin tüm verisi Microsoft SQL Server'da. Elasticsearch, MongoDB, Redis, Cassandra yok. Neden?
- Türk firmalar SQL Server biliyor: DBA'lar MSSQL'e aşina. Yedekleme, restore, index optimizasyonu, backup strategy zaten mevcut.
- HA built-in: SQL Server Always On ile high availability. Ayrı cluster yönetimi gerektirmeyen native özellik.
- Transaction consistency: Event ingestion + korelasyon + SOAR action tek transaction'da. ACID garantisi.
- Lisans: SQL Server Express 10 GB'a kadar ücretsiz. Standard edition zaten çoğu firmada var. Ayrı NoSQL lisansı almaya gerek yok.
dbo.events: Ham event kayıtları. Columnstore index ile 50 milyon satırda bile sub-second query.dbo.incident_groups: Korelasyon motoru tarafından oluşturulan gruplandırılmış olaylar.dbo.soar_actions:POST /soar/block,POST /soar/quarantineendpoint'lerinin log'u.dbo.behavior_baselines: Anomali tespiti için normal davranış profilleri. Her kullanıcı + cihaz için login saatleri, erişilen kaynaklar.dbo.audit_log: Compliance için tüm sistem değişikliklerinin immutable kaydı. Kim ne zaman hangi ayarı değiştirdi.dbo.devices: Agent'ların kayıtlı olduğu cihazlar. Hostname, IP, OS version, son heartbeat.dbo.sites: Çok lokasyonlu firmalar için site tanımları. İstanbul HQ, Ankara şube gibi.
Tek-host kurulum senaryosu
ShamashAi'nin en radikal özelliği: 3 bileşen + SQL Server aynı Windows Server'da koşabilir. Minimum 4 vCPU + 8 GB RAM yeterli.
Örnek deployment:
1. Windows Server 2022 VM (4 vCPU, 8 GB RAM, 100 GB SSD) 2. SQL Server 2022 Express veya Standard kur 3. Node.js 20 runtime'ı yükle, backend'i C:\ShamashAi\Backend klasörüne deploy et, Windows Service olarak kaydet 4. IIS veya Node.js process manager ile Next.js web app'i host et (port 3000) 5. Agent'ı aynı sunucuya kur, BackendUrl=http://localhost:3001 config'i ver 6. Diğer Windows Server'lara sadece agent kur, BackendUrl=http://shamashai-server:3001 config'i ver
Kurulum süresi: 30 dakika. IT yöneticisi Mustafa tek başına yapabilir. Kafka cluster'ı yok, Elasticsearch node coordination yok, Kibana-Logstash versiyonlarını match'leme derdi yok.
Yüksek erişilebilirlik (HA): Üretim ortamında tek-host riski varsa:
- SQL Server Always On Availability Group kur (2 node)
- Backend + Web uygulamasını 2 ayrı Windows Server'a deploy et
- Load balancer (ör. HAProxy) ile backend'leri dengele
- Agent'lara load balancer IP'si ver
Air-gap ve internet zorunluluğu yok
ShamashAi tamamen on-prem. Internet bağlantısı zorunlu değil. Sadece şu özellikler internete ihtiyaç duyar:
- AI asistan:
POST /ai/investigate-eventendpoint'i OpenAI API'sini çağırır. Kapalı ortamda bu özellik devre dışı. - Threat intelligence feed:
KNOWN_BAD_IPevent_type'ı için AbusedIPDB gibi external API'ler. Air-gap'te bu kontrol atlanır, sadece internal blacklist kullanılır. - Web Push: PWA bildirimlerini Firebase Cloud Messaging üzerinden gönderir. Air-gap'te push notification yok, sadece in-app alert.
- License check: ShamashAi lisansını 30 günde bir doğrular. Air-gap kurulumda "offline license key" mekanizması var (ShamashAi dokümantasyonu daha fazla bilgi vermiyor; pilot kapsamında detay paylaşılır).
Sizing ve performans
Minimum gereksinimler (100 cihaz):
- 4 vCPU
- 8 GB RAM
- 50 GB SSD (90 gün retention)
- Windows Server 2019+
- SQL Server 2019+ (Express veya Standard)
- 8 vCPU
- 16 GB RAM
- 150 GB SSD
- SQL Server Standard (Always On için)
- Event ingestion: 800 event/saniye (4 vCPU, Node.js single process)
- Dashboard yükleme: 1.2 saniye (50 milyon event, SQL columnstore index)
- SOAR action latency: 340 ms (firewall'a bloke komutu gönderme + SQL'e log yazma)
- Anomali tespiti: 15 ms/event (behavior baseline karşılaştırması)
Limitler ve dürüst notlar
ShamashAi'nin yapmadığı şeyler:
1. Full packet capture: Network trafiğini PCAP seviyesinde kaydetmez. Sadece log-based analiz. Wireshark benzeri deep inspection yok. 2. APT sandbox: Suspicious dosya geldiğinde sandbox'ta çalıştırma özelliği yok. VirusTotal entegrasyonu roadmap'te ama şu an manuel upload gerekiyor. 3. Elastic query dili: Kibana'nın Lucene query syntax'ı yok. SQL WHERE clause yazman gerekir. IT yöneticileri için sorun değil ama SOC analistleri Elasticsearch'e alışıksa öğrenme eğrisi var. 4. Multi-tenant SaaS: ShamashAi on-prem ürün. Cloud-hosted versiyonu yok, her firma kendi sunucusuna kurar. MSP'ler için multi-tenant mimari roadmap'te. 5. Unix/Linux agent: Şu an sadece Windows agent var. Linux sunucular için syslog forwarding ile log topluyoruz ama native agent yok. 2025 Q2'de Linux agent planlanıyor.
ShamashAi, "SIEM kurmak 1 yıllık proje" mitos'unu yıkıyor. 3 bileşen, 1 SQL Server, 30 dakika kurulum. Mustafa artık danışman firmaları aramıyor — kendisi yönetiyor. Pilot programı 30 gün ücretsiz: shamashai.com.tr/iletisim
