TEKNİK YAZI / Developer Tools ve Açık Kaynak

Steghide ve Steganografi: Nasıl Çalışır, Nasıl Tespit Edilir?

Steghide'ın JPEG, BMP, WAV ve AU dosyalarına veriyi nasıl gizlediğini, zararlı yazılımların steganografiyi nasıl kullandığını ve tespit araçlarını anlatır.

Steghide, görüntü ve ses dosyalarının içine veri gizleyen açık kaynaklı bir steganografi aracıdır. Yazı, steghide’ın gömme algoritmasını, meşru kullanım alanlarını, zararlı yazılımların steganografiyi birincil raporlarda belgelendiği biçimiyle nasıl kullandığını ve gizlenmiş verinin hangi araçlarla, hangi sınırlar içinde tespit edilebildiğini ele alır.

Steganografi nedir?

Steganografi (Yunanca “örtülü yazı”), mesajın içeriğini değil varlığını gizler. Kriptografi mesajı okunamaz hâle getirir, fakat şifreli bir dosya şifreli olduğu belli olarak durur. Steganografide amaç, taşıyıcı dosyanın (cover file) sıradan görünmesi ve içinde bir şey bulunduğundan şüphelenilmemesidir. İkisi sık sık birlikte kullanılır: veri önce şifrelenir, sonra gömülür.

Dijital görüntülerde en bilinen yöntem LSB (least significant bit, en anlamsız bit) değiştirmedir. Sıkıştırmasız bir görüntüde her pikselin renk kanalları birer bayttır; bu baytların son bitini değiştirmek rengi en fazla bir birim oynatır ve gözle fark edilmez:

Özgün piksel (R, G, B): 200, 117, 54  ->  11001000 01110101 00110110
Gömülecek bitler:       1, 0, 1
Yeni piksel (R, G, B):  201, 116, 55  ->  11001001 01110100 00110111

LSB yöntemlerden yalnız biridir ve görüntünün istatistiğinde iz bırakır; basit uygulamaları steganaliz araçlarıyla yakalanabilir. JPEG’de ise piksel değerleri saklanmaz: görüntü 8×8 bloklar hâlinde ayrık kosinüs dönüşümünden (DCT) geçirilir ve nicemlenmiş (quantized) katsayılar saklanır. Bu yüzden JPEG’e veri gizleyen araçlar pikselleri değil DCT katsayılarını değiştirir.

Steghide nasıl çalışır?

Steghide, Stefan Hetzl’in geliştirdiği GPL lisanslı bir araçtır. JPEG ve BMP görüntülerini, WAV ve AU ses dosyalarını taşıyıcı olarak kullanır; gizlenecek verinin biçimine kısıt koymaz. Kılavuzuna göre gömme şu adımlarla yapılır:

  1. Gizli veri sıkıştırılır ve şifrelenir. Varsayılan şifreleme, CBC kipinde AES-128’dir (rijndael-128). Bütünlük denetimi için CRC32 sağlama toplamı eklenir.
  2. Parolayla başlatılan sözde rastgele sayı üreteci, verinin gömüleceği konumların sırasını belirler.
  3. Zaten doğru değeri taşıyan konumlar ayıklanır. Kalanlar arasında, değerleri birbiriyle takas edildiğinde gizli bitleri yerleştirecek çiftler graf tabanlı bir eşleme (matching) algoritmasıyla bulunur.
  4. Çift bulunamayan konumların değeri doğrudan üzerine yazılır.

Değerlerin çoğu artırılıp azaltılmak yerine yer değiştirdiği için her renk ya da örnek değerinin dosyadaki toplam sıklığı, yani birinci derece istatistik, korunur. Kılavuz aracı bu nedenle birinci derece istatistiksel testlere dayanıklı olarak tanımlar. JPEG dosyalarında takas edilen değerler nicemlenmiş DCT katsayılarıdır: Aletheia’nın steghide analizi, değişikliklerin çoğunlukla aralarında 1 fark olan katsayılar arasında yapıldığını ve sıfır değerli katsayılara dokunulmadığını gösterir. Ses dosyalarında aynı algoritma piksel yerine ses örnekleri üzerinde çalışır.

Steghide’ın son resmî sürümü Ekim 2003’te yayımlanan 0.5.1’dir ve proje sitesi o tarihten beri güncellenmemiştir. Dağıtımlar paketi yamalarla sürdürür: Debian 13 (trixie) 0.5.1-15 sürümünü, Debian’ın kararsız dalı ise 2024 tarihli bir git anlık görüntüsünü paketler. Aşağıda anlatılan tohum zayıflığı 0.5.1 için belgelenmiştir.

Temel komutlar

Debian ve Ubuntu depolarında paket adı steghide’dır. Aşağıdaki örneklerde parola komut satırında verilmez; steghide parolayı etkileşimli olarak sorar. -p seçeneği parolayı kabuk geçmişine ve süreç listesine düşürdüğü için yalnız deneme ortamlarında kullanılmalıdır.

# secret.txt dosyasını cover.jpg içine göm, sonucu stego.jpg olarak yaz.
# -sf verilmezse steghide değişikliği doğrudan cover.jpg üzerine yapar.
steghide embed -cf cover.jpg -ef secret.txt -sf stego.jpg

# Gömülü veriyi çıkar; -xf yalnız çıktı dosyasının adını belirler
steghide extract -sf stego.jpg -xf cikti.txt

# Dosyanın biçimini ve taşıyabileceği veri miktarını göster
steghide info stego.jpg

steghide info bir dedektör değildir. Dosyanın biçimini ve kapasitesini gösterir, ardından gömülü veri hakkında bilgi almak isteyip istemediğinizi sorar ve bunun için parolayı ister. Parola bilinmiyorsa dosyada steghide verisi olup olmadığını söyleyemez. -xf de gizli dosyanın adını tahmin etmez; çıkarılan verinin yazılacağı dosyayı belirler. Verilmezse steghide, gömme sırasında saklanan özgün dosya adını kullanır.

Meşru kullanım ve CTF

Steganografinin yasal kullanımları vardır:

Zararlı yazılımlar steganografiyi nasıl kullanır?

İçine kod gizlenmiş bir resmi açmak tek başına sisteme bulaşma yaratmaz. Resim görüntüleyici gizli baytları çalıştırmaz, onları fark etmez bile. Zararlı yazılımlarda steganografi bir gizleme katmanıdır: yükü (payload) veya komuta-kontrol (C2) bilgisini görünüşte zararsız bir dosyada taşır. Yükü çıkarıp çalıştıran, hedef sistemde zaten çalışan ayrı bir yükleyici (loader) ya da tarayıcıda çalışan bir betiktir. Görüntü işleyen kütüphanedeki bir güvenlik açığını tetikleyen bozuk dosyalar ayrı bir sınıftır; bu steganografi değil istismardır (exploit).

Aşağıdaki vakaların hiçbirinde steghide kullanılmamıştır. Her birinde saldırganlar çözme kodunu kendi zararlı yazılımlarının içine koymuştur.

Lurk (2014)

SecureWorks’ün Lurk analizine göre bu indirici (downloader), ele geçirilmiş sitelerdeki bir Flash açığı (CVE-2013-5330) üzerinden bulaşıyordu. Komuta sunucusu yanıt olarak bir BMP görüntüsü gönderiyor, indirilecek asıl zararlı yazılımın şifreli URL’si bu görüntüdeki baytların en anlamsız bitlerine gömülü oluyordu. Bazı örneklerde zararlı kodun kendisi de bırakıcı (dropper) DLL’in kaynak bölümündeki bitmap görüntülerinde saklanıyordu.

Stegoloader (2015)

Dell SecureWorks’ün 2015 tarihli raporu, Stegoloader’ın korsan yazılım araçlarını andıran ..._keygen.exe gibi dosya adlarıyla dağıtıldığını belirtir. Dağıtım modülü meşru bir barındırma sitesinden PNG görüntüsü indirir, her pikselin renk değerinin en anlamsız bitini okur, çıkan veriyi RC4 ile çözer ve ana modülü diske yazmadan bellekte çalıştırır.

Stegano ve AdGholas (2016)

ESET’in incelediği kampanyada, popüler haber sitelerinde gösterilen reklam görsellerinin (banner) alfa kanalına, yani piksel saydamlığına, JavaScript kodu gizlenmişti. Reklam betiği görseli okuyup gizli kodu çözüyor, analiz ortamında olmadığını doğruladıktan sonra kullanıcıyı Flash açıklarını hedefleyen Stegano istismar kitine (exploit kit) yönlendiriyordu. ESET, sonraki güncellemede bu kampanyanın AdGholas grubunun yeni bir dalgası olduğunu belirtmiştir.

Stegosploit (2015, araştırma)

Saumil Shah’ın HITB 2015 Amsterdam konuşmasında sunduğu Stegosploit, sahada görülen bir saldırı ailesi değil, bir kavram kanıtıdır (proof of concept). Tarayıcı istismar kodu görüntünün piksellerine gömülür; aynı dosya hem geçerli bir görüntü hem de pikselleri çözen kodu taşıyan geçerli bir HTML/JavaScript dosyası olarak hazırlanır. Burada da gizli kodu çözen, dosyaya eklenmiş ayrı bir betiktir.

MITRE ATT&CK bu tekniği T1027.003 (Steganography) alt tekniği olarak izler; APT29, Andariel, TA551 ve Tropic Trooper gibi grupların kullanımları kaynaklarıyla birlikte orada listelenir.

Tespit: steganaliz araçları ve sınırları

Steganaliz, bir dosyada gizli veri olup olmadığını belirleme işidir. Tek bir araç her yöntemi yakalamaz; araç, gömme yöntemine ve dosya biçimine göre seçilir.

Bu araçların ortak sınırı, bilinen gömme yöntemlerini aramalarıdır. Stegano’daki alfa kanalı şeması gibi zararlı yazılıma özgü kodlamalar genel amaçlı araçların listesinde yer almaz. Yukarıdaki vakalarda gizli veri, görüntünün kendisinden değil onu okuyan zararlı kodun analizinden yola çıkılarak bulunmuştur.

Savunma önerileri

Yasal ve etik çerçeve

Steganografi bir tekniktir. Aracı kendi dosyalarınızda, CTF ortamlarında veya yazılı izinle yürütülen güvenlik testlerinde kullanmak meşrudur. Başkasına ait bir sisteme izinsiz erişmek, zararlı yazılım dağıtmak veya veri sızdırmak ise steganografi kullanılsın ya da kullanılmasın ceza mevzuatına göre suçtur; Türkiye’de başta Türk Ceza Kanunu’nun bilişim alanındaki suçlara ilişkin bölümü olmak üzere birden fazla hüküm kapsamına girebilir. Kurum içinde steganaliz amacıyla çalışanların dosyaları veya trafiği inceleniyorsa, incelemenin kişisel verilerin korunması mevzuatına ve yazılı bir kurum politikasına dayanması gerekir.

Sonuç

Steghide, steganografinin nasıl çalıştığını öğrenmek ve CTF görevlerini çözmek için kullanışlı bir araçtır. Son resmî sürümü 2003’te çıkmış olması ve 32 bitlik tohumu nedeniyle gerçek bir gizlilik ihtiyacı için uygun değildir; zayıf parolalı ya da şifresiz steghide dosyaları StegSeek ile kısa sürede açılabilir. Zararlı yazılım bağlamında steganografi tek başına bir saldırı değil, yükü veya komutu taşıyan bir gizleme katmanıdır. Savunmada görüntüleri tek tek taramak yerine onları okuyan kodu, dış bağlantıları ve kullanıcı yüklemelerinin işlenmesini birlikte ele almak daha sonuç verir.

Birincil kaynaklar