ShamashAi'ın 25 sayfası tek tek.
Bu makale, ShamashAi'ın her sayfasının ne yaptığını, hangi olayı hangi tabloya yazdığını, hangi karar mantığını işlettiğini, IT yöneticisinin ekrana baktığında ne göreceğini detaylı anlatır. Hızlı bir gezi değil, satın alma kararı için yeterli bir teknik döküman.
Control Center, ShamashAi'ın posture skoru dediği 0–100 arası bir tek sayı etrafında inşa edilmiştir. Bu skor, runtime telemetrisinden deterministik olarak hesaplanır — pazarlama göstergesi değil, gerçek operasyonel basıncın özetidir.
Posture skoru nasıl hesaplanır?
Başlangıç değeri 100. Aşağıdaki kalemler düşürür:
- Çözülmemiş kritik vaka × 18 puan (max −36)
- Diğer aktif vakalar × 3 puan (max −18)
- Critical visibility gap × 10, high × 4 (max −30)
- Agent offline = −28, degraded = −12
- License over-limit = −20, expired = −24
- Compliance % < 70 ise
(70 - mevcut) / 2puan
Sonuç ≥ 80 ise Operationally calm (yeşil), ≥ 60 Attention needed(sarı), < 60 High pressure (kırmızı). Tek satırlık özet: "X aktif vaka, Y high-priority görünürlük açığı, %Z uyumluluk."

3-katmanlı yapı (Wave 3 · Haz 2026)
Önceki sürümde Control Center 10 widget'ı her zaman ekranda gösteriyordu — IT yöneticisi "ne yapayım?" sorusunun cevabı için göz gezdirmek zorundaydı. Wave 3'te 3-katmanlı odak hiyerarşisi getirildi: kritik katman her zaman görünür, geri kalan ihtiyaç olduğunda açılır. Default ekran 3× daha sade — mobil viewport'ta da kullanılır oldu.
🔝 Kritik katman (her zaman görünür · gizlenemez)
- Posture skoru — büyük, sol — durumun tek satırlık özeti.
- Attention queue — 3 KPI: Active incidents · Visibility gaps · Agent health.
- Service problems — 3 KPI: M365 phishing/malware · Switch/AP down · Backup failures.
- License / compliance — 3 KPI: Lisans durumu · KVKK % · ISO 27001 %.
- "What needs attention first" — tek büyük action panel, posture'ı düşüren kalemleri sıralar.
Bunlar Control Center'ın özü: "skor X / vakam Y / lisansım Z" — sayfaya bakan IT yöneticisi anlık karar verir.
📊 Operasyonel detay (default açık · Customize ile gizlenir)
- Coverage detail — KVKK kontrol başına evidence event sayıları.
- Service layers — 5 katmanlı topology özeti (external → edge → perimeter → vlan → internal).
- Operational pulse — M365 + SharePoint + Backup canlılığı.
- Profile checks — kategori bazlı izleme kontratları (firewall = WAN + VPN + policy, server = disk + service + interface, vs.)
🔬 İleri analiz (default kapalı · Customize ile açılır)
- Attack source map (Wave 2) — bloklanan saldırı kaynaklarının geo-IP haritası, son 30 gün.
- Event trends (Wave 2) — 30 günlük sparkline + severity donut + Top-N event_type bar.
- Fragility panel (Wave 2) — "Biz olmadan dayanır mı?" sorusunu cevaplayan 0-100 skoru.
Yöneticiye lazım olduğunda 1 tıkla görüntüler, yoksa ekran temiz kalır. Customize butonu yedi opsiyonel widget'ın görünürlüğünü ve sırasını localStorage'da saklar.
Üst aksiyon butonları
Briefing haftalık executive PDF üretir (Wave 2 · CEO summary). Wall NOC TV mode'a geçer (Wave 2). Incidents / Remediation / Readiness kısayolları sırasıyla SLA kuyruğuna, posture görevlerine ve production preflight kontrolüne yönlendirir.
Topology layout LOCKED — her müşteride aynı yerleşim kullanılır:
┌────────────────────────────────────────────────┐ │ EXTERNAL SERVICES │ │ [M365] [Website] [Mail Provider] │ ├────────────────────────────────────────────────┤ │ ☁ Internet │ ├────────────────────────────────────────────────┤ │ PUBLIC EDGE │ │ [WAN IP1] [WAN IP2] │ ├────────────────────────────────────────────────┤ │ PERIMETER → [Firewall 01] │ ├────────────────────────────────────────────────┤ │ Interface row (clickable filters) │ │ [internal·192.169.1.0/24] [dmz] [fortilink] │ ├────────────────────────────────────────────────┤ │ INTERNAL NETWORK │ │ Switch · Identity · Server · Database · NAS │ └────────────────────────────────────────────────┘

Bucket-match priority
- 1.
device.network_idmanuel pin — operatörün seçimi, asla override edilmez. - 2. IP-CIDR match — descending prefix length,
/32beats/24. - 3. Hiçbiri eşleşmezse
Otherbucket.
Edge taksonomisi
Cihazlar arası ilişkiler 9 kategoriye ayrılır: network (wan_uplink, switch_port, lldp_neighbor), DHCP/DNS, identity (ad_member, ldap_bind), tunnel (ipsec, ssl_vpn, mpls, expressroute), compute (vmware_host, k8s_node), storage, security (siem_log_source, edr_managed), app/SaaS, mail/web (mail_route, web_hosted_at, waf_protected).
Cihaz kartı ne gösterir?
- İkon + isim + IP + vendor
- "via <log source>" rozeti (Win Event Log / Syslog / SNMP)
- Yeşil/kırmızı live dot + son event sayısı
- LOGS LIVE / Reachable / No logs durumu
- Auto-collapse: 2+ cihazlı kategori başlangıçta kapalı, tek cihaz açık.
Cihaz kayıtları dbo.devices tablosunda tutulur, her satır şu sütunları içerir:
name,ip(UNIQUE),vendor,device_typeprotocol+port— primary management channelsecondary_protocol+secondary_port— dual-channel (örn. management + log)auth_type(none / password / api_key)credential_secret— AES-256-GCM şifreli (CREDENTIAL_KEY env)snmp_read_community_secret,snmp_trap_community_secretenabled,tags(JSON),categorysoar_enabled,soar_block_groupnetwork_id(FK → networks) — manuel pin

Aksiyon butonları
- Test connection — protokole göre canlı test (TCP probe, REST auth, SNMP sysDescr).
- Discover — vendor adapter'ı çağırır, network_id, vlan, edges keşfeder.
- Bulk import — CSV (name, ip, vendor, device_type, protocol, ...) yüklenir.
- AI advice — cihaz vendor + recent events ile Claude'a hardening önerisi sorulur.
- Risk posture sekmesi — risk score'a göre sıralı liste, sahip, son aktivite.
Site, müşterinin fiziksel ya da mantıksal bir lokasyonudur. Her cihaz bir site'a aittir; event ingest pipeline'ı, topoloji haritası, evidence pack ve compliance raporları site bazında filtrelenebilir. Site silindiğinde altındaki tüm cihaz/olay/edge'lerin kademeli silinmesi tek aksiyonla yapılır — ya da son site silinirse instance tamamen sıfırlanıp wizard'a döner.
Site tipleri
| Type | Tipik kullanım |
|---|---|
on_prem | Birincil ofis, kendi sunucu odası — HQ |
branch | Şube ya da uzak satış noktası |
dr | Felaket kurtarma sahası, failover için stand-by |
colo | Kolokasyon merkezi — kiralı kabin |
cloud_region | Azure / AWS / GCP bölgesi |
home_office | Uzaktan çalışan IT yetkilisi setup'ı |
Parent-child hiyerarşi
site.parent_id ile sitelerin hiyerarşisi modellenir. HQ → Branch1 / Branch2 ya da Primary Region → DR Region gibi. UI bu hiyerarşiyi iç içe gösterir; rapor scope'u child site'lara doğru genişletilebilir.
Site-aware her şey
- Header SiteSelector — sağ üst dropdown, hızlı geçiş, URL'e
?site_id=push eder - Topology — site bazlı katman görünümü
- Events / Incidents / Reachability — site filtresi
- Devices — site bazında envanter ve CSV export
- Onboarding wizard — birinci site burada açılır (Office name adımı)
- Settings → Sites — admin CRUD: yeniden adlandır, tip değiştir, lokasyon, parent
Site cascade silme
Bir site silindiğinde altındaki devices, events, reachability_logs, device_edges, incident_groups, component_status, metric_samples, networks, change_requests, maintenance_windows, soar_actions, alert_rule_hits, behavior_baselines, remediation_tasks ve audit_log scope'u kademeli silinir. Tek site varsa silme işlemi instance reset'e dönüşür ve admin onboarding wizard'a yönlendirilir.
Device categories dbo.device_categories tablosunda tutulur, her kayıt:key (slug), label, tier (1–5 topoloji katmanı),parent_key (alt kategori varsa), icon, display_order. Reorder API ile drag-and-drop sıralama. Auto-categorize endpoint'i mevcut cihazları heuristik ile kategoriye düşürür.
Category health profiles
Her kategori için "bu cihaz tipinin sağlıklı sayılması için" beklentiler tanımlıdır: son N dakikada heartbeat, log akış oranı, credential varlığı, parser kalitesi. Beklenti karşılanmıyorsa category-health/findings üretir; Coverage ve Visibility Gaps sayfaları bu finding'leri toplar.
User category permissions
/users/:id/category-permissions — analist rolündeki kullanıcılar yalnızca izin verilen kategorilerin cihaz/olay verisini görebilir. Sahaya çıkan tedarikçilere "sadece firewall + switch" erişimi verilebilir; AD ve database görünmez.
Olaylar dbo.events tablosuna 4 indeksle yazılır (tenant+timestamp, severity, device, event_type). Hot-path query'ler (severity ≥ medium, son 24h) milisaniye cinsindendir.

Filtreler
- Source / Vendor / Device type / Event type — tam metin
- Severity — info / low / medium / high / critical
- Min priority — Critical 80+ / High 60+ / Medium 30+ / Low 10+
- Triage status — Open / Acknowledged / Investigating / Resolved / False positive
- Search — IP, kullanıcı, mesaj, event tipi free-text
Görünümler
3 sekme: All events / Security / Legacy telemetry. 2 mod: Grouped (aynı tip+IP+user+message kümelenir, "5 occurrences" rozeti) / Raw (her satır ayrı). Auto-refresh 30 saniye.
KPI'lar
- Active sources — event üreten cihaz sayısı (dakika içinde)
- Incoming events — filtrelerden sonraki sonuç adedi
- Critical priority — score ≥ 80 olanlar
- Unresolved critical — open/active triage olanlar
Export + reachability
CSV export — mevcut filtre + 500 satır limit. Sağ üstte Reachability logs butonu, TCP probe + ICMP sonuçlarının ayrı tablosuna yönlendirir (event tablosunu kirletmesin diye ayrılmıştır).
Headline
En üstte olayın human-readable özeti, alt başlık olarak event_type, sağda 5 haneli risk score. Severity rengine göre başlık ve çerçeve renkli.
"Why this score" rozetleri
Risk motorunun ürettiği reasons listesi — base:65, admin_user×1.5,threat_ip×2.0, suspicious_geo:RU×1.7, off_hours×1.3. Her rozet humanizeReason ile "Privileged user ×1.5" gibi okunaklı hale getirilir. İlk 6 tane gösterilir, kalanı "+N more" ile aşağıda.
MITRE ATT&CK chip'leri — her olayda, tıklanır
30+ kanonik event tipi MITRE ATT&CK tekniklerine eşlenir (Brute Force T1110, Valid Accounts T1078, Phishing T1566, EternalBlue exploit, Account Manipulation T1098, Data Destruction, Inhibit System Recovery…).
- Events listesinde her satırda en alakalı 2 chip
- Event Detail sayfasında tüm chip'ler + her birinin rationale ve confidence'ı
- Alert Rules formunda seçilen
match_event_typehangi tekniklere düşüyorsa tıklanır chip'ler (attack.mitre.org'a gider)
Mapping katalogu testlerle korunur: maps authentication failures to brute force,returns rich MITRE metadata assertion'ları her sürümde yeşil — yeni event tipleri eklendiğinde de uyumlu kalır.
Triage controls
5 durum: Open (default), Acknowledged, Investigating, Resolved, False positive. Status değişiklikleri event_triage tablosuna yazılır + audit_log'a düşer.
AI Investigator
"AI ile incele" butonu çağrıldığında POST /ai/investigate-event/:id endpoint'i şunu yapar:
- Aynı
src_ip'den son 6 saatteki ilgili olayları toplar - 5 threat intel feed'inde (Tor, FireHOL, Spamhaus, USOM, Abuse.ch FeodoTracker) eşleşme arar
- Geo enrichment ekler (country, ASN, org) — MaxMind GeoLite2 lokal
- Behavioral baseline varsa ekler (kullanıcının normal patterni)
- Hepsini AI'ya yollar; özet Türkçe varsayılan (Settings → AI'dan EN'e çevrilebilir)
- Credentials ASLA gönderilmez — sadece anonim metadata
- Aynı event_id için 5 dk cache
Block IP butonu
Eğer event'in src_ip'si public ve bloklanabilirse, üst sağda Block IP butonu çıkar. Tıklayınca SOAR queue'sine direkt iletilir, confirmation dialog (default 60 dk).
Source geography
Public src_ip için ülke kodu, isim, şehir, ASN, organizasyon. Bilgi MaxMind GeoLite2 embedded DB'den, internet aranmaz.
Event Details + Raw Data
Canonical fields tablosu (timestamp, source, vendor, device_type, src_ip, dst_ip, user, action) + raw JSON payload (vendor'un ham mesajı). Forensic için tam fidelity.

SLA Policy (skor bazlı)
| Priority | Acknowledge | Resolve |
|---|---|---|
| Critical (80+) | 15 dakika | 4 saat |
| High (60+) | 1 saat | 24 saat |
| Medium (30+) | 8 saat | 72 saat |
| Low (<30) | 24 saat | 168 saat (7 gün) |
SLA renkleri
- On track (yeşil) — hedefin %75'inden az süre geçti
- Soon (sarı) — %75 ile %100 arası
- Overdue (kırmızı) — hedef aşıldı
- Closed (gri) — resolved/false_positive, SLA durdu
7 kuyruk sekmesi
Active (open + ack + investigating), Critical (80+ unresolved), Open, Acknowledged, Investigating, Resolved, False positive.
Üst KPI'lar
- Active incidents — açık iş yükü
- Unresolved critical — kritik SLA basıncı
- SLA overdue — yangın
- Unassigned — sahibi olmayan açık vakalar
- Closed this window — son 7 günde kapatılan
Quick actions
Her satırın sağında: Ack / Investigate / Resolve / False+ / Block IP. Tek tık, confirmation dialog. Audit log'a yazılır.
dbo.incident_groups aynı group_key (event_type + device_id + src_ip karması) altındaki event'leri tek satıra toplar. Üst grup: title,severity, risk_score (en yüksek), status (open / acknowledged / investigating / resolved / false_positive),evidence_count, first_seen_at, last_seen_at.
Otomatik kümeleme
- Yeni event geldiğinde
upsertIncidentGroupFromEventçağrılır - Aynı
group_keyvarsaevidence_count+1,last_seen_atgüncellenir - Group resolved ise ve aynı kök tekrar gelirse yeni grup açılır (re-open değil)
- Group başına
latest_event_idile son delil event linklenir
Triage grup üzerinde
5 status (open / ack / investigating / resolved / false_positive) ve assignee grup seviyesinde set edilir. 200 alt event'i tek tek kapatmak yerine grubu kapatırsın — altındakiler implicit olarak resolved sayılır. Audit log'a group transition'lar yazılır.
Top event types summary
/incident-groups/summary?days=7 son N gün için aktif grup sayısı, unresolved critical sayısı, status histogramı ve en sık 10 event_type'ı döner — Control Center KPI'ları bu summary'den beslenir.
dbo.component_status tablosunda her bileşen kendi satırında durur:component_type (disk / fan / temperature / power / vpn_tunnel / interface_port…),component_key (örn. disk_0, vpn_to_branch),state (ok / warning / critical / unknown / up / down),severity, status_text, important,last_event_id, last_seen_at.
Hangi event hangi bileşene düşer?
HARDWARE_FAULT· disk SMART, fan, PSU, temperature → ilgili componentINTERFACE_DOWN/LINK_DOWN→ port componentVPN_TUNNEL_DOWN· IPSec / SSL VPN → tunnel componentBACKUP_FAILED· Veeam / Acronis job → backup job componentCERTIFICATE_EXPIRING· SSL / TLS expiry → certificate component
Component-aware UI
Topology cihaz kartları "3/4 fan ok" rozeti gösterir. Cihaz detayında component listesi: disk-disk durumu, hangi sertifika 30 günden az kaldı, hangi VPN tünel düşük. Coverage ve Visibility Gaps sayfaları "important" component'lerin gözden kaçmamasını sağlar.
Summary endpoint
/components/summary?limit=8 en kötü 8 component'i döner — Executive Snapshot'ta ve haftalık summary maillerinde "Dikkat çekenler" kutusu bu listeyi gösterir.
Bir kural şu alanlardan oluşur:
name+descriptionmatch_event_type— specific event veya anymatch_severity— info..critical veya anymatch_user_re— kullanıcı adı regex'igroup_by— src_ip / user / device_id / nonethreshold_count(default 5)window_minutes(default 5)cooldown_minutes(default 5) — re-trigger önlerseverity_override— composite hangi severity ile gitsinnotify_email— eposta gönderilsin mienabled

Preview (test mode)
Yeni kural yazarken Preview butonu, kuralı son 7 günün gerçek olaylarına uygular ve "kaç kez ateşlerdi" diye gösterir. Yanlış pozitifleri önceden görmenizi sağlar.
Composite event
Kural ateşlediğinde ALERT_RULE_FIRED sentetik olayı üretilir (severity = override veya source severity), bildirim kanalına gider, audit log'a düşer. Re-trigger cooldown süresince susturulur.
State persistence
Kural hit'leri dbo.alert_rule_hits tablosuna yazılır — restart sonrası sliding window kaybolmaz. Pre-compiled regex cache, evaluator stats endpoint'i mevcut.

Tablo şeması
CREATE TABLE dbo.behavior_baselines (
project_id UNIQUEIDENTIFIER,
user_name NVARCHAR(255),
sample_count INT,
hours_bitmap INT, -- 24-bit, hangi saat?
days_bitmap INT, -- 7-bit (Pzr=0)
top_src_ips NVARCHAR -- JSON [{ip, count}]
top_countries NVARCHAR -- JSON [{cc, count}]
top_devices NVARCHAR -- JSON [{device_id, count}]
last_seen_at DATETIME2,
last_built_at DATETIME2
);
-- Gece 02:00'de yeniden kurulur (30 günlük pencere)Sapma tespiti
- Yeni saat — hours_bitmap'te bit yoksa
- Yeni gün — days_bitmap'te bit yoksa
- Yeni ülke — top_countries dışındaysa
- Yeni cihaz — top_devices dışındaysa
- Yeni IP — top_src_ips dışında, ülke aynı olsa bile
Risk multiplier'a beslenir
Sapma tek başına BEHAVIORAL_ANOMALY composite event üretir (score 70, severity high). Aynı kullanıcının aynı oturumda devam eden olayları için risk multiplier'abaseline_anomaly × 1.x olarak eklenir — sıradan AUTH_SUCCESS critical olabilir.
Manuel rebuild
Filter user + Rebuild butonu. Rebuild süresi ~50ms × kullanıcı sayısı; 500 kullanıcılık tenant için ~25 saniye.
Parametreler
| Sabit | Değer |
|---|---|
| WINDOW_MS | 5 dakika sliding |
| THRESHOLD | 5 fail |
| EMIT_COOLDOWN_MS | 5 dk (re-trigger önler) |
| MAX_KEYS | 5000 src_ip (memory cap) |
FAIL_TYPES (korelasyon kapsamı)
AUTH_FAIL_USERAUTH_FAIL_RDPAUTH_FAIL_UNLOCKM365_SIGNIN_FAILURESQL_LOGIN_FAILEDVPN_LOGIN_FAILED
Password spray ayrımı
Pencere içinde 3+ farklı kullanıcıya saldırı varsa "password spray" mesajı, tek kullanıcıya odaklı saldırıda "targeted brute-force". Distinct user listesi composite payload'ında JSON olarak iletilir.
score = base(event_type)
× privileged_user_mult // admin/root → ×1.5
× threat_ip_mult // TI hit → ×2.0
× suspicious_geo_mult // beklenmeyen ülke → ×1.7
× off_hours_mult // mesai dışı → ×1.3
(cap: 100)
severity = critical (≥80) | high (≥60) | medium (≥30) | low (≥10) | infoTunable env vars
RISK_TZ_OFFSET_HOURS— default 3, range -12..14RISK_BUSINESS_HOUR_START— default 8RISK_BUSINESS_HOUR_END— default 18
Multi-region kurulumlarda kuralı yeniden yazmadan saat dilimi tunable. Reason listesi UI'da "Privileged user ×1.5" gibi humanize edilir.

İki aksiyon modu
| Mode | Endpoint | Hedef IP | Tipik kullanım |
|---|---|---|---|
| Block IP | POST /soar/block | Public IP (RFC1918 dışı) | Brute-force / scan / known-bad IP perimeter'da kes |
| Quarantine internal | POST /soar/quarantine | Private IP de izinli (10.x, 172.16.x, 192.168.x) | Compromise olmuş iç cihazı network'ten ayır |
Mantık aynı address-group manipülasyonu; fark action_scope ve hedef IP validasyonu. Block IP private adresleri kabul etmez (içeride bloklamak transit policy ile mantıklı değil). Quarantine private/CGNAT IP'lere izin verir — saldırgana dönüşmüş iç endpoint'i (worm, ransomware lateral, kompromize hesap) anında kesip incident response'un nefes alma süresini kazandırır.
Akış
- Trigger — composite event, alert rule, threat intel veya manual
POST /api/v2/cmdb/firewall/address— yeni address objesishamashai-block-<IP>(subnet /32)PUT .../firewall/addrgrp/Shamashai-Blocked— append member- Customer'ın hazır transit + local-in DENY policy düşürür
- Auto-expire loop her 60sn (default 60 dk sonra silinir)
- Audit log + soar_actions tablo (append-only kanıt)
Defansif tasarım
- ASLA policy edit, sadece group member listesi
- Private/loopback/CGNAT IP block edilemez
- Per-firewall request queue, 1.1s pacing
- HTTPS keep-alive agent, maxSockets:1
- 5-attempt retry (2/4/8/16s) on 429/503
- API key auth zorunlu (admin password yasak — lockout sebebi)
- Trusted host = Shamashai server IP'si
Customer-side hazırlık (FortiOS 7.0+)
# 1. API user + trusted host
config system api-user
edit "shamashai"
set accprofile "super_admin"
config trusthost
edit 1
set ipv4-trusthost <SHAMASHAI_IP> 255.255.255.255
# 2. Placeholder + grup
config firewall address
edit "shamashai-soar-placeholder"
set subnet 240.0.0.1 255.255.255.255
config firewall addrgrp
edit "Shamashai-Blocked"
set member "shamashai-soar-placeholder"
# 3. Transit DENY policy (en üste taşı)
# 4. Local-in DENY policy (admin web UI'a brute force için)
config firewall local-in-policy
edit 0
set intf "wan1"
set srcaddr "Shamashai-Blocked"
set action denyLocal-in policy her install'da unutulur — onsuz transit policy admin web UI'a gelen attack'ı durdurmaz. Kontrol listesinde mecburi adım.

ISO 27001:2022 Annex A — 19 control
A.5.7Threat intelligenceA.5.10Acceptable useA.5.24Incident management planningA.5.25Event assessmentA.5.26Incident responseA.5.28Evidence collectionA.6.3Awareness/trainingA.8.2Privileged accessA.8.5Secure authenticationA.8.7Malware protectionA.8.8Vulnerability managementA.8.9–10Configuration · Information deletionA.8.12Data leakage preventionA.8.15–17Logging · Monitoring · Clock syncA.8.20Network securityA.8.23Web filtering
KVKK Madde 12 (Veri Güvenliği) — 6 alt madde
Yetkisiz erişim önleme · log tutma · retention · sızma testi kanıtı · ihlal bildirimi · denetim. Her madde için ShamashAi'ın hangi tabloyu/feature'ı kanıt olarak sunduğu rationale alanında açıklanır.
Status hesaplaması
Covered: min_evidence_count sayısının üzerinde kanıt var. Partial: kanıt var ama threshold'un altında. No evidence: hiç kanıt yok.
Drilldown
Bir control'a tıklayınca GET /compliance/evidence?control=A.5.7 çağrılır, kontrolü satisfike eden gerçek olaylar (event_id, timestamp, source) listelenir. Auditor "kanıtla" diye sorduğunda bu liste yeterlidir.
Export
Print/PDF — clean stylesheet ile window.print(). CSV — control × status matrisi. Evidence pack (Reports sayfası) — JSON + Markdown + HTML, ZIP olarak indirilir.

Coverage skoru tier × kategori × vendor matrisinde hesaplanır. "Bu cihaz tipini görüyor musun?" testi, beklenen vs gerçekleşen log akışı. Her cihaz satırında ayrıca parser confidence rozetiyle "ham log var ama kanonik event'e dönüşüyor mu" sorusunun cevabı görünür.
AI Parser Önerisi — bilinmeyen vendor için
Parser confidence low veya none olan satırlarda AI Parser butonu çıkar. Operatör cihazın 5–20 satır ham log örneğini yapıştırır → AI önerir:
- Format tespiti — syslog RFC3164/5424, CEF, LEEF, JSON, key-value, CSV, custom
- Event tipi eşlemesi — Shamashai'nin 34 kanonik event tipinden hangisine düştüğü, regex / JSON path / grok pattern'i ile
- Alan çıkarımları —
src_ip,user,action,severitygibi kanonik alanlar için pattern - Operatör için uyarılar — timezone varsayımı, PII, belirsiz severity gibi notlar
Öneri-only. Hiçbir şey otomatik uygulanmaz — operatör çıkan pattern'i agent parser config'e veya connector pack maintainer'a iletir. Canonical event-type ismi AI tarafından uydurulmaz: sabit 34-item taxonomy listesinden seçilir, yanlış isim UI'a sızamaz.

Issue tipleri
- never_seen — hiç event gelmemiş
- no_logs_24h — 24 saat sessiz
- no_health_10m — 10 dk health check yok
- credential_missing — kimlik bilgileri eksik
- parser_raw_only — sadece SYSLOG_RAW, classify edilmemiş
Priority
- Critical — kritik kategori cihazı sessiz (firewall, DC)
- High — önemli kategori cihazı log atmıyor
- Medium — secondary kategori sorunu
- OK — sorun yok

Evidence Pack içerik
- Olay özeti + risk reasons
- Triage history (kim ne zaman ack/resolve etti)
- Related events (zaman çizelgesi)
- Audit log (kim ne yaptı)
- SOAR aksiyon (varsa)
- Threat intel matches
- Geo enrichment
- MITRE ATT&CK mapping
Weekly Executive Summary
Pazartesi 09:00 (Europe/Istanbul) otomatik PDF + e-posta. IT yöneticisi rapor yazmaz. Send now butonu manuel tetikleme, Preview anlık örnek üretir.

dbo.audit_log append-only — silinmez. Project silinse bile kayıtlar kalır (forensics için). Filtreler: action prefix (device, soar, credential, ...) ve target. Last 500 entry default.

Her görevin owner, due date, status (open / in_progress / accepted_risk / closed). Compliance gap, visibility gap, lisans uyarıları otomatik bu kuyruğa düşer.
Per-event-type runbook: hangi sırayla hangi aksiyon, hangi kanıt yakalanmalı, kim onaylar. Vardiya devri ve incident kapanış kontrol listesi.
Per-user atanan vakalar, açık/kapalı oranı, ortalama time-to-ack ve time-to-resolve. "Kim aşırı yüklü?" sorusuna sayısal cevap.
Her change kaydı: risk_level (low/medium/high), status (planned/in_progress/completed/rolled_back), rollback evidence. Maintenance window ile entegre — değişiklik sırasında alarm üretmez.
Scope: project / site / device. Active window varsa /ingest endpoint'i alert evaluation atlar. Veri kaybı yok, sadece alarm yok.
dbo.reachability_logs — check_type, status (ok/warn/fail/unknown), latency_ms, message. Filtreler: source, status, free text. Devices'tan DeviceHealthConnector tarafından beslenir.

Port listesi: 22, 80, 161, 443, 514, 5985, 8080, 8443. Sonuçlar: live hosts, open ports, fingerprints. AI advice butonu — bulgularla cihaz envanteri için "şunu da ekle" önerileri.
MX lookup
POST /discovery/mx-lookup — domain alır, MX kayıtlarını çözer, mail sağlayıcısını tanır: Microsoft 365 (outlook.com / mail.protection.outlook.com),Google Workspace (aspmx.l.google.com), Yandex, Zoho ya da on-prem MX. Wizard "Hangi mail provider'sın?" sorusunu sormaz — cevabı kendi bulur, doğrulatır.
Website lookup
POST /discovery/website-lookup — domain → A record, TLS sertifika grab (relaxed, expired sertifikalara karşı tolerant), hosting ipucu (Cloudflare / AWS / Azure / GCP / on-prem). Sertifika expiry tarihi otomatik CERTIFICATE_EXPIRING event flow'una bağlanır — yenileme yarın olsa bile mail/push alırsın.
M365 probe
POST /discovery/m365/probe — Azure App Registration credential ile (Mail.Send + Directory.Read.All) tenant'a bağlanır, alabildiği data tiplerini doğrular. Sonrasında POST /discovery/m365/devices çağrılır; Graph API ile Intune / Entra ID kayıtlı cihazlar envanter haritasına aktarılır (max 1000).
External surface temizlik
POST /discovery/external-surface/delete — yanlış eklenen bir external IP ya da mail/web pseudo-cihaz tek tıkla silinir. Onboarding wizard sırasında deneme amaçlı eklenen kayıtların sonradan temizlenmesi için.
Discovery prob'ları credential öncesidir: domain ve public DNS yeterli. Bu sayede satış demo'sunda müşteri "mail/web altyapımı nasıl görüyorsun?" diye sorduğunda 5 saniyede pano dolar — kimlik bilgisi paylaşmadan.

Adımlar
- Admin setup (ilk admin yoksa) — env: ADMIN_EMAIL + ADMIN_PASSWORD
- License key paste — Ed25519 imzalı JWT
- Company / project oluştur
- Welcome — vizyon + süre tahmini
- Mail domain — auto MX, M365 / Google / on-prem tespit
- M365 creds — Azure app registration (Mail.Send + Read.All)
- Websites — public domain auto-discovery
- Office name — primary site
- Firewall — perimeter ekle, VLAN scan
- Classify — VLAN scan'inde bulunanları kategorize et
- Categories — internal device kategorileri (built-in + custom)
- Anchors — per-category cihaz girişi
- Discover — auto-discovery progress
- Review — özet + onay
Her adım atlanabilir ve rezüme edilebilir. Wizard state localStorage + server-side hybrid — yarım bıraksanız bile sonra kaldığı yerden devam edersiniz.
AI'ı KULLANDIĞIMIZ yerler
| İş | Sıklık | Model |
|---|---|---|
| Bilinmeyen vendor parser üretimi | Vendor başına 1 kez (cache) | Sonnet |
| Cihaz fingerprint sınıflandırma | İlk bağlantıda 1 kez | Haiku |
| Olay açıklama (talebi) | On-demand | Haiku |
| Önceliklendirme özeti | Saatlik batch | Haiku |
| Posture danışmanlığı | Haftalık batch | Sonnet |
| Executive briefing | Haftalık (Pazartesi) | Haiku |
AI'ı KULLANMADIĞIMIZ yerler
- Her log satırı sınıflandırma → kural motoru
- Bilinen CVE eşleştirmesi → DB sorgusu
- Threshold alarmları → sayaç
- Risk skor hesaplama → deterministik formül
Güvenlik kuralı
- Credential ASLA AI'a gönderilmez
- Müşteri verisi → anonim fingerprint + sample
- Training kullanımı yok (Anthropic API contract)
- Air-gap mode: AI feature flag ile tamamen kapanır
- Müşteri başına aylık $5–15 hedef AI fatura
| Source | Refresh | Boyut | Kullanım |
|---|---|---|---|
| Tor Exit Nodes | 1 saat | ~2K IP | Anonim erişim girişimleri |
| FireHOL Level 1 | 1 saat | ~600 CIDR | Küratörlü düşük yanlış-pozitif blocklist |
| Spamhaus DROP | 1 saat | ~1K netblock | "Do not route or peer" CIDR'lar |
| USOM / TR-CERT | 6 saat | ~10K URL/IP | Türkiye ulusal kötücül liste |
| Abuse.ch FeodoTracker | 6 saat | ~500 IP | Aktif botnet C2: Emotet, Dridex, TrickBot, QakBot, IcedID |
Atomic swap mantığıyla refresh: bir feed başarısız olursa o turda önceki dataset korunur — diğerlerinden gelen IP/CIDR canlı kalmaya devam eder. Hiçbir feed çalışmazsa son başarılı snapshot kullanılır.
Eşleşme aksiyonları
- Risk multiplier
×2.0(otomatik) - Synthetic event:
KNOWN_BAD_IP - SOAR'a "auto:threat_intel" trigger (opsiyonel auto-block)
- Geo enrichment ile ülke + ISO-2 kod birleştirilir
Operator UI — Settings → Threat Intelligence
Yeni sayfa kaynak başına IP/CIDR sayısını, son sync zamanını, hata mesajlarını gösterir. "Refresh now" butonu (admin role) outbound network problem'i düzeltildikten sonra API restart olmadan tekrar dener.
Geo enrichment
MaxMind GeoLite2 embedded (yerel DB). İnternet aranmaz; ASN ve ülke bilgisi olay zenginleştirme için. Air-gap'ta da çalışır.
E-posta — 2 seçenek
- SMTP — generic, port 587 STARTTLS önerilen
- Microsoft 365 Graph — app-only OAuth, Mail.Send permission, sender mailbox
M365 Graph yolu basic-auth devre dışı tenant'larda da çalışır. Modern auth + zero password.
Web Push — mobil uyarı
- VAPID + Web Push API
- Service Worker (
public/sw.js) - Per-subscription
min_severity - iOS Safari 16.4+ home screen'e eklenirse çalışır
- Tarayıcı kapalı olsa da kritik event geldiğinde telefon bildirim alır
WhatsApp — kritik olay alarmı
- Meta Cloud API doğrudan — BSP middleman yok
- Ücretsiz tier ayda ~1000 service conversation karşılar
- Onaylı template (5 parametre):
severity · headline · risk · source · detail - System-user access token, AES-256-GCM ile şifreli saklanır
- Türkçe template (varsayılan), dil seçeneği isteğe bağlı
- Bağımsız risk eşiği —
whatsapp_min_risk_score(varsayılan 100): WhatsApp sadece kritik üzeri eşik gönderir, IT yöneticisi medium gürültü için telefonundan rahatsız olmaz - TR-friendly numara normalizasyonu:
+90 555 123 45 67,0532 987 65 43,90...hepsi canonical E.164'e dönüşür
Notification policy
{
"critical": ["email", "push", "whatsapp", "webhook"],
"high": ["email", "push"],
"medium": ["email"],
"whatsapp_min_risk_score": 100,
"quiet_hours": { "start": "22:00", "end": "07:00" }
}Slack / Teams / Webhook
Slack incoming webhook URL · Teams workflow connector · generic JSON POST. Plain-language template engine: BRUTE_FORCE_DETECTED → "Şüpheli giriş: ahmet@firma.com hesabına 8 başarısız deneme — 185.220.x.x".
Push subscription admin
Settings → Notification policy sayfasının altında Subscribed devices paneli — projeye kayıtlı tüm push endpoint'leri (browser / phone) label + son push zamanı + min severity + send/failed sayacı ile listelenir. Admin tek tıkla bir cihazın aboneliğini iptal edebilir (lost laptop, eski çalışan). İptal audit log'a düşer.
Operations Readiness — preflight
GET /operations/preflight production'a açmadan önce env, network ve güvenlik kontrollerini koşturur:
JWT_SECRET≥ 32 char, dev default değilCREDENTIAL_KEYAES-256-GCM key, setSQL_PASSWORDdev şifresi değilSHAMASHAI_CORS_ORIGINSset, wildcard yokALLOW_UNAUTH_INGEST= false- License durumu, agent token sayısı, push VAPID hazır mı
- SQL bağlantı, agent heartbeat, threat intel feed taze mi
Tüm kalemler yeşile dönmeden production'a açılmamalı. Sonuçlar Control Center posture skoruna da feed edilir.
Update Center
GET /operations/update-center — bağlı cloud release feed'inden mevcut sürümleri çeker, kurulu sürümü karşılaştırır, hangi release notes / hangi binary (ZIP + EXE) hangi hash ile imzalı olduğunu gösterir. Manuel "indir + tools/install-shamashai-release.ps1 çalıştır" flow'u — otomatik silent update yok (operasyonel kontrol amaçlı).
Support Diagnostics Bundle
GET /operations/support-bundle ile vendor / partner desteği için ZIP üretilir:
- Anonymize edilmiş env (secret değerler maskelenir)
- Son 200 satır agent log + api log
- Health snapshot · queue durumu · DB indeks istatistikleri
- License durumu · heartbeat geçmişi
- Schema versiyon hash · running migration listesi
Credential, AI prompt içeriği, customer event payload'u kasıtlı dışarda bırakılır. Tek dosya, mail ekine sığar.
Usage & Capacity
GET /operations/usage-capacity — lisans kullanımı (kaç cihaz, kaç site), ingest hacmi (EPS son 1h / 24h / 7d), event tablosu boyutu, retention'a göre kalan disk öngörüsü. Lisans yenileme / boyut artırma kararları için sayısal temel.
Data Protection — Backup / Restore
POST /projects/:id/export projenin tüm konfigürasyonunu (devices, categories, sites, alert rules, networks, edges) tek bir JSON snapshot'a yazar. POST /projects/import snapshot'ı geri yükler (opsiyonel rename). Snapshot tek dosya, customer kontrol eder, dış servise yollanmaz. Event/log dahil değildir (boyut + KVKK gereği) — yapılandırma backup'tır, telemetri backup'ı değil.
Retention
PUT /projects/:id/retention ile per-project event retention (default 90 gün) ayarlanır. Gece job: DELETE FROM events WHERE timestamp < NOW - retention_days. audit_log + soar_actions retention'sızdır (append-only kanıt). Retention değişikliği audit log'a yazılır.
Sentetik Demo Dataset — 30 saniyede yaşayan ağ
Settings → Operations readiness sayfasında "Seed demo data" butonu. Boş bir kuruluma 6 sentetik cihaz (Fortigate, 2 DC, ESXi, Veeam, Cisco AP) + N günlük canonical event akar. Prospektif toplantısının ilk 30 saniyesinde "yaşayan ağ" gösterimi için.
- Olaylar gerçek
BASE_SCORESharitasından çekilir — risk skoru, alarm motoru, MITRE chip'leri sahte event'ler için de tam çalışır - Şüpheli source IP'ler cluster'lanır → demo dashboard'da brute-force pattern + threat-intel hit + ATT&CK chip'leri görünür
- İdempotent — aynı butona tekrar basmak cihazları çoğaltmaz, sadece olay ekler
- "Remove demo data" kardeş butonu sadece
demo:synthetictag'li satırları siler — gerçek cihazlara dokunmaz
Geliştirici Dokümantasyonu — panelden
Settings → Support Diagnostics → Developer documentation paneli iki referans dokümanını doğrudan tarayıcıda açar (API tarafından whitelist-served, başka repo dosyası açığa çıkmaz):
- API Reference (~2700 satır markdown) — ~140 endpoint, domain başına gruplandırılmış (Auth, Projects, Devices, Events, Alerts, Notifications, Compliance, SOAR, License, Threat Intel, AI, Operations, Demo). Türkçe açıklama, gerçekçi örnek request/response payload'lar, rol gereksinimleri.
- IT Manager Kullanım Kılavuzu (~1400 satır markdown, Türkçe) — 21+ bölüm: günlük akış (sabah triaj / gün-içi yanıt / kritik alarm / haftalık / aylık), cihaz yönetimi, topoloji, coverage matrix, alert kuralları, bildirimler, SOAR, compliance, settings, threat intel, AI advisor, onboarding wizard, lisans, backup, sorun giderme.
Dokümanlar kurulum payload'unda gelir — internet olmadan da panelden okunur. POC ekibi müşteriyi yalnız bırakmadan kullanıma sokar.
Lisans dosyası
- Format: Ed25519 imzalı JWT (compact base64url)
- İçerik:
customer_id,max_devices,max_sites,features[],not_before,not_after - Public key API binary'sine gömülü — doğrulama offline yapılır
- Bootstrap'ta kabul edilir, sonradan da değiştirilebilir (eski sıfırlanır)
Cloud Pairing (opsiyonel)
Müşteri cloud activation code girdiğinde instance AfnTeknoloji cloud'una bağlanır. Günlük heartbeat şu özet verileri yollar: kurulu sürüm, license expiry, cihaz sayısı, site sayısı, son 24h event count, agent health. Olay payload'u, credential, müşteri içeriği yollanmaz.
Cloud admin paneli (cloud.shamashai.com.tr) bu özetlerle müşteri envanteri, lisans yenileme planı, support ticket geçmişi yönetir. Müşteri pairing'i tamamen kapatabilir (air-gap) — heartbeat yok, alarm yok, ürün çalışmaya devam eder.
Heartbeat schedule
SHAMASHAI_LICENSE_HEARTBEAT_ENABLEDdefault falseSHAMASHAI_LICENSE_HEARTBEAT_INTERVAL_MINUTESdefault 1440 (24h)- Manuel "run now" mevcut — pano üzerinden tetiklenir
- Cloud üzerinden yeniden imzalanmış lisans alır (renewal, capacity bump)
Capacity enforcement
Site oluşturma, device ekleme, external surface kayıt eklemek lisans limitini aşıyorsa409 license_capacity_exceeded döner; UI red mesaj gösterir, sales'e mail atmak için tek tık yönlendirme. Geçici "30 günlük overage grace" yok — hard cap.
Mobile + ergonomi
- Mobile-responsive overhaul — tüm data table'lar küçük ekranda card listesine dönüşür (
MobileCardList). PWA install banner aktif. - Light theme toggle — Sun/Moon ikonlu, Header'da. Tailwind
darkMode: ['selector', '[data-theme="dark"]']. - Keyboard shortcuts — g+i (incidents), g+e (events), g+d (devices), g+s (settings) navigation. Mac/Win uyumlu.
- Saved views bar — herhangi bir liste sayfasında filtre kombinasyonu kaydedilebilir, paylaşılır.
- Custom dashboard builder — 10 widget için göster/gizle + sıralama, localStorage'da kalır.
- Filter chips — URL params'tan beslenen, X ile silinebilen aktif filtre rozeti.
- Türkçe sesli komut — Web Speech API ile "vakaları aç", "raporu indir" gibi voice navigation.
- Critical audio alert — Web Audio API beep; critical event çıkışında 1.2s, off-hours susturma.
Görselleştirme + raporlama
- Attack source map (
/overview/geo) — bloklanan saldırı kaynaklarının geo-IP haritası, son 30 gün, MaxMind GeoLite2 embedded DB. - Trends panel (
/overview/trends) — 30 günlük sparkline + severity donut + Top-N event_type bar. - Executive 1-page PDF (
/overview/briefing) — patrona haftalık 1 sayfa özet, TR/EN. - Attack path graph — Source → Edge → Internal → Target SVG diagram; incident sayfası içinde.
- NOC wall mode (
/wall) — TV full-screen, oto-refresh, posture + son 10 vaka + threat map. Operasyon merkezi ekranı için. - Vendor badge — 18 vendor için renkli chip (Fortinet kırmızı, Sophos yeşil, M365 mavi, vs.) — liste taramasını hızlandırır.
- Generic CSV export — Drop-in
GenericCsvButtontüm liste sayfalarında UTF-8 BOM ile.
Otomasyon + entegrasyon
- SMS channel — NetGSM + generic HTTP SMS provider;
/sms-channel/config+/sms-channel/test. WhatsApp'ın offline alternatifi. - SOAR Sophos XG — Sophos XG XML API üzerinden IP block. Wave 1'de yalnızca Fortigate vardı; şimdi 2 firewall vendor.
- Notification ack (mail / WhatsApp deep link) — HMAC-SHA256 imzalı, 72 saat TTL, replay-safe token.
/ack/:tokenpublic endpoint — 3 aksiyon: acknowledge / resolve / false_positive. - Maintenance pattern AI — son 8 hafta event'ini analiz eder, min 4 hafta aynı saat dilimi/cihaz/event_type kalıbını "öneri" olarak işaretler. Confidence (low/medium/high) + rationale döner.
- Bulk action toolbar — sabit alt çubuk, seçim sayacı + N aksiyon butonu.
useBulkSelectionhook ile her liste sayfası destekler. - Copy as cURL — endpoint URL'ini cURL komutuna çevirir, clipboard'a kopyalar. GET/POST/PATCH/DELETE + JSON body.
- Smart import presets — Lansweeper export · Active Directory CSV · Fortigate Address Objects · Generic IT envanter — header tanıyıp otomatik mapping.
KVKK + governance
- Audit log hash chain —
audit_log.prev_hash+row_hashkolonu eklendi. SHA-256 ile her satır öncekine bağlı,/audit/verifyendpoint zinciri doğrular. 5651 yasal arşiv için kanıt seviyesi. - Cloud-less mode toggle (
/cloudless/toggle) — admin tek tıkla tüm outbound'u kapatır: threat_intel + AI advisor + license heartbeat + pilot telemetry + WhatsApp devre dışı. "Biz hiçbir şey göndermiyoruz" satış argümanı netleşir. - Pilot fail-safe telemetry — opt-in (default disabled). Anonim heartbeat: instance_id + version + active_users + critical_open + license_state + posture_score. PII yok. AfnTeknoloji destek için.
- MSSP operator console — multi-tenant:
mssp_customers+mssp_heartbeatstabloları +/mssp/heartbeatpublic endpoint. Roll-up: posture · open incidents · active users · alarm silence days. AfnTeknoloji bayi ağı için tek pano.
Toplam yeni: 14 backend modülü · 19 yeni REST endpoint · 27 yeni frontend component · 1 yeni sayfa (/wall) · 2 yeni DB tablosu + 6 yeni kolon.
Pilot programına başvurun
2 haftalık ücretsiz discovery + 30 gün ücretsiz deneme + 3 ay %75 indirimli pilot + 1. yıl %30 indirim. 30 dakikalık bir görüşme yeterli.
