Selamlar,

Günlük olarak RSS feedlerimi takip etmeye özen gösteren birisiyim(Feedly). Bu feedler arasında bolca HTB(HackTheBox) write-up kaynağı da bulunuyor doğal olarak. İşte yine bir HTB makinesi ile ilgili write-up'ı okurken bunca yıldır Linux(End-User olarak) kullanan biri olarak karşılaşmadığım ve karşılaştığımda şaşırdığım bir komut gördüm. Neydi bu komut?

Komutu anlatmak gerekirse recursive bir biçimde / yani en üst dizinden başlayarak tüm dosyaların kabiliyetlerini kontrol edecek ve eğer return code olarak 2 kodu dönülüyorsa bunu /dev/null uzayına gönderecek.

Bu zamana kadar genelde dosya yetkilerini kontrol ederken, sadece sembolik olan yetkilendirme sistemini kontrol ederdim. Bu sembolik yetkilendirme sistemi nedir derseniz, kendisi chmod, chown komutları ile birlikte kullandığınız octal numerik olarak belirtilen(sembolik) dosya yetkilendirme sistemidir.

Eğer bu konu hakkında bilgi sahibi değilseniz aşağıda vermiş olduğum kaynağı, kaynağın tümünü tüketebilirsiniz. Çok güzel bir kaynaktır.

Linux Sistem Programlama

Öncelikle bir hacker olduğunuzu düşünün, bir linux sistemi ele geçirdiniz fakat o da ne? Sistem üzerinde Nginx'in tüm işlemleri özel bir kullanıcı ile yürütülüyor ve siz bu sistemde at koşturamıyorsunuz. Ne yapmamız gerek? Sistem üzerinde yetkimizi yükseltebileceğimiz bir şeyler aramamız gerekmekte.

Ne yapabiliriz? Mesela SUID Bit içeren dosyaları arayabiliriz.

Tamam bir executable dosya bulduk ama bunu nasıl kullanacağımızı bilmiyoruz? İster Google üzerinde aratın ya da bu iş için çok güzel bir site hazırlamışlar ona bakabilirsiniz.

GTFOBins (Linux)

LOLBAS (Windows)

vs.vs bir sürü senaryo üretilebilir fakat hiç dosya kapasiteleri(capabilities) aklınıza gelmiş miydi? Benim şahsen böyle bir şey olduğundan bile haberim yoktu. Zaten bu yüzden bu blog yazısının konusu bu.

Eski kernel sürümlerinde Linux üzerinde yetkilendirme sistemi bu kadar gelişmiş değildi ve bazı kısıtlamalar yüzünden siber güvenlik açısından büyük riskler barındıran işlemler gerçekleştiriliyordu.

Örnek: Linux üzerinde Port olarak 1024'ün altında bir portta socket açacaksanız root kullanıcısı olmak zorundasınız. Peki sunucunuza Nginx kurdunuz ve web servisi yayınlayacaksınız. Bunu root kullanıcısı olarak kurup çalıştırdığınızda geçmiş olsun.

Örnek1: 1024 altında port açmak için root kullanıcısına ihtiyacınız var demiştik. Peki günlük olarak troubleshooting için kullandığımız ping komutu? Ping bildiğiniz üzere port kullanan bir yapıda değil ki zaten farklı bir protokol. Bknz: ICMP. Ping atabilmek için raw_socket açmak zorundasınız ve bu sadece root kullanıcısına özgü bir yetki. Takılıp kaldık mı? Hayır.

Bu arada ICMP temelli çalışan fakat işletim sistemine göre değişen traceroute ile ilgili aşağıya güzel bir link iliştiriyorum.

ping ve traceroute nasıl çalışır

Neyse devam. İşte bu kısımda takılıp kalmıyoruz SUID Bit devreye giriyor. Bu da ayrı bir yazı konusu aslında o yüzden direkt olarak size konu ile ilgili link vereceğim.

SUID ve SGID Bit

Tamam bunu okuduk ama diğer taraftan aşağıdakini de okumakta fayda var.

SUID Bit İstismarı

Evet zararlı kısmını da gösterdik. Şimdi konu gerçekten Capabilities API'a geldi. Şu an kullandığınız distroda ping komutunun nasıl çalıştığına(yetkisiz kullanıcı ile) baktınız mı hiç?

Hadi yetkilerine bakalım. Direkt olarak komutları ve çıktılarını aşağıya kopyalıyorum. Sonra üstünde konuşacağız.

Gördüğünüz gibi ping komutu root:root olarak yetkilendirilmiş bir biçimde üstelik herhangi bir SUID Bit vb. bir şey de yok fakat ben nasıl çalıştırabiliyorum?

Yine terminal çıktısı atayım.

bash ➜ /bin sudo getcap /usr/bin/ping /usr/bin/ping = cap_net_raw+ep ➜ /bin

Gördüğünüz gibi ping çalıştırılabilir dosyasında bir kapasite sınırı sonunda + olarak belirtilmiş bir yetkilendirme biçimi var.

Not: Ping komutunun artık kullanıcı tarafında çalıştırılabilmesi için herhangi bir izne ihtiyacı yok. Sebebi ping socketinin direkt olarak kernela eklenmesi.(Ben öyle anladım?)

Kaynak: net: ipv4: add IPPROTO_ICMP socket kind

Öncelik olarak Kernel sürümümüze özel olarak sistem üzerinde ne kadar farklı yetkilendirme yapabileceğimize bakalım. (Tüm Capabilities Yetkilerine)