Tüm yazılar
·9 dk okuma·ShamashAi Ekibi

ShamashAi Topology: 9 edge tipiyle cihaz ilişkilerini canlı graf olarak modeller

ShamashAi Topology modülü, ağdaki cihazlar arası ilişkileri network/identity/tunnel/compute/security/storage/app/mail/web olmak üzere 9 typed edge kategorisinde keşfeder ve device_edges tablosunda audit edilebilir graf olarak sunar. Statik diyagramların gösteremediği protokol-seviye bağlantıları gerçek zamanlı izler.

22:18'de bir brute-force alarmı, ama kim kime bağlanıyor?

Cuma akşamı 22:18'de ShamashAi BRUTE_FORCE_DETECTED event'i tetikledi. dbo.events tablosuna düşen kayıt: 192.168.10.45 IP'sinden dc01.santral.local domain controller'a son 3 dakikada 187 başarısız NTLM denemesi. Ekip hızla dbo.devices sorgusunu açıyor, ama 192.168.10.45 bilinen bir asset değil — DHCP loglarda da yok. Oysa aynı anda Palo Alto firewall log'unda aynı IP, VPN gateway'e IPsec tunnel kurmuş ve içeriden erişim alıyor. Sorular çoğalıyor: Bu IP hangi cihazdan NAT'lanıyor? VPN'e kimlik doğrulaması hangi LDAP bind'la yapıldı? Domain controller ile arasında hangi switch port'ları var? Grafana panelindeki statik topoloji diyagramı sadece fiziksel VLAN'ları gösteriyor; saldırı anında hangi protokol katmanlarından geçtiğini, hangi güvenlik kontrol noktalarını atladığını anlamak için birden fazla ekran, birden fazla SIEM sorgusu gerekiyor. Bu senaryo, geleneksel SIEM ve statik topoloji çizimlerinin en büyük kör noktasını açığa çıkarır: cihazlar arası ilişkiler tiplenemediğinde, her olay analizi manuel korelasyon haline döner. ShamashAi Topology modülü bu problemi, ağdaki tüm cihaz çiftleri arasındaki bağlantıları 9 typed edge kategorisi altında keşfederek ve dbo.device_edges tablosunda audit edilebilir graf olarak sunarak çözer. Yazının geri kalanında bu 9 edge tipinin nasıl keşfedildiğini, hangi connector'ların hangi kaynaklardan beslediğini ve incident analiz sırasında nasıl sorgulandığını teknik detaylarıyla inceleyeceğiz.

9 edge tipi: neden kategorizasyon zorunlu?

Bir IP'nin başka bir IP'ye "bağlandığını" söylemek, analist için yeterli değildir. Bağlantı layer-2 switch port üzerinden mi, yoksa layer-3 WAN link üzerinden mi? Kimlik doğrulaması Active Directory member ilişkisi üzerinden mi, yoksa LDAP bind çağrısı üzerinden mi? ShamashAi bu soruları yanıtlamak için her edge'e edge_type atıfı verir ve connector'lar farklı kaynaklardan farklı tipleri besler. Dokümantasyonda tanımlanan 9 kategori:

1. network

Fiziksel veya sanal ağ katmanı bağlantıları:
  • wan_uplink: Router veya SD-WAN edge'lerinin ISP/MPLS provider'a bağlantısı.
  • switch_port: LLDP, CDP veya SNMP sorgularıyla keşfedilen switch-port ve port-device mapping.
  • lldp_neighbor: LLDP protokolü üzerinden ilan edilen komşuluk ilişkileri (örneğin iki switch arası trunk).
ShamashAi'nin SNMP Connector ve LLDP Parser bileşenleri, yönetilen switch'lerden SNMP trap'lerini ve LLDP TLV'lerini alır, dbo.device_edges tablosuna edge_type='switch_port' ve metadata={'port':'Gi0/12','vlan':100} olarak yazar.

2. identity

Kimlik doğrulama ve yetkilendirme ilişkileri:
  • ad_member: Bir cihazın Active Directory domain'ine join olması (computer object).
  • ldap_bind: Uygulamaların veya cihazların LDAP/LDAPS üzerinden DC'ye bind çağrısı.
Windows Event ID 4741 (computer account created) ve Event ID 4624 Logon Type 3 (network logon) kayıtları, ShamashAi'nin .NET 8 Agent'ı tarafından toplanır ve dbo.events üzerinden edge_type='ad_member' olarak device_edges'e yansıtılır.

3. tunnel

Şifreli veya overlay tünel bağlantıları:
  • ipsec: Site-to-site VPN tüneli.
  • ssl_vpn: Remote access SSL VPN oturumu.
  • mpls: MPLS label-switched path (ISP tarafından sağlanıyorsa BGP session loglarda).
  • expressroute: Azure ExpressRoute veya AWS Direct Connect gibi dedicated WAN.
Palo Alto, Fortigate, pfSense gibi firewall'ların syslog veya API'lerinden gelen VPN phase-2 up mesajları, ShamashAi Firewall Connector'ı tarafından parse edilir ve edge_type='ipsec', metadata={'peer_ip':'203.0.113.5','spi':'0xabcd1234'} olarak kaydedilir.

4. compute

Virtüalizasyon ve container orkestrasyon ilişkileri:
  • vmware_host: Bir VM'nin hangi ESXi host üzerinde çalıştığı.
  • k8s_node: Bir pod'un hangi Kubernetes worker node'unda schedule edildiği.
ShamashAi VMware Connector (vCenter REST API) ve Kubernetes Connector (API server /api/v1/pods endpoint) sürekli polling yapar, her VM veya pod için device_edges insert eder. Örnek metadata: {'cluster':'prod-k8s','namespace':'payment','node':'worker03'}.

5. security

Güvenlik kontrol noktası ilişkileri:
  • siem_log_source: Bir cihazın ShamashAi'ye syslog veya agent üzerinden log gönderdiği ilişki.
  • edr_managed: Bir endpoint'in EDR agent'ı tarafından yönetildiği ilişki.
ShamashAi .NET 8 Agent her cihaza kurulduğunda, kendini dbo.devices tablosuna kaydeder ve device_edges içine edge_type='siem_log_source', source_device_id=<agent_id>, target_device_id=<shamashai_server_id> satırı ekler. Bu, audit log için kritiktir: hangi cihazdan log akışı kesildi?

6. storage

Depolama ve veri akış ilişkileri:
  • nfs_mount / smb_share: Bir sunucunun hangi file server share'ine bağlı olduğu.
  • iscsi_lun: SAN storage LUN mapping.
ShamashAi dokümantasyonu bu kategoride yalnızca "storage" genel başlığını veriyor; spesifik sub-type'lar pilot kapsamında detaylandırılır. Ancak Windows Event ID 5140 (network share accessed) ve Linux /proc/mounts parse'ı üzerinden SMB/NFS edge'leri keşfedilebilir.

7. app / SaaS

Uygulama katmanı bağımlılıkları:
  • api_consumer: Bir uygulama sunucusunun başka bir API'ye sürekli HTTP/HTTPS çağrısı.
  • saas_integration: Microsoft 365, Salesforce, AWS gibi SaaS platformlarına OAuth/SAML üzerinden bağlantı.
ShamashAi M365 Connector (Graph API), Azure AD Sign-In Logs'dan M365_RISKY_SIGNIN event'lerini çeker ve aynı zamanda edge_type='saas_integration', metadata={'tenant_id':'...','app':'outlook.office365.com'} kaydı oluşturur.

8. mail / web

Mail routing ve web hosting ilişkileri:
  • mail_route: Bir mail sunucusunun hangi MX gateway üzerinden dış dünyaya mail gönderdiği.
  • web_hosted_at: Bir web uygulamasının hangi reverse proxy veya CDN arkasında olduğu.
  • waf_protected: Bir web sitesinin hangi WAF (Web Application Firewall) tarafından korunduğu.
Örneğin, ShamashAi Web Log Parser (IIS, Nginx access log), X-Forwarded-For header'larını ve upstream server IP'lerini parse ederek edge_type='web_hosted_at' edge'i oluşturur. WAF ilişkisi de Cloudflare veya F5 BIG-IP syslog'larından keşfedilir.

9. device_edges tablosu yapısı ve audit

Tüm bu edge'ler dbo.device_edges tablosunda şu şemada saklanır: sql CREATE TABLE dbo.device_edges ( edge_id BIGINT IDENTITY PRIMARY KEY, source_device_id INT NOT NULL, -- dbo.devices.device_id target_device_id INT NOT NULL, edge_type NVARCHAR(50) NOT NULL, -- 'switch_port', 'ad_member', 'ipsec', ... metadata NVARCHAR(MAX), -- JSON: port, VLAN, tunnel SPI, vb. discovered_at DATETIME2 NOT NULL DEFAULT GETUTCDATE(), last_seen DATETIME2 NOT NULL, status NVARCHAR(20) DEFAULT 'active', -- 'active', 'stale', 'removed' CONSTRAINT FK_source FOREIGN KEY (source_device_id) REFERENCES dbo.devices(device_id), CONSTRAINT FK_target FOREIGN KEY (target_device_id) REFERENCES dbo.devices(device_id) ); CREATE INDEX IX_edge_type ON dbo.device_edges(edge_type, status); Her edge audit edilebilir: discovered_at ilk keşif zamanı, last_seen son güncellenme zamanı. Eğer bir edge 7 gün boyunca yeniden görülmezse (örneğin VPN tüneli kapandı), background job status='stale' işaretler. Bu, incident retrospective analizinde kritik: saldırı anında hangi edge'ler aktifti?

Connector'lar edge'leri nasıl keşfeder?

ShamashAi Topology modülü pasif değildir; connector'lar sürekli çalışan Node.js Fastify mikroservislerdir ve her biri farklı kaynaklardan edge bilgisi toplar:

SNMP Connector → network edge'leri

javascript // ShamashAi Node.js Fastify SNMP Connector pseudo-code const snmp = require('net-snmp'); const session = snmp.createSession('192.168.1.1', 'public'); const oids = [ '1.0.8802.1.1.2.1.4.1.1.9', // LLDP remote system name '1.3.6.1.2.1.17.4.3.1.2' // Bridge port to MAC ]; session.get(oids, (error, varbinds) => { if (!error) { const remoteName = varbinds[0].value.toString(); // dbo.device_edges INSERT: db.query(` INSERT INTO dbo.device_edges (source_device_id, target_device_id, edge_type, metadata, last_seen) VALUES (@source, @target, 'lldp_neighbor', @meta, GETUTCDATE()) `, { source: localDeviceId, target: resolveDevice(remoteName), meta: JSON.stringify({port: 'Gi0/1'}) }); } });

Windows Event Connector → identity edge'leri

.NET 8 Agent, her domain-joined Windows cihazda Event ID 4624'ü dinler: csharp // ShamashAi .NET 8 Agent (C#) - Windows Event Watcher using System.Diagnostics.Eventing.Reader; var query = new EventLogQuery("Security", PathType.LogName, "*[System[(EventID=4624)]]"); var watcher = new EventLogWatcher(query); watcher.EventRecordWritten += (s, e) => { var record = e.EventRecord; var logonType = record.Properties[8].Value.ToString(); if (logonType == "3") { // Network logon var targetUser = record.Properties[5].Value.ToString(); var sourceIP = record.Properties[18].Value.ToString(); // POST /topology/edge endpoint'ine gönder: httpClient.PostAsJsonAsync("https://shamashai.local/topology/edge", new { source_device_id = ResolveDeviceByIP(sourceIP), target_device_id = localDeviceId, edge_type = "ad_member", metadata = new { user = targetUser, logon_type = 3 } }); } };

Firewall API Connector → tunnel edge'leri

Fortigate REST API'sinden aktif VPN tünellerini çeker: javascript // ShamashAi Fortigate Connector (Node.js Fastify) const axios = require('axios'); setInterval(async () => { const res = await axios.get('https://firewall.local/api/v2/monitor/vpn/ipsec', { headers: { 'Authorization': Bearer ${apiToken} } }); res.data.results.forEach(tunnel => { if (tunnel.status === 'up') { db.query(` MERGE dbo.device_edges AS target USING (SELECT @source AS source_device_id, @target AS target_device_id, 'ipsec' AS edge_type) AS source ON target.source_device_id = source.source_device_id AND target.target_device_id = source.target_device_id AND target.edge_type = source.edge_type WHEN MATCHED THEN UPDATE SET last_seen = GETUTCDATE(), status = 'active' WHEN NOT MATCHED THEN INSERT (source_device_id, target_device_id, edge_type, metadata, last_seen) VALUES (source.source_device_id, source.target_device_id, source.edge_type, @meta, GETUTCDATE()); `, { source: localFWDeviceId, target: resolvePeerIP(tunnel.proxyid[0].remote_subnet), meta: JSON.stringify({spi: tunnel.spi}) }); } }); }, 60000); // Her 60 saniyede poll

Incident analiz sırasında edge sorgulama

Başta verdiğimiz senaryo: 192.168.10.45 IP'sinden DC'ye brute-force. Analist şu T-SQL sorgusunu çalıştırır: sql -- Saldırgan IP'nin hangi edge'lerden geçtiğini bul WITH attacker_device AS ( SELECT device_id FROM dbo.devices WHERE last_seen_ip = '192.168.10.45' ), edge_chain AS ( SELECT e.edge_type, e.metadata, e.discovered_at, e.last_seen, src.hostname AS source_host, tgt.hostname AS target_host FROM dbo.device_edges e JOIN dbo.devices src ON e.source_device_id = src.device_id JOIN dbo.devices tgt ON e.target_device_id = tgt.device_id WHERE e.source_device_id IN (SELECT device_id FROM attacker_device) OR e.target_device_id IN (SELECT device_id FROM attacker_device) ) SELECT * FROM edge_chain ORDER BY last_seen DESC; Sonuç: | edge_type | source_host | target_host | metadata | last_seen | |-----------------|-------------------|--------------------|-------------------------------------------|---------------------| | ssl_vpn | vpn-gw01 | client-unknown-45 | {"user":"ahmet@santral.local"} | 2026-09-16 22:15:33 | | ad_member | client-unknown-45 | dc01.santral.local | {"computer":"DESKTOP-XYZ"} | 2026-09-16 22:16:10 | | switch_port | sw-core01 | client-unknown-45 | {"port":"Gi0/23","vlan":100} | 2026-09-16 22:14:58 | | siem_log_source | dc01.santral.local| shamashai-srv | {"agent_version":"2.1.0"} | 2026-09-16 22:18:44 | Bu çıktı, saldırganın: 1. ssl_vpn edge'i üzerinden ahmet@santral.local kimliğiyle VPN'e bağlandığını, 2. DHCP'den dinamik IP aldığını (metadata'da computer name var), 3. sw-core01 switch'inin Gi0/23 portuna fiziksel bağlı olduğunu, 4. DC'ye yapılan brute-force'un siem_log_source edge'i sayesinde ShamashAi'ye ulaştığını anında gösterir. Statik topoloji diyagramı bu 4 katmanı gösteremezdi.

SOAR entegrasyonu: edge-aware otomatik aksiyon

ShamashAi SOAR Engine, dbo.device_edges'i kullanarak akıllı karantina kararları alabilir. Örnek playbook: javascript // ShamashAi SOAR Playbook (Node.js Fastify) fastify.post('/soar/playbook/brute-force-isolate', async (req, reply) => { const { event_id } = req.body; const event = await db.query('SELECT * FROM dbo.events WHERE event_id = @id', { id: event_id }); const attackerIP = event[0].source_ip; // Edge zincirini bul const edges = await db.query(` SELECT e.edge_type, e.source_device_id, e.target_device_id, e.metadata FROM dbo.device_edges e JOIN dbo.devices d ON e.source_device_id = d.device_id WHERE d.last_seen_ip = @ip AND e.edge_type IN ('ssl_vpn', 'switch_port') `, { ip: attackerIP }); for (const edge of edges) { if (edge.edge_type === 'ssl_vpn') { // VPN oturumunu sonlandır await axios.post('https://firewall.local/api/vpn/terminate', { session_id: JSON.parse(edge.metadata).session_id }); await db.query(` INSERT INTO dbo.soar_actions (event_id, action_type, target_device_id, result) VALUES (@eid, 'vpn_terminate', @did, 'success') `, { eid: event_id, did: edge.source_device_id }); } if (edge.edge_type === 'switch_port') { // Switch port'u shutdown et const meta = JSON.parse(edge.metadata); await snmpSet(edge.target_device_id, ifAdminStatus.${meta.port}, 'down'); await db.query(` INSERT INTO dbo.soar_actions (event_id, action_type, target_device_id, result, metadata) VALUES (@eid, 'port_shutdown', @did, 'success', @meta) `, { eid: event_id, did: edge.target_device_id, meta: JSON.stringify({port: meta.port}) }); } } reply.send({ status: 'isolated', edges_affected: edges.length }); }); Bu playbook, edge tiplerine göre farklı aksiyonlar alır: VPN edge varsa oturumu sonlandırır, switch_port edge varsa port'u kapatır. Statik kurallarla bu seviyede granüler kontrol mümkün değildir.

Compliance ve kanıt toplama

KVKK Madde 12 (veri güvenliği) ve ISO 27001:2022 Annex A.8.16 (log izleme), bir güvenlik olayında "hangi sistemler etkilendi?" sorusunu yanıtlamayı gerektirir. ShamashAi'nin GET /compliance/evidence endpoint'i, bir event_id için tüm edge zincirini ve değişiklik tarihçesini ZIP paketi olarak döner: sql -- Compliance evidence pack query DECLARE @event_id BIGINT = 123456; SELECT e.event_id, e.event_type, e.source_ip, e.target_device_id, d.hostname AS target_hostname, edges.edge_type, edges.metadata AS edge_metadata, edges.discovered_at, edges.last_seen, soar.action_type AS soar_action, soar.result AS soar_result, audit.change_user, audit.change_timestamp FROM dbo.events e JOIN dbo.devices d ON e.target_device_id = d.device_id LEFT JOIN dbo.device_edges edges ON edges.source_device_id = d.device_id OR edges.target_device_id = d.device_id LEFT JOIN dbo.soar_actions soar ON soar.event_id = e.event_id LEFT JOIN dbo.audit_log audit ON audit.entity_type = 'device_edge' AND audit.entity_id = edges.edge_id WHERE e.event_id = @event_id ORDER BY edges.last_seen DESC; Denetçi bu raporu aldığında, saldırı anında hangi edge'lerin aktif olduğunu, SOAR'ın hangi edge'lere müdahale ettiğini, ve edge keşif tarihçesini tek bir dokümanda görür.

Limitler ve dürüst notlar

  • Connector kapsamı: ShamashAi dokümantasyonu storage kategorisinde yalnızca genel "storage" başlığını veriyor; NFS/iSCSI gibi spesifik sub-type'lar pilot kapsamında detaylandırılır. Eğer ortamda exotic storage protokolleri (FC, FCoE) varsa custom connector geliştirilmesi gerekir.
  • Edge stale süresi: Varsayılan 7 gün hardcoded; bu süre henüz UI'dan yapılandırılamaz. Kısa ömürlü VPN oturumları için (1 saatlik user VPN) manuel tuning gerekir.
  • Graph scale: dbo.device_edges tablosu 100-500 cihazlı ortamlar için optimize edilmiştir. 10,000+ cihazda edge sayısı milyonları bulursa, SQL Server partition stratejisi ve index tuning pilot aşamasında ele alınır.
  • Gerçek zamanlı olmayan connector'lar: SNMP ve VMware API polling 60 saniye interval'de çalışır. Sub-second edge değişikliklerini yakalamaz; kritik sistemlerde SNMP trap forwarding veya vCenter alarm webhook yapılandırılmalıdır.
  • Edge silme politikası: Stale edge'ler otomatik silinmez, sadece status='stale' işaretlenir. Uzun vadede disk kullanımını optimize etmek için retention policy henüz yoktur.

ShamashAi Topology modülü, ağdaki her cihaz çiftini 9 typed edge kategorisinde modeller ve dbo.device_edges tablosunda audit edilebilir graf olarak sunar. Connector'lar SNMP, Windows Event, Firewall API, VMware vCenter gibi kaynaklardan edge'leri sürekli keşfeder; SOAR Engine bu edge'lere göre akıllı karantina kararları alır; compliance raporları edge zincirini tarihçesiyle birlikte kanıt paketi olarak sunar. Statik topoloji diyagramlarının gösteremediği protokol-seviye ilişkiler, incident response süresini dakikalardan saniyelere indirir. Pilot programı 30 gün ücretsiz: shamashai.com.tr/iletisim
Paylaş

Bu konuyu projenize uygulayalım

Pilot programı kapsamında ürünü gerçek altyapınızda 30 gün ücretsiz deneyin.