Snort Kullanarak Zararlı Yazılım Tespiti

Zararlı yazılımları ve aktivitelerini ağ seviyesinde tespit edebilmek kurumların bilgi güvenliği ihlallerine karşı atması gereken önemli adımlardan biridir. Mevcut IDS/IPS’leri yeni tehtitlere karşı güncel tutabilmek veya özel senaryolar için uygun tanımlamaları yapabilmek bu konuda etkin bir savunma için gereklidir.
Yazıda, bir zararlı yazılımın ağ trafiğinin tanınmasını sağlayacak kendine has özelliklerini tespit edip bu özellikleri yakalayacak Snort kuralları yazılarak, örnek yöntemler ve izlenebilecek yollar açıklanmıştır.

Örnek senaryoda HTTP ve SMTP trafiği oluşturan bir çeşit Zeus türevi bir sanal makineye bulaştırılıp bu makinenin internete çıktığı ağ arayüzü Wireshark ve Snort ile dinlenir. Elde edilen ağ verisine göre Snort kuralları yazılarak zararlı tespit edilmeye çalışılır.
  • Zeus türevinin SHA256 değeri: 689ef03339c961f6c63b77f902de1bb022f83c2c89a1f63999edf720cfa2081b

Örnekte kullanılan lab yapısı şu şekildedir. Windows XP internete NAT ile çıkacak şekilde ayarlanmış tek ağ arayüzü bulunan bir sanal makinede kuruludur. Snort’un kurulu olduğu SecurityOnion dağıtımı ise, bir tanesi Windows XP ile aynı sanal ağa bağlı iki ağ arayüzü bulunan başka bir sanal makineye kurulmuştur. Snort, ortak arayüzü dinleyecek şekilde ayarlanmıştır. Diğer arayüz ise bu makineye yönetim amaçlı erişim için ayrılmıştır.

Örnek zararlının ağ verisi incelendiğinde sırasıyla şu işlemleri yaptığı görülüyor. (Farklı çalıştırmalarda sonuçlar değişiklik gösterebilir)

  • “http://mediafire.com/?ucc9c99b4o1b94i” adresinden b.exe isimli bir dosya indiriyor.
  • srv5050.co (212.227.141.241) adresininin 5050 numaralı portuna IRC bağlantısı kurup bir takım kanallara bağlanıyor.
  • “http://mediafire.com/?kf2lhk53bpfem63” adresinden go.exe isimli başka bir dosya indiriyor.
  • http://karmachemie.de/rec.exe” (213.165.86.175) adresinden rec.exe isimli bir dosya daha indiriyor.
  • “http://jasperrussell.com/324.txt” (74.208.185.227) adresinden 324.txt isimli bir dosya indiriyor. Bu dosya “yahoo.com” uzantılı 28000 farklı mail adresi içeriyor.

  • Son olarak listedeki mail adreslerine örnekteki gibi bir mail gönderiyor.

From: Edward09@4251.com
To: sadiabuttar@yahoo.com
Subject: Pharmacy Express
Date: Sun, 27 Jan 2013 23:39:52 -0800
Mime-Version: 1.0
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Message-ID: <88397533550593.79168.qmail@hordzd>
Zararlının çalışma anında aktif olmayan farklı özellikleri de vardır fakat buradaki amaç zararlıyı tamamen analiz etmek değil örnek ağ verisini kullanarak bu aktiviteleri tanımlayacak kurallar yazmaktır.
İlk adımda eldeki veriler kullanılarak sadece zararlının kullandığı IP adresleri ve/veya alanadları belirlenip, bunları tanımlayacak kurallar yazılır. Veriler değerlendirildiğinde, mediafire veya yahoo’ya ait adresler için kurallar yazmanın makul olmayacağı ancak srv5050.co, karmachemie.de ve jasperrussell.com adresleri için yazılabileceği görülmektedir. Bu adresler doğrudan zararlıyı yayanlar tarafından alınmış veya sonradan ele geçirilmiş sistemler olabilirler. Her iki durumda da kullanıcılar için tehlike arz etmektedirler. Örneğin srv5050.co adresine yapılacak DNS sorgularını yakalayacak bir kural şu şekilde yazılabilir.
alert udp any any -> any 53 (msg:”Zeus variant DNS query”; content:”srv5050″; priority:1; sid:9000554; rev:1;)
Doğrudan IP adresine yapılan bağlantıları yakalamak içinse şöyle bir kural kullanılabilir.
alert tcp $HOME_NET any -> 212.227.141.241 any (msg:”Zeus variant C&C IP”; flow:to_server; priority:1; sid:9000555; rev:1;)
Tabii ağ yapısına göre bu kuralları iyileştirmek mümkün.
İlk kural çalıştığında elde edilen Snorby görüntüsü:
 2.png

İkinci adımda söz konusu zararlıyı doğrudan dosya indirme aşamasında tespit etmek için çalıştırılabilir dosyadan elde edilen bir imza kullanılabilir. Zararlının farklı türevlerinin aynı imzayı taşımama ihtimali yüksek olmasından dolayı tek başına çok etkili bir yöntem olmasa da bu yöntem diğerlerinin yanında kullanılabilir.

Öncelikle çalıştırılabilir dosyaya bir imza tanımlanır. Basitçe şu adımlar izlenir.
  • strings zararlı.exe > strings.txt    komutu ile zararlının içerdiği ve okunabilir olan karakter dizileri elde edilip kendine has olabilecek değerler aranır. Örnek zararlıda 440. satırdaki “signing_of_the_Treaty_of_Karlowitz.exe” değeri kullanılabilir.
  • Daha sonra Snort’un ikili dosyanın içeriğinde doğrudan karşılaştırma yapabilmesi için gerekli ikili değerler (onaltılık tabanda ifade edilebilir) elde edilmelidir. Bunun için hexdump -C zararlı.exe > hexdump.txt    komutu verilerek dosyanın hex/ASCII dökümü elde edilir. ASCII bölümden belirlenen string bulunup hex karşılığı belirlenir. Örnekte
    Başlangıç adresi: 0x0000925A
    Değer: 73 69 67 6e 69 6e 67 5f 6f 66 5f 74 68 65  5f 54 72 65 61 74 79 5f 6f 66 5f 4b 61 72 6c 6f  77 69 74 7a 2e 65 78 65
    şeklindedir.
  • Son olarak aşağıdaki gibi bir kural yazılarak imzayı içeren paketlerde uyarı verilmesi sağlanır.

    alert tcp any any -> $HOME_NET any (msg:”Zeus variant binary”; flow:from_server,established; content:”|73 69 67 6e 69 6e 67 5f 6f 66 5f 74 68 65  5f 54 72 65 61 74 79 79 5f 6f 66 5f 4b 61 72 6c 6f  77 69 74 7a 2e 65 78 65|”; sid:9000556; rev:1;)

    Kuralı daha da özelliştirmek için “offset” değeri eklenebilir.

3.png

Son adımda zararlının ağ hareketleri incelenerek özel bir desen oluşturulmaya çalışılır. Örnek zaralının spam gönderimleri incelendiğinde gönderici adreslerinin belli bir formatta oluşturulduğu fark edilmiştir. Örneğin,
MAIL FROM:<Donald86@1008.com>
MAIL FROM:<Kevin08@3184.com>
MAIL FROM:<Michael36@6998.com>
şeklindeki gönderici adresleri (isim)(2rakam)@(4rakam).com desenine uymaktadır.
Desen belirlendikten sonra bu desene uygun bir Perl düzenli ifadesi yazılır. Bu desen “/<[a-z]+[0-9]{2}@[0-9]{4}.com>/i” düzenli ifadesi ile karşılanabilir. Yazılan düzenli ifadeleri online olarak test etmek için “www.regexe.com” adresi oldukça kullanışlıdır.
SMTP üzerinden mail gönderimlerinde belirlenen deseni arayacak Snort kuralı temel olarak aşağıdaki gibidir.
alert tcp $HOME_NET any -> $EXTERNAL_NET 25 (msg:”A Zeus variant is sending spam”; flow:to_server,established; pcre:”/<[a-z]+[0-9]{2}@[0-9]{4}.com>/i”; priority:1; sid:900$

4.png

Onur ALANBEL