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."

Üst KPI sıraları
- High pressure — posture skorunun rengi ve özet hikayesi.
- Active incidents — open + acknowledged + investigating toplamı.
- Visibility gaps — sessiz cihazlar, log üretmeyenler, credential eksikleri.
- Agent health — heartbeat ve token kullanımı (offline/degraded/healthy).
- License — durum, kalan gün, kullanılan / max cihaz.
- Compliance — KVKK + ISO 27001 yüzde ortalaması.
Control filters + olay akışı
Yöneticinin pano açıldığında öncelikli görmek istediği olay türlerini yer imi olarak sabitler — Website SSL ≤ 90 gün, Domain renewal, M365 phishing/malware, Switch/AP down, High priority now. Tıklanan filtreye göre canlı event listesi altta render olur.
Action queue
Posture'ın düşmesine sebep olan kalemler tek tek aksiyon halinde sıralanır: "Review critical incidents", "Assign open incidents", "Close investigations", "Fix visibility gaps", "Stabilize agent health", "Check license status", "Improve compliance evidence". Tıklayarak ilgili sayfaya gidilir.
Üst aksiyon butonları
Briefing haftalık executive PDF üretir. 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.
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.
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 - Threat intel feed'lerinde (Tor, FireHOL, Spamhaus) eşleşme arar
- Geo enrichment ekler (country, ASN, org) — MaxMind GeoLite2 lokal
- Behavioral baseline varsa ekler (kullanıcının normal patterni)
- Hepsini Claude'a yollar, plain-language özet + önerilen aksiyonlar alır
- Credentials ASLA gönderilmez — sadece anonim metadata
- Aynı event_id için 5 dk cache
MITRE ATT&CK mapping
Eğer event MITRE ATT&CK technique'lerine bağlıysa (event.mitre[] array), her technique için attack_id, tactic, technique, confidence (high/medium/low), rationale ve attack.mitre.org dış linki gösterilir.
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.
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.

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ışı.

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.

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 | Inbound src_ip eşleşmesi |
| FireHOL Level 1 | 1 saat | ~600 CIDR | Aggressive blocklist |
| Spamhaus DROP | 1 saat | ~1K netblock | Bulk netblocks |
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
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
Notification policy
{
"critical": ["email", "push", "webhook"],
"high": ["email", "push"],
"medium": ["email"],
"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".
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.
