NFS sayesinde bir makinede yer alan belirli bir disk bölümü, başka makineler tarafından okunabilir ve yazılabilir. NFS, istemci-sunucu mantığı ile çalışmaktadır. Birden fazla kullanıcıyla eş zamanlı olarak dosyalar üzerinde çalışılabilmektedir.
NFS dosya sistemi, 4 protokolün birleşmesiyle meydana gelir. RPC temellidir. Sunucu çalışmaya başladığında, Portmap’e (Protokolü port numaralarına çeviren sunucu), hangi kapının kullanılacağını söyler ve yönetilen RPC program numarasını verir. Paylaşılan dizin, sanki yerel makinenin bir diziniymiş gibi davranır. Kendi disk alanını paylaştıran makineye NFS sunucusu, bu diske erişim yapan makinelere ise NFS istemcisi (client) adı verilir. ArcSight sunucularında da kullanılan bu dosya sisteminin avantajları ve dezavantajları bulunmaktadır. Bazı avantajları şu şekildedir;
NFS sisteminin avantajlarından söz ettik. Bir de dezavantajlarına bakalım;
NFS, server-client mantığı ile çalışmaktadır. Kurulumu gerçekleştirmek için de hem server tarafına hem de client tarafına bazı paketlerin kurulumu yapılması gerekmektedir. Arcsight için de bazı durumlarda NFS mount sistemi kullanılmaktadır. Basit bir örnek verecek olursak, logger configuration backup dosyasının lokal sunucu içerisine alındığını fakat diski doldurmaması adına başka bir Linux sunucusunda tutmamız istenmektedir. Bu durumda NFS mount işlemi uygulayarak, yerel ağda bulunan bir başka Linux sunucusu içerisine configuration backup dosyalarımızı tutabiliriz. Öncelikle client ve server cihazlarına gerekli paketlerin kurulumu yapılmalıdır.
NFS Sunucu: Üzerinde dosya sisteminin tamamını veya bir bölümünü yerel ağ üzerindeki diğer makinelerin paylaşımına açar.
NFS İstemci: Bulunduğu yerel ağda bir NFS sunucusunun dosya sistemine ulaşır.
Hem istemci hem de sunucu cihazımızda NFS işlemleri için “nfs-utils” paketinin yüklü olması gerekmektedir. Centos sistemlerde “yum install nfs-utils” komutu ile paketi yükleyebilirsiniz. Paketin, sisteminizde yüklü olup olmadığını “rpm -qa nfs-utils” komutu ile kontrol edebilirsiniz.
Sunucu bilgisayarda, paylaştırılacak dosya sistemleri bilgisinin bulunduğu dosyayı, yukarıdaki path içerisine yazmamız gerekmektedir. Dosyanın bulunduğu yer sunucu olmalıdır. Aksi takdirde, dosya paylaşımında mount etme sorunları ile karşılaşılabilmektedir.
Kritik noktalardan biriside “exports” dosyasının içerisine yazılacak dosya bilgileridir. Burada, paylaşılacak dosya “/…/…” istemci ip” şeklinde yazılmalıdır. Parantez içerisinde yazılan seçenekleri de açıklamak gerekirse;
Paylaşılacak dosyaların bilgileri “exports” dosyasına yazıldıktan sonra, bilgiler kaydedilp çıkış gerçekleştirilir.
Bilgiler başarılı bir şekilde kaydedildikten sonra, sırası ile yukarıdaki komutlar çalıştırılmalıdır. “enable” komutu sistem her yeniden başladığında nfs servisini başlatmak için kullanılmaktadır. “showmount -e” komutu ile export edilen dosyaları ve RPC servisinin çalıştığını görüntüleyebilirsiniz.
Sunucu tarafında istenilen dosyayı paylaşma işlemlerinin ardından istemci tarafında gerekli konfigürasyonların yapılması gerekmektedir.
10.61.61.62 sunucusundaki paylaşımdaki dosyayı mount edebilmek için “mkdir” komutu ile bağlamayı gerçekleştireceğimiz path oluşturulmalıdır. İstemci tarafında da “systemctl enable nfs-server” ve “systemctl start nfs-server” komutları çalıştırılmalıdır. NFS servisi aktif hale getirilmelidir. Paylaşımdaki dosyayı kalıcı olarak mount edebilmek için /etc dizini altındaki fstab dosyasına yazılmalıdır.
Paylaşımdaki dosyayı istemciye mount etmek için 2 yöntem bulunmaktadır. Birinci yöntem fstab içerisine yukarıdaki satır (Sunucu IP adresi:/paylaşımdakidosya /bağlanacakklasör) eklenmelidir. Fstab içerisine yazılarak mount etme işlemine kalıcı mount işlemi denir ve sistem reboot edilse bile mount kopmadan paylaşıma devam edilir. Mountun gerçekleşmesi için komut satırından “mount -a” komutu yazılmalıdır.
İkinci yöntem ise komut satırından geçici mount etme işlemidir. Bu işlem;
komutu ile gerçekleştirilir. Sistemden herhangi bir log out ya da reboot işlemi sonrasında mount kopmaktadır.
İstemci içerisinde disk durumunu kontrol etmek için “df -kh” komutu girildiğinde son satırda mountu görüntüleyebiliriz. Sunucudan paylaşımı gerçekleşen dosyanın bağlandığı klasörü görüntülediğimizde ise configuration backup dosyalarının, başarılı bir şekilde alındığı görülmektedir. Bu şekilde NFS sisteminin ArcSight ile kullanımıyla ilgili basit bir örneğini incelemiş olduk.
NFS servisi, çoğu firmalarda dosya paylaşımında kullanılmaktadır. Yukarıda göstermiş olduğumuz ArcSight örneği üzerinden düşündüğümüzde, bu servis istismar edildiğinde ya da sızma testi yapıldığında buradan birçok veri elde edilir. NFS servisi istismarı yapılırken, birçok yöntem denenebilir. Zafiyetlerin ortaya çıkmasının temel sebebi, doğru bir şekilde yapılandırılmamış olan NFS servisidir. Örneğin, exports dosyası içerisine, “no_root_squash” bilgisi eklendiğinde bu paylaşım güvensiz bir paylaşım olmaktadır ve herkesin erişebilmesine sebebiyet verir.
Uygulama esnasında 2 sömürme yönteminden söz edilecektir. İlk yöntemde, paylaşım yapılacak dosyanın tüm ağ ile paylaşılma senaryosu üzerinden dosyalara erişmeye çalışacağız.
Paylaşım yapılacak sunucu içerisinde “/” dizini altındaki tüm dosyalar exports dizini içerisinden yukarıdaki gibi paylaşıma açılmıştır. Burada kötü niyetli kişi olduğumuzu düşünüp, bu ağa bir şekilde sızmış olduğumuzu varsayalım. Ayrıca bu paylaşımla ilgili bir bilgimizin olmadığını da düşünebiliriz.
Açığı sömüreceğimiz makineden ağ ile ilgili bir nmap taraması başlatalım. Yukarıdaki nmap taramasını kullanarak, “10.61.0.0” ağındaki NFS servisi tespit edilebilir. Bu tarama spesifik olarak bir IP adresini hedef almadığı için tüm ağı taraması biraz uzun sürebilir. “G” tuşu ile nmap search ün hangi aşamada olduğunu görüntüleyebilirsiniz.
Nmap taraması tamamlandığında, görüldüğü gibi 10.61.61.62 ağında, 111 portunda RPC servisi çalıştığı ve bu paylaşımda “/ *” dizinin tüm ağa paylaşıldığı tespit edilmiştir. Paylaşıma erişim sağlamak için mount ile dizini kendi makinemize bağlayabiliriz.
Paylaşımda olan dizini, makinemize mount edebilmek için “kurbandizini” adında bir dosya oluşturulur. Kalıcı mount etme işlemi yerine, geçici mount yöntemi kullanılarak paylaşımdaki dosya “kurbandizinine” mount edilmiştir. Sistem bilgileri “df –kh” ile görüntülendiğinde mount işleminin başarılı bir şekilde gerçekleştiği görülmektedir.
Makinemizde bulunan “kurbandizini” ne “ls” çekildiğinde 10.61.61.62 makinesinde “/” dizini altında bulunan tüm dosyaların listelendiği görülmektedir. Bu şekilde yanlış yapılandırılmış olan NFS paylaşımı, eline geçmesini istemediğimiz kişilerce istismar edilebilmektedir.
Böyle bir senaryo, herkesin başına gelebilir. Örneğin Nas paylaşımları da bu şekilde gerçekleşmektedir ve gerekli yetkilendirilmeler sağlanmazsa, bu şekilde zafiyetler ortaya çıkabilmektedir.
2.Senaryo
Bu senaryo da ise SUID biti ile NFS yapılandırması üzerinden hak yükseltme denenecektir. SUID biti, herhangi bir programın, herhangi bir kullanıcı tarafından o programının sahibinin yetkilerinde çalıştırılmasını sağlamaktadır. Bu sayede erişim yetkimizin bulunmadığı bir dosya üzerinde değişiklik yapabilir hale gelebiliriz. Hak yükseltmek için kernel, yapılandırma ve kullanım zafiyetleri gibi çeşitli yöntemler istismar edilebilir.
Varsayılan olarak “/etc/exports” dosyasının sahibi root ve yetkilendirmesi de 644 şeklindedir. 644 izni, standart kullanıcılar tarafından bu dosyanın içeriği okunabilir ancak değiştiremez anlamına gelmektedir. Senaryoda kısıtlı yetkilere sahip arcsight kullanıcısına “root” kullanıcısı gibi değiştirme yetkisi verilmiştir. Bu kısıtlı kullanıcı ile bir dosya ağ üzerinde NFS servisi ile paylaşılmaktadır.
Daha net anlaşılabilmesi için, kısıtlı yetkilere sahip arcsight kullanıcı /etc/exports dizinini değiştirme yetkisine sahiptir. Bu şekilde “/paylasilacak” dosyası ağda “no_root_squash” izinleriyle paylaşılmıştır.
Zafiyeti sömüreceğimiz makine üzerine /paylasilacak dizini geçici olarak mount edilir. Sistem bilgileri kontrol edildiğinde mount işleminin başarılı bir şekilde gerçekleştiği görülmektedir.
Mount edilen “kurbandizini” dosyası içerisine SUID biti oluşturulur. Herhangi bir dosyanın SUID bitini aktifleştirmek için iznini “4777” yapabilir ya da “chmod u+s” komutunu kullanarak aktifleştirebilirsiniz. Burada aktifleştirilen SUID biti “/bin/bash” kabuğudur. Hedef sistemde çalıştırıldığında standart kullanıcıdan root kullanıcısına yükseltmeyi hedeflemektedir. Dosyayı 4777 iznine çevirmemizin sebebi, “4” SUID bitinin aktifleştirildiğini, “7” dosya sahibine tüm yetkilerin verildiğini, “7” grup için okuma ve çalıştırabilme yetkilerinin verildiğini, “7” ise diğer kullanıcılara tüm yetkilerin verildiğini belirtmektedir.
Kısıtlı yetkilere sahip arcsight kullanıcısıyla paylaşımı yapılan klasör görüntülendiğinde “suid” bitine erişebilmekteyiz. Bu biti “./” komutu ile çalıştırdığımız zaman görüldüğü gibi arcsight kullanıcısından, root kullanıcına yükselmiştir. “Whoami” sorgusu çekildiğinde “root” yetkilerine başarılı bir şekilde yükseldiğimiz görüntülenmektedir. Bu şekilde kısıtlı kullanıcıdan kurtulup, root yetkilerine erişerek sistemde root’un yapabileceği her hareketi gerçekleştirebiliriz.
2 farklı senaryoyu, uygulamalı bir şekilde gerçekleştirdik. Bu yöntemlerden haricinde de NFS ile ilgili birçok sömürü yöntemi bulunmaktadır. Bu yöntemlerden bazıları;
Gibi birçok yöntem bulunmaktadır.
NFS, birçok alanda kullanılması gereken, kullanıldığında ise oldukça faydalı olan bir servistir. Uygulamada da görüldüğü gibi, doğru yapılandırılmadığı zaman sistem içerisinde birçok açık barındırabilir ve yetkisiz erişim sağlanabilir. Eski sürümlerinin güvensiz olması nedeniyle yeni sürümlerinde kerberos ile kimlik doğrulama dahil birçok güvenlik katmanı eklenmesine rağmen, kullanıcı bazlı hatalar bu tür güvenlik katmanlarının önüne geçmektedir. Sistem içerisinde NFS servisi kullanılıyorsa, aşağıdaki önlemleri uygulayabiliriz.
-