Geleneksel C2 kanallarının kırılganlığı
Birçok komuta kontrol (C2) çerçevesi, uç noktalar arasında temiz, kararlı ve kesintisiz bir ağ bağlantısı olduğunu varsayar. Etkileşimli bir kabuk oturumunu standart bir HTTP/S beacon’ı veya ham TCP soketi içine sarıp birkaç saniyede bir kalp atışı (heartbeat) sinyali gönderirler.
Sıkılaştırılmış kurumsal ağlarda bu klasik model hızla çöker:
- TLS Denetimi ve Araya Girme: Kurumsal vekiller (proxy) dışa giden TLS oturumlarını sonlandırır, istek gövdelerini inceler ve istemci JA3/JA4 parmak izlerini doğrular. Bilinmeyen Go kütüphaneleri veya özel TLS el sıkışmaları çevre güvenlik duvarında engellenir.
- Davranışsal Sinyal (Beaconing) Tespiti: Ağ algılama sistemleri (NDR), dışa giden HTTP akışlarındaki periyodiklik heuristiğini analiz eder. Rastgelelik (jitter) içermeyen düzenli yoklama aralıkları otomatik karantina kurallarını tetikler.
- Katı Çıkış Filtreleme: Güvenlik seviyesi yüksek alt ağlar (SCADA sistemleri, çekirdek bankacılık sunucuları veya yalıtılmış üretim ortamları) dışarıya giden TCP 80 ve 443 portlarını tamamen kapatır. Bu ağlardan dışarıya yalnızca dahili DNS sunucuları veya özel yerel röleler üzerinden erişim mümkündür.
Doğrudan TCP/TLS çıkışı engellendiğinde, güvenlik uzmanları bant dışı (out-of-band) ve gizli (covert) iletişim kanallarına yönelir; veriler DNS, ICMP, DoH, WebSocket veya IP başlık steganografisi üzerinden aktarılır.
Ancak gizli kanallar yeni bir operasyonel sorun doğurur: kırılganlık. DNS sorgularındaki alt alan adları 63 karakterlik katı etiket sınırına ve toplamda 255 karakterlik boyuta sahiptir. UDP paketleri kaybolabilir ya da sırasız ulaşabilir. Ağ geçitleri başlık alanlarını değiştirebilir ve agresif vekil zaman aşımları bağlantıyı yarıda kesebilir.
Bozulmuş ve kısıtlı ağlar üzerinde dayanıklı ve hata toleranslı veri hatları inşa etme mekanizmalarını araştırmak amacıyla ghostlink çerçevesini geliştirdik.
ghostlink boru hattı mimarisi
ghostlink’in temel mimari prensibi, veri hazırlama ve oturum kriptografisinin fiziksel veya mantıksal ağ taşıma katmanından tamamen ayrılmasıdır.
Kodlama hattı, ağı güvenilmeyen ve paket düşüren bir bayt kanalı olarak kabul eder. Tek bir ağ paketi gönderilmeden önce veri beş deterministik aşamadan geçer:
1. Sıkıştırma (zlib)
DNS veya ICMP gibi gizli kanallar çok dar bir bant genişliğine sahiptir. ghostlink, ham bayt akışını zlib ile sıkıştırarak karakter sayısını düşürür ve bir komutu ya da dosyayı iletmek için gereken toplam çerçeve adedini minimuma indirir.
2. İleri Hata Düzeltme (XOR parite düzeni)
UDP tabanlı DNS veya ham ICMP gibi kanallarda paketler sessizce kaybolabilir. Ağda yeni imzalar üreten ağır TCP tarzı yeniden iletim el sıkışmaları yerine, ghostlink XOR parite parçaları (shards) üretir:
$$\text{Parity} = \text{Chunk}_1 \oplus \text{Chunk}_2 \oplus \dots \oplus \text{Chunk}_k$$
Bir gruptaki herhangi bir veri parçası iletim sırasında düşerse, alıcı taraf kalan parçaları ve parite verisini matematiksel olarak işleyerek eksik parçayı yeniden oluşturur.
3. Çerçeveleme ve protokol v2 zarfı
Her parça; akış kimlikleri, sıra numaraları ve toplam parça sayısını içeren yapılandırılmış bir başlıkla paketlenir:
type FrameHeader struct {
Magic [2]byte // 0x47, 0x4C ('GL')
Version uint8 // Protocol v2
StreamID uint32 // Benzersiz işlem kimliği
SeqNum uint16 // Parça indeksi (0 tabanlı)
TotalChunks uint16 // Akıştaki toplam parça sayısı
PayloadLen uint16 // Parça veri uzunluğu
Flags uint8 // Parite, kontrol veya bitiş bayrakları
}
4. Geçici oturum şifrelemesi (P-256 ECDHE + AES-256-GCM)
Ağdaki bir dinleyici ham paketleri yakalasa dahi içerik korunur. ghostlink, geçici bir P-256 Eliptik Eğri Diffie-Hellman (ECDHE) anahtar değişimi yaparak (veya önceden paylaşılan anahtar ile) 256 bitlik simetrik bir oturum anahtarı türetir. Her çerçeve, benzersiz bir 12 baytlık başlatma vektörü (IV) ile AES-256-GCM kullanılarak şifrelenir; böylece hem gizlilik hem de kriptografik bütünlük garanti edilir.
9 gizli taşıma protokolünün anatomisi
ghostlink, kontrollü laboratuvar testleri için 9 tescilli kanal sürücüsü barındırır:
| Taşıma Kanalı | Kanal Mekanizması | Taşıyıcı Ortam | Ortam Gereksinimleri |
|---|---|---|---|
| DNS | Alt alan adı sorgu çerçevelemesi | UDP / Port 53 | Yetkili ad sunucusu veya yerel loopback |
| DoH | HTTPS üzerinden DNS sorguları (RFC 8484) | HTTPS / Port 443 | Genel DoH çözümleyicileri (Cloudflare, Google) |
| HTTP | Parçalı istek/yanıt başlıkları | HTTP / Port 80, 8080 | Standart web vekilleri, yerel HTTP |
| WebSocket | Kalıcı çerçeveli veri akışı | WS / WSS | Tam çift yönlü (full-duplex) soket |
| ICMP | Echo request ve reply veri alanları | ICMP Tip 8 / Tip 0 | Ham soket yetkisi (CAP_NET_RAW veya root) |
| TCP ISN | İlk Sıra Numarası (ISN) modülasyonu | Ham TCP 32-bit SYN ISN | Deneysel; işletim sistemi TCP yığınına bağlı |
| IPv4 ID | IP tanımlama alanı modülasyonu | 16-bit IPv4 başlık ID | Deneysel; ham paket enjeksiyonu gerektirir |
| Timing | Paketler arası varış süresi modülasyonu | Paket gecikme aralıkları | Ağ gecikmesine (jitter) karşı hassas |
| Packet Size | Uzunluk modülasyonu | Değişken çerçeve dolgusu | MTU ve yönlendirici parçalamasına duyarlı |
DNS ve DoH sorgu çerçevelemesi detayları
DNS taşıma sürücüsünde şifreli bayt blokları RFC 1035 etiket kurallarına uygun Base32 veya Hex dizgilerine dönüştürülür. Uzun bir veri akışı şu biçimde sorgulara bölünür:
[seq].[stream-id].[chunk-data].[signature].c2.lab.internal
Yetkili DNS sunucusu, aradaki genel DNS çözümleyicilerinden gelen sorguları karşılar, alan adı uzantısını temizler, sıra numaralarını çözer ve akışı alıcı motora teslim eder.
Çevrimdışı doğrulama ve deterministik test ortamı
C2 taşıma kanallarını canlı ağlarda doğrudan denemek operasyonel riskler barındırır. ghostlink, hiçbir ağ soketi açmadan kriptografik ve çerçeveleme hattını uçtan uca test eden güvenli bir çevrimdışı doğrulama komutu sunar:
# Derleme, platform ve protokol hazır bulunuşluğunu doğrula
ghostlink doctor
# Kayıtlı taşıma sürücülerini ve yeteneklerini listele
ghostlink transports
# Deterministik uçtan uca boru hattı doğrulamasını çalıştır
ghostlink demo
demo komutu tüm süreci tamamen bellekte çalıştırır:
GHOSTLINK REFERENCE DEMO
Platform: darwin/arm64 · Protocol: v2 · Mode: offline loopback
[1] P-256 ECDHE Ephemeral Key Exchange:
Client Public Key: 04a1b2c3d4e5f6... (P-256)
Server Public Key: 04f6e5d4c3b2a1... (P-256)
Derived Shared Key: 256-bit AES-GCM session key confirmed
[2] Payload Processing:
Raw Input: "CONFIDENTIAL_LAB_RECORD_ARTIFACT_DATA_2026" (44 bytes)
zlib Compression: 44 bytes -> 38 bytes
XOR Parity Layout: 3 data shards + 1 parity shard generated
[3] Protocol v2 Framing & AES-256-GCM Encryption:
Frame 0 (Seq 0/3): 14 bytes ciphertext + 12-byte IV + 16-byte GCM tag
Frame 1 (Seq 1/3): 14 bytes ciphertext + 12-byte IV + 16-byte GCM tag
Frame 2 (Seq 2/3): 10 bytes ciphertext + 12-byte IV + 16-byte GCM tag
Frame 3 (Parity): 14 bytes ciphertext + 12-byte IV + 16-byte GCM tag
[4] Receiver Decryption & Reassembly:
All frames verified against GCM authentication tags.
Recovered Bytes: 44 bytes
SHA-256 Checksum: d4f8a1... [EXACT MATCH]
Savunma ve tespit mühendisliği: gizli kanalları yakalamak
Bant dışı kanalların nasıl çalıştığını anlamak, etkili ağ tespit kuralları geliştirmek için kritik öneme sahiptir:
1. DNS entropi ve hacim analizi
Gizli DNS kanalları belirgin istatistiksel izler bırakır. Savunma ekipleri şu göstergeleri izlemelidir:
- Yüksek Shannon Entropisi: Base32/Hex kodlu etiketler 3.8 üzerinde entropi sergilerken, meşru alan adları nadiren 3.0 değerini aşar.
- Sorgu Hacmi Anomalisi: Birkaç dakika içinde tek bir ana alan adı altında binlerce benzersiz alt alan adının sorgulanması.
- Kayıt Türleri: Uç noktalara büyük komut yanıtları döndürmek için yinelenen
TXTveyaNULLsorgularının kullanılması.
2. Wireshark protokol ayrıştırması (tools/ghostlink.lua)
Laboratuvar analizlerinde mavi ekiplere yardımcı olmak amacıyla ghostlink, Wireshark için özel bir Lua ayrıştırıcısı barındırır. Ağ yakalamaları incelenirken Wireshark GL sihirli baytlarını otomatik olarak tanır, çerçeve başlıklarını ayrıştırır ve akış sırasını görüntüler:
-- tools/ghostlink.lua: Wireshark ayrıştırıcı kod örneği
local p_ghostlink = Proto("ghostlink", "Ghostlink Protocol v2")
local f_magic = ProtoField.bytes("ghostlink.magic", "Magic")
local f_version = ProtoField.uint8("ghostlink.version", "Version")
local f_stream = ProtoField.uint32("ghostlink.stream", "Stream ID", base.HEX)
local f_seq = ProtoField.uint16("ghostlink.seq", "Sequence Number")
local f_total = ProtoField.uint16("ghostlink.total", "Total Chunks")
function p_ghostlink.dissector(buffer, pinfo, tree)
if buffer:len() < 14 then return end
if buffer(0,2):string() ~= "GL" then return end
pinfo.cols.protocol = "GHOSTLINK"
local subtree = tree:add(p_ghostlink, buffer(), "Ghostlink Transport Frame")
subtree:add(f_magic, buffer(0,2))
subtree:add(f_version, buffer(2,1))
subtree:add(f_stream, buffer(3,4))
subtree:add(f_seq, buffer(7,2))
subtree:add(f_total, buffer(9,2))
end
Kanıt ve sınırlar
Tüm testler, veri aktarım ölçümleri ve protokol analizleri izole laboratuvar sanal makinelerinde, yerel loopback (127.0.0.1) ve özel sanal ağlar üzerinde gerçekleştirilmiştir. Deneysel ham paket kanalları (TCP ISN, IPv4 ID, zamanlama modülasyonu) root/yönetici yetkisi gerektirir; ana makine zamanlayıcı gecikmelerine ve ara yönlendiricilerin paketleri yeniden boyutlandırmasına karşı hassastır. Testler sırasında hiçbir yetkisiz ağ veya canlı üretim sistemi hedef alınmamıştır.
Referanslar
- jankesec, ghostlink (Out-of-Band Transport Research Framework): github.com/jankesec/ghostlink
- IETF, DNS Queries over HTTPS (RFC 8484): datatracker.ietf.org/doc/html/rfc8484
- NIST, Recommendation for Block Cipher Modes of Operation: GCM (SP 800-38D): csrc.nist.gov/publications/detail/sp/800-38d/final
- MITRE ATT&CK, Protocol Tunneling (T1572): attack.mitre.org/techniques/T1572/
- MITRE ATT&CK, Application Layer Protocol (T1071): attack.mitre.org/techniques/T1071/
Bu teknik not ne kadar güncel?
En son kaynak incelemesi, içerik güncellemesi veya yayın tarihi gösterilmektedir.
Yazar teknik incelemeyi tamamladı. Bu etiket tek başına laboratuvar yeniden üretimi iddiası taşımaz.

