SUID ve SGID Bit’ler ve Bu Bitlere Sahip Dosyaların Bulunması
Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MY47p6WL' (Errcode: 28 - No space left on device) in /usr/share/nginx/html/syslogs/wp-includes/class-wpdb.php on line 2349
İşte bu nedenle, sistemdeki SUID ve SGID dosyaların taranması ve listelenmesi rutin bir güvenlik önlemi konuyla ilgili biraz detay vermek istedim. Yazının devamında SUID/SGID bit'lerinin ne olduğu ve sistemde bu bitlere sahip dosyaların nasıl saptanabileceği ile ilgili bilgiler bulabilirsiniz.
SUID/SGID Biti Nedir ?
SUID ve SGID konusunun daha iyi anlaşılması açısından örneklemek gerekirse, kullanıcı şifremizi değiştirmek için kullandığımız “passwd” aracını ele alabiliriz. Bildiğiniz gibi passwd komutunu kullanarak, kendi kullanıcımıza ait şifreyi -root olmamıza gerek kalmaksızın- değiştirebiliyoruz. Ancak sıradan bir kullanıcı olarak şifremizi değiştirdiğimiz zaman, -sadece root kullanıcısının erişme yetkisi olduğu- /etc/shadow dosyasının içeriğinde değişiklik yapılmış oluyor. İşte, erişimimizin olmadığı bir dosyada değişiklik yapabiliyor olmamızın nedeni, /usr/bin/passwd binary dosyasında “suid” bitinin etkinleştirilmiş olmasıdır. Yani örnek olarak “aliveli” kullanıcısı ile sisteme bağlı olan birisi passwd binarysini çalıştırdığı zaman, passwd aracını o binary'nin sahibinin yetkileri ile çalıştırmış olur; binary'nin sahibi de root olduğundan dolayı sadece root kullanıcısının erişme izni olduğu /etc/shadow dosyasında değişiklik yapabilir.
Dolayısı ile SUID biti, herhangi bir programın herhangi bir kullanıcı tarafından bile, program sahibinin haklarıyla çalıştırılabilmesine olanak sağlamaktadır. SUID biti etkinleştirilmiş olan passwd aracının izinlerini kontrol ettiğimiz zaman çalıştırılabilir (x) bitin yerine gelen SUID (s) bitini görebiliriz.
# ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 22984 Jan 6 2007 /usr/bin/passwd
İzin diziminde geçen bu (s) ibaresi suid bitinin aktif olduğunu, passwd'yi kim çalıştırırsa çalıştırsın programın root yetkisi ile çalıştırılacağını belirtir.
Aynı şekilde SGID de, herhangi bir programın, grup hakları ile çalıştırılabileceğini söyler. Örnek olarak /usr/bin/wall binary dosyası için SGID aktif edilmiştir.
# ls -l /usr/bin/wall -r-xr-sr-x 1 root tty 10484 Jan 21 2009 /usr/bin/wall
SUID/SGID biti aktif dosyaların bulunması
Sonuç olarak SUID ve SGID konusu kullanışlı bir durum olmasına rağmen güvenlik açısından dikkat de edilmesi gereken bir konudur. Zira, suid biti aktif edilmiş herhangi bir programda bulunan bir bug sistemde root yetkileri ile komut çalıştırılması gibi durumlara olanak verebilir ya da bir saldırgan sisteminizde suid biti aktif edilmiş bir dosya üzerinden root yetkisi elde etmeye çalışabilir. Bu açıdan, sisteminizde SUID/SGID bitleri aktif edilmiş dosyaları gözlem altında tutmak rutin bir güvenlik önlemidir.
Bu rutin işlem için find komutundan yararlanılabilir. Aşağıdaki komut ile SUID ya da SGID (ya da ikisi birden) bitleri etkinleştirilmiş dosyaları saptanabilir.
find / \( -perm -u+s -or -perm -g+s \) -type f -exec ls -l {} \;
Örnek bir çıktı şu şekildedir:
-rwsr-xr-x 1 root root 22984 Jan 6 2007 /usr/bin/passwd -rwsr-xr-x 1 root root 46972 Mar 3 2009 /usr/bin/chage -rwsr-sr-x 1 root root 315416 Jan 6 02:59 /usr/bin/crontab rwxr-sr-x 1 root mail 16020 Mar 29 2007 /usr/bin/lockfile -rwxr-sr-x 1 root tty 10984 Jan 20 12:43 /usr/bin/write -rwx--s--x 1 root slocate 23856 Sep 3 2009 /usr/bin/locate
Yukarıdaki çıktıda görüldüğü gibi SUID ya da SGID biti atkif edilmiş dosyaların bir dökümü bulunuyor. Bu dosyaları düzenli olarak incelemek, listeye yeni dosyalar eklenip eklenmediğini kontrol etmek akıllıca olacaktır. Normalde FreeBSD sistemlerde setuid,setgid dosyalar periodic olarak taranır ve sistem yöneticisine mail olarak raporlanır. Ancak linux sistemlerde bu işlem öntanımlı olarak yapılmamaktadır. Bu yüzden arama işlemini yapıp, email ile raporlama yapacak küçük bir script yazmak ve periyodik olarak çalıştırılmak üzere cron'a eklemek iyi olacaktır.
Örneğin aşağıdaki script iş görecektir. Kendinize göre düzenleyip kullanabilirsiniz.
Mesela her gece saat 03:00'da çalışması için de cron'a şu şekilde eklenebilir:
00 03 * * * /bin/sh /yol/findsuid.sh
Böylece, suid/sgid dosyaları sürekli gözlem altında tutabilirsiniz.
Bu yazılar da ilginizi çekebilir:
- Herkes tarafından yazılabilir dosyaların saptanması
- Belli bir zaman aralığında değiştirilmiş dosyaların saptanması
- iotop İle Disk Aktivitesini Görüntülemek | I/O Monitoring
- lsof (LiSt Open Files) Kullanımı ve Örnek Komutlar
- Linux Sistemlerde Gereksiz Servislerin Tespiti ve Kapatılması
Yorumlar
Trackbacks
Yorumda bulunun.
Teşekkürler önemli bir bilgi..
[Cevapla]