Bilgisayar ağları ve özellikle İnternet, kullanıcılara büyük olanaklar verirken ciddi güvenlik sorunlarını da beraberinde getirdi. Ağa bağlı bilgisayarlarda çalışanların bu güvenlik sorunları konusunda bilgili olmaları zorunlu hale geldi. Ancak güvenlik ile kullanım kolaylığının çoğu zaman birbirleriyle çelişmesi ve kullanıcıların seçimlerini genellikle kullanım kolaylığından yana kullanmaları güvenlik önlemlerinin yerleşmesini engelledi. Bu bölüm, akademik ortamlarda yaygın olarak kullanılan Linux işletim sisteminde sistem sorumlularına güvenlik için yapabilecekleri konusunda yol göstermek ve kullanıcılara tehlikeleri tanıtmak amacıyla hazırlanmıştır.
Çok kullanıcılı işletim sistemlerinde kullanıcının kimliğinin belirlenmesi büyük önem taşır. Hem sistemi kullanmaya yetkisi olmayan kişilerin sisteme girmelerinin engellenmesi, hem de sistemdeki kullanıcıların birbirlerinden ayırdedilebilmeleri için, her kullanıcıya bir şifre verilir ve sisteme giriş başta olmak üzere tüm kritik işlemlerde kullanıcıya şifresi sorulur. Şifreler, diğer kullanıcı bilgileriyle birlikte, /etc/passwd
veya /etc/shadow
dosyasında tutulur.
Bazı uygulamaların şifre dosyasının bazı alanlarına erişmeleri gerektiğinden şifre dosyası, sistemdeki bütün kullanıcılar tarafından okunabilecek bir dosya olmalıdır. Bu nedenle şifreler bu dosyaya açık halde değil, şifrelenerek yazılırlar.
Şifre yönteminin güvenilirliği, sistemdeki kullanıcıların şifre seçiminde gösterdikleri özene bağlıdır. Kolay akılda kalacak şifreler, çoğu zaman kolay tahmin edilebilir. Buna karşılık, zor tahmin edilebilen şifreler kullanıcıların akıllarında kalmayabileceklerinden bir yere yazmalarına ve böylece yeni tehlikeler oluşturmalarına zemin hazırlayabilir.
Şu tip şifreler kolay tahmin edilebilen şifreler sayılmaktadır:
İyi bir şifre üretmek için önerilen iki yöntem vardır:
Şifre dosyasına erişimi olmayan bir saldırgan, hedef seçtiği bir kullanıcının şifresini deneyerek bulmak zorundadır. Olası bütün şifrelerin çokluğu gözönüne alınırsa bu tip bir saldırının etkisiz olacağı düşünülebilir. Ancak, çoğu sistemde, şifresi boş olan, kullanıcı adıyla aynı olan ya da sistem sorumlusunun geçici olarak verdiği basit şifreyi değiştir(e)meyen kullanıcıların sayısı azımsanamayacak düzeydedir. Bir tek kullanıcının bile şifresinin elde edilmesi sisteme giriş için yeterli olduğundan güvenlik açısından büyük sorunlar yaratabilir.
Saldırgan, şifre dosyasının bir kopyasını alabilirse işi oldukça kolaylaşır. Hem çok daha hızlı çalışabilir, hem de hedef sistemin sorumlusunun dikkatini çekmek tehlikesinden kurtulur. Bir saldırganın şifre dosyasını eline geçirmesi birkaç şekilde mümkün olabilir. Örneğin bir kullanıcının şifresini elde ederek sisteme girer ve dosyayı alır, bazı programlardaki hatalardan yararlanarak sisteme girmeden dosyayı elde edebilir, sistemdeki bir kullanıcı şifre dosyasını saldırgana gönderebilir veya saldırgan, sistemdeki kullanıcılardan biridir.
/etc/passwd
dosyasındaki şifreleri kırmaya çalışan çeşitli
yazılımlar bulunmaktadır. Bunların en etkililerinden ve en yaygın
kullanılanlarından biri Crack isimli programdır. Alec E. Muffett
tarafından geliştirilen Crack, sözlük saldırısı yöntemini kullanan bir
şifre kırma programıdır. Giriş olarak verilen sözlüklerdeki sözcükleri
şifre dosyasındaki 'salt' bilgileriyle şifreleyerek şifre olarak
kullanılıp kullanılmadıklarına bakar. Ayrıca sistemin kullanıcı
bilgilerinden de olası şifreler üretmeye çalışır. Bu paketi
ftp.metu.edu.tr adresinden temin edebilirsiniz.
Şifre güvenliğinin en önemli şartı, başta sistem sorumluları olmak üzere, bütün kullanıcıların iyi şifre seçmenin önemini kavramalarıdır. Herkes, şifresinin yetkisiz birinin eline geçmesi durumunda kendisi ve diğer kullanıcılar açısından oluşan tehlikeleri anlamalıdır. Nelerin kötü şifre olduğu ve nasıl iyi şifre seçilebileceği konusunda kullanıcılar eğitilmelidir. Bu koşul gerçekleşmedikçe aşağıda sözü geçen önlemlerin çoğu da başarısız olacaktır.
Her dosyanın bir sahibi, bir de grubu vardır. Dosya uzerinde kimin hangi işlemleri yapabileceğine dosyanın sahibi olan kullanıcı karar verir. Erişim hakları, dosyanın sahibi, grubu ve diğerleri için ayrı ayrı belirtilir.
-rwxr-x--- 1 uyar users 4030 Dec 4 15:30 dene
Dizinler için de aynı erişim hakları modeli geçerlidir. Bir dizin üzerindeki okuma izni, dizin altındaki programların listesinin alınıp alınamayacağını, yazma izni dizinde yeni bir dosya yaratılıp yaratılamayacağını, çalıştırma izni de o dizine geçilip geçilemeyeceğini belirler. Yetkili kullanıcının (root) bütün dosyalar ve dizinler üzerinde (birkaç sistem dosyası ve dizini haricinde) bütün işlemleri yapma yetkisi vardır.
İşletim sisteminde ya da uygulama programlarında bir hata olmadığı sürece erişim izni olmayanlar dosyayı zaten okuyamayacaklardır. Asıl tehlike, yetkili kullanıcının yetkisini kötüye kullanarak kullanıcıların kişisel dosyalarını ve mektuplarını okumasıdır. Her şeye yetkisi olan bir kullanıcı, sistemin kararlılığını korumak için gerekli olmakla birlikte, güvenliği ve özel bilgilerin gizliliğini bir kişinin ahlakına bırakması açısından Linux (ve Unix) işletim sisteminin güvenliğinin en zayıf noktalarından biri olarak değerlendirilmektedir.
Saldırgan, sisteme girince, hem sonraki girişlerini kolaylaştırmak, hem de daha rahat çalışabilmek için bazı sistem dosyalarını ya da programlarını değiştirebilir. Örneğin, şifre dosyasına bir kayıt ekleyerek kendine yetkili bir kullanıcı yaratabilir. Kullanıcıların şifrelerini öğrenmek için login, passwd gibi programları değiştirebilir.
Şifre güvenliği sağlandığı sürece dosya erişimlerinde fazla bir güvenlik sorunu olmayacaktır. Bu konuda sistem sorumlusuna düşen, kullanıcılarını erişim haklarını nasil düzenleyecekleri konusunda bilgilendirmektir.
Şifre dosyası gibi metin dosyalarında değişiklik olup olmadığı gözle inceleme yaparak ya da basit komut satırı programları kullanarak bulunabilir. Çalıştırılabilir dosyalar gözle kontrol edilemeyeceğinden en uygun yöntem, dosya imzaları oluşturarak sağlam olduğu bilinen imzalarla yeni hesaplanan imzaları karşılaştırmaktır. Tripwire paketi, dosyalarda yapılan değişiklikleri farketmekte sistem sorumlusuna ve kullanıcılara yardımcı olur. Önce sağlam olduğu bilinen dosyaların dosya imzaları oluşturularak bir yerde saklanır. Sonraki çalıştırmalarda imzalar yeniden hesaplanarak eskileriyle karşılaştırılır ve farklı olanlar varsa bildirilir. Düzgün çalışma için özgün imzaların iyi korunması, mümkünse, üstüne yazılamayan bir ortamda saklanması gerekir. coast.cs.purdue.edu adresinden temin edilebilir.
IP paketleri ağa açık halde gönderildiklerinden iletişim fiziksel olarak tamamıyla güvensizdir. Ağdan paketleri alabilen herkes içeriklerini rahatlıkla okuyabilir. Özellikle, bir ortak yol (bus) ile gerçeklenen ağlarda çok belirgin olarak ortaya çıkan bu sorun, şifreler başta olmak üzere pek çok duyarlı bilginin kolayca ele geçirilmesine yol açar.
Bir istemci, hizmet almak için bir sunucuya bağlanırken gerçeğe aykırı bir sayısal ya da sembolik adres bildirebilir. Internet'teki temel güvenlik sorunlarından biri, sayısal - sembolik adres dönüşümleri için kullanılan sunucuların yerel sistem sorumlusunun denetimi dışında olmaları ve çoğu protokolün güvenlik koşullarının sağlanabilmesi için bunlara gereksinim duymalarıdır.
Bir saldırgan, sunucu bir makinayi çökerterek hizmetlerin verilemez hale gelmesine yol açabilir. Buna, TCP/IP protokol ailesinin tasarımından, sunucu süreçlerdeki hatalardan veya işletim sistemindeki hatalardan kaynaklanan açıklar neden olabilir.
rsh
, rcp
ve rlogin
komutlarının kullanılmasında şifre denetimlerinin
atlanabilmesi için ya tüm kullanıcılar için geçerli sistem dosyasında
(/etc/hosts.equiv
) ya da kullanıcıya özel erişim dosyasında (.rhosts
)
ayarlamalar yapılmalıdır. Sistem dosyasında yer alan makinalar güvenilen
(trusted) makinalar kabul edilirler ve bu makinalardan bağlanan
kullanıcıların isimleri yerel şifre dosyasında varsa şifre denetimi
yapılmaz.
İnternet hizmetlerini gerçekleştiren programların çoğu halen üzerinde geliştirme ve hata ayıklama işlemleri süren programlardır. Sistem sorumlusu, kullandığı programların gelişimini izleyerek bilinen hatası bulunmayan son sürümlerini edinmeli ve çalıştırmalıdır. Ayrıca, Usenet'te güvenlik ile ilgili forumları izleyerek ve CERT (Computer Emergency Response Team - www.cert.org) önerilerine uyarak güncel olan güvenlik boşluklarını öğrenmeli ve önlemlerini almalıdır.
Yapılabilecek en temel işlerden biri, verilmesine gerek olmayan ya da
taşıdığı riske değmeyeceği düşünülen hizmetlerin sunucu süreçlerini
çalıştırmamaktır. Sözgelimi, yerel ağda hiçbir NIS istemci makinası
bulunmadığı halde bir bilgisayarın NIS sunucu sürecini çalıştırıyor
olması gereksiz bir risk içerir. Bazı sistem sorumluları, kullanıcı
isimleri ve sistemde kimin çalıştığı gibi bilgileri dışarıya aktardığı
için finger hizmetini tehlikeli bularak kapatırlar. Hizmetin engellenmesi
için işletim sisteminin açılış dosyalarından (/etc/rc.d/rc.*
) ilgili
sunucuları çalıştıran satırlar (özellikle netstat ve systat) kaldırılmalıdır.
Bazı durumlarda, hizmeti bütünüyle kapatmaktansa, erişimi koşullara bağlamak daha anlamlı olabilir. Bu koşullar, hizmetin hangi makinalara, hangi kullanıcılara, hangi saatlerde verileceği ya da verilmeyeceği şeklinde belirtilebilir. Bu tip kısıtlamalar getiren programların en yaygın kullanılanları tcpwrapper ve xinetd paketleridir. Wietse Venema tarafından geliştirilen tcpwrapper, sunuculara erişimi bağlantı isteğinde bulunan makina ve kullanıcıya gore kısıtlayan ve bağlantı istekleriyle ilgili kayıtlar tutan bir pakettir.
Bu paket Linux'un Slackware dağıtımıyla birlikte gelmektedir.
Güvenliğin önem taşıdığı yerlerde giderek yaygınlaşan alev duvarı tekniği, yerel ağdaki bilgisayarların dışarıdaki ağa doğrudan erişimlerini kaldırmayı öngörür. Ağın yönlendiricisi, ağda güvenli çalıştığı bilinen yalnızca bir makinanın dışarıyla bağlantı kurmasına izin verir. Diğer bilgisayarlar dış ağa çıkmak için bu makinadaki süreçlere bağlanırlar.
Güvenliğin en önemli parçalarından biri, sistemin sürekli izlenerek, güvenliğe aykırı durumlar oluşup oluşmadığının, oluştuysa bunların sorumlularının kimler olduğunun belirlenmesidir. Bunun için, güvenliği ilgilendirebilecek her türlü olayın kaydı tutulmalıdır. Şu tip bilgiler, güvenlik açısından değer taşırlar:
Linux'ta kayıt tutulması işini syslogd süreci görür. Hangi tür mesajların
hangi dosyaya yazılacağı konfigürasyon dosyasında (/etc/syslog.conf
)
belirtilir. Genellikle makina ilk açıldığı zaman /var/adm/messages
dizini altındaki messages
, xferlog
, syslog
gibi dosyalara yazılan bu bilgileri isteğinize göre daha sistematik bir yapıda saklamak da mümkündür. Ağ ile ilgili hizmetleri denetleyen süreçler (tcpwrapper, xinetd gibi paketler) kayıt dosyalarına girmesini istedikleri bilgileri syslogd sürecine bildirirler.