Gönderen Konu: Linux Sistemlerde Güvenlik  (Okunma sayısı 4424 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı seda

  • Türkçü-Turancı
  • **
  • İleti: 39
Linux Sistemlerde Güvenlik
« : 12 Mayıs 2006 »
Linux Sistemlerde Güvenlik

Arkadaşlar bildi imiz gibi Win işletim sistemlerine kolay bir şekilde girilebilmekte, userların her türlü bilgileri izinleri dahilinde olmadan bir takım bilgisayar user ları tarafından ele geçirilmektedir..Bu da Linux işletim sistemlerinin yaygınlaşmasına neden olan en büyük etkenlerden birisidir.Çünkü Linux kararlı ve güvenilir bir işletim sistemine sahiptir.Dolayısıyla birçok sistem yöneticisi kişisel bilgilerini ya da sistem bilgilerini Linux işletin sistemleri altında bulundurmaya başlamışlardır. Bununla birlikte hacker veya cracker diye nitelendirebilece imiz bilgisayar dehaları bir nevi kendini kanıtlama fırsatı bulmuşlardır.

Peki Linux işletim sistemini daha güvenli hale getirmek için neler yapılabilir¿

*Konsol Güvenli i: Konsol güvenli i ( İç güvenlik ) kurdu unuz sisteme ba lıdır. Ve e er normal bir user olarak linux’u kullanıyorsanız altta belirtilen önlemlere uymak zorunda de ilsiniz ancak e er bir sistem yöneticisi konumundaysanız daha dikkatli olmanız gerekmektedir. Alabilece iniz güvenlik önlemleri:

*E er linux’a root olarak girdiyseniz, pc başından ayrıldı ınız zaman şifre korumalı bir screensaver devreye sokun. Siz olmadı ınız zamanlarda birileri bu fırsattan yararlanıp sisteme zarar verebilir. E er linux’u konsoldan kullanıyorsanız " vlock" komutunu kullanabilirsiniz.

*Userlar için şifre belirledikten sonra user bu şifreyi kullanarak sisteme ilk kez girdi i zaman mutlaka şifresini de iştirmesini sa layın.

* Gerekmedikçe sisteme user eklemeyin.

*Şifrelerinizi belirlerken sa lam şifreler seçin.Brute attack yoluyla kırılamayacak şifreler seçin.Ve şifrenizi sık sık de işin.

Linux işletim sistemlerinde şifreler ve kullanıcı bilgileri /etc/passwd - /etc/shadow dosyasında bulunmaktadır. Bazı uygulamaların şifres dosyalarının bazı alanlarına erişimi 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.


**Shadow Password Suite [ Gölgeli Şifreler ]

Redhat 6.0 ’dan önceki Linux işletim sistemlerinde normal şifreleme kullanılıyordu. Bu şifreleme metodu sizin şifrelerinizi tekrar şifreler, /etc/passwd ’e atar. Bu şifreleme yönteminde de eksik birtakım şeyler vardır. Mesela userların okuma hakkı oldu u zaman bu dosya c/p yapılıp içinde bulunan şifreler çok kolay bir şekilde çözüşür. Shadow Password bu nedenden dolayı ortaya çıkmış bir uygulamadır. Şifreler yeniden şifrelenerek /etc/shadow içerisine atılır ve /etc/passwd dosyası altında şifre bırakılmaz. Böylece daha güvenli bir yapı oluşturulmuş olur.

**Md5 Şifrelemesi:

Linux ta açılan kullanıcılar için verilecek şifrenin uzunlu u en fazla 8 karakter olabilir. Daha uzun yazsanız bile Linux sadece ilk 8 karakteri şifre olarak kabul edecektir.Bu da demek oluyor ki şifre en fazla 8 karakter olabiliyor ve şifrelerimizi çözmek isteyen biri için bu bir başlangıç noktası, ipucu niteli i taşıyor. Bu ipucunu yok etmenin de bir yolu var tabi ki. Çözüm az önce merak etti imiz MD5 şifrelemesi. MD5 şifrelemesi sayesinde şifre uzunlu u 8 karakterden 256 karaktere kadar çıkarabiliyor. Bu da crackerin ömrünün bilgisayar başında geçirerek şifreyi kırmaya çalışaca ı anlamına geliyor. Sistem şifrelerini korumak amacıyla mutlaka gölgeli şifreleme ve MD5 şifrelemesini Kullanın!!


2. DOSYA GÜVENLİĞİ
Her dosyanın bir sahibi, bir de grubu vardır. Dosya üzerinde 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.



Tehlikeler: İş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.

Önlemler: Ş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ı nasıl 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 fark etmekte 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.


3.KULLANILMAYAN AÇIK PORTLARIN KAPATILMASI


Bilgisayarınızın aslında internete açılmak ve çeşitli internet uygulamalarını (ftp,telnet,irc , .. vs ) çalıştırmak için bu işlemlere karşılık gelen portları kullandı ını biliyor muydunuz? Portlar herhangi bir internet uygulamasının haberleşme için kullandı ı sanal çıkış noktalarıdır.Her uygulamaya özgü bir port vardır ve di er hiçbir uygulama başka uygulamaya ait porttan bilgi giriş ve çıkışı yapamaz. Bir an için portların gerçekten bilgisayarın içinde oldu u düşünecek olursak, üzerinde bir çok farklı boyutlarda açılmış delik bulunan bir tabla hayal edelim. Bu delikler portlarımız olsun. Her biri farklı boyutlarda oldu u için birine ait bir çomak di erine asla tam olarak yerleşemez; ya dar gelir ya da bol.portların mantı ı da aynen bu örnekteki gibidir.



Ayrıca sisteminizin verdi i servisler do rultusunda kullandı ı portları dinleyerek açık olup olmadı ını tespit eden programlar vardır. Bu programlar sayesinde sisteminiz hakkında bilgi edinen bir hackerin içeri giriş noktalarını kapatmak en akıllıca çözüm olur.
RedHat’ı e er sunucu olarak kurduysak açılışta , önceden seçilmiş servisleri çalıştırır (web sunucusu, dns sunucusu gibi). Bu sunucularında tabi ki belli portları vardır fakat artık bir sunucunun görevine son vermek istiyorsak bunu nasıl yaparız? Önceki bölümlerde anlatılan `SETUP` uygulaması bize yine bu aşamada da yardımcı oluyor. Setup komutunu vererek bu uygulamayı başlatıp "services" seçene ine girersek bazı servisleri için başlatma/kapatma seçimini rahatlıkla yapabiliriz. Peki telnet ya da ftp servislerini kapatmak için ne yaparız? Linux tüm internet uygulamalarına ait görevi inetd’ye yani internet deamon denilen "internet canavarına" vermiştir. Bu canavar /etc/inetd.conf adlı konfig dosyasında belirtilen tüm portları dinleyerek, gelen istemlere karşılık gelen servisi yerine getirir. İşte bu konfig dosyasını de iştirerek sürdürülen servisleri kapatmak mümkün. Örnekte bu dosyadan alınan bir kısım görülüyor.

ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a

telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd




Buradan ftp ve telnet hizmetlerinin verildi ini anlıyoruz. E er bu hizmetleri kapatmak istersek, istenmeyen hizmetin yazdı ı satırın başına `#` işaretini koymamız yeterli olur. Bu işaret aslında bu satırın yorum satırı oldu unu belirterek inetd’nin bu işlemleri görmesini engeller.

#ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a

#telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd




Artık size telnet’le ulaşmaya çalışan istemciye bu servisin verilmedi i ve ba lantının kesildi i bildirilir. Kullanmadı ınız servisleri bu şekilde kapatmanız sizi daha güvenli bir sisteme götürür. E er verilen servislerin hangi portlardan gerçekleşti ini görmek ve kapatmak istiyorsanız aynı yöntemle /etc/services dosyasıyla da oynayabilirsiniz. Kapatılan servislerin tekrar açılması için satır başlarına konan `#` işaretlerinin kaldırılması ve inetd’nin kapatılarak tekrar çalıştırılması gerekir. Bunun için yazılacak komut aşa ıda belirtilmiştir.

#killall -HUP inetd



4.UZAKTAN ERİŞİMİ KAPATMAK ve GÜVENLİ KABUK SSH


Bildi iniz gibi linux ile beraber gelen telnet deste i oldukça çok kullanılan bir uygulamadır. Telnet sayesinde karşı uzak sisteme e er kullanıcı hesabınız varsa ba lanıp bu sistemi aynı kendi bilgisayarınız gibi kullanabilirsiniz. Tabi bu erişim biraz daha yavaş bir şekilde gerçekleşecektir. Telnet servisini çalıştırıyorsanız ve kullanıcılarınız varsa aynı mekanizma sizin sisteminiz içinde geçerli olur. Ne yazık ki telnet uygulaması sanıldı ı kadar güvenli de ildir. Karşılıklı yapılan şifre alışverişlerinde bir şifreleme, gizleme yapılmadı ı için bilgiler istenmeyen kişilerin eline geçebilir, ve daha önemlisi hackerların sisteme sızmak için deneyece i ilk port telnetin portudur. Bunu engellemek ve maksimum derecede güvenli bir ba lantı sa lamak için yeni bir kabuk geliştirilmiştir ve bu kabu un şu ana kadar bilinen hiç bir açı ı yoktur! Bu kabu un adı SSH yani güvenli kabuk anlamına gelen `secure shell` dir. E er bu kabu u kullanacaksanız öncelikle telnet’i bir önceki maddede anlatılan biçimde servis dışı bırakmanız daha do ru olur. SSH i Cd de güvenlik dizini altında bulabilirsiniz. Kurulum ve verimli bir SSH için belirtilen tüm paketlerin kurulması gerekmektedir.

ssh-1.2.26.-4i.i386.rpm
ssh-clients-1.2.26.-4i.i386.rpm
ssh-server-1.2.26.-4i.i386.rpm
ssh-extras-1.2.26.-4i.i386.rpm




E er sisteminize ba lanan kullanıcılarınız başka bir işletim sistemini kullanıyorlarsa, bu onların artık ba lanamayaca ı anlamına gelmez. Telnet istemcisi gibi bir de SHH istemcisini internetten temin edebilirler.

5.BELİRLİ IP ADRESLERİNE İZİN VERİLMESİ



Kullanıcılarınız tarafından herhangi bir makineden Linux`unuza yapılan ba lantıları denetlemek, gerekli zamanlarda kısıtlamak ve böylece davetsiz misafirleri ileride engellemek amacıyla; /etc dizini altında bulunan iki konfigürasyon dosyası vardır.

/etc/hosts.deny DOSYASI

Bu konfig dosyası sayesinde Linux’unuz tarafından verilen servislere alan kısıtlaması getirilebilir. Yani bu servislerin bir ya da birkaçını istedi iniz güvenilir bir a a ya da bir tek IP adresine izin vererek, bu adresler dışındaki makineler bu servisleri kullanamaz. Adından da anlaşılaca ı üzere host.deny(makine.reddi) dosyası kabul etmedi iniz makine ip adreslerini yazabilece iniz bir dosya. Örnek bir /etc/host.deny üzerinde yorum yapalım:

#/etc/hosts.deny
in.telnetd : ALL except localhost
in.ftpd : ALL except localhost

Burada belirtilen in.telnetd, verilen servisin adıdır. ALL seçene ini ile tüm uzak erişime bu servis kapatılır; ancak bu servisten bizde mahrum kalırız. Bunun için `except` yani hariç parametresinden sonra kendimizi ekleriz ki bu servis bize açık olsun.

#/etc/hosts.deny ornek 2
in.telnetd : ALL




Bir önceki örnekten farklı olarak bu örnekte telnet servisi tüm makinelere kapatılmıştır. Bu servisin hizmet vermeyece i makineler arasında kendi makinemiz de var, farkı yalnızca bu. Size bir başlangıç fikri vermek gerekirse öncelikle /etc/host.deny `da bütün servisleri dışarıdan erişime kapamanız ve bir sonraki başlıkta incelenecek /etc/host.allow dan istedi iniz belli ip adreslerine ya da a lara izin vermenizin daha güvenli olaca ı do rultusundadır. Aşa ıda belirtilen biçimi host.deny için kullanabilirsiniz.

#/etc/host.deny ornek 3
ALL : ALL except localhost
/etc/hosts.allow DOSYASI

Yukarıda anlatılan ve kapatılan bir ya da tüm servisleri /etc/host.allow konfig dosyasını kullanarak belirli ya da güvenli ip adreslerine ya da a lara açalım.

#/etc/hosts.allow ornek1
in.telnetd: .gelecek.com.tr
wu.ftpd : 195.34.34.0



Az önce hatırlarsanız tüm servisleri host.deny dosyasından kapatmıştık. Ancak bir servis her iki dosyada da geçti i için Linux direkt olarak host.allow dosyasını göz önünde bulundurur. Bu örnekte de her makineye ve a a kapalı olan telneti gelecek.com.tr domain ismi altındaki her makineye açık tutuyoruz. Ayrıca kapalı olan ftp servisini 195.34.34.0 olarak tanımlı tüm a a açmış durumdayız. Buda 195.34.34.1 - 195.34.34.254 arasında bir ip adresine sahip tüm makinelerin bu servisi kullanması anlamını taşır.Bu şekilde servisleri belli bir a a verebilece imiz gibi sadece belli bir ip adresine de bu servisleri açabiliriz. Örnek 2’yi inceleyiniz.

#/etc/hosts.allow ornek2
in.telnetd: 195.56.57.3
wu.ftpd : 195.98.97.9

6.UZAKTAN YAPILAN SALDIRILAR



İşletim sistemlerine ba lı olarak sistemleri bir müddet için dondurmaya, devre dışı bırakmaya, hatta internetten ba lantısını kopartmaya kadar zarar verici ve uzaktan (remote) yapılabilecek saldırılar son bir kaç yıldır gündemde. Bunlara verilen genel ad `Denial of Service` yani service dışı bırakma `dır. Bunlara örnek olarak teardrop, newtear, nestea, smurf, land, lattierra, ssping verilebilir. Bu saldırıların bir ço u linux üzerinde etkisizdir. Sadece tear-drop ve yeni versiyonu olan new-tear ile nestea ayrıca broadcast (yayın ) haberleşmesi üzerinde gerçeklenen smurf Linux’u etkileyebiliyordu. Etkileyebiliyordu diyorum çünkü bu saldırılar çıktıktan hemen sonra Linux için bir üst sürüm kernel yazılmış ve bu açık giderilmişti. Kernel`in 2.0.34 sürümünden beri Linux’a karşı bu saldırılar etkisizdir. Düşünün ki RedHat Linux 6.0 in çekirde i 2.2.5. Ancak Unix ve unix türevleri dışında di er işletim sistemlerinin ço u bu saldırılardan hala etkileniyor. Bu konuda Linux’unuza güveniniz tam olsun! Son zamanlarda iyice "moda" olan DDoS (distrubuted denial of service) saldırıları ise her işletim sistemini etkiler. Ancak sistemi ping e kapatırsanız güvende olma şansınız bire iki oranında artar. Sizin yaşamadı ınızı düşünün biri size ateş etmez de il mi?


KAYIT TUTULMASI


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:

- Başarısız veya başarılı olmuş sisteme giriş denemeleri

- Nerelerden, hangi hizmetler için ba lantı istekleri geldi i

- Hizmetler sırasında gerçekleşen dosya aktarımları

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 makine 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.