Hackerlar İçin Golang
Bu makaleyi dinleyin
Hackerlar İçin Golang: Modern Siber Güvenlik Mimarisi ve Ofansif Kodlama Rehberi
Sızma testi uzmanları, Red Team operatörleri ve zararlı yazılım geliştiricileri yıllarca otomasyon için Python'ı, bellek manipülasyonu ve yerel API çağrıları içinse C/C++'ı kullandı. Ancak EDR, XDR ve gelişmiş izleme mekanizmalarıyla donatılmış modern savunma hatları, bu geleneksel araçların hareket alanını ciddi şekilde kısıtladı. Google'ın dağıtık sistemler için geliştirdiği Go (Golang), sunduğu yapısal avantajlarla ofansif güvenlik dünyasının yeni standardı haline geldi.
Bu rehberde, Go dilinin güvenlik süreçlerindeki yapısal avantajlarını ele alacak ve pratik örneklerle ofansif kullanım senaryolarına değineceğiz.
🎯 Bu Rehber Kimler İçin?
Sızma Testi Uzmanları
Sistemlerde sıfır bağımlılıkla (standalone) çalışan, yüksek hızlı tarayıcılar ve özel araçlar geliştirmek isteyen güvenlik uzmanları.
Zararlı Yazılım Geliştiricileri
Antivirüs ve EDR sistemlerini aşmak (evasion) amacıyla derleme parametrelerini kullanan, statik analizi zorlaştırmak ve CGO bağımlılığı olmadan yerel API çağrıları yapmak isteyen araştırmacılar.
Mavi Takım & Tehdit Avcıları
Go ile yazılmış araçların runtime (çalışma zamanı) davranışlarını ve bellek yapılarını analiz ederek daha etkili savunma kuralları (YARA, Sigma vb.) yazmak isteyen savunmacılar.
Ofansif Güvenlikte Python ve C++ Neden Yetersiz Kalıyor?
Ofansif bir aracın başarısı, hedef sistemde bıraktığı ayak izine ve çalışma esnekliğine bağlıdır. Python ve C++ gibi dillerin derleme ve çalışma mimarileri, modern operasyonlarda bazı temel engellere takılır:
Python (Yorumlanan / Interpreted)
graph LR
P_Source[Python Kodu] --> P_Compiler[Bytecode Derleyici]
P_Compiler --> P_Bytecode[pyc Bytecode]
P_Bytecode --> P_Interpreter[Hedef Sistem Yorumlayıcısı]
P_Interpreter --> P_Execution[Çalışma - Yüksek Sistem İzi]
C++ (Derlenen / Native)
graph LR
C_Source[C++ Kodu] --> C_Compiler[Platform Derleyicisi]
C_Compiler --> C_Binary[Bağlı İkili Dosya]
C_Binary --> C_OS[Hedef Dinamik Kütüphaneleri DLL/SO]
C_OS --> C_Execution[Çalışma - Düşük Sistem İzi]
Go (Statik Derlenen / Static)
graph LR
G_Source[Go Kodu] --> G_Compiler[Go Çapraz Derleyici]
G_Compiler --> G_Binary[Statik Bağlı Bağımsız İkili Dosya]
G_Binary --> G_Execution[Çalışma - Sıfır Bağımlılık]
Python'ın Karşılaştığı Zorluklar
- Çalışma Zamanı Bağımlılığı (Runtime Dependency): Python script'ini hedef sistemde çalıştırmak için sistemde yorumlayıcı kurulu olmalıdır.
PyInstallergibi çözümlerle paketlenen.exedosyaları ise arka plandaTempdizinine kütüphaneleri ve yorumlayıcıyı açar. Bu disk hareketi, modern EDR/AV çözümleri için doğrudan bir alarm sebebidir. - GIL (Global Interpreter Lock) Engeli: Python, yerleşik GIL mekanizması yüzünden CPU çekirdeklerini gerçek anlamda paralel kullanamaz. Bu da yüksek hızlı port tarama, subdomain keşfi veya kaba kuvvet saldırısı yazarken performans darboğazı demektir.
C/C++ ve Operasyonel Zorluklar
- Manuel Bellek Yönetimi ve Stabilite: C/C++ ile çalışırken bellek yönetiminin (
malloc/free) geliştiriciye bırakılması, kararsız bellek sızıntılarına veya çökme (Segmentation Fault) risklerine yol açar. Bir sızma testinde hedef sunucuyu çökertmek, bir operatörün yapabileceği en kötü hatalardan biridir. - Çapraz Derleme (Cross-Compilation) Çilesi: Linux üzerinde yazdığınız Windows API çağrıları içeren C++ kodunu derlemek, kütüphane ve derleyici bağımlılıkları yüzünden çoğunlukla kabusa dönüşür.
Go Hepsini Nasıl Çözüyor?
Go; Python'ın pratikliği ve hızlı geliştirme avantajını, C/C++'ın makine koduna derlenme gücüyle birleştirir. Statik tip güvenliği ve yerleşik bellek yönetimi (Garbage Collector) sayesinde siber güvenlik uzmanlarına çökme riski taşımayan, son derece kararlı araçlar geliştirme fırsatı verir.
Karşılaştırma Tablosu
| Kriter | Python | C / C++ | Go (Golang) |
|---|---|---|---|
| Derleme Yapısı | Yorumlanan (Interpreted) | Derlenen (Native) | Statik Derlenen (Native & Static) |
| Dışa Bağımlılık | Yüksek (Yorumlayıcı ve paketler şart) | Orta (DLL / Paylaşılan kütüphaneler gerekir) | Yok (Tamamen bağımsız tek dosya) |
| Eşzamanlılık (Concurrency) | Kısıtlı (GIL engeli var) | Karmaşık (Thread yönetimi zor) | Mükemmel (Goroutines ve Kanallar) |
| Çalışma Hızı | Yavaş | Çok Hızlı | Hızlı (C seviyesine yakın) |
| Bellek Güvenliği | Güvenli (Garbage Collector var) | Manuel (Hatalara ve taşmalara açık) | Güvenli (Garbage Collector var) |
| Tersine Mühendislik (Reversing) | Kolay (Bytecode kolayca geri dönüştürülür) | Orta (Derleme ayarlarına göre değişir) | Zor (Büyük ve karmaşık çalışma yapısı) |
Ofansif Güvenlikte Go Dilinin Mimari Avantajları
Go'yu siber güvenlikte vazgeçilmez kılan üç ana mimari özellik şunlardır:
A. Statik Derleme ve Çapraz Derleme Gücü
Go derleyicisi, kodunuzu ve bağımlı olduğunuz tüm paketleri tek bir bağımsız binary içine statik olarak gömer. Hedef makinede ne bir DLL dosyasına ne de bir yorumlayıcıya ihtiyaç kalır.
Üzerinde çalıştığınız işletim sisteminden bağımsız olarak, tek bir komutla farklı platformlar için çıktı alabilirsiniz:
# Linux makineden Windows x64 mimarisine derleme
GOOS=windows GOARCH=amd64 go build -o agent.exe main.go
# macOS üzerinden Linux ARM64 mimarisine derleme
GOOS=linux GOARCH=arm64 go build -o agent_arm main.go
B. Tersine Mühendislik (Reversing) Dinamikleri
Standart C/C++ binary'leri Ghidra veya IDA Pro gibi araçlarla açıldığında, kütüphane çağrıları ve fonksiyon isimleri doğrudan analiz edilebilir. Go'da ise bu süreç farklı zorluklar barındırır:
- Büyük Binary Dosyası: Go ile yazılan en basit program bile kendi runtime motorunu (Garbage Collector, Scheduler vb.) barındırdığı için birkaç megabayt boyutundadır. Analist, binlerce runtime fonksiyonu arasından sizin yazdığınız asıl kodu bulmak için vakit kaybetmek zorundadır.
- pclntab Yapısı ve Semboller: Go, hata anında çağrı geçmişini (stack trace) ekrana basabilmek için dosya içinde
pclntabadında bir fonksiyon adı tablosu tutar. Eğer bu semboller derleme sırasında temizlenmezse (stripedilmezse), tersine mühendislergo-resymgibi araçlarla kodun tüm akışını ve fonksiyon isimlerini saniyeler içinde çözebilir. Ancak bu tabloyu-ldflags="-s -w"ile silmek vegarblegibi araçlarla karartmak, analistin işini C/C++'a göre çok daha fazla zorlaştırır; çünkü standart runtime fonksiyonları ile kendi kodunuz birbirine karışır.
C. Eşzamanlılık (Concurrency) Yetenekleri ve GMP Modeli
Go, işletim sisteminin yüksek maliyetli thread'leri yerine, 2 KB gibi son derece düşük bir başlangıç belleğiyle çalışan Goroutine'leri kullanır. Bu asenkron yapının arkasında ise GMP Modeli (M:N Scheduler) yer alır:
- G (Goroutine): En küçük iş birimi. Kendi stack alanına ve durum verilerine sahiptir.
- M (Machine): İşletim sisteminin fiziksel thread'ini (OS Thread) temsil eder.
- P (Processor): Goroutine'leri çalıştırmak için gereken mantıksal işlem kaynağıdır. Varsayılan olarak CPU çekirdek sayısı kadardır.
OS thread geçişleri (context switch) yerine kullanıcı katmanında son derece hızlı geçişler yapılır. Binlerce goroutine, work-stealing (iş çalma) algoritmalarıyla işlemci çekirdeklerine dinamik olarak dağıtılır.
Aşağıdaki şema, Go'nun goroutine yapısının tek bir işletim sistemi iş parçacığı üzerinde binlerce görevi nasıl koordine ettiğini göstermektedir:
graph TD
subgraph "İşletim Sistemi Seviyesi"
Thread[OS Thread / CPU Core]
end
subgraph "Go Runtime Scheduler"
G1[Goroutine 1: TCP Connect]
G2[Goroutine 2: Port Scanner]
G3[Goroutine 3: Packet Ingest]
G4[Goroutine 4: Parser]
end
G1 --> Thread
G2 --> Thread
G3 --> Thread
G4 --> Thread
Uygulama: Yüksek Hızlı Eşzamanlı Port Tarayıcı
Go'nun sync.WaitGroup ve kanallarını (channels) kullanarak yüksek hızlı ve eşzamanlı bir port tarayıcıyı nasıl yazacağımızı inceleyelim:
package main
import (
"fmt"
"net"
"sync"
"time"
)
// worker fonksiyonu, kanaldan gelen portları alır ve tarar
func worker(ports chan int, wg *sync.WaitGroup, host string) {
for p := range ports {
// Her port tarama adımını anonim bir fonksiyon içinde çalıştırarak
// defer işlemlerinin döngü bitmeden çalışmasını sağlıyoruz.
func() {
defer wg.Done()
address := fmt.Sprintf("%s:%d", host, p)
// 2 saniyelik zaman aşımı ile TCP bağlantısı dener
conn, err := net.DialTimeout("tcp", address, 2*time.Second)
if err != nil {
// Port kapalı veya erişilemez
return
}
defer conn.Close()
fmt.Printf("[+] Port Açık: %d\n", p)
}()
}
}
func main() {
host := "scanme.nmap.org"
ports := make(chan int, 100) // Buffer'lı kanal tanımı
var wg sync.WaitGroup
// Havuzda 10 adet işçi (worker) goroutine başlatıyoruz
for i := 0; i < 10; i++ {
go worker(ports, &wg, host)
}
// 1 ile 1024 arasındaki portları kanala gönderiyoruz
for i := 1; i <= 1024; i++ {
wg.Add(1)
ports <- i
}
wg.Wait()
close(ports)
fmt.Println("[*] Tarama işlemi tamamlandı.")
}
Sektör Standardı Haline Gelmiş Go Tabanlı Güvenlik Araçları
Teorik üstünlüğün ötesinde, bugün siber güvenlik endüstrisinin en kritik araçları Go ile sıfırdan inşa edilmektedir.
🛸 Bishop Fox - Sliver C2
Cobalt Strike'a güçlü ve açık kaynaklı bir alternatif. mTLS, WireGuard, HTTP(S) ve DNS tünelleme kullanarak eylemci (implant) yönetimini sağlar.
📦 Mandiant - gopacket
Python'daki Impacket kütüphanesinin Go üzerindeki karşılığıdır. Ağ paketlerinin analiz edilmesi, SMB/RPC paket yönetimi ve Active Directory operasyonları için sıklıkla tercih edilir.
⚙️ VulnCheck - go-exploit
Exploit geliştirme süreçlerini standartlaştırmak, kararlı ve platformlar arası taşınabilir exploit kodları yazmak amacıyla oluşturulmuş bir altyapıdır.
🔍 Gobuster / FFUF
Web dizinleri, gizli sayfalar ve subdomain keşifleri için kullanılan yüksek hızlı fuzzer ve kaba kuvvet (brute-force) araçları.
Savunma Atlatma (Evasion) ve Derleme Teknikleri
Bir Red Team operasyonunda üretilen binary boyutu ve AV/EDR çözümlerine takılmama durumu kritiktir. Go derleyicisi, dosya boyutunu düşürmek ve analizi zorlaştırmak için yerleşik parametreler sunar.
Derleme Parametreleri ve Optimizasyon
Varsayılan ayarlarla derlenen Go dosyaları, debug sembollerini ve DWARF tablolarını da içerir. Bu durum hem boyutu büyütür hem de statik analiz yapan güvenlik motorlarının (örneğin YARA kurallarının) dosyayı kolayca analiz etmesine imkan tanır.
Windows API ve Sistem Çağrıları (Syscalls)
CGO'yu kapatsak bile Go'nun yerleşik "syscall" ve "golang.org/x/sys/windows" paketleriyle Windows API'lerini tetikleyebiliriz. Çalışma zamanında DLL dosyalarını dinamik olarak yükleyip çağırmak, IAT'yi (Import Address Table) temiz tutarak imza tabanlı tespitleri atlatmanın ilk adımıdır:
package main
import (
"syscall"
"unsafe"
)
func main() {
// DLL çalışma zamanında yüklenir
kernel32 := syscall.NewLazyDLL("kernel32.dll")
// İlgili fonksiyon çözümlenir
virtualAlloc := kernel32.NewProc("VirtualAlloc")
// Fonksiyon çağrısı CGO bağımlılığı olmadan doğrudan gerçekleştirilir
addr, _, _ := virtualAlloc.Call(
0,
2048, // Boyut
0x3000, // MEM_COMMIT | MEM_RESERVE
0x40, // PAGE_EXECUTE_READWRITE
)
_ = addr
}
Bir adım sonrası ise Direct Syscalls (Doğrudan Sistem Çağrıları) yöntemidir. Go, assembly (.s) dosyalarını doğrudan derleyebildiği için, EDR sistemlerinin kullanıcı katmanındaki API kancalarını (hooking) atlatmak üzere syscall numaralarını doğrudan assembly seviyesinde çağırıp kernel moduna geçiş yapabilir.
Garble ile Kod Obfuscation (Karartma)
Go derleyicisi paket ve fonksiyon isimlerini binary içerisinde açık bırakır. Güvenlik analistlerinin işini zorlaştırmak ve imza tabanlı tespitlerden kaçınmak için Garble kullanabiliriz. Garble derleme aşamasında şunları yapar:
- Sembol Karıştırma: Fonksiyon, değişken ve paket isimlerini anlamsız hash'lere dönüştürür.
- String Şifreleme: Kod içindeki tüm string'leri (IP, URL, anahtarlar) şifreli saklar ve bellek üzerinde çalışma zamanında çözer.
- Runtime Temizliği: DWARF ve hata ayıklama verilerini tamamen kazır.
Kullanımı oldukça pratiktir:
# Go yerine garble kullanarak evasion odaklı derleme
garble -literals -tiny build -ldflags="-s -w" -trimpath -o agent.exe main.go
Uygulamalı Eğitim ve Geliştirme Kaynakları
"Golang for Hackers" konseptinde derinleşmek ve kendi ofansif/defansif araçlarınızı geliştirmek için takip edebileceğiniz nitelikli kaynak hiyerarşisi şu şekildedir:
Temel Literatür ve Kitaplar
📖 Black Hat Go
No Starch Press tarafından basılan, Go diliyle siber güvenlik araçları, exploitler ve ağ tarayıcıları yazmayı öğreten en popüler başvuru kitabıdır.
📖 Go Programming for Hackers
Ofansif araç geliştirme süreçlerine ve sızma testi betiklerine odaklanan, pratik örnekler içeren bir kılavuzdur.
📖 Black Hat Go Manual (BHGM)
Teorik bilgileri pratik laboratuvar ortamlarıyla birleştiren, hızlı kod referansları ve ipuçları sunan el kitabıdır.
Video ve Canlı Laboratuvar Serileri
🔴 Mehmet İnce - Golang For Hackers
YouTube ve Twitch üzerinde yayınlanan, sıfırdan ileri seviyeye kadar Go ile gerçekçi araçların (örneğin LDAP enjektörleri) nasıl yazıldığını gösteren en kapsamlı Türkçe video serisi.
▶ Playlist'i İzle🔵 IppSec - Golang for Hackers
Hack The Box çözümleriyle bilinen IppSec'in, Go dilini otomasyon süreçlerinde, tarayıcılarda ve sızma testlerinde nasıl kullandığını anlatan İngilizce eğitim serisi.
▶ Watch PlaylistSiber güvenlikte Go kullanımı geçici bir popülerlik değil, modern savunma sistemlerine karşı doğan net bir mühendislik ihtiyacıdır. Tek bir binary ile çalışabilen, yüksek hızda asenkron iş üreten ve kolayca çapraz derlenen bu dil, siber operasyonların vazgeçilmezidir. Sadece Red Team ekipleri için değil; tehdit avcılığı, tersine mühendislik veya SOC analizi yapan Blue Team uzmanları için de Go'nun çalışma mekanizmalarını bilmek kritik önem taşır. Saldırganın silahını anlamadan savunma hattı kuramazsınız.
📺 Ofansif Go Geliştirme Eğitim Serisi
Go diliyle siber güvenlik araçları (port tarayıcılar, subdomain bulucular, ağ araçları vb.) geliştirmeyi anlatan Türkçe YouTube serisine aşağıdan göz atabilirsiniz:
Seriye doğrudan erişmek için Hackerlar İçin Golang Türkçe Oynatma Listesi bağlantısını kullanabilirsiniz.
Verinizin mimarı olun, egemenliğinizi geri alın. Dinlediğiniz için teşekkürler!