Linux güvenligi hakkinda bilgi sahibi olacagiz..Konuya geçelim...(Bazi bölümler alintidir)
=================================================================================
Linux Sistemlerde Güvenlik
Arkadaslar bildigimiz gibi Win isletim sistemlerine kolay bir sekilde girilebilmekte, userlarin her türlü bilgileri izinleri dahilinde olmadan bir takim bilgisayar user lari tarafindan ele geçirilmektedir..Bu da Linux isletim sistemlerinin yayginlasmasina neden olan en büyük etkenlerden birisidir.Çünkü Linux kararli ve güvenilir bir isletim sistemine sahiptir.Dolayisiyla birçok sistem yöneticisi kisisel bilgilerini ya da sistem bilgilerini Linux isletin sistemleri altinda bulundurmaya baslamislardir. Bununla birlikte hacker veya cracker diye nitelendirebilecegimiz bilgisayar dehalari bir nevi kendini kanitlama firsati bulmuslardir.
Peki Linux isletim sistemini daha güvenli hale getirmek için neler yapilabilir¿
*Konsol Güvenligi: Konsol güvenligi ( Iç güvenlik ) kurdugunuz sisteme baglidir. Ve eger normal bir user olarak linux’u kullaniyorsaniz altta belirtilen önlemlere uymak zorunda degilsiniz ancak eger bir sistem yöneticisi konumundaysaniz daha dikkatli olmaniz gerekmektedir. Alabileceginiz güvenlik önlemleri:
*Eger linux’a root olarak girdiyseniz, pc basindan ayrildiginiz zaman sifre korumali bir screensaver devreye sokun. Siz olmadiginiz zamanlarda birileri bu firsattan yararlanip sisteme zarar verebilir. Eger linux’u konsoldan kullaniyorsaniz " vlock" komutunu kullanabilirsiniz.
*Userlar için sifre belirledikten sonra user bu sifreyi kullanarak sisteme ilk kez girdigi zaman mutlaka sifresini degistirmesini saglayin.
* Gerekmedikçe sisteme user eklemeyin.
*Sifrelerinizi belirlerken saglam sifreler seçin.Brute attack yoluyla kirilamayacak sifreler seçin.Ve sifrenizi sik sik degisin.
Linux isletim sistemlerinde sifreler ve kullanici bilgileri /etc/passwd - /etc/shadow dosyasinda bulunmaktadir. Bazi uygulamalarin sifres dosyalarinin bazi alanlarina erisimi gerektiginden sifre dosyasi, sistemdeki bütün kullanicilar tarafindan okunabilecek bir dosya olmalidir. Bu nedenle sifreler bu dosyaya açik halde degil, sifrelenerek yazilirlar.
**Shadow Password Suite [ Gölgeli Sifreler ]
Redhat 6.0 ’dan önceki Linux isletim sistemlerinde normal sifreleme kullaniliyordu. Bu sifreleme metodu sizin sifrelerinizi tekrar sifreler, /etc/passwd ’e atar. Bu sifreleme yönteminde de eksik birtakim seyler vardir. Mesela userlarin okuma hakki oldugu zaman bu dosya c/p yapilip içinde bulunan sifreler çok kolay bir sekilde çözüsür. Shadow Password bu nedenden dolayi ortaya çikmis bir uygulamadir. Sifreler yeniden sifrelenerek /etc/shadow içerisine atilir ve /etc/passwd dosyasi altinda sifre birakilmaz. Böylece daha güvenli bir yapi olusturulmus olur.
**Md5 Sifrelemesi:
Linux ta açilan kullanicilar için verilecek sifrenin uzunlugu en fazla 8 karakter olabilir. Daha uzun yazsaniz bile Linux sadece ilk 8 karakteri sifre olarak kabul edecektir.Bu da demek oluyor ki sifre en fazla 8 karakter olabiliyor ve sifrelerimizi çözmek isteyen biri için bu bir baslangiç noktasi, ipucu niteligi tasiyor. Bu ipucunu yok etmenin de bir yolu var tabi ki. Çözüm az önce merak ettigimiz MD5 sifrelemesi. MD5 sifrelemesi sayesinde sifre uzunlugu 8 karakterden 256 karaktere kadar çikarabiliyor. Bu da crackerin ömrünün bilgisayar basinda geçirerek sifreyi kirmaya çalisacagi anlamina geliyor. Sistem sifrelerini korumak amaciyla mutlaka gölgeli sifreleme ve MD5 sifrelemesini Kullanin!!
2. DOSYA GÜVENLIGI
Her dosyanin bir sahibi, bir de grubu vardir. Dosya üzerinde kimin hangi islemleri yapabilecegine dosyanin sahibi olan kullanici karar verir. Erisim haklari, dosyanin sahibi, grubu ve digerleri için ayri ayri belirtilir.
-rwxr-x--- 1 uyar users 4030 Dec 4 15:30 dene
Dizinler için de ayni erisim haklari modeli geçerlidir. Bir dizin üzerindeki okuma izni, dizin altindaki programlarin listesinin alinip alinamayacagini, yazma izni dizinde yeni bir dosya yaratilip yaratilamayacagini, çalistirma izni de o dizine geçilip geçilemeyecegini belirler. Yetkili kullanicinin (root) bütün dosyalar ve dizinler üzerinde (birkaç sistem dosyasi ve dizini haricinde) bütün islemleri yapma yetkisi vardir.
Tehlikeler: Isletim sisteminde ya da uygulama programlarinda bir hata olmadigi sürece erisim izni olmayanlar dosyayi zaten okuyamayacaklardir. Asil tehlike, yetkili kullanicinin yetkisini kötüye kullanarak kullanicilarin kisisel dosyalarini ve mektuplarini okumasidir. Her seye yetkisi olan bir kullanici, sistemin kararliligini korumak için gerekli olmakla birlikte, güvenligi ve özel bilgilerin gizliligini bir kisinin ahlakina birakmasi açisindan Linux (ve Unix) isletim sisteminin güvenliginin en zayif noktalarindan biri olarak degerlendirilmektedir.
Saldirgan, sisteme girince, hem sonraki girislerini kolaylastirmak, hem de daha rahat çalisabilmek için bazi sistem dosyalarini ya da programlarini degistirebilir. Örnegin, sifre dosyasina bir kayit ekleyerek kendine yetkili bir kullanici yaratabilir. Kullanicilarin sifrelerini ögrenmek için login, passwd gibi programlari degistirebilir.
Önlemler: Sifre güvenligi saglandigi sürece dosya erisimlerinde fazla bir güvenlik sorunu olmayacaktir. Bu konuda sistem sorumlusuna düsen, kullanicilarini erisim haklarini nasil düzenleyecekleri konusunda bilgilendirmektir.
Sifre dosyasi gibi metin dosyalarinda degisiklik olup olmadigi gözle inceleme yaparak ya da basit komut satiri programlari kullanarak bulunabilir. Çalistirilabilir dosyalar gözle kontrol edilemeyeceginden en uygun yöntem, dosya imzalari olusturarak saglam oldugu bilinen imzalarla yeni hesaplanan imzalari karsilastirmaktir. Tripwire paketi, dosyalarda yapilan degisiklikleri fark etmekte sistem sorumlusuna ve kullanicilara yardimci olur. Önce saglam oldugu bilinen dosyalarin dosya imzalari olusturularak bir yerde saklanir. Sonraki çalistirmalarda imzalar yeniden hesaplanarak eskileriyle karsilastirilir ve farkli olanlar varsa bildirilir. Düzgün çalisma için özgün imzalarin iyi korunmasi, mümkünse, üstüne yazilamayan bir ortamda saklanmasi gerekir.
3.KULLANILMAYAN AÇIK PORTLARIN KAPATILMASI
Bilgisayarinizin aslinda internete açilmak ve çesitli internet uygulamalarini (ftp,telnet,irc , .. vs ) çalistirmak için bu islemlere karsilik gelen portlari kullandigini biliyor muydunuz? Portlar herhangi bir internet uygulamasinin haberlesme için kullandigi sanal çikis noktalaridir.Her uygulamaya özgü bir port vardir ve diger hiçbir uygulama baska uygulamaya ait porttan bilgi giris ve çikisi yapamaz. Bir an için portlarin gerçekten bilgisayarin içinde oldugu düsünecek olursak, üzerinde bir çok farkli boyutlarda açilmis delik bulunan bir tabla hayal edelim. Bu delikler portlarimiz olsun. Her biri farkli boyutlarda oldugu için birine ait bir çomak digerine asla tam olarak yerlesemez; ya dar gelir ya da bol.portlarin mantigi da aynen bu örnekteki gibidir.
Ayrica sisteminizin verdigi servisler dogrultusunda kullandigi portlari dinleyerek açik olup olmadigini tespit eden programlar vardir. Bu programlar sayesinde sisteminiz hakkinda bilgi edinen bir hackerin içeri giris noktalarini kapatmak en akillica çözüm olur.
RedHat’i eger sunucu olarak kurduysak açilista , önceden seçilmis servisleri çalistirir (web sunucusu, dns sunucusu gibi). Bu sunucularinda tabi ki belli portlari vardir fakat artik bir sunucunun görevine son vermek istiyorsak bunu nasil yapariz? Önceki bölümlerde anlatilan `SETUP` uygulamasi bize yine bu asamada da yardimci oluyor. Setup komutunu vererek bu uygulamayi baslatip "services" seçenegine girersek bazi servisleri için baslatma/kapatma seçimini rahatlikla yapabiliriz. Peki telnet ya da ftp servislerini kapatmak için ne yapariz? Linux tüm internet uygulamalarina ait görevi inetd’ye yani internet deamon denilen "internet canavarina" vermistir. Bu canavar /etc/inetd.conf adli konfig dosyasinda belirtilen tüm portlari dinleyerek, gelen istemlere karsilik gelen servisi yerine getirir. Iste bu konfig dosyasini degistirerek sürdürülen servisleri kapatmak mümkün. Örnekte bu dosyadan alinan bir kisim 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 verildigini anliyoruz. Eger bu hizmetleri kapatmak istersek, istenmeyen hizmetin yazdigi satirin basina `#` isaretini koymamiz yeterli olur. Bu isaret aslinda bu satirin yorum satiri oldugunu belirterek inetd’nin bu islemleri 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
Artik size telnet’le ulasmaya çalisan istemciye bu servisin verilmedigi ve baglantinin kesildigi bildirilir. Kullanmadiginiz servisleri bu sekilde kapatmaniz sizi daha güvenli bir sisteme götürür. Eger verilen servislerin hangi portlardan gerçeklestigini görmek ve kapatmak istiyorsaniz ayni yöntemle /etc/services dosyasiyla da oynayabilirsiniz. Kapatilan servislerin tekrar açilmasi için satir baslarina konan `#` isaretlerinin kaldirilmasi ve inetd’nin kapatilarak tekrar çalistirilmasi gerekir. Bunun için yazilacak komut asagida belirtilmistir.
#killall -HUP inetd
4.UZAKTAN ERISIMI KAPATMAK ve GÜVENLI KABUK SSH
Bildiginiz gibi linux ile beraber gelen telnet destegi oldukça çok kullanilan bir uygulamadir. Telnet sayesinde karsi uzak sisteme eger kullanici hesabiniz varsa baglanip bu sistemi ayni kendi bilgisayariniz gibi kullanabilirsiniz. Tabi bu erisim biraz daha yavas bir sekilde gerçeklesecektir. Telnet servisini çalistiriyorsaniz ve kullanicilariniz varsa ayni mekanizma sizin sisteminiz içinde geçerli olur. Ne yazik ki telnet uygulamasi sanildigi kadar güvenli degildir. Karsilikli yapilan sifre alisverislerinde bir sifreleme, gizleme yapilmadigi için bilgiler istenmeyen kisilerin eline geçebilir, ve daha önemlisi hackerlarin sisteme sizmak için deneyecegi ilk port telnetin portudur. Bunu engellemek ve maksimum derecede güvenli bir baglanti saglamak için yeni bir kabuk gelistirilmistir ve bu kabugun su ana kadar bilinen hiç bir açigi yoktur! Bu kabugun adi SSH yani güvenli kabuk anlamina gelen `secure shell` dir. Eger bu kabugu kullanacaksaniz öncelikle telnet’i bir önceki maddede anlatilan biçimde servis disi birakmaniz daha dogru olur. SSH i Cd de güvenlik dizini altinda bulabilirsiniz. Kurulum ve verimli bir SSH için belirtilen tüm paketlerin kurulmasi 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
Eger sisteminize baglanan kullanicilariniz baska bir isletim sistemini kullaniyorlarsa, bu onlarin artik baglanamayacagi anlamina gelmez. Telnet istemcisi gibi bir de SHH istemcisini internetten temin edebilirler.
5.BELIRLI IP ADRESLERINE IZIN VERILMESI
Kullanicilariniz tarafindan herhangi bir makineden Linux`unuza yapilan baglantilari denetlemek, gerekli zamanlarda kisitlamak ve böylece davetsiz misafirleri ileride engellemek amaciyla; /etc dizini altinda bulunan iki konfigürasyon dosyasi vardir.
/etc/hosts.deny DOSYASI
Bu konfig dosyasi sayesinde Linux’unuz tarafindan verilen servislere alan kisitlamasi getirilebilir. Yani bu servislerin bir ya da birkaçini istediginiz güvenilir bir aga ya da bir tek IP adresine izin vererek, bu adresler disindaki makineler bu servisleri kullanamaz. Adindan da anlasilacagi üzere host.deny(makine.reddi) dosyasi kabul etmediginiz makine ip adreslerini yazabileceginiz bir dosya. Örnek bir /etc/host.deny üzerinde yorum yapalim:
#/etc/hosts.deny
in.telnetd : ALL except localhost
in.ftpd : ALL except localhost
Burada belirtilen in.telnetd, verilen servisin adidir. ALL seçenegini ile tüm uzak erisime bu servis kapatilir; ancak bu servisten bizde mahrum kaliriz. Bunun için `except` yani hariç parametresinden sonra kendimizi ekleriz ki bu servis bize açik olsun.
#/etc/hosts.deny ornek 2
in.telnetd : ALL
Bir önceki örnekten farkli olarak bu örnekte telnet servisi tüm makinelere kapatilmistir. Bu servisin hizmet vermeyecegi makineler arasinda kendi makinemiz de var, farki yalnizca bu. Size bir baslangiç fikri vermek gerekirse öncelikle /etc/host.deny `da bütün servisleri disaridan erisime kapamaniz ve bir sonraki baslikta incelenecek /etc/host.allow dan istediginiz belli ip adreslerine ya da aglara izin vermenizin daha güvenli olacagi dogrultusundadir. Asagida belirtilen biçimi host.deny için kullanabilirsiniz.
#/etc/host.deny ornek 3
ALL : ALL except localhost
/etc/hosts.allow DOSYASI
Yukarida anlatilan ve kapatilan bir ya da tüm servisleri /etc/host.allow konfig dosyasini kullanarak belirli ya da güvenli ip adreslerine ya da aglara açalim.
#/etc/hosts.allow ornek1
in.telnetd: .gelecek.com.tr
wu.ftpd : 195.34.34.0
Az önce hatirlarsaniz tüm servisleri host.deny dosyasindan kapatmistik. Ancak bir servis her iki dosyada da geçtigi için Linux direkt olarak host.allow dosyasini göz önünde bulundurur. Bu örnekte de her makineye ve aga kapali olan telneti gelecek.com.tr domain ismi altindaki her makineye açik tutuyoruz. Ayrica kapali olan ftp servisini 195.34.34.0 olarak tanimli tüm aga açmis durumdayiz. Buda 195.34.34.1 - 195.34.34.254 arasinda bir ip adresine sahip tüm makinelerin bu servisi kullanmasi anlamini tasir.Bu sekilde servisleri belli bir aga verebilecegimiz 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
Isletim sistemlerine bagli olarak sistemleri bir müddet için dondurmaya, devre disi birakmaya, hatta internetten baglantisini kopartmaya kadar zarar verici ve uzaktan (remote) yapilabilecek saldirilar son bir kaç yildir gündemde. Bunlara verilen genel ad `Denial of Service` yani service disi birakma `dir. Bunlara örnek olarak teardrop, newtear, nestea, smurf, land, lattierra, ssping verilebilir. Bu saldirilarin bir çogu linux üzerinde etkisizdir. Sadece tear-drop ve yeni versiyonu olan new-tear ile nestea ayrica broadcast (yayin ) haberlesmesi üzerinde gerçeklenen smurf Linux’u etkileyebiliyordu. Etkileyebiliyordu diyorum çünkü bu saldirilar çiktiktan hemen sonra Linux için bir üst sürüm kernel yazilmis ve bu açik giderilmisti. Kernel`in 2.0.34 sürümünden beri Linux’a karsi bu saldirilar etkisizdir. Düsünün ki RedHat Linux 6.0 in çekirdegi 2.2.5. Ancak Unix ve unix türevleri disinda diger isletim sistemlerinin çogu bu saldirilardan hala etkileniyor. Bu konuda Linux’unuza güveniniz tam olsun! Son zamanlarda iyice "moda" olan DDoS (distrubuted denial of service) saldirilari ise her isletim sistemini etkiler. Ancak sistemi ping e kapatirsaniz güvende olma sansiniz bire iki oraninda artar. Sizin yasamadiginizi düsünün biri size ates etmez degil mi?
KAYIT TUTULMASI
Güvenligin en önemli parçalarindan biri, sistemin sürekli izlenerek, güvenlige aykiri durumlar olusup olusmadiginin, olustuysa bunlarin sorumlularinin kimler oldugunun belirlenmesidir. Bunun için, güvenligi ilgilendirebilecek her türlü olayin kaydi tutulmalidir. Su tip bilgiler, güvenlik açisindan deger tasirlar:
- Basarisiz veya basarili olmus sisteme giris denemeleri
- Nerelerden, hangi hizmetler için baglanti istekleri geldigi
- Hizmetler sirasinda gerçeklesen dosya aktarimlari
Linux’ta kayit tutulmasi isini syslogd süreci görür. Hangi tür mesajlarin hangi dosyaya yazilacagi konfigürasyon dosyasinda (/etc/syslog.conf) belirtilir. Genellikle makine ilk açildigi zaman /var/adm/messages dizini altindaki messages, xferlog, syslog gibi dosyalara yazilan bu bilgileri isteginize göre daha sistematik bir yapida saklamak da mümkündür. Ag ile ilgili hizmetleri denetleyen süreçler (tcpwrapper, xinetd gibi paketler) kayit dosyalarina girmesini istedikleri bilgileri syslogd sürecine bildirirler.