Veri sizinle kalır. Kanıtla.
ShamashAi'ın güvenlik mimarisi — at-rest + in-transit encryption, RBAC + MFA, append-only audit, KVKK Madde 12 ve ISO 27001:2022 Annex A evidence-mapped raporlama. Production hardening kontrol listesi ve air-gap kurulum.
AT-REST
- · Cihaz credentials → AES-256-GCM (CREDENTIAL_KEY)
- · API keys → trustHost ile sınırlı
- · Web push subscription → GCM AEAD
- · Agent token → SHA-256 hash (plaintext DB'de yok)
- · Şifre → scrypt (N=16384, r=8, p=1)
- · License key → Ed25519 imzalı JWT
- · MFA secret → şifrelenir (CREDENTIAL_KEY)
IN-TRANSIT
- · Web ↔ API → HTTPS (reverse proxy) · TLS 1.2+
- · Agent ↔ API → HTTPS · Bearer token
- · SQL ↔ API → TLS opt · trustServerCert env
- · Fortigate ↔ API → HTTPS REST · trusted host
- · vCenter ↔ Agent → HTTPS REST · InsecureTls flag
- · Helmet middleware → CSP, X-Frame-Options
- · CORS → SHAMASHAI_CORS_ORIGINS, wildcard yasak
Kullanıcı authn
| Konu | Detay |
|---|---|
| Algoritma | JWT HS256 · JWT_SECRET min 32 char |
| Şifre | scrypt (N=16384, r=8, p=1) |
| Cookie | HttpOnly · SameSite=Lax · Secure (prod) |
| TTL | 7 gün default · jti session row ile revocable |
| Bootstrap | İlk admin env ADMIN_EMAIL + ADMIN_PASSWORD |
3 rol RBAC
| Rol | Yetki |
|---|---|
| admin | Her şey: users, license, retention, settings, delete |
| analyst | Olay triage, incident kapatma, SOAR block + quarantine, alert rule yazma |
| viewer | Sadece görüntüleme · export · raporlama |
Project-scoped membership: aynı kullanıcı farklı projelerde farklı role sahip olabilir. Backend her endpoint'te effectiveProjectRole(userRole, membershipRole) minimum'unu enforce eder. Analist rolündeki kullanıcılar için ek olarak per-category permissions ile "sadece firewall + switch görsün, identity ve database görmesin" gibi daraltma yapılabilir.
OIDC SSO (kurumsal kimlik sağlayıcı)
- Standart OpenID Connect Authorization Code flow + PKCE
- Issuer, client_id ve client_secret env üzerinden tanımlanır
- Login sayfası SSO aktifken "Sign in with company SSO" butonu gösterir; local password formu hâlâ kalır (admin fallback için)
- OIDC profile claim'lerinden user otomatik provision'lanır (email, name); ilk girişte default role admin tarafından atanır
/auth/oidc/status,/auth/oidc/start,/auth/oidc/callbackendpoint'leri- Entra ID, Okta, Keycloak, Authelia ve standart OIDC sağlayıcılarla test edildi
OIDC, MFA'yı identity provider'a delege etmenin temiz yolu — IT yöneticisi tek MFA policy'yi Entra/Okta'da yönetir, ShamashAi local MFA'sını off tutar.
MFA policy enforcement
Admin panelden MFA zorunluluğu üç modda yönetilir:
off— MFA opsiyonel (default değil — production'da önerilmez)admins— sadece admin rolündekilere zorunlu (default)all— viewer dahil tüm kullanıcılar zorunlu
Policy değişikliği audit log'a düşer. MFA zorunlu olduğunda kullanıcı bir sonraki login'de TOTP enrollment'a yönlendirilir; tamamlamadan iç sayfalara erişemez.
MFA · TOTP + QR code
beginUserMfaSetup→ 32-char secret + otpauth_uri (QR code üretilir)verifyUserMfaSetup→ 6-digit kod doğrulama (TOTP, SHA-1, 30s window)disableUserMfa→ kullanıcı kendi devre dışı bırakır (mevcut TOTP gerekli)resetUserMfaAdmin→ admin başkasının MFA'sını sıfırlar (audit log'a gider)- Login flow: password OK → MFA enabled ise 6-digit kod sor → session start
Session yönetimi
listUserSessions(userId, limit=20)— IP, user agent, last_used, expires_atrevokeUserSession(userId, jti)— tek sessionrevokeUserSessions(userId, exceptJti?)— diğer tümü
Agent token
- Format:
shamashai_agent_<base64> - Stored: SHA-256 hash (plaintext DB'de yok)
- Per-project scope
- Plaintext bir kez gösterilir (oluşturma sırasında), sonra geri alınamaz
- Revocable, last_used_at tracked
| Tablo | Retention | Notlar |
|---|---|---|
| events | Default 90 gün | Per-project ayarlanabilir projects.retention_days |
| reachability_logs | Ayrı (default 30 gün) | Health check'ler — event'leri kirletmez |
| audit_log | Sonsuz | Append-only · forensics için retention'sız |
| soar_actions | Sonsuz | Append-only · kanıt |
| maintenance_windows | Sonsuz | Geçmiş window'lar saklı |
| 5651 yasal arşiv | 2 yıl | v1.5 yol haritasında (S3/MinIO) |
Gece job: DELETE FROM events WHERE timestamp < NOW - retention_days. Manuel run + stats endpoint ile takip edilir. Retention değişikliği audit_log'a yazılır.

ISO/IEC 27001:2022 Annex A — 19 control
- Organizational (A.5) — Threat intelligence, Acceptable use, Incident management, Event assessment, Incident response, Evidence collection
- People (A.6) — Awareness/training
- Technological (A.8) — Privileged access (A.8.2), Secure auth (A.8.5), Malware protection (A.8.7), Vulnerability mgmt (A.8.8), Configuration (A.8.9), Information deletion (A.8.10), Data leakage (A.8.12), Logging (A.8.15), Monitoring (A.8.16), Clock sync (A.8.17), Network security (A.8.20), Web filtering (A.8.23)
KVKK Madde 12 — 6 alt madde
- Yetkisiz erişim önleme
- Log tutma
- Retention
- Sızma testi kanıtı
- İhlal bildirimi
- Denetim
Status hesaplaması
Her control için min_evidence_count threshold'u var. Olay sayısı bu sayının üzerindeyse Covered; var ama altındaysa Partial; hiç yoksa No evidence. Drilldown ile kanıt olayları liste halinde görünür — auditor'a sunulabilir.
Export
- Print/PDF — clean stylesheet ile tarayıcı print → "Save as PDF"
- CSV — control × status matrisi
- Evidence pack — JSON + Markdown + HTML, ZIP indirilebilir

Her mutating action dbo.audit_log tablosuna append-only yazılır:
timestamp,actor(kullanıcı email)action— örn.device.create,device.delete,credential.update,soar.block,license.settarget_type,target_id,target_namedetail— JSON (hangi alanlar değişti)ip— caller IP
Project silinse bile audit_log kayıtları kalır (forensics). Filtreler: action prefix, target. Last 500 entry default, CSV export mevcut.
Hash chain · 5651-ready (Wave 2 · Haz 2026)
Her audit_log satırı, önceki satırın SHA-256 hash'iyle bağlanır: row_hash = SHA-256(prev_hash + row_payload). Bu yapı sayesinde:
- Tamper detection — geriye dönük müdahale = chain kırılması = anında tespit.
- 5651 yasal arşiv kanıt seviyesi — log entegritesi kriptografik olarak kanıtlanır.
- Verification endpoint —
GET /audit/verifytüm zinciri doğrular, ilk kırılmayı raporlar. - Idempotent migration — eski log'lar boot anında geriye dönük hash'lenir.
S3/MinIO\'ya offload edilen 5651 arşivi için bu zincir tek başına yeterli kanıttır; harici notary servisine gerek yok.
Boot sırasında validateRuntimeConfig() aşağıdaki kontrolleri yapar; uyumsuz prod konfigürasyonu kabul edilmez:
Operations sayfası GET /operations/preflight tüm kontrolü tek ekranda gösterir — production'a açmadan tüm kalemler yeşil olmalı.
- Telemetry yok — phone-home opsiyonel (sadece v2 lisans heartbeat)
- Müşteri verisi AI training'e gitmez (Anthropic API contract)
- AI'a credential ASLA gönderilmez — sadece anonim fingerprint + sample
- AI çıktı dili müşteri tercihi — Türkçe varsayılan, EN seçeneği; sample log'lar AI'a gönderilmeden önce
redactSensitiveText()ile maskelenir - WhatsApp access token AES-256-GCM ile şifreli saklanır; audit log'a maskeli yazılır
- Sentetik demo dataset — production verisi ile izole;
demo:synthetictag'iyle ayrılır, "Remove demo data" sadece bu tag'li satırları temizler, gerçek olaylara dokunmaz - Air-gap kurulum tüm outbound'u kapatabilir
- Cloud-less mode toggle (Wave 2) — admin
/cloudless/toggleile tüm dış servisleri tek tıkla kapatır: threat_intel + AI advisor + license heartbeat + pilot telemetry + WhatsApp./cloudless/statushangi modüllerin offline olduğunu döner. "Biz hiçbir şey göndermiyoruz" satış argümanı. - Backup/restore — JSON snapshot, tek dosya, müşteri kontrol eder
- Ayrı tenant per kurulum — multi-tenant kodu var ama saklı; tek-firma deneyimi öncelikli
Güvenlik soru-cevap için iletişime geçin
CISO'nuzun sorularına detaylı cevap verecek security questionnaire'imiz hazır. Pilot SOW kapsamında pen-test sonucu paylaşılır.
