Memcached Amplification Açığını Kapatmak

Facebook’un da önde gelen geliştiricileri arasında yer aldığı Memcache yapısı birçok kullanıcı tarafından sunucu yükünü hafifletmek ve performans artışı sağlamak amacıyla kullanılıyor. Türkiye’de de çoğu sunucuda kullanılan bu protokol kapsamında özellikle Şubat ayının son haftasında kullanıcıları küresel çapta etkileyen bir güvenlik açığı fark edildi.

Vaka, Kullanıcıların sunucularında Memcache yapısı tarafından kullanılan TCP/UDP 11211 portundan kaynaklanan bir açık nedeniyle artan trafik çıkışlarına dayanmaktadır.

Mevcut durumda Kullanıcıların kendi sunucuları içinden Memcache uygulamasını kontrol etmelerini ve TCP/UDP 11211 portuyla ilgili aşağıdaki güvenlik önlemlerini uygulamalarını öneriyoruz.

Güvenlik için atılması gereken adımlar:

Memcache tarafındaki adımları uygulamadan önce firewall üzerinde TCP/UDP 11211 portuna erişimi kısıtlamalısınız. Bazı mimarilerde Memcache’e dışarıdan erişilmesi gerekebiliyor. Bunun için IPtables üzerinde (CentOS 7.x’de firewalld) kurallar oluşturmalısınız.

Erişim izni için aşağıdaki 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. Kuralları eklerken ACCEPT kurallarının DROP kurallarının üstünde olduğundan emin olun.

Daha sonra da aşağıdaki satırları kullanarak bu portun public erişimini kapatın.

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

Not: Bu işlemin sonunda iptables -L çıktısıyla kural sırasını kontrol edin. Eğer DROP kuralları ACCEPT önceyse sorun yaşayabilirsiniz. En üstte ACCEPT kurallarınız olmalı, altta da DROP kurallarınız olmalıdır.

Memcache, Windows üzerinde de çalıştırılabilen bir yapı olduğu için Windows sunucularda da gerekli config düzenlemesinin yapılması gerekiyor. 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ı yaparak diğer tüm istekleri droplatmalısınız.

Memcache tarafında uygulanabilecek adımlar:

Memcache localden dinletip, çalıştırın.

Eğer dışarıdan bir IP’nin bu port ve servise ulaşması gerekmiyorsa:

Metin editörüyle (vi, nano veya vim) /etc/sysconfig/memcached dosyasını açın. (CentOS için.)
OPTIONS=”” parametresini bulun.
OPTIONS=”-l 127.0.0.1″ olarak güncelleyin.
Memcache servisini restart edin.
Netstat -ntlp komutunu çalıştırıp, Memcache servisinin sadece 127.0.0.1 dinlediğinden emin olun.
Memcache socket bazlı çalıştırın.

Eğer tüm servisleriniz aynı sunucudaysa Memcache socket bazlı da çalıştırabilirsiniz.

Bu daha performanslı bir yöntemdir. Bunun için yine OPTIONS parametresini aşağıdaki şekilde güncelleyin ve servisi yeniden başlatın.

OPTIONS=”-s /tmp/memcached.socket”

Not:Eğer memcached socket bazlı çalıştırırsanız yazılım tarafında da socket bazlı çalışacak şekilde yapılandırmalısınız. IP kullanamazsınız.

Bu konuyla ilgili memcached tarafında 1.5.6 release update çıkarıldı. Dilerseniz update edebilirsiniz. Bu yapıyla UDP disable ediliyor.

Memcached UDP Release Update Package 1.5.6

Memcache Güncelleme yapmak

Memcache güncellemek için aşağıdaki kod bloğunda bulunan satırları sırası ile uygulayın.

yum install libevent libevent-devel

cd /usr/local/src

wget http://memcached.org/files/memcached-1.5.6.tar.gz

tar xvzf memcached-1.5.6.tar.gz

cd memcached-1.5.6

yum install gcc

yum install make

./configure

make && make install

memcached -d -u nobody -m 512 -p 3452 127.0.0.1

Memcache nedir?

Yüksek trafikli web sitelerinin başvurduğu bir cache mimarisi olan Memcache protokolü, sistem performansını yükseltmek ve sunucu yükünü hafifletmek için kullanılıyor. Sorguları RAM üzerinde ön belleğe alan ve bir sonraki çağrılışında verinin çok daha hızlı dönmesini sağlayan bir yapıdır. Bu sayede veri tabanı ve PHP kodu arasındaki trafiği en az seviyeye indirerek performansı yükseltmek mümkün olabiliyor.

Memcache güvenlik açığı nasıl kullanılıyor?

Öncelikle saldırılar UDP paketlerin 11211 portu üzerinden gönderilmesiyle sağlanıyor. Memcache açığından faydalanılarak yapılan saldırı tipine literatürde “amplification attacks” deniyor. Saldırgan, kullanabileceği sunucuyu tespit ederek o porttan sunucuya saldırı çıkışının yapılmasını istediği IP üzerindenmiş gibi (spoof) paket gönderiyor. Sunucu gelen bu paketi bilmediği için reddettiğine dair karşı bir paket hazırlıyor. Muhtemelen ilk paket TCP olarak gönderiliyor ve sonrasında da memcached 11211 portu üzerinden UDP paketler ileterek cevap veriyor. Saldırı süreci de böylelikle başlamış oluyor. Bu durum kullanıcının hacklendiği anlamına gelmemekle birlikte daha çok mevcut sunucuların saldırı ağına dahil olduğunu gösteriyor. Amplification saldırılarında, 1’e 5.000 etkisinde saldırı yapılabilmesi mümkün. Dolayısıyla hat limitiniz 1 Gbit/s ise dışarıya gönderebileceğiniz trafik 5-6 Gbit/s boyutlarına kadar çıkabiliyor.

“Memcached Amplification Açığını Kapatmak” üzerine bir yorum

kokosnuss için bir yanıt yazın Yanıtı iptal et