17 Ocak 2012

Alınması gereken güvenlik önlemlerinin %20'sini alırsak güvenliğimizi %80 seviyelerine çıkarmış oluruz diye bir söz okumuştum bir zamanlar. Gerçekleştirilen hacking faaliyetlerinin birçoğunun incelendiğinde bu sözün ne kadar doğru olduğuna hak vermemek elde değil.Burdan yola çıkarak ssh kullanımında uyulması gereken bir kaç ipucuna değineceğim bu yazımda.Sizde bu adımları gerçekleştirerek uzak sistemlerinizi yönetmek için ssh'ı gönül rahatlığı ile kullanılabilir ve güvenliğinizi büyük oranda sağlamış olursunuz.Secure-ssh yapmış olacaksınız :) Aksi halde bu güvenlik önlemleri alınmazsa bruteforce veya parola tahmin saldırıları ile karşıkarşıya kalabilir ve sisteminiz SSH üzerinden kolaylıkla ele geçirilebilir. Tavsiyemiz bu servisin kapatılmasına yönelik fakat açık kalması zorunlu ise uyulması gereken bazı adımlardan bahsetmek isterim.



Farklı bir port üzerinden ssh servisine erişim yapmak ;
Bunun için /etc/ssh/sshd_config altında Port 22 değeri ile oynanarak istenilen herhangi bir port değeri seçilir.
Veya burada alt alta birkaç satır yazılarak birden fazla port üzerinden erişimde verilebilir.
Port  33345
Port  33451
Bu işlem yapıldıktan sonra ssh servisi restart edilmelidir. Bunun için debian tabanlı sistemler için  /etc/init.d/ssh restart komutu verilebilir.

Portunuzu değiştirdiken sonra uzaktan aşağıdaki komutlar ile bağlanılabilir:
Ssh için :  ssh -p 33345 celal@remotehost
Scp için:  scp -P 33345 celal@remotehost:/root/Desktop/dosya  /root/Desktop/
Sshfs için:  sshfs -p 33345 /root/Desktop/mountdirectory  celal@remotehost:/etc/
Burada ssh uzak erişimler için,scp ssh kullanarak dosya transferi için, sshfs ise ssh kullanarak local bir dizini uzak dizine mount etmek için kullanılmıştır. Kullanıcı yetkilerine göre yukarıdaki komutları kullanabilir.Dikkati çekmek istediğim uzak portu belirtme parametresi,görüldüğü gibi scp için P(büyük)  , ssh ve sshfs için p(küçük) harf ile yazılmalı.
Böylece saldırganların default ssh portu(22) üzerinden yapacağı saldırıları önlemiş oluruz.Peki saldırgan sizin bu portunuzu bulması çok mu zor elbette değil.Full tcp port scan yaptığında bu portu ve üzerinde çalışan servisi bulacaktır. Öyleyse saldırganın işini biraz daha zorlaştıralım.Açık portu bulsa dahi saldırı denemesi yapacağı kullanıcı adını bulmasını zolaştırmak için aşağıdaki seçeneği uygulayalım.

SSH üzerinden root kullanıcısının erişimi engellenmelidir:
Uzak sistemlerden root kullanıcısının erişimi engellenmesi de oldukça önemlidir.Böylece kullanıcı bruteforce, parola tahmin,sözlük saldırılarında başarılı olabilmesi için kullanıcı adını bulması gerekecektir. Saldırganın hem kullanıcı adı hem şifre deneme yanılması yapmasını sağlayarak saldırganın işini bir miktar daha zora sokmuş olacağız.
Bunun için;  /etc/ssh/sshd_config altında PermitRootLogin yes satırı bulunup burada yes yerine no yazıp kaydedip çıkalım.
Ssh servisi restart  (/etc/init.d/ssh restart) edilmelidir. Böylece kullanıcı Ssh üzerinden root hakları ile sisteminize erişemez. Kullanıcı adınızı tahmin edebilirse,normal kullanıcı hakları ile sisteminize erişip oradan belki kernel zaafiyeti,history dosyaları,./htaccess dosyalarına göz atacak ve birşeyler bulmaya çalışacaktır. Veya localde saldırı deneyebilir,bunun için kendisine ait wordlist v.s bir şekilde sunucuya atması gerekebilir. Tabi bu local bruteforce saldırısını yine root kullanıcısı için yapamaz çünkü local de de deniyor olsa başarılı olamayacaktır.Diğer kullanıcıları /etc/passwd altında görerek onlara karşı belki deneyebilir.Görüldüğü gibi saldırganın işini oldukça güçleştirdik. Yazma yetkisi olmayacağı için kullanıcıların tutulduğu /etc/passwd dosyasında veya görme yetkisi olmadığı için parola hash'lerinin tutulduğu /etc/shadow   dosyalasında herhangi bir değişiklik yapamayacaktır. Peki /ssh/sshd_config den root erişimini açıp uzaktan root erişimlerine açamaz mı? Hayır bu dosyayı da sadece okuyabilir değiştiremez.

Biz ise uzaktan normal bir kullanıcı ile sisteme erişim yaptıktan sonra haklarımızı root yetkilerine çıkarmak için su - veya su root komutlarını koşturmalıyız.Böylece oturum sahibi root kullanıcısı olarak değişecektir.

Şimdi saldırganın işini oldukça zorlaştıralım ve neredeyse ssh üzerinden erişmesi mümkün olmasın.

Uzak erişim yapacak IP adreslerinin belirlenmesi(Static source IP tanımı):

Bu yöntemle uzaktan erişim yapacak IP adresini kısıtlayabilirsiniz.Bunun için sistem önündeki firewall'unuzda SSH'ınızın çalışacağı TCP portuna doğru gelen trafiği belli bir source'dan gelmesine izin verilmeli geriye kalan trafik drop edilmelidir.Ben bunu iptables firewall'u üzerinde nasıl yapacağını göstereceğim.Siz kendi donanımsal firewall'unuz üzerin de benzer mantık ile gerçekleştirebilirsiniz.
Sırası ile aşağıdaki komutlar verilmelidir:

iptables -A INPUT -p tcp -s YourRemoteIp -d YourLocalIp --dport SshCalısanPort 
-m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp -s YourLocalIp -d yourRemoteIp --sport SshCalısanPort 
-m state --state ESTABLISHED -j ACCEPT

Bu komutlardan üsteki sizin sisteminize gelen yalnızca YourRemoteIp ile belittiğiniz IP adresinden hedefi TCP 22 olan yeni bağlantı istekleri(NEW) veya daha önceden kurulmuş bağlantılar(ESTABLISHED) için erişim izni verecektir.
Alttaki komut ile ise yalnızca dışarıdaki belirttiğiniz IP adresine erişim verilmiştir.Fakat kurulan bir bağlantı var ise(ESTABLISHED) buraya doğru erişim olacaktır.Yani siz dışardaki sunucunuza bağlantı başlatamazsınız.


Yinede tavsiye edilen göz önünde bulunan kullanımdaki sistemlerinizin uzak erişimlere tamamen kapatılması.Ssl vpn/openvpn benzeri bir sistem ile sisteme erişmeniz tavsiye edilir.

0 yorum:

Yorum Gönder

Her türlü eleştiri,yorum,ekleme ve düzeltmeye yönelik fikirlerinizi paylaşabilirsiniz.Hakaret içeren yorumlar filtrelenmektedir.

Makalelerin kötüye kullanım kullanıcının sorumluluğundadır. | networkpentest.net. Blogger tarafından desteklenmektedir.