CVE Analizi ve Exploit Development

CVE Analizi ve Exploit Development​

Merhaba arkadaşlar CVE Analizi ve Exploit Development isimli yazıma hoşgeldiniz.

Bu yazımda size CVE ‘nin ne olduğundan bunun analizinin nasıl yapılacağından ve bu CVE ‘lere yönelik Exploit ‘in nasıl geliştirilmesi gerektiğinden bahsedeceğim.

Yazıma geçmeden önce sizlere kısa bir süre önce piyasayı sallayan libSSH ‘den ve bunun ilk Exploit ‘ini nasıl yazdığımdan bahsedeceğim.

libSSH Nedir ?​

libSSH basit bir şekilde C ile yazılmış bir kütüphanedir ve bu kütüphane Protocol olarak şuanda SSHv2 protokolünü kullanmaktadır.

Sunucular bu kütüphaneyi kullanarak Client ve Server tarafında SSH bağlantıları oluşturmaktadır.

Piyasayı sallayan libSSH zafiyeti​

Çok kısa bir süre öncesinde internet üzerinde Peter Winter-Smith tarafından ortaya çıkarılmış bir zafiyettir bu.

Bu zafiyetin içeriğini basit bir şekilde anlatacak olursam şayet :

JUzxiw.jpg


Basit bir şekilde Sandviç istediğimizde Hayır deniliyor şayet Sandviç Success dediğimizde şartsız bir şekilde karşıdaki hemen yapayım efendim diyor.

Yani daha da teknik bir şekilde açıklarsam bir Sunucu içerisine Kullanıcı Adı ve Şifre vermeden sadece karşıya MSG_USERAUTH_SUCCESS diyerek girebiliyoruz.

Daha da basit şekilde libSSH ‘in 0.6 versiyonun sonrasını kullanan tüm Sunucu ‘lara kullanıcı bilgilerini vermeden giriş yapabiliyorduk.

Ve buda piyasada çok büyük bir yankı oluşturdu.

Zafiyetin ortaya çıktığını nasıl bulup exploit’ini buna yazdım ?​

Bu zafiyet ‘i her saniye yenilenen CVE listesini incelerken aniden gördüm.

libSSH CVE

Ve libSSH ‘te bulunan zafiyetin ne olduğuna dair bir açıklama bulunduğundan hemen onu okumaya koyuldum.

Açıklama :

A vulnerability was found in libssh’s server-side state machine before versions 0.7.6 and 0.8.4. A malicious client could create channels without first performing authentication, resulting in unauthorized access.

Ve hızlı bir şekilde libSSH kütüphanesinin kodlarını incelemeye başladım.

Bu kodlar içinde şu kısım çok ilgimi çekti :

zfy1mC.png


Çünkü bu kısımda geçen diyalog basit bir şekilde şöyle :

Eğer oturum içerisinde SSH_AUTH_STATE_SUCCESS mevcut ise Kullanıcı Adı ve Şifre istemeden girişi gerçekleştir.

Bende bunu anladıktan sonra bir Exploit geliştirdim. Karşıda libSSH kullanan Sunucu ‘da Komut çalıştırmayı basitleştirmek için.

Bu yazdığım Exploit twitterde çoğu yerde paylaşıldı ve Github içerisinde baya bir Star aldı.

Github ‘ta paylaştığım bu Exploit ‘in linki : libSSH Exploit Github

Hatta twitterde 16 yaşındaki dayanç soyadlı’nın libSSH için geliştirdiği exploit diye paylaşan bir çok ingiliz arkadaş gördüm bunlardan biri :

5G8VJu.png


Exploit ‘i yazdıktan sonra Shodan içerisinden baktığımda twitterde ne kadar 6500 tane potansiyel olarak hacklenmiş sistem olduğunu görsemde Shodan ‘da bu sayı 50,000 ‘i geçmişti.

Hatta Liveoverflow kanalının sahibine bu Zafiyet hakkında video çekecekmisin sorusunu sorduğumda Twitter ‘den verdiği cevap şu oldu :

Du3nof.png


Ve yazdığım Exploit ‘in ne kadarda büyük bir sonuca ulaştığını gördüm bu şekilde tabi yukarıda anlattığım şeyler bir kısmı.

Bu yazdığım Exploit bir çok CVE listesinde yayımlanmış bulunmaktadır :

Hzoku8.png


Aynı zamanda Exploti-DB içerisinde de yayınlandı : libSSH Exploit

Şimdi gelelim bir CVE ‘nin ne olduğuna bunun nasıl analizinin yapılacağına ve bunun için Exploit ‘in nasıl geliştirileceğine.

CVE Nedir​

CVE bilgi güvenliği zafiyetlerinin bir listesidir.

Daha basit bir şekilde bir Zafiyet ‘in açıklandığı ve var ise şayet Exploit ‘lerinin bulunduğu bir kayıttır.

Bir kaç tane CVE paylaşım sitesi :

CVE Mitre

CVE NVD

CVE details

CVE Analizi​

Öncelikle bir CVE bulalım.

Ben libSSH ‘den başladığım için aynı şekilde devam edeceğim.

90kjVo.png


Bu CVE listesi içerisinde benim Exploit ‘ini yazdığım CVE ‘nin ID ‘si CVE-2018-10933 basit bir şekilde daha bu CVE ‘nin içerisine girmeden bu Zafiyet ‘in ne olduğu açıklanıyor.

Bu CVE kaydına girip benimle ilerlemek isteyenler için link : CVE-2018-10933

Şimdi bu CVE ‘nin içerisine girdikten sonra içerisinde CVE ‘nin CVSS Score ‘unu görebiliriz yani ne kadar Kritik olduğunu.

R9izHT.png


Aynı zamanda bu Zafiyet ‘ten etkilenen Product ‘larıda görebiliyoruz :

7SUpDm.png


Bu Zafiyet için bulunan Referans ‘larıda görebiliyoruz ayrıca.

Bu Referans ‘lar içerisinde Zafiyet ‘in yazılmış ise Exploit ‘ide bulunur.

g6sR9C.png


Burada bulunan Exploit-DB linki benim size başta bahsettiğim kendi yazdığım Exploit ‘tir.

Şimdi bu Exploit ‘i nasıl geliştirdiğime yani bir CVE ‘nin Analiz ‘i sonrası o CVE için Exploit ‘in nasıl geliştirileceğinden bahsedeceğim.

Exploit Development​

Daha derine inmeden önce size basit bir şekilde bir Exploit ‘in ne olduğundan ve nasıl geliştirilebileceğinden bahsetmek istiyorum.

Exploit nedir ?​

Bir Exploit genellikle Zafiyet içeren bir kodu sömürmek için geliştirilen bir kod parçasıdır.

Exploit Development Nedir ?​

Zafiyet içerilen kodu Analiz ettikten sonra bu kodu sömürge için kullanılacak kodu geliştirmektir.

Daha da açarsam konuyu Exploit geliştirmek için bu sömürge kod parçasını yazacağınız Zafiyeti ve bu Zafiyet ‘in Kod ‘unu kavramanız gerekmektedir.

Ben libSSH Exploit’ini nasıl geliştirdim​

Dediğim gibi CVE listelerinde gezerken denk geldim ve libSSH bir kütüphane olduğundan Authentication yapılan kısımları incelemeye başladım bu kütüphane içerisinde.

Yani gerçekleştirilecek oturum yani Session için kütüphane içerisinde var olan Giriş , Çıkış ve Kontrol kodlarını incelemeye başladım.

Ve bu kodlar içerisinde baştada resmini verdiğim Kaynak Kod ‘una denk geldim.

libSSH içerisinde bulunan şu küçük Kod Parça ‘sı benim gerekli olan Exploit ‘i geliştirmemi sağladı diyebilirim :
Kod:
SSH_PACKET_CALLBACK(ssh_packet_userauth_success)
  (void)packet;
  (void)type;
  (void)user;

  SSH_LOG(SSH_LOG_DEBUG, "Authentication successful");
  SSH_LOG(SSH_LOG_TRACE, "Received SSH_USERAUTH_SUCCESS");

  session->auth.state = SSH_AUTH_STATE_SUCCESS;
Burada gördüğünüz Kaynak Kod basit bir şekilde eğer dışarıdan libSSH çalıştırılan sunucu içerisinde SSH_AUTH_STATE_SUCCESS byte’ı eklenirse aşşağıdaki kodu çalıştır diyor :
Kod:
session-> auth.state = SSH_AUTH_STATE_SUCCESS;
Ve bu Kod ise basit bir şekilde session içerisinde bulunan auth objesindeki state değişkenine SSH_AUTH_STATE_SUCCESS byte’ını ekliyor.

Buda demek ki sunucuya gönderdiğimiz SSH_AUTH_STATE_SUCCESS byte’ı bizi sunucu’ya Kullanıcı Adı ve Şifre vermeden sokabilecek.

Bende CVE ‘de ki açıklamayı okuduktan sonra libSSH içerisindeki Kaynak Kod ‘ları inceledikten sonra Exploit ‘i geliştirmek için Zafiyet ‘i bu şekilde kavradım.

Ve sömürge kodunu geliştirdim.

Şimdi daha da derine inip sizlerin nasıl Exploit geliştirebileceğinden bahsedeyim.

Exploit Development​

Öncelikle Kaynak Kod okumaya aşina olmanız gerek.

Çok çok önceden var olan bir söz vardır.

Bir hacker programcıdan daha iyi programlaya bildiği ve bunu tersine kullana bildiği için hackerdir.

Yani basit bir şekilde sizlerin Sömürge Kod ‘unu geliştirmeniz için Kaynak Kod ‘u okumaya aşina olmanız gerek.

Kendi Exploit ‘lerinizi geliştirmek için Zafiyet ‘i illaki sizin bulmanız gerekmez.

Yalnız bir hedef’e Saldırmadan önce o hedefi Tanımanız gereklidir.

Bir çok
  • FTP
  • SMTP
  • SSH
  • HTTP
  • vs…
Exploit kodu görebiliyorum internet’te yalnız bu Exploit geliştirenlerin 0’dan bir FTP ya da SMTP vs… Server ‘i ya da Client ‘i geliştirebileni %5 ‘lik hisse.

Dolayısı ile Zafiyet ‘i tanımak ve buna gerekli Exploit ‘i geliştirebilmeniz için Teknoloji ‘yi kendiniz yazmış gibi tanımanız gerekmekte.

THE END​

Bu yazımızında sonuna geldik.

Bir CVE ‘nin ne olduğundan ve bunun Analizi ‘nin nasıl yapılacağından aynı zamanda Zafiyet ‘ler için nasıl Sömürge Kodu yani Exploit geliştirilebileceğinden bahsettim.

Sorularınız mevcut ise : Twitter
 

sef

0xffffffxxxxxx
Merhabalar, böyle global bir zafiyetin sömürgeçini bir Türk olarak senin yayınlamış olman bizi mutlu etti daha özgün çalışmalarını bizimle paylaşman ümidiyle 🙂
 
Üst