Linux Sistemlerde Guvenlik
Arkadaşlar bildiğimiz gibi Win işletim sistemlerine kolay bir şekilde girilebilmekte, userların her turlu bilgileri izinleri dahilinde olmadan bir takım bilgisayar user ları tarafından ele gecirilmektedir..Bu da Linux işletim sistemlerinin yaygınlaşmasına neden olan en buyuk etkenlerden birisidir.Cunku Linux kararlı ve guvenilir bir işletim sistemine sahiptir.Dolayısıyla bircok sistem yoneticisi kişisel bilgilerini ya da sistem bilgilerini Linux işletin sistemleri altında bulundurmaya başlamışlardır. Bununla birlikte hacker veya *****er diye nitelendirebileceğimiz bilgisayar dehaları bir nevi kendini kanıtlama fırsatı bulmuşlardır.
Peki Linux işletim sistemini daha guvenli hale getirmek icin neler yapılabilir¿
*Konsol Guvenliği: Konsol guvenliği ( İc guvenlik ) kurduğunuz sisteme bağlıdır. Ve eğer normal bir user olarak linux’u kullanıyorsanız altta belirtilen onlemlere uymak zorunda değilsiniz ancak eğer bir sistem yoneticisi konumundaysanız daha dikkatli olmanız gerekmektedir. Alabileceğiniz guvenlik onlemleri:
*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 icin şifre belirledikten sonra user bu şifreyi kullanarak sisteme ilk kez girdiği zaman mutlaka şifresini değiştirmesini sağlayın.
* Gerekmedikce sisteme user eklemeyin.
*Şifrelerinizi belirlerken sağlam şifreler secin.Brute attack yoluyla kırılamayacak şifreler secin.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 butun kullanıcılar tarafından okunabilecek bir dosya olmalıdır. Bu nedenle şifreler bu dosyaya acık halde değil, şifrelenerek yazılırlar.

**Shadow Password Suite [ Golgeli Şifreler ]
Redhat 6.0 ’dan onceki Linux işletim sistemlerinde normal şifreleme kullanılıyordu. Bu şifreleme metodu sizin şifrelerinizi tekrar şifreler, /etc/passwd ’e atar. Bu şifreleme yonteminde de eksik birtakım şeyler vardır. Mesela userların okuma hakkı olduğu zaman bu dosya c/p yapılıp icinde bulunan şifreler cok kolay bir şekilde cozuşur. Shadow Password bu nedenden dolayı ortaya cıkmış bir uygulamadır. Şifreler yeniden şifrelenerek /etc/shadow icerisine atılır ve /etc/passwd dosyası altında şifre bırakılmaz. Boylece daha guvenli bir yapı oluşturulmuş olur.
**Md5 Şifrelemesi:
Linux ta acılan kullanıcılar icin 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 cozmek isteyen biri icin bu bir başlangıc noktası, ipucu niteliği taşıyor. Bu ipucunu yok etmenin de bir yolu var tabi ki. Cozum az once merak ettiğimiz MD5 şifrelemesi. MD5 şifrelemesi sayesinde şifre uzunluğu 8 karakterden 256 karaktere kadar cıkarabiliyor. Bu da *****erin omrunun bilgisayar başında gecirerek şifreyi kırmaya calışacağı anlamına geliyor. Sistem şifrelerini korumak amacıyla mutlaka golgeli şifreleme ve MD5 şifrelemesini Kullanın!!

2. DOSYA GUVENLİĞİ
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 icin ayrı ayrı belirtilir.

-rwxr-x--- 1 uyar users 4030 Dec 4 15:30 dene

Dizinler icin de aynı erişim hakları modeli gecerlidir. Bir dizin uzerindeki 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ı, calıştırma izni de o dizine gecilip gecilemeyeceğini belirler. Yetkili kullanıcının (root) butun dosyalar ve dizinler uzerinde (birkac sistem dosyası ve dizini haricinde) butun işlemleri yapma yetkisi vardır.

Tehlikeler: İşletim sisteminde ya da uygulama programlarında bir hata olmadığı surece erişim izni olmayanlar dosyayı zaten okuyamayacaklardır. Asıl tehlike, yetkili kullanıcının yetkisini kotuye 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 icin gerekli olmakla birlikte, guvenliği ve ozel bilgilerin gizliliğini bir kişinin ahlakına bırakması acısından Linux (ve Unix) işletim sisteminin guvenliğ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 calışabilmek icin bazı sistem dosyalarını ya da programlarını değiştirebilir. Orneğin, şifre dosyasına bir kayıt ekleyerek kendine yetkili bir kullanıcı yaratabilir. Kullanıcıların şifrelerini oğrenmek icin login, passwd gibi programları değiştirebilir.
Onlemler: Şifre guvenliği sağlandığı surece dosya erişimlerinde fazla bir guvenlik sorunu olmayacaktır. Bu konuda sistem sorumlusuna duşen, kullanıcılarını erişim haklarını nasıl duzenleyecekleri konusunda bilgilendirmektir.
Şifre dosyası gibi metin dosyalarında değişiklik olup olmadığı gozle inceleme yaparak ya da basit komut satırı programları kullanarak bulunabilir. Calıştırılabilir dosyalar gozle kontrol edilemeyeceğinden en uygun yontem, 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. Once sağlam olduğu bilinen dosyaların dosya imzaları oluşturularak bir yerde saklanır. Sonraki calıştırmalarda imzalar yeniden hesaplanarak eskileriyle karşılaştırılır ve farklı olanlar varsa bildirilir. Duzgun calışma icin ozgun imzaların iyi korunması, mumkunse, ustune yazılamayan bir ortamda saklanması gerekir.

3.KULLANILMAYAN ACIK PORTLARIN KAPATILMASI

Bilgisayarınızın aslında internete acılmak ve ceşitli internet uygulamalarını (ftp,telnet,irc , .. vs ) calıştırmak icin bu işlemlere karşılık gelen portları kullandığını biliyor muydunuz? Portlar herhangi bir internet uygulamasının haberleşme icin kullandığı sanal cıkış noktalarıdır.Her uygulamaya ozgu bir port vardır ve diğer hicbir uygulama başka uygulamaya ait porttan bilgi giriş ve cıkışı yapamaz. Bir an icin portların gercekten bilgisayarın icinde olduğu duşunecek olursak, uzerinde bir cok farklı boyutlarda acılmış delik bulunan bir tabla hayal edelim. Bu delikler portlarımız olsun. Her biri farklı boyutlarda olduğu icin birine ait bir comak diğerine asla tam olarak yerleşemez; ya dar gelir ya da bol.portların mantığı da aynen bu ornekteki gibidir.

Ayrıca sisteminizin verdiği servisler doğrultusunda kullandığı portları dinleyerek acık olup olmadığını tespit eden programlar vardır. Bu programlar sayesinde sisteminiz hakkında bilgi edinen bir hackerin iceri giriş noktalarını kapatmak en akıllıca cozum olur.
RedHat’ı eğer sunucu olarak kurduysak acılışta , onceden secilmiş servisleri calıştırır (web sunucusu, dns sunucusu gibi). Bu sunucularında tabi ki belli portları vardır fakat artık bir sunucunun gorevine son vermek istiyorsak bunu nasıl yaparız? Onceki bolumlerde anlatılan `SETUP` uygulaması bize yine bu aşamada da yardımcı oluyor. Setup komutunu vererek bu uygulamayı başlatıp "services" seceneğine girersek bazı servisleri icin başlatma/kapatma secimini rahatlıkla yapabiliriz. Peki telnet ya da ftp servislerini kapatmak icin ne yaparız? Linux tum internet uygulamalarına ait gorevi inetd’ye yani internet deamon denilen "internet canavarına" vermiştir. Bu canavar /etc/inetd.conf adlı konfig dosyasında belirtilen tum portları dinleyerek, gelen istemlere karşılık gelen servisi yerine getirir. İşte bu konfig dosyasını değiştirerek surdurulen servisleri kapatmak mumkun. Ornekte bu dosyadan alınan bir kısım goruluyor.
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 gormesini 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 calışan istemciye bu servisin verilmediği ve bağlantının kesildiği bildirilir. Kullanmadığınız servisleri bu şekilde kapatmanız sizi daha guvenli bir sisteme goturur. Eğer verilen servislerin hangi portlardan gercekleştiğini gormek ve kapatmak istiyorsanız aynı yontemle /etc/services dosyasıyla da oynayabilirsiniz. Kapatılan servislerin tekrar acılması icin satır başlarına konan `#` işaretlerinin kaldırılması ve inetd’nin kapatılarak tekrar calıştırılması gerekir. Bunun icin yazılacak komut aşağıda belirtilmiştir.
#killall -HUP inetd

4.UZAKTAN ERİŞİMİ KAPATMAK ve GUVENLİ KABUK SSH

Bildiğiniz gibi linux ile beraber gelen telnet desteği oldukca cok 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 gercekleşecektir. Telnet servisini calıştırıyorsanız ve kullanıcılarınız varsa aynı mekanizma sizin sisteminiz icinde gecerli olur. Ne yazık ki telnet uygulaması sanıldığı kadar guvenli değildir. Karşılıklı yapılan şifre alışverişlerinde bir şifreleme, gizleme yapılmadığı icin bilgiler istenmeyen kişilerin eline gecebilir, ve daha onemlisi hackerların sisteme sızmak icin deneyeceği ilk port telnetin portudur. Bunu engellemek ve maksimum derecede guvenli bir bağlantı sağlamak icin yeni bir kabuk geliştirilmiştir ve bu kabuğun şu ana kadar bilinen hic bir acığı yoktur! Bu kabuğun adı SSH yani guvenli kabuk anlamına gelen `secure shell` dir. Eğer bu kabuğu kullanacaksanız oncelikle telnet’i bir onceki maddede anlatılan bicimde servis dışı bırakmanız daha doğru olur. SSH i Cd de guvenlik dizini altında bulabilirsiniz. Kurulum ve verimli bir SSH icin belirtilen tum 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 boylece davetsiz misafirleri ileride engellemek amacıyla; /etc dizini altında bulunan iki konfigurasyon 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 birkacını istediğiniz guvenilir bir ağa ya da bir tek IP adresine izin vererek, bu adresler dışındaki makineler bu servisleri kullanamaz. Adından da anlaşılacağı uzere host.deny(makine.reddi) dosyası kabul etmediğiniz makine ip adreslerini yazabileceğiniz bir dosya. Ornek bir /etc/host.deny uzerinde 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 seceneğini ile tum uzak erişime bu servis kapatılır; ancak bu servisten bizde mahrum kalırız. Bunun icin `except` yani haric parametresinden sonra kendimizi ekleriz ki bu servis bize acık olsun.
#/etc/hosts.deny ornek 2
in.telnetd : ALL


Bir onceki ornekten farklı olarak bu ornekte telnet servisi tum 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ıc fikri vermek gerekirse oncelikle /etc/host.deny `da butun 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 guvenli olacağı doğrultusundadır. Aşağıda belirtilen bicimi host.deny icin kullanabilirsiniz.
#/etc/host.deny ornek 3
ALL : ALL except localhost
/etc/hosts.allow DOSYASI
Yukarıda anlatılan ve kapatılan bir ya da tum servisleri /etc/host.allow konfig dosyasını kullanarak belirli ya da guvenli ip adreslerine ya da ağlara acalım.
#/etc/hosts.allow ornek1
in.telnetd: .gelecek.com.tr
wu.ftpd : 195.34.34.0

Az once hatırlarsanız tum servisleri host.deny dosyasından kapatmıştık. Ancak bir servis her iki dosyada da gectiği icin Linux direkt olarak host.allow dosyasını goz onunde bulundurur. Bu ornekte de her makineye ve ağa kapalı olan telneti gelecek.com.tr domain ismi altındaki her makineye acık tutuyoruz. Ayrıca kapalı olan ftp servisini 195.34.34.0 olarak tanımlı tum ağa acmış durumdayız. Buda 195.34.34.1 - 195.34.34.254 arasında bir ip adresine sahip tum 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 acabiliriz. Ornek 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 muddet icin 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 kac yıldır gundemde. Bunlara verilen genel ad `Denial of Service` yani service dışı bırakma `dır. Bunlara ornek olarak teardrop, newtear, nestea, smurf, land, lattierra, ssping verilebilir. Bu saldırıların bir coğu linux uzerinde etkisizdir. Sadece tear-drop ve yeni versiyonu olan new-tear ile nestea ayrıca broadcast (yayın ) haberleşmesi uzerinde gerceklenen smurf Linux’u etkileyebiliyordu. Etkileyebiliyordu diyorum cunku bu saldırılar cıktıktan hemen sonra Linux icin bir ust surum kernel yazılmış ve bu acık giderilmişti. Kernel`in 2.0.34 surumunden beri Linux’a karşı bu saldırılar etkisizdir. Duşunun ki RedHat Linux 6.0 in cekirdeği 2.2.5. Ancak Unix ve unix turevleri dışında diğer işletim sistemlerinin coğu bu saldırılardan hala etkileniyor. Bu konuda Linux’unuza guveniniz 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 guvende olma şansınız bire iki oranında artar. Sizin yaşamadığınızı duşunun biri size ateş etmez değil mi?

KAYIT TUTULMASI

Guvenliğin en onemli parcalarından biri, sistemin surekli izlenerek, guvenliğe aykırı durumlar oluşup oluşmadığının, oluştuysa bunların sorumlularının kimler olduğunun belirlenmesidir. Bunun icin, guvenliği ilgilendirebilecek her turlu olayın kaydı tutulmalıdır. Şu tip bilgiler, guvenlik acısından değer taşırlar:
- Başarısız veya başarılı olmuş sisteme giriş denemeleri
- Nerelerden, hangi hizmetler icin bağlantı istekleri geldiği
- Hizmetler sırasında gercekleşen dosya aktarımları
Linux’ta kayıt tutulması işini syslogd sureci gorur. Hangi tur mesajların hangi dosyaya yazılacağı konfigurasyon dosyasında (/etc/syslog.conf) belirtilir. Genellikle makine ilk acıldığı zaman /var/adm/messages dizini altındaki messages, xferlog, syslog gibi dosyalara yazılan bu bilgileri isteğinize gore daha sistematik bir yapıda saklamak da mumkundur. Ağ ile ilgili hizmetleri denetleyen surecler (tcpwrapper, xinetd gibi paketler) kayıt dosyalarına girmesini istedikleri bilgileri syslogd surecine bildirirler.
__________________