Salı 14:37, Bir Entegrasyon Talebi
IT müdürü toplantı odasına girdiğinde ekrandaki Jira ticket açıktı: "Yeni nesil Next-Gen Firewall cihazlarından (10 adet) ShamashAi'ya log gelmesi gerekiyor. Vendor X'in API dokümantasyonu ekte, öncelik: HIGH." Klasik SIEM dünyasında bu talep şu demekti: SIEM vendor'una destek talebi aç, 3-6 ay bekle, belki bir sonraki major release'de gelir, belki de "yeterli müşteri talebi yok" cevabını al. Ya da üçüncü taraf bir ETL aracı sat al, ayda 800 EUR lisans öde. ShamashAi Agent'ın Custom Connector SDK yaklaşımı bu süreci tersine çevirir: .NET 8 tabanlı, açık standartlara bağlı, müşteri ya da AfnTeknoloji pilot ekibi tarafından 1-3 günde teslim edilebilir bir mimari.
ShamashAi Agent Connector Mimarisi
ShamashAi Agent .NET 8 üzerine inşa edilmiş, modüler bir event collection daemon'udır. Çekirdek kodu (AfnTeknoloji tarafından imzalı DLL) değişmez; yeni vendor desteği eklemek için
Connectors-custom/ klasörüne yeni bir .NET assembly bırakırsınız, agent restart ettiğinde otomatik olarak Dependency Injection container'a register olur. Bu mimari iki kritik avantaj sağlar:
1.
Upgrade güvenliği: ShamashAi'nın core agent'ı güncellendiğinde custom connector'larınız bozulmaz; interface kontratı korunduğu sürece yan yana yaşarlar.
2.
Hız: Vendor'un REST API'si, syslog formatı, SNMP MIB'i veya WinRM endpoint'i hakkında bilginiz varsa, connector'ı siz yazabilir, pilot kapsamında AfnTeknoloji'den talep edebilir ya da AfnTeknoloji Marketplace'den (roadmap) indirebilirsiniz.
IConnector Interface Kontratı
Her custom connector
ShamashAi.Agent.Abstractions namespace'indeki
IConnector interface'ini implement eder:
csharp
using ShamashAi.Agent.Abstractions;
public interface IConnector
{
string Name { get; } // "NextGenFW Collector"
string Vendor { get; } // "VendorX"
string DeviceType { get; } // "firewall"
Task<bool> TestConnectionAsync(ConnectorConfig config, CancellationToken ct);
Task SubscribeAsync(ConnectorConfig config, Func<CanonicalEvent, Task> onEventReceived, CancellationToken ct);
}
CanonicalEvent ShamashAi'nın vendor-agnostik event şemasıdır:
csharp
public record CanonicalEvent
(
DateTimeOffset Timestamp,
string Source, // "192.168.1.254" (firewall IP)
string EventType, // "AUTH_FAIL_USER", "BRUTE_FORCE_DETECTED", "KNOWN_BAD_IP"
string? UserName,
string? SourceIp,
string? DestinationIp,
int? DestinationPort,
string? Action, // "blocked", "allowed"
Dictionary<string, object>? RawFields
);
Bu şema, farklı vendor'ların farklı field isimlendirmelerini (src_ip, source_address, remote_host) normalize eder. ShamashAi backend'de
dbo.events tablosuna yazılırken BRUTE_FORCE_DETECTED, BEHAVIORAL_ANOMALY gibi event_type'lar correlation engine'e doğrudan beslenir.
Örnek 1: REST API Tabanlı Firewall Connector
VendorX Next-Gen Firewall,
/api/v2/events endpoint'inde JSON formatında son 5 dakikadaki olayları döner:
{
"events": [
{
"ts": "2026-09-11T08:10:22Z",
"action": "deny",
"src": "203.0.113.45",
"dst": "10.20.30.40",
"dport": 3389,
"user": null,
"reason": "GeoIP block"
}
]
}
Custom connector implementasyonu:
csharp
using System.Net.Http.Json;
using ShamashAi.Agent.Abstractions;
namespace ShamashAi.Connectors.Custom;
public class VendorXFirewallConnector : IConnector
{
public string Name => "VendorX NextGen Firewall";
public string Vendor => "VendorX";
public string DeviceType => "firewall";
private readonly HttpClient _httpClient;
public VendorXFirewallConnector(IHttpClientFactory factory)
{
_httpClient = factory.CreateClient("VendorXFirewall");
}
public async Task<bool> TestConnectionAsync(ConnectorConfig config, CancellationToken ct)
{
_httpClient.BaseAddress = new Uri(config.Endpoint);
_httpClient.DefaultRequestHeaders.Add("X-API-Key", config.ApiKey);
var response = await _httpClient.GetAsync("/api/v2/health", ct);
return response.IsSuccessStatusCode;
}
public async Task SubscribeAsync(ConnectorConfig config, Func<CanonicalEvent, Task> onEventReceived, CancellationToken ct)
{
_httpClient.BaseAddress = new Uri(config.Endpoint);
_httpClient.DefaultRequestHeaders.Add("X-API-Key", config.ApiKey);
while (!ct.IsCancellationRequested)
{
var payload = await _httpClient.GetFromJsonAsync<VendorXEventResponse>("/api/v2/events?minutes=5", ct);
if (payload?.Events != null)
{
foreach (var raw in payload.Events)
{
var canonical = new CanonicalEvent
(
Timestamp: raw.Ts,
Source: config.DeviceIp,
EventType: raw.Action == "deny" ? "KNOWN_BAD_IP" : "FIREWALL_ALLOW",
UserName: raw.User,
SourceIp: raw.Src,
DestinationIp: raw.Dst,
DestinationPort: raw.Dport,
Action: raw.Action,
RawFields: new()
{
["reason"] = raw.Reason
}
);
await onEventReceived(canonical);
}
}
await Task.Delay(TimeSpan.FromMinutes(5), ct);
}
}
}
record VendorXEventResponse(VendorXEvent[] Events);
record VendorXEvent(DateTimeOffset Ts, string Action, string Src, string Dst, int Dport, string? User, string Reason);
Örnek 2: Syslog RFC5424 Tabanlı IDS Connector
Bazı vendor'lar (Cisco ASA, legacy IDS cihazları) syslog UDP/TCP stream gönderir. ShamashAi Agent syslog listener'ı built-in; custom connector sadece parse mantığını sağlar:
csharp
using System.Text.RegularExpressions;
using ShamashAi.Agent.Abstractions;
public class GenericSyslogIDSConnector : IConnector
{
public string Name => "Generic Syslog IDS";
public string Vendor => "Generic";
public string DeviceType => "ids";
private static readonly Regex _ciscoAsaRegex = new(
@"(?<timestamp>\w+ \d+ \d+:\d+:\d+) (?<host>[\w.-]+) %ASA-(?<severity>\d)-(?<code>\d+): (?<message>.*)",
RegexOptions.Compiled
);
public Task<bool> TestConnectionAsync(ConnectorConfig config, CancellationToken ct)
{
// Syslog için test: UDP port açık mı kontrolü (opsiyonel)
return Task.FromResult(true);
}
public Task SubscribeAsync(ConnectorConfig config, Func<CanonicalEvent, Task> onEventReceived, CancellationToken ct)
{
// ShamashAi Agent çekirdeği syslog stream'i dinler, raw satırı buraya gönderir
// (Bu örnekte basitleştirilmiş; gerçekte SyslogListener DI üzerinden gelir)
// Demo amaçlı: parse mantığı
return Task.CompletedTask;
}
public CanonicalEvent? ParseSyslogLine(string raw, string sourceIp)
{
var match = _ciscoAsaRegex.Match(raw);
if (!match.Success) return null;
var severity = int.Parse(match.Groups["severity"].Value);
var code = match.Groups["code"].Value;
var message = match.Groups["message"].Value;
// Örnek: %ASA-4-106023: Deny tcp src outside:203.0.113.55/52314 dst inside:10.1.1.5/22 by access-group
var eventType = severity <= 3 ? "FIREWALL_CRITICAL" : "FIREWALL_WARNING";
return new CanonicalEvent
(
Timestamp: DateTimeOffset.UtcNow, // Syslog timestamp parse edilir
Source: sourceIp,
EventType: eventType,
UserName: null,
SourceIp: null, // message içinden regex ile çekilebilir
DestinationIp: null,
DestinationPort: null,
Action: "logged",
RawFields: new() { ["syslog_code"] = code, ["syslog_message"] = message }
);
}
}
DI Registration ve Deployment
Custom connector assembly'sini
Connectors-custom/ShamashAi.Connectors.VendorX.dll olarak agent klasörüne bıraktığınızda, agent
Program.cs içindeki reflection tabanlı yükleyici otomatik register eder:
csharp
// ShamashAi.Agent/Program.cs (AfnTeknoloji tarafından teslim edilir)
var builder = Host.CreateApplicationBuilder(args);
// Built-in connectors
builder.Services.AddSingleton<IConnector, WindowsEventLogConnector>();
builder.Services.AddSingleton<IConnector, M365AuditConnector>();
// Custom connectors: Connectors-custom/*.dll scan
var customPath = Path.Combine(AppContext.BaseDirectory, "Connectors-custom");
if (Directory.Exists(customPath))
{
foreach (var dll in Directory.GetFiles(customPath, "*.dll"))
{
var asm = Assembly.LoadFrom(dll);
var connectorTypes = asm.GetTypes()
.Where(t => typeof(IConnector).IsAssignableFrom(t) && !t.IsAbstract);
foreach (var t in connectorTypes)
{
builder.Services.AddSingleton(typeof(IConnector), t);
}
}
}
var host = builder.Build();
await host.RunAsync();
Agent restart ettikten sonra
dbo.devices tablosunda yeni connector görünür; ShamashAi Web UI > Ayarlar > Cihazlar bölümünden "VendorX NextGen Firewall" seçerek endpoint, API key gibi
ConnectorConfig alanlarını doldurursunuz.
Event Akışı: Connector → Backend → Correlation
1.
Connector SubscribeAsync içinde CanonicalEvent üretir.
2.
Agent event'i HTTPS POST ile backend'e gönderir:
POST /agent/ingest-batch (JSON array).
3.
Backend event'i
dbo.events tablosuna yazar;
event_type değerine göre correlation engine tetiklenir:
-
AUTH_FAIL_USER event'i 10 dakikada 5+ kez gelirse →
BRUTE_FORCE_DETECTED oluşturulur,
dbo.incident_groups'a yazılır.
-
KNOWN_BAD_IP event'i gelirse → SOAR Engine
POST /soar/block endpoint'ini çağırır (firewall'a otomatik block komutu gönderir).
4.
Compliance modülü GET /compliance/evidence ile bu raw event'leri ISO 27001 Annex A.8.16 (izleme) ve KVKK Madde 12 (veri güvenliği) audit raporlarına dahil eder.
Pilot Kapsamında Custom Connector Teslimi
ShamashAi Pilot SOW (Statement of Work) belgesi standart olarak şunları kapsar:
- 30 gün pilot lisansı (100 cihaz, 10 kullanıcı)
- 1 adet özel vendor connector teslimi (eğer built-in connector'lar yetmezse)
- Test ortamında PoC (Proof of Concept): Vendor'ın test/staging API'sine bağlanma, örnek event'lerin ShamashAi'da görünmesi, correlation kuralının tetiklenmesi.
Custom connector teslim süreci:
1.
Vendor dokümantasyonu: API endpoint'leri, authentication (API key, OAuth2, mTLS), event şeması, rate limit bilgileri AfnTeknoloji'ye iletilir.
2.
Geliştirme: AfnTeknoloji .NET 8 connector'ı 1-3 iş gününde yazar;
IConnector interface'ini implement eder.
3.
Staging test: Müşteri test ortamında agent'a DLL eklenir, restart edilir, ShamashAi Web UI'da yeni connector görünür.
4.
Prodüksiyon: Başarılı pilot sonrası connector müşteriye teslim edilir; ShamashAi güncellemeleri bu connector'ı bozmaz.
ShamashAi dokümantasyonu pilot süreçlerinin detaylarını (SLA, destek kanalları, fiyatlandırma) pilot teklif aşamasında paylaşır; bu blog yazısında genel akışı özetledik.
Roadmap: Marketplace ve Önceden Hazır Connector'lar
AfnTeknoloji roadmap'inde 2027 Q1'de
ShamashAi Connector Marketplace planlanıyor:
- Palo Alto Networks: syslog + REST API (Traffic, Threat, WildFire logs)
- Cisco ASA: syslog CEF formatı, ACL deny events
- CrowdStrike Falcon: Streaming API (detections, behavioral IOAs)
- Microsoft Sentinel: webhook listener (Azure Monitor alert'leri ShamashAi'ya çekilir)
- FortiGate: FortiOS syslog + FortiAnalyzer REST API
Marketplace'den connector indirmek ücretsiz olacak (ShamashAi lisansına dahil); sadece built-in olmayan egzotik vendor'lar için "özel geliştirme" ücreti (günlük danışmanlık) uygulanabilir. Şu an (2026 Eylül) Marketplace henüz yayında değil; pilot sürecinde manuel DLL teslimatı yapılıyor.
Teknik Limitler ve Karşılaştırma
| Özellik | Klasik SIEM (Splunk/QRadar) | ShamashAi Custom Connector SDK |
|---------|------------------------------|--------------------------------|
| Yeni vendor desteği süresi | 3-6 ay (vendor roadmap'ine bağlı) | 1-3 gün (pilot kapsamında) |
| Ek maliyet | Vendor'a premium support ücreti | Pilot SOW'da 1 connector dahil |
| Kodu görebilme | Kapalı kaynak, API kısıtlı | .NET 8 açık interface, kaynak kodunu siz de yazabilirsiniz |
| Upgrade riski | Vendor major release ile connector bozulabilir | Interface kontratı korunduğu sürece bozulmaz |
Gerçek Dünya Senaryosu: Banka Şubesi Yeni Nesil Firewall
Bir banka şubesine 10 adet yeni nesil firewall cihazı yerleştiriliyor. Vendor'un SIEM entegrasyonu Splunk için var ama aylık 2000 EUR; QRadar için connector henüz yok. ShamashAi pilot kapsamında:
1.
Gün 1: Vendor'ın REST API dokümantasyonu (28 sayfa) incelenir; authentication OAuth2, event formatı JSON.
2.
Gün 2: AfnTeknoloji connector'ı yazar;
TestConnectionAsync OAuth2 token alır,
SubscribeAsync 5 dakikada bir
/api/v2/logs çeker.
3.
Gün 3: Staging ortamda test edilir; örnek 500 event ShamashAi'ya gelir,
KNOWN_BAD_IP event'leri correlation engine'de "Tehdit İstihbaratı" grubu altında görünür.
4.
Gün 7: Prodüksiyon agent'lara DLL dağıtılır; 10 cihazdan dakikada ~200 event toplanır.
Toplam maliyet: pilot dahil, ek ücret yok. Alternatif senaryoda Splunk Add-on için 2000 EUR/ay × 12 = 24000 EUR/yıl ödenirdi.
dbo.events Tablosunda Custom Connector Event'leri
Custom connector'dan gelen event'ler diğer tüm event'lerle aynı tabloya yazılır:
sql
SELECT TOP 100
event_id,
timestamp,
source, -- '192.168.50.10' (VendorX firewall IP)
event_type, -- 'KNOWN_BAD_IP'
source_ip, -- '203.0.113.45'
destination_ip,
action, -- 'blocked'
raw_fields -- JSON: {"reason": "GeoIP block", "vendor": "VendorX"}
FROM dbo.events
WHERE source = '192.168.50.10'
AND timestamp >= DATEADD(hour, -1, GETUTCDATE())
ORDER BY timestamp DESC;
Bu event'ler üzerinde ShamashAi SOAR Engine otomatik aksiyon alabilir:
csharp
// POST /soar/block endpoint'i custom connector event'ine tepki verir
{
"event_id": "evt_20260911_081525_abc123",
"action": "block_ip",
"target_ip": "203.0.113.45",
"duration_minutes": 60,
"reason": "KNOWN_BAD_IP detected by VendorX firewall"
}
SOAR Engine
dbo.soar_actions tablosuna bu aksiyonu kaydeder; eğer firewall'ın REST API'si block desteği veriyorsa (yani connector
IBlockableDevice interface'ini de implement ediyorsa), agent firewall'a otomatik block komutu gönderir.
Limitler ve Dürüst Notlar
- Connector geliştirme .NET 8 bilgisi gerektirir: Kendi connector'ınızı yazmak istiyorsanız C# async/await, HttpClient, dependency injection kavramlarına aşina olmalısınız. AfnTeknoloji pilot kapsamında bunu üstleniyor; eğer siz yazarsanız AfnTeknoloji code review yapar.
- Rate limit sorumluluğu müşteride: Vendor API'sinin rate limit'i (ör. dakikada 60 request) varsa, connector içinde
Task.Delay ayarlaması doğru yapılmalı. ShamashAi bunu otomatik hesaplamıyor; PollingInterval config parametresini manuel ayarlarsınız.
- Syslog parse regex kırılgandır: Vendor syslog formatını değiştirirse (ör. Cisco ASA major upgrade) regex güncellenmeli. ShamashAi built-in connector'ları AfnTeknoloji güncelliyor; custom connector'lar için müşteri ya da pilot destek kapsamı geçerli.
- Event volume hesaplaması pilot öncesi yapılmalı: VendorX firewall dakikada 500 event üretiyorsa, 10 cihaz × 500 = 5000 event/dakika = 216 milyon event/ay. ShamashAi lisansı cihaz sayısına göre; event volume SQL Server disk planlamasını etkiler (dokümantasyonda 1 milyon event ~500 MB tahmin edilir).
- Marketplace henüz yok: 2027 Q1'e kadar connector'lar manuel DLL teslimatı ile sağlanır; self-service indirme portalı roadmap'te.
ShamashAi Custom Connector SDK, orta ölçekli Türk firmalarına vendor bağımsızlığı kazandırır. Vendor'ınız SIEM entegrasyonunu desteklemiyor ya da pahalı Add-on satıyorsa, pilot kapsamında 1-3 günde çözüm teslim edilir. .NET 8 tabanlı açık mimari sayesinde upgrade güvenliği sağlanır; core agent güncellenirken custom connector'larınız bozulmaz.
Pilot programı 30 gün ücretsiz: shamashai.com.tr/iletisim