Bir hacking anatomisi - 1 : Örnek bir JavaScript Malware Analizi

Yazar:

  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.
malware_js.png
Ş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.
malzilla_1.png
Ş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.
malzilla_2.png
Ş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.
malzilla_var__o.png
Şekil 4 Onaltılık dönüşümü sonrası
malzilla_var__c.png
Şekil 5 Onaltılık dönüşümü sonrası
malzilla__uk.png
Ş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.
malzilla__1_after_replace.png
Şekil 7 _O değişimi sonrası
malzilla__c_after_replace_copy.png
Ş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.
ff_web_console__c.png
Ş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.
malzilla__m_for.png
Ş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.
malzilla__m_replace.png
Ş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.
malzilla__m_hexal.png
Şekil 12_m değişkeninin onaltılık hali
Bir sonraki adımda _UK fonksiyonu çağırılıyor.
malzilla__uk.png
Şekil 13_UK Fonksiyonunun çağırılması
malzilla__uk_function.png
Şekil 14_UK fonksiyonu
Fonksiyona parametre olarak ‘length’ gönderiliyor.
malzilla__uk_for.png
Ş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.
malzilla_n_hexal.png
Ş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.
malzilla_constructor_constructor.png
Ş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.
ff_hex_converted_to_ascii_copy.png
Ş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.
malzilla_2nd_js.png
Ş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.
malzilla_2nd_js_clear.png
Şekil 20 2. JavaScript
Bu JavaScript çalıştırıldığında ise aşağıdaki çıktıyı üretecektir.
malzilla_2nd_js_output.png
Şekil 21 2. JavaScript'in çıktısı
malzilla_2nd_js_output_iframe_src.png
Ş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.
kaspersky_alert.png
Şekil 23 Veritabanı güncel bir AV alarmı
ff_no_script_error.png
Ş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

Son Yazılar

Özgür Makalelerin Adresi: Bir hacking anatomisi - 1 : Örnek bir JavaScript Malware Analizi.
Anarschi Hit Adam