IRC'nin en eski ve en somut güvenlik problemi, bir kullanıcının kanala girdiği anda IP adresinin veya gerçek ana makine adının herkese görünmesidir. Bu bilgi, hedefli DDoS saldırıları, coğrafi konum tahmini ve ISS üzerinden kimlik eşleştirmesi için yeterlidir. UnrealIRCd'de bu sorunun çözümü cloaking, yani ana makine adının kriptografik olarak maskelenmesidir.

Bu rehber cloaking'in nasıl çalıştığını, cloak-keys ve cloak modüllerinin doğru kurulumunu, mode +x ile zorlama yöntemlerini, maskelenmiş host üzerinden ban yazmayı ve anahtar sızması durumunda izlenecek yolu ele alıyor.

Cloaking ne yapar, ne yapmaz


Cloaking kapalıyken bir katılım şöyle görünür:

CODE TERMINAL
*** Kullanici ([email protected]) has joined #trsiber


Cloaking açıkken hostun ilk bölümü maskelenir:

CODE TERMINAL
*** Kullanici ([email protected]) has joined #trsiber


Maskeleme yalnızca JOIN'de değil; PART, WHOIS, WHO ve hostun göründüğü her yerde geçerlidir. Gerçek host ve IP yalnızca IRCOp'lar tarafından görülebilir. Aynı gerçek host için her zaman aynı maskelenmiş host üretilir; bu, ban yazmayı mümkün kılan temel özelliktir.

Cloaking IRC dışındaki sızıntıları engellemez. Kanala bağlantı bırakan bir saldırgan, kurban o adrese girdiğinde web sunucusu günlüklerinden gerçek IP'yi öğrenir. DCC dosya transferi, harici görsel önizlemeleri ve bazı istemci eklentileri de aynı riski taşır. Cloaking bir katmandır, tek başına anonimlik değildir.

Maskelenmiş IP biçimleri ve ban mantığı


Kullanıcının hostu çözülemiyorsa yalnızca IP bilinir ve maskelenmiş host farklı bir biçim alır: IPv4 için üç bloklu ve .IP ile biten, IPv6 için iki nokta ile ayrılmış bir yapı. Bu yapı bilinçli olarak tasarlanmıştır, çünkü hangi bölümü joker ile değiştirdiğinize göre ban kapsamı değişir.

Adres türüMaskelenmiş ban kalıbıGerçek karşılığıKapsam
IPv4*!*@AAAAAAAA.BBBBBBBB.CCCCCCCC.IP*!*@198.51.100.150Yalnızca tek IP
IPv4*!*@*.BBBBBBBB.CCCCCCCC.IP*!*@198.51.100.*/24 bloğu
IPv4*!*@*.CCCCCCCC.IP*!*@198.51.*/16 bloğu
IPv6*!*@AAAAAAAA:BBBBBBBB:CCCCCCCC:IPTek IPv6 adresiYalnızca tek IP
IPv6*!*@*:BBBBBBBB:CCCCCCCC:IP/112 bloğuDar blok
IPv6*!*@*:CCCCCCCC:IP/64 bloğuTipik olarak tek abone


Pratik sonuç: kanal operatörleri maskelenmiş hostu görmelerine rağmen IP bloğu düzeyinde ban yazabilir. IPv6'da doğru hedef neredeyse her zaman /64 bloğudur, çünkü bir aboneye tahsis edilen aralık budur; tek IPv6 adresini banlamak etkisizdir.

Cloak modülünü seçmek


UnrealIRCd 6'da en az bir cloak modülü yüklü olmak zorundadır; hiçbiri yüklenmemişse sunucu "No cloaking module loaded" hatasıyla başlamaz. Modüller çoğu kurulumda conf/modules.default.conf üzerinden zaten yüklenir.

ModülKullanım durumu
cloak_sha256Yeni kurulan ağlar için önerilen algoritma
cloak_md5UnrealIRCd 5'ten yükseltilen ağlarda eski maskeleri ve dolayısıyla mevcut banları korumak için
cloak_noneCloaking'i hiç kullanmayan ağlar için (önerilmez)


CODE TERMINAL
# unrealircd.conf - yeni kurulum
loadmodule "cloak_sha256";

# UnrealIRCd 5'ten yukseltme yapiyor ve eski ban kaliplarini koruyorsaniz
# loadmodule "cloak_md5";


Modül değiştirmek, tüm kullanıcıların maskelenmiş hostunu değiştirir. cloak_md5'ten cloak_sha256'ya geçiş, maskelenmiş host üzerine yazılmış her banı geçersiz kılar. Bu geçişi yalnızca ban listesini yeniden üretmeyi planlıyorsanız yapın.

Cloak anahtarlarını üretmek


Maskeleme algoritması üç gizli anahtar kullanır. Anahtarları elle yazmayın; UnrealIRCd'nin üreticisi yeterli entropiyi sağlar.

CODE TERMINAL
# Unix
./unrealircd gencloak

# Windows
unrealircdctl gencloak


Çıkan blok doğrudan yapılandırmaya alınır:

CODE TERMINAL
set {
    cloak-keys {
        "g5Ea8V0j7gb3t7w8QFmFV7Qoacit6T62eOk3jlIn7Qg0YaGgBqj55";
        "mVv4uVw3306We2HvgPWTk1q0Nvnrl6uCr6Bor57c01d4eB5s60eQ3";
        "HPXLauAcFF058V4Ian7X1hlt0Yj0MGmooNqs5bALL3um5GwD3O6w0M5L";
    }
}


Kurallar nettir: tam olarak üç anahtar, her biri 50 ile 100 karakter arasında, küçük harf, büyük harf ve rakam karışımı. Anahtarlar ağdaki tüm sunucularda birebir aynı olmak zorundadır.

Ağ genelinde tutarlılık


Hem cloak-keys hem de host önekinin (UnrealIRCd 6'da set::cloak-prefix, eski yapılandırmalarda set::hiddenhost-prefix) tüm sunucularda aynı olması gerekir. Aksi hâlde aynı kullanıcı sunucuya göre farklı maskelenmiş host alır; kanal banları bir sunucuda çalışır, diğerinde çalışmaz ve kullanıcılar banın içinden geçiyormuş gibi görünür.

CODE TERMINAL
set {
    cloak-prefix "trs";
}


Önek genellikle ağ adını temsil eden üç veya dört harften oluşur ve maskelenmiş hostun başına eklenir: trs-2DCA3201.ornek-isp.net.

Cloaking'i varsayılan ve zorunlu yapmak


Cloaking kullanıcı modu +x ile etkinleşir. Kullanıcıların bunu elle yapmasını beklemek yerine bağlantı anında uygulanmalıdır:

CODE TERMINAL
set {
    modes-on-connect "+ixw";
    restrict-usermodes "x";
}


modes-on-connect ile her bağlanan kullanıcı +x alır. Ancak kullanıcı daha sonra /MODE nick -x diyerek maskeyi kaldırabilir. restrict-usermodes içine x eklenmesi bunu engeller ve maskeyi kalıcı hâle getirir.

UnrealIRCd 6.1.1 ve sonrasında modes-on-connect değeri security-group bazında ezilebilir. Bu, örneğin TLS ile bağlanan ve hesabı doğrulanmış kullanıcılara farklı davranmak isteyen ağlar için kullanışlıdır; ancak cloaking söz konusu olduğunda istisna tanımlamamak en güvenli tercihtir.

Hostname yerine her zaman IP maskesi kullanmak


Varsayılan davranışta (set::cloak-method host) çözülen bir hostname varsa onun bir bölümü maskelenir, geri kalanı görünür kalır. Bu, kullanıcının ISS'sini ve çoğu zaman şehrini açık eder. Daha yüksek gizlilik isteyen ağlar hostname'i hiç kullanmaz:

CODE TERMINAL
set {
    cloak-method ip;
}


Bu ayarla her kullanıcı 6CAB8F7C.1067B5DC.20B6CFB2.IP biçiminde bir maske alır. ISS bilgisi tamamen kaybolur; buna karşılık operatörler için "hangi sağlayıcıdan geliyor" bilgisi de ortadan kalkar, dolayısıyla kötüye kullanım incelemelerinde IRCOp'ların gerçek hostu görme yetkisine daha çok ihtiyaç duyulur.

Anahtar sızması durumunda ne yapmalı


Cloak anahtarları gizli kalmak zorundadır. Anahtarlar sızarsa saldırgan, maskelenmiş bir hosttan yola çıkıp olasılıkları deneyerek gerçek IP'yi kaba kuvvetle çözebilir. Bu, cloaking'in sağladığı korumanın tamamen kaybedilmesi anlamına gelir.

Anahtar değiştirmenin kaçınılmaz bir maliyeti vardır: yeni anahtarlarla üretilen maskeler eskilerden farklı olur ve maskelenmiş host üzerine yazılmış tüm banlar (kanal banları, GLINE, ZLINE, extended ban kalıpları) geçersiz kalır. Eski anahtarla yazılmış banları yeni anahtara çevirmenin bir yolu yoktur.


  1. Sızıntının kapsamını belirleyin: anahtarlar hangi yedekte, hangi depoda veya hangi sunucu görüntüsünde yer aldı.
  2. Yeni anahtarları gencloak ile üretin ve ağdaki tüm sunucularda aynı anda güncelleyin.
  3. Kritik banları önceden gerçek IP veya aralık tabanlı karşılıklarına (ZLINE, GZLINE, ban ip) çevirin; bu banlar anahtar değişiminden etkilenmez.
  4. Değişimi düşük trafikli bir zaman diliminde, tüm sunucuları koordineli biçimde yeniden başlatarak uygulayın.
  5. Değişimden sonra kanal ban listelerini gözden geçirin ve eski maskeleri temizleyin.



Anahtarları nerede tutmamalı



  • Genel veya kurum içi git depolarında. Bir kez commit edilen anahtar, geçmişten silinmeden gizli sayılmaz.
  • Yapılandırma yedeklerinin şifresiz tutulduğu paylaşımlı dizinlerde.
  • Destek taleplerinde veya forum gönderilerinde paylaşılan tam conf dosyalarında. Sorun bildirirken cloak-keys bloğunu mutlaka çıkarın.
  • Sunucu barındırıcısına gönderilen hata ayıklama çıktılarında ve core dump dosyalarında.



Yapılandırmayı doğrulamak



  • Sunucuyu başlattıktan sonra test istemcisiyle bağlanın ve /WHOIS ile kendi hostunuzun maskelenmiş olduğunu doğrulayın.
  • /MODE nick -x deneyin; restrict-usermodes doğru ayarlandıysa işlem reddedilir.
  • İkinci bir sunucuyu ağa bağlayın ve aynı kullanıcının her iki sunucuda aynı maskelenmiş hostu aldığını karşılaştırın. Farklıysa cloak-keys veya cloak-prefix eşleşmiyor.
  • Maskelenmiş host üzerine bir kanal banı yazın ve kullanıcının gerçekten engellendiğini test edin.
  • Cloak anahtarlarını değiştirdiğinizde /REHASH yeterli değildir; değişikliğin tüm sunucularda etkili olması için koordineli yeniden başlatma gerekir.



Sonuç


Cloaking, UnrealIRCd'de en az yapılandırma ile en çok kullanıcı koruması sağlayan özelliktir. Doğru kurulum üç şeye indirgenir: bir cloak modülü seçmek ve bir daha değiştirmemek, gencloak ile üretilmiş üç anahtarı tüm sunucularda aynı tutmak ve +x modunu modes-on-connect ile vererek restrict-usermodes ile kilitlemek.

Gizlilik hassasiyeti yüksek ağlarda cloak-method ip ek bir kazanç sağlar. Buna karşılık en kritik operasyonel disiplin anahtarların gizliliğidir; çünkü anahtar sızıntısının bedeli yalnızca kullanıcı gizliliğinin kaybı değil, tüm ban altyapısının yeniden kurulmasıdır.
TR Siber Ekibi Yazar · TRSiber
Kaynak bağlantısı ← Ana sayfaya dön