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
- Built-in template’lerle yetinmek: Telekom-spesifik tehdit (BGP, RADIUS, DNS tunneling) generic SIEM rule’larında yok. Custom KQL şart.
- 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.
- 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.