Detailed close-up of Dell EMC server logo on hardware grill with shallow focus and textured patterns.
Azure

Siirt merkezli bölgesel sabit hat + fiber operatörü (~~~~14.000 abone, B2B + B2C), siber güvenlik için Microsoft Sentinel’i 7 ayda kurdu. Multi-tenant (kurumsal müşterilerine MSSP hizmeti veriyor). Bu yazı sahadaki teknik derinlik notları.

Sentinel Nedir?

Cloud-native SIEM + SOAR. Azure Monitor Log Analytics workspace üzerinde çalışır. Geleneksel SIEM (Splunk, QRadar) karşısında: serverless, pay-as-you-go, AI built-in, M365 native entegrasyon.

Mimari (Multi-Tenant)

[Telekom Sentinel - Master Workspace]
  Region: Northeurope
  Daily ingest: ~~~~280 GB
  
  Connector:
    - Operatör BSS/OSS log
    - Network firewall (Cisco, Fortinet)
    - DNS server log
    - DHCP log
    - Çağrı merkezi log
    - M365 (operator iç kullanım)
    - Defender XDR
    - Azure Activity
    
[B2B Müşteri Workspace #1] (CloudSpark olarak yönetiyoruz)
  Region: Northeurope
  Daily ingest: ~~120 GB
  Connector:
    - Müşteri tenant'ı M365
    - Müşteri firewall
    
[B2B Müşteri Workspace #2]
  ...
  
[Lighthouse]
  - Tek pane of glass tüm workspace
  - SOC analist tüm tenant'a tek noktadan bakar

Workspace Tasarım Kararları

Konu Karar Sebep
Tek workspace mi, çoklu mu? Müşteri başına ayrı workspace Veri izolasyonu, faturalama ayrımı
Region Hepsi Northeurope TR’ye en yakın low latency
Retention (interactive) 90 gün Operasyonel ihtiyaç
Retention (archive) 2 yıl (compliance) Düzenleme, ucuz tier
Auxiliary tier kullanımı NSG flow log için $0.05/GB (Analytics $4)
Commitment tier 200 GB/gün %~~25 indirim

MITRE ATT&CK Detection Coverage

Aşama 1: Built-in template aktive et (~~280)
Aşama 2: Coverage matrix oluştur (Sentinel built-in)
Aşama 3: Boşluk olan tactic'lere custom rule yaz
Tactic Coverage (%) Örnek custom rule
Initial Access 92 BGP hijack attempt (telekom-spesifik)
Execution 78 Tier-1 router config yetkisiz değişiklik
Persistence 72 Yeni admin user firewall’da
Privilege Escalation 68 BGP route announce yetkisiz
Defense Evasion 62 Log silme/audit kapatma
Credential Access 85 RADIUS brute force
Discovery 72 Subnet scanning attempt
Lateral Movement 78 Tier-1 → Tier-2 router unusual traffic
Collection 65 SCP/SFTP eşkıyalı dataset transfer
Exfiltration 88 DNS tunneling pattern
Impact 72 BGP withdrawal, DDoS pattern

Custom KQL — Telekom Spesifik Örnekler

1. RADIUS Brute Force

RadiusAuth_CL
| where TimeGenerated > ago(15m)
| where Status == "Failed"
| summarize 
    FailCount = count(),
    DistinctUsers = dcount(Username),
    DistinctNAS = dcount(NASIdentifier)
   by IpAddress, bin(TimeGenerated, 5m)
| where FailCount > 50 and DistinctUsers > 10
| extend Severity = "High",
         AlertName = strcat("RADIUS brute force from ", IpAddress)

2. BGP Route Anomali

BgpUpdate_CL
| where TimeGenerated > ago(1h)
| where MessageType == "Announce"
| join kind=leftouter (
    BgpUpdate_CL
    | where TimeGenerated between (ago(7d) .. ago(1h))
    | summarize NormalAnnounceCount = count() by Prefix, AsPath
) on Prefix
| where isnull(NormalAnnounceCount)  // hiç görmediğimiz prefix
| where Prefix !startswith "192.168" 
       and Prefix !startswith "10."
| extend Severity = "Critical",
         AlertName = strcat("New BGP announce: ", Prefix, " path: ", AsPath)

3. DNS Tunneling Tespit

DnsQuery_CL
| where TimeGenerated > ago(30m)
| extend QueryLength = strlen(QueryName)
| where QueryLength > 50  // unusual long query
| summarize 
    QueryCount = count(),
    AvgLen = avg(QueryLength),
    UniqueQueries = dcount(QueryName)
   by ClientIp, ParentDomain = tostring(split(QueryName, ".")[-2])
| where QueryCount > 100 and AvgLen > 60 and UniqueQueries > 50
| extend Severity = "High",
         AlertName = strcat("Possible DNS tunneling: ", ClientIp, " → ", ParentDomain)

4. Subscriber SIM Hijack Pattern

SubscriberAuth_CL
| where TimeGenerated > ago(1h)
| where AuthEvent == "SIM_REPLACE" or AuthEvent == "DEVICE_CHANGE"
| join kind=inner (
    SubscriberAuth_CL
    | where TimeGenerated > ago(15m)
    | where AuthEvent == "MOBILE_BANKING_LOGIN"
) on SubscriberId
| where TimeGenerated1 > TimeGenerated  // SIM change sonrası bankacılık login
| project SubscriberId, SimChangeTime = TimeGenerated, BankLoginTime = TimeGenerated1
| extend Severity = "Critical",
         AlertName = "Possible SIM hijack + banking access"

Watchlist (Reference Data)

Watchlist İçerik
VIP Subscribers ~~280 kritik kurumsal abone (öncelikli alert)
Critical Infra IPs ~~120 BGP router, DNS, RADIUS
Threat Intel IOCs ~~12K malicious IP/domain (TI feed)
Internal Asset Inventory ~~3.500 device + sahibi

SOAR Playbook Örneği

Playbook: Subscriber Suspicious Activity
Trigger: Sentinel incident "Possible SIM hijack"
Steps:
  1. Get subscriber from incident
  2. Check VIP watchlist
  3. If VIP → Page senior analyst (PagerDuty)
  4. Auto-block subscriber's mobile banking IP at WAF
  5. Send SMS to subscriber: "Şüpheli aktivite, çağrı merkezi 444..."
  6. Auto-create ServiceNow ticket
  7. Comment incident with all actions

Sonuçlar (7 Ay)

Metrik Önce Sonra
MTTD ~~~~5 gün ~~~~28 dk
MTTR ~~~~2 gün ~~~~6 saat
Aylık incident ~~~~140 (auto + manuel)
Auto-resolved ~~~~%~~52 (playbook)
BGP anomali tespiti 3 gerçek tespit (false alarm önlendi)
SIM hijack tespit 2 gerçek tespit (banka kaybı önlendi)

Sahada Düşülen Üç Tuzak

  1. Built-in template’lerle yetinmek: Telekom-spesifik tehdit (BGP, RADIUS, DNS tunneling) generic SIEM rule’larında yok. Custom KQL şart.
  2. Tüm log Analytics tier’a göndermek: NSG/firewall flow log büyük + sorgulama az → Auxiliary tier ($0.05/GB). Fatura yarıya iner.
  3. SOAR otomasyonu olmadan SIEM kurmak: Aylık 5K alert + 8 analyst = burnout + missed incident. Playbook auto-resolve %~~50+ olmalı.

CloudSpark olarak Microsoft Sentinel multi-tenant mimarisi, MITRE ATT&CK detection coverage, sektör-spesifik custom KQL geliştirme, watchlist + threat intelligence ve SOAR playbook tasarımı için danışmanlık veriyoruz.

🇹🇷 Türkçe🇬🇧 English🇩🇪 Deutsch🇫🇷 Français🇸🇦 العربية🇷🇺 Русский🇪🇸 Español