04 Şubat 2009

Bilgisayarlarınızı kontrol edin

Uzun bir süredir kullanıcı parolarını ele geçirip sistemden sisteme SSH ile atlayan bir takım art niyetli ve/veya meraklı kişiyi takip ediyorduk. Onlar parola ele geçirdikçe ilgili kullanıcıların hesaplarını kilitleyi parolarını değiştirmelerini sağlıyorduk. Ara sıra oynadığımız bu köşe kapmaca fazla sık olmadığı için elle tutulur çok fazla önlem almamıştık.

Bu son bir haftalık bir süre içinde, ele geçirilen kullanıcı hesaplarından girilip, yerel açıklardan faydalanarak pek çok makinada root olunduğunu fark ettik. Root olduktan sonra saldırganımız, ssh sunucusunu ve istemcisini kendi getirdiği sürümlerle değiştiriyor; aynı makinaya bağlanan başka kullanıcıların parolalarını topluyor. ssh istemcisini değiştirerek de, bu ele geçmiş makina üzerinden yapılan diğer ssh bağlantılarındaki parolaları da kaydediyor.

Olayın çapı oldukça geniş, ele geçirilen makina üzerinden geçerek bağlantı kurulan tüm diğer makinalar da ele geçirilmiş. Bunun içinde sunucular, asistanların ve hocaların ofislerindeki makinaları, ve bağlantı kurdukları evlerindeki diğer makinalar da var. Bize yapılan saldırının aynısının kendi makinalarınıza yapılıp yapılmadığına bakmak için aşağıdaki komutları kullanabilirsiniz. Eğer komutlar ekrana çıktı veriyorsa siz de etkilenmişsiniz demektir.

strings /usr/sbin/sshd|grep "password auth from"
strings /usr/bin/ssh|grep "password auth to"
Temiz bir makinada bu komutlar çıktı vermiyor. Ancak komutun çıktı vermemesi makinanıza girilmemiş olduğunu garantilemiyor. Farklı bir yöntem kullanılarak bilgisayarınıza girilmiş olabilir. Eğer komutlar çıktı veriyorsa bizim makinalarımızda kullanılan yöntem ile sizin makinanıza da girildiğinden emin olabilirsiniz.

Saldırganımız çaldığı paroları /usr/share/doc ve /usr/share/locale altındaki dosyalarda şifrelenmiş bir biçimde tutuyor. "file" komutu bunları "data" dosyası olarak gösteriyor. Şüpheli dosyaları aramak için aşağıdaki komutları kullanabilirsiniz. Kurduğunuz paketlere göre /usr/share/doc altında bazı "data" dosyaları bulunuyor olabilir, bunlara tek tek bakarak şüphelerinizi giderebilirsiniz.

find /usr/share/locale/ -exec file {} \; | grep ": data"
find /usr/share/doc/ -exec file {} \; | grep ": data"

İşletim sisteminin farklı olmasının pek faydası olmadı bu saldırıda. Debian ve Ubuntu'nun farklı sürümlerinin yanı sıra Gentoo makinalara da girildiğini tespit ettik. Pardus ya da Fedora gibi başka bir dağıtım kullanıyor olmanız sizi tek başına korumaz; parolanız ele geçirildiğinde sudo ile root olunabilir. Ya da -şimdilik- sadece hesabınızı etkileyen bir keylogger ile root parolası ele geçirilebilir. Neler yapabileceğinizle ilgili aşağıda öneriler var.

Eğer makinanıza girilmişse, makinanıza tekrar güvenebilmek için sıfırdan kurulum yapmalısınız, çünkü saldırgan root olduktan sonra nereye nasıl bir arka kapı koyduğunu bulamazsınız. (Bazı şeyler bulsanız bile hepsini bulduğunuzdan %100 emin olamazsınız).

Yeni kurulum yaptıktan sonra bu tarz bir saldırıdan korunmanın yollarını şöyle sıralayabiliriz:

  • Kurulu paketlere güncelleme geldiğinde bunları hemen uygulayın. Servisleri ya da makinayı yeniden başlatmanız gerekiyorsa bunu ertelemeyin. Kullandığınız dağıtımın güvenlik duyurularını takip edin. (Pardus, Debian, Ubuntu)
  • SSH bağlantılarını sadece sizin kullanıdığınız bir kaç IP adresine sınırlayın.
  • Parola ile girişleri devre dışı bırakın: sadece anahtar çiftleri ile girişe izin verin. Evet çok sert bir önlem ama, IP kısıtlaması uygulayamayacağınız kadar çok kullanıcınız varsa şart. iki yıl köşe kapmaca oynadıktan sonra makinaların kırılabilme eşiğini oldukça yükseltecek olan bu önlemi alacağız, sizlere de tavsiye ederiz. Böylelikle basit bir keylogger kullanarak yakalanan parola ile makinaya girilemeyecek, girilebilmesi için anahtar çiftindeki özel anahtar dosyasının da ele geçirilmesi gerekecek. Nasıl yapacağınızı öğrenmek için SSH ile anahtar çifti kullanımı yazısı faydalı olacaktır.
  • Tek kullanımlık parolalara geçin: diğer iki önlemle birlikte de kullanılabilir. Özel anahtar dosyasının ele geçmesi senaryosuna karşı da korunmuş olursunuz. tek kullanımlık parola(one time password) yazısı yardımcı olabilir.

Son olarak siz de bir kurban iseniz; makinası ele geçirilen sistem yöneticileri için terapi grubumuza bekleriz :)

5 yorum:

Murat Koç dedi ki...

Önce SSH portunu değiştirin. Default 22 kullanmayın.

Sonra gereksiz yere string aramak yerine daha gelişmiş olan ve büyük ihtimalle daha önce adını dahi duymadığınız rootkitleri detect edebilen

http://www.chkrootkit.org/

gibi uygulamaları yükleyin. Böylece başka nerelerde ne gibi dosyaların etkilendiğini bulursunuz. nitekim /dev altına /tmp altına /var/run gibi dizinlerin altına çeşitli şekillerde attributeları değişmiş olan dosyalar olacaktır.

Sonra bulunan rootkit'in ne olduğunu öğrendikten sonra bununla ilgili olarak hangi dosyalarında etkilendiğini bulduktan sonra sistemden temizlemek oldukça kolay olacaktır.

Biraz daha (genel olarak) deneyim kazandığınız zaman zaten bu tür rootkitleri yeme ihtimaliniz azalır ve sonrasında yeseniz bile temizleme olasılığınız daha fazla artar.

Kolay gelsin,

Gökdeniz Karadağ dedi ki...

chkrootkit ve rkhunter'dan bahsetmek lazım, genel taramalar için faydalı. Ayrıca makina temizken dosyaların md5'ini alıp, sonradan değişip değişmediğini kontrol ediyorlar. Ancak bu saldırıda rkhunter ve chkrootkit bir şey göstermiyor, önceden md5 almadığımız için de faydası olmadı. Stringlere bakmak "gereksiz" değildi yani.

Rootkit geldikte sonra o makinaya güvenmeniz imkansız, temizlediğinizi düşünebilirsiniz ama birazcık işi bilen birisi gizlenmeyi başarabilir. Tek kesin çözüm temiz kurulum yapmak ve yedeklerden faydalanarak sistemi tekrar oluşturmak. Bunun için de suuncularda puppet veya cfegine gibi sistem ayarlarını tek hamlede yapabileceğiniz yazılımlar kullanmak işe yarayabilir. Sistemde yaptığınız tüm değişiklikleri puppet aracılığıyla yaparsanız, elinizde o sistemin kopyasını oluşturmak içi gereken her şey olur. Yeniden bir kurulumda yapmanız gereken tek şey ilgili puppet dosyasını etkinleştirmek.

Murat Koç dedi ki...

rpm --verify veya debsums bu işler için ideal oluyorlar. Önceden md5 almanıza gerek kalmaksızın paket dosyalarının md5 dahil çeşitli parametrelere göre tutuyorlar ve kontrol etmenizi sağlıyorlar. Yani stringlere bakmak gereksiz demeyelim ama öncelikli yöntem değil.

Rootkit sonrası makina temizlenebilir, o makinaya da güvenebilirsiniz. Sadece çok iyi analiz ve temizlik yapmanız ve açığı kapatmış olmanız gerekiyor. Bu süreç alacak bir iş olabilir ama 1 günü feda ederek makinayı temizleme işlemini yapabilirsiniz.

Ayrıca bazı sistemlerde ne yazık ki baştan formatlayarak yükleme opsiyonuna sahip olamayabiliyorsunuz. Dediğim gibi hasarlı olan servisi önce düzeltmekle işe başlayıp portunu değiştirerek ve o makinanın servis alanını daraltarak kapatmaksızın makinayı düzeltebilirsiniz.

Çok defa düzelttim bu şekilde başkaları tarafından kurulmuş ve rootkit yemiş sistemleri. Düzeltme sonrasında yapacağınız blackbox ve whitebox testleri ile sistem güvenliğinden emin olma yolunda yol alabilirsiniz.

Belirli aralıklarla bu testleri yapmak ise güvende olduğunuzu hissetmek için önemlidir.

Atalarımızın dediği gibi

Security is a process, not a product.

Benim de (acemi döneminde) zamanında kurduğum sistemler rootkit yedi :)

Deneyimi bu nedenle söylemiştim. Yanlış anlaşılmasın. Bir olayla karşılaştığınız zaman ancak nasıl tepki vereceğinizi öğreniyorsunuz.

Ara ara yönetimine sahip olduğunuz sistemlerinizi kendiniz mutlaka test edin. Emin olun daha az başınız ağrır.

Tekrar kolay gelsin.

T D dedi ki...

Güzel konu, teşekkürler...

javacikiz dedi ki...

Hem makaleniz, hem de yorumlar çok faydalı oldu, teşekkürler.