Malware Analizi #2 | Angler EK JavaScript Gizleme Kaldırma

Dolyetyus

Özel Üye
21 Nis 2020
1,207
676
Delft
Angler EK JavaScript Gizlemeyi Kaldırma: Kral Çıplak

Merhaba ve Hoş geldiniz. Bugün, Angler'ın açılış sayfalarından birinin gizlemesini kaldıracağız. Görev sırasında, JavaScript'e bakarken birden fazla kez gözümü kısma ve başımı kaşıma fırsatım oldu (sevgili geliştiriciler, JS çoğu zaman o kadar da ilginç değil). Ancak EK'ler için JavaScript, tüm yayılma döngüsünün ayrılmaz bir parçası: yönlendirme, tarayıcı parmak izi, adli bilim karşıtı önlemler, payload oluşturma ve teslimat. Açıkçası bu oyuncular, araştırmacıların trafiklerine uyum sağlamaktan hoşlanmıyorlar, ancak onları durduramıyorlar da, peki ne seçenekleri var? Analiz sürecini olabildiğince zaman alıcı hale getirmeye çalışıyorlar. Sonuçlar, göreceğimiz gibi, zihnimizi kurcalıyor.

Başlamadan önce birkaç not: Bu konu, tarayıcının sayfayı zararlı olarak etiketlemesini istemediğim için resim ağırlıklıdır, ayrıca yetersiz görüntü açıklamaları için şimdiden özür dilerim. Gizlemeyi kaldırma işleminin kendisi de ayrı bir süreçtir, bu nedenle ayrıntılı olarak açıklamak pratik değil, bu yazı daha çok açılış sayfası yapısının neye benzediğini ve amacını anlamaya yöneliktir. Bunu kendiniz denemek isterseniz, aşağıdaki iki Angler pcap dosyasını indirebilirsiniz. Lütfen analiz ederken dikkatli olun, kendinizi topuğunuzdan vurmayın. Robemtnez'e (kernelmode'dan) ve @malware_traffic'e örnekleri sağladıkları için özel bir teşekkür ederim. Son olarak, umutsuzluğa kapılırsanız, şaşırtmanın anlamlı olabilmesi için tarayıcının kodu çözmesi ve yorumlaması gerektiğini unutmayın, bu da bizim de başarabileceğimiz anlamına gelir!

Çoğunlukla bu gönderide ilk örneğe bakacaksınız (servis CVE-2015-3090). Bununla birlikte, sömürüleri çıkaracağımız ve payloadın parmak izini alacağımız ikinci örneğe de bir göz atacağız! Herhangi bir sorunuz varsa, aşağıya bir yorum yazmaktan çekinmeyin. Sorunuzun uzun bir cevap gerektireceğini düşünüyorsanız, bana her zaman bir e-posta bırakabilirsiniz.




Operasyon Planı:

Bir şeyi açıklığa kavuşturalım, bu kirli bir çatışma olacak! Bu sayfalar analiz sürecini yenmek (veya yavaşlatmak) için tasarlanmıştır, bu nedenle adil oynamayı denemenizi ancak kazanmak için hile yapmanızı tavsiye ederim! Manuel JavaScript analizine sağduyu yaklaşımını, jsdetox veya revelo gibi araçlardan bazı otomatik gizleme kaldırma/işlev çengelleri ile birleştirmeniz gerekecektir. Son olarak, tarayıcının kendisinde JavaScript konsolunun değerini küçümsememek çok önemlidir, spidermonkey'e belirli bir değişkenin veya fonksiyonun ne döndürdüğünü sormak, bu değişkeni manuel olarak izlemekten daha pratiktir.

Araçlar:
JSDetox - buradan
SpiderMonkey JavaScript Engine - buradan
Revelo [Lütfen bir tarayıcı uyarısı alabileceğinizi unutmayın!] - buradan


PCAP:
Angler-CVE-2015-3090.pcap (29.05.2015) [PW: infected] - buradan
Angler-CVE-2015-5122.pcap (15.07.2015) [PW: infected] - buradan




CVE-2015-3090 - "Palmer sizi bekliyor, dedi ki; O yüzden dans edebilirsin"

Angler'ın oldukça benzersiz açılış sayfaları var, eminim ki eğer bu sömürü kitine maruz kalırsanız, deneyimi kısa sürede unutmayacaksınız. Sayfalar, rastgele bir şekilde düzenlenmiş çeşitli metin ve HTML nesneleri içeriyor. Bu durumda, metnin Jane Austen'ın "Sense and Sensibility" den değiştirilmiş bir alıntı grubu olduğuna inanıyorum. İtiraf etmeliyim ki şablonlarına oldukça düşkün, tuhaf bir şekilde hipnotize edici.

Angler-01-Big.png



Bazı araştırmacılar bunun, kullanıcıları bir şekilde yasal bir sayfaya ulaştıklarını düşünmeleri için "kandırma" olduğunu söyledi. Şahsen ben daha çok arama kartı olarak kullanıldığını düşünüyorum: "Merhaba Angler EK hizmetinizde!". Görünür metinle karıştırılmış HTML nesneleri, çoğunlukla kodlanmış veriler içeren paragraf öğeleridir.


Angler-02-Big.png



Etiketin benzersiz bir ID ile işaretlendiğine dikkat edin, bu, JS'nin onu bulmasına ve içeriğiyle etkileşime girmesine olanak tanır. Dikkatli bir şekilde yapıyorsanız, bunun base64 olduğunu düşünebilirsiniz ve gereksiz verileri döndürmesi dışında haklısınızdır. Yalnızca gizlenmiş JS içeriğini değiştirdikten sonra anlamlı hale gelir. Sakin olun, bu, yaşayacağımız birçok yenilgiden yalnızca ilkidir!

Doğal olarak, sayfada oldukça karmaşık hale getirilmiş birkaç JS pasajı da vardır. Bu JS'nin ana işlevi, paragraf öğesi içeriklerini ele geçirmek, base64 kodunu çözmek ve ardından bunların şifresini çözmektir. Şifresi çözüldükten sonra DOM'a enjekte edilir ve çalıştırılır. Aşağıdaki ekran görüntüsü bu karmaşık saçmalıkların küçük bir bölümünü gösteriyor.


Angler-03-Big.png



Açıkçası, bu kodu güzelleştirerek biraz temizleyebiliriz ama yine de biraz daha iyi görünen saçmalıklarla baş başa kalırız. Unutma, kazanmak için hile yap! eval() işlevini bağlarsak JS, bu şifresi çözülmüş rutinlerden bazılarını yürütmeye ve açık metin sürümünü çıkarmaya çalıştığında yürütme akışını duraklatabiliriz.



CVE-2015-3090 - Angler <3 Araştırmacılar?

Yani, ilk değerlendirmemizi yaptık ve ortaya çıkan JS, EK'yi rastgele soruşturma veya maruz kalmadan korumak için tasarlanmış gibi görünüyor. Bunu, gümrükten geçtiğinizde yapılan gibi, bir kontrol listesinden geçerek yapar.

Aşağıdaki bölüm, bazı belirli Kaspersky ActiveX bileşenlerinin kurulu olup olmadığını belirlemeye çalışır. Elbette bunu yalnızca IE çalıştırıyorsanız kontrol edebilir.


Angler-04-Big.png



Ek olarak, ana bilgisayar belirli dosyaların varlığı açısından kontrol edilir. JS, "beğenmediği" statik bir dosya dizisine sahiptir, bu listeyi kullanarak tam dosya yollarını oluşturur ve bunları gerçek doğrulamayı yapan bir işleve iletir.

Angler-05-Big.png



Program dosyalarının yolu hem 32 ("Program Dosyaları") hem de 64 ("Program Dosyaları (x86)") bit mimarileri için kontrol edilirken sürücü yolu "Windows\System32\drivers" olarak ayarlanır.

Son olarak, Windows res protokolü, bu yolların geçerli olup olmadığını kontrol etmenin kurnaz bir yolu olarak kullanılır. Elbette, JS bu kaynakları yükleyemez, ancak alıcının yanıtına göre var olup olmadıklarını belirlemek mümkündür.


Angler-06-Big.png



Başka kişilerin da belirttiği gibi, bu kontroller daha çok araştırmacılara yöneliktir. Amaç, onlara mümkün olduğunca az veri sağlamaktır. Esas olarak, dosyalara bakarsanız, EK'nin sanallaştırılmış bir ortamda çalışıp çalışmadığını kontrol ettiğini görebilirsiniz, Fiddler gibi bazı yaygın araçları arıyor ve özellikle Kaspersky'dan nefret ediyor gibi görünüyor!

Eğer Angler'dan kaçınmak istiyorsanız, bu dosyalardan bazılarını manuel olarak oluşturmak iyi bir güvenlik olabilir (örneğin: ana sunucunuzdaki bazı vmware sürücüleri). Dosyaların gerçek içeriği önemli değildir.




CVE-2015-3090 - URL Şifre Çözme

Yürütme akışına devam edersek, ikinci bir değerlendirmeye ulaşırız. Açığa çıkan JS, tarayıcı kontrolüne ek olarak "bir şey" için bir şifre çözme işlevi içeriyor.


Yer Değişikliği:

İlk önce şifre çözme rutinine bir göz atalım. Görünüşe göre fonksiyon Windows nesnesine "mxDu" olarak atanıyor.

Angler-07-Big.png



İşleri biraz daha netleştirmek için şifre çözme rutinini sadeleştirebiliriz.

Angler-08-Big.png



Aslında, daha yakından inceledikten sonra, bu rutinin açılış sayfasında bulduğumuz URL'lerin şifresini çözmek için tasarlandığı ortaya çıktı. Bunu kendimiz için de kolayca deneyebiliriz.

Kod:
 [COLOR="Plum"]function decode(text) {
 
    var cryptKey = 'B5qV4g9RZmy6j7HUkhiz', //Extracted variable value
        rawArray = cryptKey.split(''),
        sortArray = cryptKey.split(''),
        keyArray = [];
 
    sortArray.sort();
    var keySize = sortArray.length;
    for (var i = 0; i < keySize; i++) {
        keyArray.push(rawArray.indexOf(sortArray[i]));
    }
 
    var k = keySize - text.length % keySize;
    for (var l = 0; l < k; l++) {
        text += ' ';
    }
 
    var endStr = '',
        i, j, line, newLine;
 
    for (i = 0; i < text.length; i += keySize) {
        line = text.substr(i, keySize).split('');
        newLine = '';
        for (j = 0; j < keySize; j++) {
            newLine += line[keyArray[j]];
        }
        endStr = endStr + newLine;
    }
    endStr = endStr.replace(/\s/g, '');
    return "\n" + endStr;
 
};
 
var URLs = ['B5qV4g9RZmy6j7HUkhiz', //Array of the values found on the landing page
            'THUHVpdvZQFUV5hWSLTSjDDkTJeMhalU8tldtYUaEUWmTiUNFLJpQVpStVz4nH Dd=Lo8  F YBc    ',
            'enkriouciaaf-lnetnsgytoouemhlcmin.wc.ma ',
            'Wic4Bp34bqruiXnbhwCFXoWYozKr5xzHBdgfpo-1Ij pkp1zh  d 5m. ?  ',
            'mW3mTfew1cR99IUdkZEHkm2FeIQNBXZ9VrNOqbE2m2UVMkVtdOMoVw0VfX10nXTDOhLo9NUNRsBcjOWx2WjDNiN0hNcMQwUN1MzzTGTWZ2M0IORIFwUMmMWh m  Z      I y      '];
 
for (var i = 0; i < URLs.length; i++) {
        print(decode(URLs[i], 0)); //Iterate through the array
}[/COLOR]


Çıktıdan hemen anlaşılmasa da, sonuçların daha sonra sömürü nesnesi tarayıcıya yüklendiğinde parametreler olarak kullanıldığını göreceğiz.

Angler-09-Big.png




Tarayıcı Kontrolü

Bu değerlendirmenin diğer kısmı, bazı tarayıcı kontrolleri yapıyor ve @kafeine'e bir selam gönderiyor, sanırım onlar için bir tür baş belası. Hehehe.

Angler-10-Big.png



Tarayıcı IE ise, "navigator.appVersion" tarafından döndürülen şeyin bir örneğini görebilirsiniz, bu durumda ise IE9.

Angler-11-Big.png




CVE-2015-3090 - Drop & Pwn!

Yeniden, yürütme akışına devam ediyoruz ve üçüncü değerlendirmeye ulaşıyoruz. Bu, önceki ikisine kıyasla oldukça yoğun; ancak ilk bakışta direkten görünebilir.

Angler-12-Big.png



Görüntüde sözcük kaydırmanın açık olmadığına, bu kodlanmış değişkenlerin hepsinin çok büyük olduğuna dikkat edin ("window.XE9BTtIblgR9wUF7" hariç). Analizimiz için gizlenmiş vbscript'i atlayacağız. Bu kararın birkaç nedeni var: çok büyük (422 satır), vbscript'i gizlemek için temelde onu pencerelerde çalıştırmanız gerekir (=başarısızlık durumu) ve vbscript'in JS iş akışından ne yaptığını tahmin edebiliriz.


Tarayıcı Kontrolü:

Kodu çözülmüş JS'ye baktığımızda biraz daha fazla tarayıcı kontrolü görebiliriz. Bu daha önce gördüğümüzden daha kapsamlı gibi görünüyor.

Angler-13-Big.png




Dropper:

Burada dikkat edilmesi gereken en önemli şey, yukarıda gördüğümüz dropper kabuk kodunu bir araya getiren bir fonksiyondur. Bu rutin, gizleme kaldırma işlemi boyunca bulunan diğer birçok işleve atıfta bulunur, ancak ana kısım aşağıda görülebilir.

Angler-14-Big.png



Bu oldukça karmaşık bir kurulum. Anladığım kadarıyla, Dropper (“Bedep” olduğunu varsayıyorum) tarayıcının güvenliği ihlal edildiğinde belleğe yüklenir. Kabuk kodunun bir kısmı, görebildiğimiz gibi, şifrelenmiş bir payloada işaret eden bir URL ve bellekteki payloadın şifresini çözmek için bir şifre çözme anahtarı içerir. Bununla uğraşmak istiyorsanız, Sentrant'ın Angler payloadları için olan makalesine buradan göz atabilirsiniz, şifreleme algoritması TEA'ya (Küçük Şifreleme Algoritması) dayanmaktadır.



CVE-2015-3090:

Sonunda, bazı pencere nesnelerinin izini sürdükten sonra, uzun süredir beklenen flash sömürüsü ortaya çıktı.

Angler-15-Big.png



Çeşitli yer tutucuları kolayca doldurmak için JS konsolunu kullanabiliriz.

Angler-16-Big.png



Sonuç aşağıda görülebilir. Biri IE için ve diğeri tüm diğer tarayıcılar için olmak üzere iki flash nesnesi olduğuna dikkat edin.

Angler-17-Big.png




CVE-2015-5122

Giriş kısmında da belirtildiği gibi, CVE-2015-5122'ye hizmet veren ikinci pcap'a da kısaca bir göz atacağız. Bu flash CVE, HackingTeam sızıntısının bir parçasıydı ve ifşa edildikten sadece saatler sonra sömürü kitine dahil edildi. Bu, Angler geliştiricilerinin verimliliği hakkında bir fikir verecektir!

JS gizlemesi, yukarıda açıklandığı gibi Angler tarafından uzun süredir kullanılmaktadır. Baktığım örneklerde, en azından Şubat 2015'ten bu yana değişmeden kaldı (yoksa ilgili Angler açılış sayfalarının varyantları olabilir mi belki?). Bununla birlikte, bu ikinci PCAP, aynı kontrolleri uygularken, farklı bir şaşırtma tekniği de kullanıyor. Yeni planın analiz ettiğimizden daha karmaşık olduğuna karar verdim. Bunu araştırması için pası istekli okuyucuya atıyorum.




Sömürü(ler):

Aşağıda, flash exploit'i başlatan DOM nesnesini görebiliriz. EK bu sömürüyü ilk kez tanıttığında, güvenlik açığı henüz Adobe tarafından yamalanmamıştı ve bu onu istemci tarafı yazılımdan yararlanmak için güçlü bir araç haline getirdi!

Angler-18-Big.png



Flashvars'ın kodu çözülmüş değerinin de daha önce gördüğümüz örnekten farklı bir format aldığına dikkat edin. Muhtemelen bunun nedeni, açılış sayfasının çok aşamalı payloadları için farklı şifreleme şeması uygulamasıdır. DOM'u analiz ederek, bu sayfanın ek bir Silverlight sömürüsü sunduğunu da görebiliriz.

Angler-19-Big.png




Çalışma Akışı:

Trafik akışının yukarıdaki açıklardan biriyle eşleşip eşleşmediğini görelim.

Angler-20-Big.png



Alıcı; açılış sayfasına ulaşır, tüm kontrolleri geçer, flash nesnesi tarafından sömürülür ve flashvars tarafından işaret edilen her şeyi indirir.


Payload Parmak İzi:

Angler payloadlarının şifrelenmiş bir biçimde iletildiğini ve daha sonra dropper tarafından bellekte şifresinin çözüldüğünü biliyoruz. Böyle bir soru olduğu gibi, ağımız üzerinden dolaşırken binary blobun parmak izini alabilir miyiz? Daha önce de bahsettiğim gibi, Angler bir açılış sayfası (payload için bir şifre çözme rutini dahil) uygulama eğilimindedir ve daha sonra bu şablonu uzun süre yeniden kullanır. Önceki bölümde bulunan aynı şifre çözme anahtarının Şubat ayına kadar uzanan örneklerde yeniden kullanıldığını gördüm. Sanırım hepimiz bazen tembelleşiyoruz!

Pcap'ta gönderilen binary blob'a baktığımızda tuhaf bir şey görebiliriz. Bir bayt dizisi ile "ayrılmış" veri bölümleri var gibi görünmektedir.


Angler-21-Big.png



Bu 8 baytlık dizi (51 cb 7b fc 19 9b 77 fb) büyük boyutlu bloklar oluşturmak için tekrarlanır ve binary blob boyunca geri döner. Bunun rastgele bir olay olması pek olası değildir. Muhtemelen baytlar, verilerin nasıl bir araya getirileceğini anlamak için payloadın şifresini çözerken kullanılır. Bu, elbette, sadece benim tarafımdan bir görüş. Baytlar ne için kullanılırsa kullanılsın, Angler şifreleme anahtarını tekrar kullandığı sürece görünmeye devam edeceklerini ve bunun muhtemelen böyle olacağını zaten gördük!
Elbette bunun trafiği parmak izine sokmak için ustaca bir strateji olduğunu düşündüm; Ta ki bu bayt dizisini Google'da araştırana kadar!


Angler-22-Big.png



GG Emerging Threats, İyi oyundu.



Sonuç Olarak:

Daha öncesinden de bahsettiğim gibi, bu açılış sayfaları oldukça karmaşık yapılardır ve Angler geliştiricileri, analiz sürecini karıştırmak için büyük çaba sarf ettiler. Bununla birlikte, nihayetinde, sömürü kiti yazarları temel bir sorunla karşı karşıyadır. Tarayıcının JS'i anlayabilmesi gerekir ve eğer durum buysa, biz de onları takip edebiliriz. JS deobfuscaters’ı (DOM benzeşmesini destekleyen), JS konsolunu ve sağduyu kombinasyonunu kullanarak, açılış sayfasının ne yaptığını her zaman anlayabilmeliyiz!

JS deobfuscation'a cidden ilk kez düzgün bir şekilde baktığım için gönderimde bazı yanlışlıklar olabilir, herhangi bir sorun olursa lütfen bir yorum bırakın veya bir e-posta gönderin.



SOURCE: https://www.fuzzysecurity.com/tutorials/22.html
TRANSLATOR: DOLYETYUS
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.