Background Image

BLOG

17 Şubat 2018 CTF

DKHOS - Mobile 500 - Çekirdekten yetiştirmelik adam aranıyor


Bu soru aslında o kadar da korkulduğu kadar zor bir soru değildi. Yapılması gereken tek şey soru içerisinde size verilen yapılandırmaları uygun şekilde hazırlayıp örnek kodu çalıştırmaktı. Soruda bize bir adet derlenmiş kernel ve örnek kullanım için c kodu verilmekteydi. Soru içerisindeki sürümlere uygun şekilde ortamımızı hazırlayıp, emulatoru bu kernel ile boot ettiğimiz zaman aslında sorunun yarısından çoğunu bitirmiş olacaktık.

Soru için Linux kernelinin Android işletim sistemi için özelleştirilmiş Binder mekanizmasında ufak çaplı değişiklikler yapılmıştır. Bunlardan ilki /dev/binder üzerinde gönderilen TX isteği sırasında eğer arg değeri 0x13377331 ise sistem node_debug_info fonksiyonunun adresini kernel mesajı olarak çıkartmaktadır. Aslında sorunun çözümü bu fonksiyonu çağırabilmekten geçmektedir. Ancak user-levelden bu fonksiyonu çağırmanın bir yolu bulunmamaktadır. Yapılması gereken önce adresini öğrenip, daha sonra bu adresi invoke edecek basit bir kernel modülü yazıp bunu sisteme yüklemektir. Adres değeri IOCTL üzerinden doğru değer ile yapıldığında kernel çıktısında c04dc78c gibi bir değer olarak gözükecekti. Daha sonra basit bir kernel modülü ile bu adresi function pointer olarak gösterip çağırdığımızda da flag değerine sahip olabilecektik.

Flag değeri de DKHOS_{4RM_k3rn3l_r0cks} olmaktadır.