Zararlı yazılımlar Windows işletim sisteminden mi ibaret ? Tabii ki hayır özellikle botnet ağının parçası olan zombi sunucuların internette güvenlik yaması yüklenmemiş web uygulamalarını istismar etmek için taradığı günümüzde, Linux sunucu kullanımının Windows sunucu kullanımına kıyasla daha yüksek olması, Linux işletim sistemleri üzerinde çalışan zararlı yazılımların sayısında artışa neden olmaktadır.
Bugünkü yazımda üzerinde zararlı yazılım çalıştığından şüphe ettiğiniz bir Linux web sunucusu (veya masa üstü) üzerinde çalıştırabileceğiniz bir kaç basit komut ile nasıl zararlı yazılım hakkında bilgi edinebileceğinizden kısaca ve basitçe bahsedeceğim.
Çoğunlukla üzerinde zararlı yazılım çalışan bir işletim sisteminin stabilitesi bozulduğunda yüksek miktarda hafıza ve/veya CPU tüketimine neden olmaktadır.
Örnek olarak üzerinde zararlı yazılım çalıştığından şüphe duyduğumuz bir Ubuntu dağıtımına göz atalım. (İnceleme öncesine trojan tarafından kullanılan irc sunucularına ait alan adları HOSTS dosyasına 192.168.1.3 IP adresini çözümleyecek şekilde tanımlanmıştır.)
Yüksek CPU tüketiminden şüphe ettiğimiz bir Linux sistem üzerinde “top” komutu ile sistem üzerinde çalışan programların/komutların ne kadar CPU tükettiğini listeleyebiliriz.
Ekran görüntüsünden görüleceği üzere www-data kullanıcısı tarafından çalıştırılan perl programı %98 CPU tüketmektedir. www-data kullanıcısı, perl komutunun web sunucusu tarafından çalıştırıldığına dair bize ipucu vermekte fakat bu komutun hangi klasör içinden çalıştırıldığına dair bilgi vermediği için araştırmamıza devam etmemiz gerekmektedir.
Sistem üzerinde çalışan programları “ps ax” komutu ile (normal şartlarda kullanıcı bilgisinide içermesi nedeniyle “ax” yerine “aux” parametrelerinin kullanılmasını öneriyorum) çalışan işlemleri (process) listelettiğimizde “top” komutunun çıktısında en üstte yer alan 12457 ID’li perl programının burada “/usr/bin/httpd” olduğunu görüyoruz.
Bir kaç satır üste baktığımızda sistem üzerinde apache2’ninde çalıştığı görülmektedir. Hem apache2 ve hem httpd sistemimiz üzerinde çalışıyor ve iki farklı komut (top ve ps) tek bir PID (process id) için iki farklı programı işaret ettiği için alarm çanlarını çalabiliriz çünkü bu sistem üzerinde birşeylerin kendini gizlemeye çalıştığını açıkça işaret ediyor.
Araştırmamıza devam ederek sistem üzerinde öncelikle TCP protokolüne ait açık ağ bağlantı noktalarını ve durumlarını “netstat -ant” komutu ile listeliyoruz. (Normal şartlarda netstat programı tarafından desteklenen tüm protokollere ait açık ağ bağlantı noktalarının listelenmesi için “netstat -an” komutunu kullanmanızı öneriyorum.)
Yukarıdaki ekran görüntüsünde, 192.168.2.129 IP adresine sahip olam sistemimiz 6667 numaralı bağlantı noktası üzerinden 192.168.1.3 IP adresi ile haberleştiğini görüyoruz. 6667-6669 bağlantı noktaları çoğunlukla IRC (internet relay chat) sohbet sunucuları tarafından kullanılmaktadır. Bu bağlantı noktası ile gerçekleşen haberleşme bize sistem üzerinde çalıştığından şüphe ettiğimiz zararlı yazılımın DDOS botu olma ihtimalini güçlendiriyor.
Sistemimiz üzerindeki açık dosya ve soketlerin listesini görmek için “lsof” komutundan faydalanabiliriz. Bu komut sayesinde 12457 PID’li şüpheli programın hangi dosyalara eriştiğini ve soketleri kullandığını listeliyoruz.
En üst satırda yer alan ve perl’e ait olan socket kütüphanesi bize çalışan zararlı yazılımın Perl ile hazırlandığını, “ps ax” çıktısında yer alan “/usr/bin/httpd” komutunun sahte olduğunu açıkça ifade ediyor. Bununlada yetinmeyip çapraz kontrol adına “ls -al /usr/bin/httpd” komutu ile httpd programının sistem üzerindeki varlığını kolayca teyit edebiliriz.
“lsof” komutunun diğer bir güzel özelliği ise size ilgili program tarafından kullanılan CWD (current working directory) bilgisinide veriyor olmasıdır. www-data kullanıcısı apache2 programının çalıştırılmasından sorumlu ise ve şüphelendiğimiz zararlı yazılım/komut bu kullanıcı tarafından çalıştırılmış ise bu durumda ikisinin tek ortak noktasının apache2 programı olduğu düşünüldüğünde “lsof | grep -i www-data | grep cwd ” komutu ile www-data kullanıcısına ait bilgiler filtrelendiğinde karşımıza aşağıdaki tablo çıkıyor.
En üst satırda yer alan ve apache2’ye ait olan CWD bilgisi (“/var/www/maker/info”) bize zararlı programın www-data kullanıcısı ile apache2 üzerinden çalıştırılmış olma ihtimalini oldukça güçlendiriyor.
ClamAV antivirüs yazılımı ile ilgili klasör üzerinde yaptığımız tarama sonuç veriyor ve trojanın bu klasör içinde bulunduğu netlik kazanıyor.
Yukarıda yer alan son ekran görüntüsünde rdl.txt dosyasına herhangi bir metin editörü ile baktığımızda ise bunun bir ddos botu olduğu ve “ps ax” komutunun çıktısında zararlı yazılımın neden “/usr/bin/httpd” olarak görüldüğü anlaşılıyordu.
İnternet üzerinden bulmuş olduğum bir trojan (ddos saldırısı gerçekleştirme özelliğine sahip) ile oluşturmuş olduğum örnek bir senaryo üzerinden giderek sizlere basitte olsa Linux işletim sistemi üzerinde nasıl zararlı yazılım izi sürebileceğinizi kısaca anlatmaya çalıştım, umarım faydalı olmuştur.
Bir sonraki yazıda görüşmek dileğiyle…
8 comments
5
Eline saglik.
“ps auxwf” alt islemleri gorebilme acisindan faydali oluyor.
netstat komutuna ekleyecegimiz -p parametresi de hangi islemin o baglantiyi yaptigini gosterecegi icin, basit malware’leri analiz ederken isleri hizlandiriyor.
oncelikle belirtmek isterim ki yazinla ilgili bir sorun soz konusu degill sadece yazina ek olarak seninde ekleyebilecegin notlari ekledim, top komutuna gelince kucuk bir espiriydi :)
not1 icinse inan yazmaya vaktim olsa neler yazicam ama biraz vakit sorun ve birazda tembellikten dolayi hep gecikiyor yazsamda cok kisa yazabiliyorum o da aciklayici olmuyor ama sen boyle birseye karar verirsen kesinlikle yardimci olurum hic problem yok…eger boyle birseye karar verirsen konuya baglantili olarak bende virtual ortamda yapilabilecek trciklerden bahsedebilirim (dogru idtr ye erismek gibi vs…)
kolay gelsin…
Bence vakit ayırıp yazmalısın bu sayede insanlar eksik olan bilgilerini farklı konularda uzmanlıkları olan kişilerin klavyelerinden ortaya çıkan bilgilerle tamamlayabilir, ihtiyaç duyduklarında faydalanabilirler :)
not-1: kernel memoryde allocate ettigin shared alana (bknz: kmalloc) fucntion inject edip loopa alabilirdin, ki bu processten bagimsiz gorevi icra eder.loop demisken “e tamam top iste” demeden once googling !
not2: /proc/pid, /dev/kmem tarih olan trickler, rootkit bagimli degil.
not3: top komutu cpu tuketir..
Paylaşımın için teşekkürler fakat yazım rootkit analizi, ileri düzey zararlı yazılım analizi ile ilgili değildi bu nedenle tarih olduğunu söylediğin adımlar basit bir zararlı yazılım analizinde bizi çözüme götürebilmektedir. Top komutunun cpu tüketmesi ise bizim için kayda değer bir husus değil.
Not-1 içinse senden daha detaylı teknik bilgi ve savunduğun yöntemin kernel rootkitler karşısında nasıl başarılı olabileceğine dair teknik bir açıklama bekliyoruz, google, rtfm ve benzer terimler ile kurtulamazsın :)
Yararlı bir inceleme olmuş,elinize sağlık.
Bu zararlı kodu yazanlar, bir de ps çıktısını sistemdeki apache’nin gerçek yerine göre dinamik olarak yapabilselerdi ya da sistem CENTOS ya da RHEL olsaydı tespit etmek (en azından ilk bakışta şüphelenmek) biraz daha zor olacaktı sanırım.
Aslında yola çıkış noktamız top komutunun çıktısından elde ettiğimiz PID idi bu nedenle PID’den yola çıkarak sistem üzerinden çok fazla noktadan (lsof, /proc/PID dizini, pmap komutu, memory dump vs.) tespit edebiliriz bu nedenle zor olacaktı demek pek doğru olmaz fakat geri kalan kontrolleride gerçekleştirmemiz gerekecekti diyebiliriz. Sistem üzerine rootkit yüklenmiş olsaydı evet o zaman daha zor olurdu.