Internet üzerinden drive-by-download yöntemi ile kullanıcılar hiçbir şey fark etmeden bilgisayarlarına zararlı yazılım bulaştırabiliyorlar. Drive-by-download yönteminde, ziyaret edilen bir web sayfasında bulunan bir JavaScript, kullanıcının web tarayıcısı ve eklenti sürümleri hakkında bilgiler alıp, önceden özel olarak hazırlanmış, tarayıcı veya eklentilerinin zafiyetlerini istismar edebilen dosyaların (swf, jar, pdf gibi) kullanıcı bilgisayarına indirtilip, işlenmesi sağlanabiliyor. Eklentiler veya tarayıcı aracılığı ile açılan bu dosya, ilgili zafiyeti istimar edip, Internet’ten asıl zararlı yazılımı kullanıcı bilgisayarın indirip, çalıştırıyor. Çalıştırılan bu dosya ile, saldırgan bu bilgisayarın kontrolünü ele geçirip kendi çıkarları için kullanabilir.
Internet üzerinden drive-by-download yöntemi ile kullanıcılar hiçbir şey fark etmeden bilgisayarlarına zararlı yazılım bulaştırabiliyorlar. Drive-by-download yönteminde, ziyaret edilen bir web sayfasında bulunan bir JavaScript, kullanıcının web tarayıcısı ve eklenti sürümleri hakkında bilgiler alıp, önceden özel olarak hazırlanmış, tarayıcı veya eklentilerinin zafiyetlerini istismar edebilen dosyaların (swf, jar, pdf gibi) kullanıcı bilgisayarına indirtilip, işlenmesi sağlanabiliyor. Eklentiler veya tarayıcı aracılığı ile açılan bu dosya, ilgili zafiyeti istimar edip, Internet’ten asıl zararlı yazılımı kullanıcı bilgisayarın indirip, çalıştırıyor. Çalıştırılan bu dosya ile, saldırgan bu bilgisayarın kontrolünü ele geçirip kendi çıkarları için kullanabilir.
[1] adresinde belirtiltiği gibi WordPress’de yakın zamanda çıkan bir açık sebebi ile, bir çok WordPress 3.2.1 ile hazırlanmış site ele geçirildi. Saldırganlar WordPress’in upload dizinine, içerisinde karmaşıklaştırılmış(obfuscated) [2] bir JavaScript kodu olan ve çalıştırıldığı zaman bir exploit kitine [3] yönlendiren bir html sayfası yüklediler. Websense Blog [4] da ise kullanıcılara spam mail göndererek bu adreslere yönlendirildiği belirtilmektedir.
Kullanıcının kendisine gelen mail içerisindeki adrese tıklaması ile tarayıcı karmaşıklaştırılmış JavaScript kodunu çalıştırmakta ve başka bir siteye yönlenmektedir.
[1] adresinde belirtilen adreslerdeki zararlı JavaScript kodunun analizini yapmak için sırasıyla şu işlemler yapılmalıdır.
NOT: Bu işlemleri yalıtılmış (Sandboxed ) ortamda gerçekleştirmek gerekmektedir. Aksi takdirde zararlı yazılım sistemlerinizi olumsuz etkileyip, kişisel bilgilerinizin ve önemli verilerinizin kaybına sebep olabilir.
Zararlı yazılımı bulunan javascript kodunu incelemek için Wepawet sistemini kullanabiliriz. Wepawet web tabanlı tehditleri analiz etmek için geliştirilmiş bir altyapı sistemidir. [1] adresinde belirtilen zararlı yazılımı ihtiva eden html sayfalarindan birisini isecLAB Wepawet [5] sitesine yüklediğimizde [6], bu JavaScript’in bir iframe oluşturduğunu, “src” olarak ise, başka bir sitenin verdiği farkedilecektir. IFrame ile kullanıcının yönlendirildiği sitede ise bir exploit kit karşımıza çıkmaktadır. Dolayısıyla bu sitede zararlı kod parçacıklarının olduğunu teyit etmiş olduk.
Zararlı kodu incelemek için aşağıdaki adımlar yapılabilir.
wget [7] aracılığı ile zararlı kod içeren HTML sayfasını indirildikten sonra içeriğine baktığımızda Şekil 1 deki gibi karmaşıklaştırılmış javascript kodu görünmektedir.
Şekil 1 Karmaşıklaştırılmış JS
Bu karmaşıklaştırılmış javascript kodunu daha ayrıntılı olarak inceleyebilmek için [8] adresinden indirilebilen Malzilla yazılımı kullanılabilir. Malzilla karmaşıklaştırılmış kodları ayrıştıran anlamlı hala getiren web tabanlı zararlı yazılımları inceleme aracıdır.
Şekil 2 Malzilla
Zararlı yazılım içeren HTML kodunu Malzilla yapıştırıp, “Send all scripts to Decoder” butonu yardımı ile karmaşıklaştırılmış kod parçasını çözabilmektedir. Bu tab’da yer alana “Format Code” butonu ile JavaScript biraz daha anlamlı hale gelecektir.
Şekil 3 Malzilla ile formatlanmış kod
Kodu incelemeye başladığımızda \x ile başlayan onaltılık düzende yazılmış değerler olduğunu farkedip bu değerleri değiştirdiğimizde kod daha da anlaşılabilir hale gelecektir.
Şekil 4 Onaltılık dönüşümü sonrası
Şekil 5 Onaltılık dönüşümü sonrası
Şekil 6 Onaltılık dönüşümü sonrası
Şekil 4’de görüldüğü üzere
_O isimli bir Array tanımlanmaktadır. Şekil 5’de görüldüğü gibi
_O._Yp şeklinde kullanılmaktadır.
_O array’ına ait değerleri yerine koyduğumuzda kod iyice anlam kazanacaktır.
Şekil 7 _O değişimi sonrası
Şekil 8 _c değişimi sonrası
Kodun bütününe bakıldığında, ilk çalıştırılan kodun _W=_c() olduğu görülmektedir.
_c() fonksiyonu ise, ilk olarak _n değişkeninin değerini değiştirip _c objesine atamaktadır. Mozilla FireFox’un Web konsolu aracılığı ile çalıştırdığımızda _c objesinin yeni değerini görebiliriz.
Şekil 9 _c objesi yeni değeri
Bu satırdan sonraki for döngüsüne baktığımızda, _f iteratörü ile _c objesinin elemanlarını kullanarak, asıl kod olan _m değişkeninin değerini değiştirmektedir.
Şekil 10 _m değişkenini düzelten for döngüsü
Yukarıdaki for döngüsü işlev olarak aşağıdaki replace işlemlerini yapmaktadır.
Şekil 11 _m değişkeninin onaltılık hale getirilmesi
Yukarıdaki replace satırı çalıştırıldığında aşağıdaki gibi onaltılık hale gelmektedir.
Şekil 12_m değişkeninin onaltılık hali
Bir sonraki adımda _UK fonksiyonu çağırılıyor.
Şekil 13_UK Fonksiyonunun çağırılması
Şekil 14_UK fonksiyonu
Fonksiyona parametre olarak ‘length’ gönderiliyor.
Şekil 15_UK fonksiyonu for döngüsü
“_” yerine “’length’” koyduğumuzda, for döngüsünü Şekil 15 gösterilen for döngüsü haline geliyor. For döngüsü içerisinde ise her iki karakterden önce bir ‘%’ karakteri ekleniyor.
Şekil 16_n değişkeninin değeri
Bu işlemden sonra _n değişkenini onaltılık düzenden ASCII’ye çevirip çalıştırmak yeterli. Onaltılık düzenden ASCII’ye çevirmek için burada JavaScript’in decodeURIComponent fonksiyonu kullanılmış. Geriye kalan tek şey decode edilmiş bu kod parçasını çalıştırmak. Bir string’e atanmış bir kod parçacığını çalıştırmak için eval fonksiyonu kullanılır. Ancak eval fonksiyonu çok fazla dikkat çeken bir fonksiyon olduğu için, bu zararlı yazılımın yazarı farklı bir teknik kullanmış. Yaptığı işlem, kısaca yeni bir fonksiyon tanımlayıp bu kod parçacığını bu fonksiyonun gövdesi olarak vermek ve bu fonksiyonu çağırmaktır.
Şekil 17 Eval yerine kullanılan yöntem
Bu satırdan sonra decode edilmiş kod parçacığı tarayıcı tarafından çalıştırılmaktadır ve kullanıcıyı exploit pack’in yüklendiği adrese yönlendirmektedir.
Şekil 12 de gösterilen onaltılık düzendeki _m değişkeninin değeri olan ve çalıştırılacak olan kodu inceleyelim. Herhangi bir hex – ascii dönüştürücü bu dönüşümü rahatlıkla yapacaktır. [9] adresindeki dönüştürücü kullanılabilir.
Şekil 18 Hex to ASCII Converter aracılığı ile dönüştürülmüş kod
Bu dönüşüm sonucunda yine karmaşıklaştırılmış bir JavaScript kodu çıktı. Yine Malzilla kullanarak kodu formatladığımızda aşağıdaki hale gelecektir.
Şekil 19 2. JavaScript
Bu JavaScript’te de yukarıda anlatılanlarla aynı metodlar kullanılarak ilerlenebilir. Ek olarak burada Unicode encoding yapılmıştır. Farkı ise bir iframe objesi yaratılıp, çeşitli özellikleri atanıp document.write fonksiyonu ile oluşturulan iframe objesi serialize edilip yazılmaktadır. Böylece bu iframe satırı tarayıcı tarafından yorumlanacaktır.
Şekil 20 2. JavaScript
Bu JavaScript çalıştırıldığında ise aşağıdaki çıktıyı üretecektir.
Şekil 21 2. JavaScript'in çıktısı
Şekil 22 IFrame Src değeri
Yukarıda da görüldüğü gibi, yaratılan iframe objesine src değeri olarak bir PHP adresi verilmiştir. Verilen bu adres incelendiğinde ise Phoneix Exploit kitine ait bir adrestir. M86Security [1] ve Websense blog’unda [4] exploit kit ile ilgili daha detaylı bilgiler bulunabilir.
Şekil 22 de gösterilen adresin isecLAB Wepawet tarafından analiz edilmiş haline [10] adresinden ulaşabilirsiniz.
Kişisel olarak alınabilecek önlemler
Alınabilecek önlemlerden birisi veritabanı güncel bir antivirüs yazılımı kullanmaktır. Antivirüs, bilinen zararlı yazılımlardan korumamızı sağlayacaktır. Bir başka önlem olarak, Firefox ve eklentisi No-Script'i kullanmak ise bir çok drive-by-download ataklarına karşılı etkilidir. Bu eklenti sayesinde hangi sitelerdeki JavaScript lere izin verip hangilerine vermeyeceğinizi belirleyebilirsiniz. İlk başlarda biraz sıkıcı olsa da zamanla, sürekli takip ettiğiniz sitelere izin verdikçe faydasını görüyoruz.
Şekil 23 Veritabanı güncel bir AV alarmı
Şekil 24 No-Script Eklentisi Uyarısı
Kaynaklar
Necati Ersen ŞİŞECİ, TÜBİTAK-UEKAE
[1]
http://labs.m86security.com/2012/01/massive-compromise-of-wordpress-based-sites-but-%E2%80%98everything-will-be-fine%E2%80%99/
[2]
http://en.wikipedia.org/wiki/Obfuscated_code
[3]
http://www.securelist.com/en/analysis/204792160/Exploit_Kits_A_Different_View
[4]
http://community.websense.com/blogs/securitylabs/archive/2012/01/26/phoenix-phoenix-i-need-help.aspx
[5]
http://wepawet.iseclab.org
[6]
http://wepawet.iseclab.org/view.php?hash=d4d463157a40c663d735abef5c14c2a1&type=js
[7]
http://www.gnu.org/s/wget/
[8]
http://malzilla.sourceforge.net/
[9]
http://www.dolcevie.com/js/converter.html
[10]
http://wepawet.iseclab.org/view.php?hash=6d80eea30644ec307f351c34c9fb1473&t=1327932263&type=js
0 yorum → "Bir hacking anatomisi - 1 : Örnek bir JavaScript Malware Analizi"
Yorum Gönder