Karmaşıklaştırılmış (Obfuscated) Javascript Analizi

Sıklıkla karşılaşılan istismar senaryolarından biri olan HTML dokümanlarında veya PDF dosyalarındaki gömülü Javascipt kodlarını sadece JS bilgisi kullanarak analiz etmek genelde mümkün olmamaktadır. Genelde zararlı JS kodları amaçlarını gizlemek adına obfuscation denilen kodu okunamaz hale getirme yöntemleri uygulanmış olarak bulunur. Bu da kodu tekrar okunabilir hale getirme (deobfuscation) ihtiyacını doğurur. 
Yazıda ünlü Blackhole istismar kitinin bir türevini okunabilir hale getirme senaryosu üzerinden JSDetox ve JS-beautify yazılımlarının JS deobfuscation amaçlı kullanımı anlatılmıştır.
Kullanılan Araçlar:
  • Blackhole Exploit Kit Örneği (e1ab25769040b66e644f0184a541821f19946bcd094bef2bb69762511eeeed9e)
  • JSDetox
  • JS-beautify

Obfuscation işlemi uygulanarak okunması zorlaştırılan Javascript kodlarını analiz etmeye yarayan jsdetox uygulaması çalıştırılır. Kurulum aşamalarıyla uğraşmamak için REMnux 5 dağıtımı kullanılabilir. REMnux’te JSDetox’u çalıştırmak için terminalden şu komutlar girilir.

cd /usr/local/jsdetox/
./jsdetox
Beklenen çıktı aşağıdaki gibidir.

[JSDetox] Loading framework … done.
[JSDetox] Starting webserver (hit Ctrl-C to quit) …
=> Padrino/0.10.7 has taken the stage development at http://127.0.0.1:3000
[2014-05-27 17:25:46] INFO  WEBrick 1.3.1
[2014-05-27 17:25:46] INFO  ruby 1.9.2 (2011-07-09) [i686-linux]
[2014-05-27 17:25:46] INFO  WEBrick::HTTPServer#start: pid=1668 port=3000

Çıktıda da gözüktüğü üzere tarayıcıdan http://127.0.0.1:3000 adresine bağlanarak JSDetox’un web arayüzüne erişilir.

Eğer analiz edilecek doküman sadece JS kodlarından oluşuyorsa “Code Analysis” sekmesindeki aksi halde “HTML Document” sekmesindeki “Upload” tuşu kullanılarak doküman yüklenir. İçeriği doğrudan textarea alanına yapıştırmak da mümkündür. Örnek dosya HTML dokümanı olduğu için ilgili sekmedeki “Extract Scripts” butonuna basılarak JS kodları dışındaki kodlar ayıklanır.  “Analyze” tuşuna basıldığında anlamsız gözüken uzun bir bloğun ardından çalıştırılabilir durumdaki JS kodları görülür.

Selection_001.png

Bu bölümün deobfuscation işlemini yapan bölüm olduğu varsayımı yapılabilir.

Daha sonra sayfanın sol tarafındaki “Execute eval() statements” seçeneği işaretlenip JSDetox’un eval fonksiyonlarını çalıştırması sağlanıp “Execute” tuşuna basılır. Bu sayede kodun  çalışma anında yaptığı gibi kendini deobfuscate etmesi sağlanır. Execute sekmesine gelindiğinde birçok kez “eval” fonksiyonunun çağırıldığı görülür. Genelde açma işlemi tamamlandıktan sonra esas işlevleri gerçekleştirecek olan kod en sondaki “eval” fonksiyonunun parametresi olarak bulunabilir. Bu bölümü analiz etmek için de listeden son “eval() call executed” uyarısının “Show Code” tuşuna tıklanıp “Send to Analyze” denilir. Bu sayede ilgili kod analiz ekranında görülür.
Selection_004.png

“Reformat” butonuna basılarak kod daha okunaklı hale getirilir. Örnekte bu işlem hata ile sonuçlanacaktır, bir sebepten JSDetox bu kodu parse edememektedir. Bu durumda mevcut diğer araçlarla devam etmek en pratik seçenek olacaktır.
Son olarak kısmen deobfuscate edilmiş edilmiş kod bir dosyaya kaydedilir (tmp.js) ve JS-beautify uygulaması ile tam okunaklı hale getirilir. Bunun için terminalden
js-beautify tmp.js > deobfuscated.js
komutu girilir.

Artık deobfuscated.js dosyası bir metin düzenleyici ile açılarak içeriği rahatlıkla analiz edilebilir. Bu analizden istismar edilmeye çalışılan zafiyetler, kullanılan shellcode, sisteme yüklenmek istenen zararlı ve benzeri detaylar elde edilebilir.

Selection_005.png