Security & Compliance

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.

AES-256-GCM at rest
Ed25519 imzalı lisans
TOTP MFA + policy
OIDC SSO
ISO 27001 + KVKK

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

KonuDetay
AlgoritmaJWT HS256 · JWT_SECRET min 32 char
Şifrescrypt (N=16384, r=8, p=1)
CookieHttpOnly · SameSite=Lax · Secure (prod)
TTL7 gün default · jti session row ile revocable
Bootstrapİlk admin env ADMIN_EMAIL + ADMIN_PASSWORD

3 rol RBAC

RolYetki
adminHer şey: users, license, retention, settings, delete
analystOlay triage, incident kapatma, SOAR block + quarantine, alert rule yazma
viewerSadece 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/callback endpoint'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_at
  • revokeUserSession(userId, jti) — tek session
  • revokeUserSessions(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
TabloRetentionNotlar
eventsDefault 90 günPer-project ayarlanabilir projects.retention_days
reachability_logsAyrı (default 30 gün)Health check'ler — event'leri kirletmez
audit_logSonsuzAppend-only · forensics için retention'sız
soar_actionsSonsuzAppend-only · kanıt
maintenance_windowsSonsuzGeçmiş window'lar saklı
5651 yasal arşiv2 yılv1.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.

Compliance
Compliance · evidence-mapped reports

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

  1. Yetkisiz erişim önleme
  2. Log tutma
  3. Retention
  4. Sızma testi kanıtı
  5. İhlal bildirimi
  6. 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
Audit log
Audit log · who changed what, when

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.set
  • target_type, target_id, target_name
  • detail — 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 endpointGET /audit/verify tü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:

JWT_SECRET
Set ve ≥ 32 karakter olmalı
CREDENTIAL_KEY
Set olmalı (32-byte hex, AES-256-GCM)
SQL_PASSWORD
Set ve dev şifresi olmamalı
SHAMASHAI_CORS_ORIGINS
Listele, wildcard yasak
ALLOW_UNAUTH_INGEST
false zorunlu (production)
SQL_TRUST_SERVER_CERTIFICATE
true ise warning loglanır

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:synthetic tag'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/toggle ile tüm dış servisleri tek tıkla kapatır: threat_intel + AI advisor + license heartbeat + pilot telemetry + WhatsApp. /cloudless/status hangi 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.