Sudo, Linux ve Unix sistemlerde, kullanıcıların superuser olan kullanıcı haklarıyla komut çalıştırmalarına olanak veren bir programdır. Linux ve Unix sistemlerde sudo için /etc dizini altında sudoers adlı bir dosya bulunmaktadır. Bu dosya sudo’nun konfigürasyon dosyasıdır. Sudoers dosyasında yapılan konfigürasyonlar ile root haklarına sahip kullanıcılar, root veya diğer kullanıcılar üzerinden komutlar çalıştırabilirler. Resim 1’de varsayılan sudoers dosyası yer almaktadır.
Sudo ile bir komut çalıştırıldığında sistem ilk olarak sudoers dosyasını kontrol eder. Eğer bu dosya içerisinde kullanıcı adı ve kullanıcının bulunduğu gruplar için ilgili izinler yer alıyorsa, verilen izinler dahilinde sudo ile komutlar çalıştırılabilir. Aksi takdirde komutlar çalıştırılamayacaktır. Resim 1.1’de root kullanıcısı için atanan yetkiler görülmektedir. Resim 1.2’de ise root kullanıcısına atanan yetkilerin syntax’ı anlatılmaktadır.
Resim 1.2 – SUDOERS Syntax
Sudoers dosyasında, bir kullanıcı veya bir grup için yetkiler tanımlandığında Resim 2’de görülen syntax kullanılır. Syntax içerisinde yer alan ifadeler aşağıda açıklanmıştır:
• En solda yer alan kısım kullanıcı adını ifade etmektedir. Eğer bu kısımda yer alan kelime, başında ‘%’ işareti ile yazılmışsa bir grubu ifade eder.
• Host olarak belirtilen ve ALL değeri almış olan kısım kullanıcının hangi hostlarda komut çalıştırabileceğini ifade eder.
• (ALL:ALL) değerini alan kısım, belirtilen kullanıcının hangi kullanıcı ve hangi grup haklarıyla komut çalıştırabileceğini ifade eder.
• En sağda yer alan ifade ise bir etiketle birlikte, yetki verilecek komutun yolunu ifade eder.
Sudoers dosyasına, düşük yetkilere sahip kullanıcılar ve kullanıcı grupları için eklemeler yapıldığında, saldırganlar hak ve yetki yükseltmek bu durumdan için yararlanabilirler. Aşağıda sudo programı aracılığıyla hak ve yetki yükseltme işlemi için örnek bir uygulama yapıldı.
SUDO İLE PRIVILEGE ESCALATION
Sudoers dosyası, düşük yetkili kullanıcılar ve gruplar için yanlış konfigüre edildiğinde, bu durum saldırganların Linux ve Unix sistemler üzerinde hak ve yetki yükseltmelerine olanak verebilir. Resim 2.1’de, düşük yetkilere sahip bir kullanıcı üzerinden SSH oturumu elde edildi.
Resim 2.1 – SSH Oturumu
Ayrıca sudoers dosyasına unprivileged adlı kullanıcı için bir kural eklendi. Resim 2.2’de yeniden konfigüre edilmiş sudoers dosyası yer almaktadır.
Resim 2.2 – SUDOERS Dosyası
unprivileged adlı kullanıcı için eklenen kurala göre; bu kullanıcı sudo programını kullanarak tüm hostlarda root haklarıyla ve herhangi bir parola bilgisi girmeden python aracını çalıştırabilir.
Elde edilen SSH oturumu üzerinde sudo -l komutu çalıştırıldı ve bu komutla düşük yetkili kullanıcı üzerinden, bu kullanıcının sudo programı ile yapabilecekleri tespit edildi. Resim 2.3’te unprivileged adlı kullanıcı için tanımlanan sudo yetkilerinin listesi yer almaktadır.
Resim 2.3 – Kullanıcının SUDO Yetkileri
Düşük yetkili kullanıcının, root yetkileriyle python komutları çalıştırabiliyor olmasının işlevselliğinden yararlanabilmek için, işletim sistemi üzerinde bash uygulaması çalıştıran bir python kodu yazılabilir. Resim 2.4’te işletim sistemi üzerinde bash uygulaması çalıştıran kod parçası yer almaktadır.
Resim 2.4 – Python Kod Parçası
Resim 2.5’te, yazılan kod parçası sudo programı kullanılarak python aracıyla çalıştırıldı ve root haklarına erişim sağlandı.
Resim 2.5 – Root Oturumu