Merhaba,
Son günlerde revaçta olan memcached açığı hakkında bilgilendirici Türkçe içerik oluşturmak istedim. Keza Türkiye’de çoğu sunucuda memcached yapısı default kurulduğu ve public erişime (0.0.0.0) açık bırakıldığı portscan ile ortaya çıkıyor. Öncelikle memcache/memcached nedir yüzeysel ondan bahsedeyim.
Özellikle WordPress kullananların vazgeçilmezi olduğunu düşünüyorum. Memcached bir cache mimarisidir. Sorguları ram üzerinde ön bellekler ve bir sonraki çağırılışında verinin hızlı dönülmesini, haliyle de performans arttırımını ve sunucu yükünün hafiflemesini sağlar. Facebook ekibi tarafından (en son öyleydi) geliştirilmeye devam ediyor. Memcached tcp/udp 11211 portunu kullanır. Şu an ki saldıraların odak noktası da bu port.
Memcached DDoS saldırıları nasıl gerçekleştiriliyor?
Öncelikle saldırılar UDP paketlerin 11211 portu üzerinden gönderilmesiyle sağlanıyor. Memcached açığından faydalanılarak yapılan saldırı tipine literatürde “amplification attacks” deniyor. Saldırgan, ddos amaçlı kullanabileceği sunucuyu tespit ederek o porttan sunucuya sahte udp paket gönderir. Sunucu gelen bu paketi bilmediği için reddettiğine dair karşı bir paket hazırlar. İşte bu saldırı süreci de böylelikle başlamış olur. Saldırgan, saldırı yapılmasını istediği IP adresi üzerinden (spoof) istek gönderip, Memcached kullanan ve 11211 portu açık sunucudan buraya cevap dönülmesini sağlar. Böylelikle DDoS trafiği başlamış olur.
Merak etmeyin sunucunuzdan saldırı çıkıyor olması (memcached kaynaklı) hacklendiğiniz anlamına gelmiyor. Sadece saldırganın saldırı ağına dahil olduğunuzu gösterir. Bu saldırı tipinin kısaca çalışma mantığı bu. Ayrıca amplification saldırılarında, 1’e 5000 etkisinde saldırı yapılabilir. Yani sizin hat limitiniz 1 Gbit/s ise dışarıya basabileceğiniz trafik 5-6 Gbit/s olacaktır.
Sunucum üzerinden DDoS saldırısı yapılıyor, ne yapmalıyım?
Öncelikle Memcached’in public erişimini kısıtlayıp, sadece localden çalıştırmalısınız. Bunun için sunucunuzda memcached config dosyasını bulup, içerisindeki OPTIONS=”” parametresini 127.0.0.1 ile değiştirin. Memcached’i localden çalıştırmalısınız. Bahsetmiş olduğum memcached dosyası CentOS’da /etc/sysconfig altındadır. Bu dosya içerisinde OPTIONS=”” bulup OPTIONS=”-l 127.0.0.1″ yapın. Daha sonra memcached servisini yeniden başlatın.
Güvenlik için yapılacak adımlar:
Memcached tarafında yapılacak adımları uygulamadan önce firewall üzerinde 11211 portuna erişimi kısıtlamalısınız. Bazı mimarilerde memcachede dışarıdan erişilmesi gerekebiliyor. Bunun için iptables üzerinde (CentOS 7.x’de firewalld) kurallar oluşturmalısınız.
1 2 3 4 5 6 |
Erişim izni için bu satırları kullanın. iptables -I INPUT -p tcp -s X.X.X.X --dport 11211 -j ACCEPT iptables -I INPUT -p udp -s X.X.X.X --dport 11211 -j ACCEPT X.X.X.X kısmına erişecek IP adreslerini yazın. |
Daha sonra da aşağıdaki satırları kullanarak bu portun public erişimini kapatın.
1 2 |
iptables -I INPUT -p tcp -s 0.0.0.0/0 --dport 11211 -j DROP iptables -I INPUT -p udp -s 0.0.0.0/0 --dport 11211 -j DROP |
Memcached Windows üzerinde de çalıştırılabilir olduğu için Windows sunucularda da config düzenlemesini yapmadıysanız benzer zafiyet söz konusu. Local IP’den dinlettirme işlemini Windows’daki config üzerinden de yapmalı ve Windows Firewall üzerinden 11211 portu için scope (Whitelist IP) tanımlaması yapıp, diğer tüm istekleri droplatmalısınız.
Şimdi gelelim memcached tarafında yapılabileceklere.
a. Memcached localden dinletip, çalıştırın:
Eğer dışarıdan bir IP’nin bu port ve servise ulaşması gerekmikiyorsa:
1. Metin editörüyle (vi, nano veya vim) /etc/sysconfig/memcached dosyasını açın. (CentOS için.)
2. OPTIONS=”” parametresini bulun.
3. OPTIONS=”-l 127.0.0.1″ olarak güncelleyin.
4. memcached servisini restart edin.
5. netstat -ntlp komutunu çalıştırıp, memcached servisinin 127.0.0.1 dinlediğinden emin olun. (0.0.0.0) olmamalı.
Üstteki çözüm kesin çözümdür.
b. Memcached socket bazlı çalıştırın:
Eğer tüm servisleriniz aynı sunucudaysa memcached socket bazlı da çalıştırabilirsiniz. Bu daha performanslıdır.
Bunun için yine OPTIONS parametresini aşağıdaki şekilde güncelleyiniz ve servisi yeniden başlatınız.
OPTIONS=”-s /tmp/memcached.socket”
c. Memcached update edin:
Memcached UDP Release Update Package 1.5.6
Eğer ISP firmasıysanız da 11211 portunun routerlar üzerinde INPUT/OUTPUT engelleyecek rule girin ve tespit ettiğiniz müşterilerinizi bilgilendirin. Hat limitlerinden dolayı zaten müşterileriniz erişim problemi yaşadıklarını bildireceklerdir ve böylelikle aksiyon almanız kolaylaşacaktır.
Hazırladığım bu içeriği kopyalayıp paylaşabilirsiniz.
Umarım zamandan kazanmanızı sağlar.