SistemCesur Türk

Durum: Çevrimdışı Kayıt: 19.01.2006
Mesajlar: 12294
Level: 69
| Deneyim: |
12842 / 12842 |
|
|
|
100% |
|
Tarih: Mon Aug 13, 2007 6:29 pm Mesaj konusu: 18.2. Ağ güvenliği |
|
|
18.2. Ağ güvenliği
Ağ kabloların serbest bir şekilde ortada dolaşması sonucu mutlaka bir sorun çıkacaktır. Eğer yerden doğru geçirmeniz gerekiyorsa mutlaka yere sabitleyin veya özel koruyucu plastik/alüminyum içerisinden geçirin. Doğrusal (lineer) ve halka bağlantılarında tek bir kablonun kopması, tüm ağın kullanılmaz duruma gelmesine sebep olacaktır. Kablo ile konnektör bağlantılarını iyice kontrol edin. Herhangi bir temassızlık sonucunda tüm ağ bunlardan etkilenecektir.
Ana sunucu bilgisayarı, herkesin ulaşamayacağı, tozdan, nemden uzak, özel kapalı bir mekanda tutun. Bunların yanında ağ üzerinde paketleri dinleyebilen ve gerektiğinde bu paketlerde yer alan parolaları da yakabilen programlar mevcuttur. Bir sniffer Ethernet bağlantılarını dinler ve içinde “Pasword”, “Login”, “Su” gibi belirli anahtar kelimeler geçen paketleri yakalar. Bu paketlerin içinde bir saldırganın işini çok kolaylaştıracak parolalar bulunabilir. Bunu önlemek için ssh yöntemi geliştirilmiştir. Ssh protokolü yardımıyla iki makine, şifrelenmiş paketler ile haberleşebilir. Böylece ağ üzerindeki potansiyel saldırganlar paketleri dinleyemez.
Bazı ağ servislerinin dizayn açıklarından yararlanarak bunları tamamen durdurmak ya da kısmen iş göremez hale getirmek amacıyla yazılan saldırı programları da vardır.
Eğer sistem yöneticisi NFS kullanımı konusunda bilinçsiz ise sistemde kendi eliyle açık yaratma ihtimali de artar.
18.3. Zayıf parolalar
Bir makineye girmenin en kolay ve en sık kullanılan yolu zayıf parolaları kullanmaktır. Zayıf parola kolayca tahmin edilen ve bir takım yollar kullanılarak bulunabilen ve bu açıklığından yararlanarak, sisteme girilebilen parolalardır. Genel olarak kullanıcılar sistem güvenliğinden haberdar olmadıkları için kolaya kaçarak rahatça tekrar hatırlayabilecekleri zayıf parolaları seçerler. Eğer yüzlerce kişiyi barındıran bir sistemin başında iseniz kullanıcıların şifrelerini sürekli olarak değiştirmelerini sağlamalısınız. Bunu Linux altındaki /etc/shadow dosyası yardımıyla yapabilirsiniz. Zayıf parolaları bulan ve sistem yöneticisini uyaran Satan, Cops gibi programlar vardır.
Gerekmedikçe dosya ve dizinlere fazladan hak vermemeye, gruplara ve kişilere özel ayrıcalıklar tanımamaya özen gösterin.
Kullanıcıların /etc/passwd veri tabanından parolaları alıp bunları zorlama yöntemi ile diğer kullanıcılara ait parolaları bulmalarını önlemek için shadow yöntemini kullanmalısınız.
Bir dosyanın rm komutuyla silinmemesini, ya da içeriğinin root dışındaki kullanıcılar tarafından hiçbir şekilde değiştirilmemesini sağlamak için chattr komutunu kullanmalıyız. Örneğin lili.conf, passwd, shadow ya da group gibi dosyalarınıza hiç dokunmayacaksanız ve bir kazayla silinmesini istemiyorsanız. Aşağıdaki örneği inceleyin:
# chattr +i /etc/passwd
chattr komutuna verilen +i (immutable) parametresi bu dosyanın hiçbir şekilde değiştirilememesini sağlar. Root bile bu dosya üzerinde değişiklik yapamaz. Eski haline getirmek için;
# chattr -i /etc/passwd
komutunu kullanın.
18.4. Dosya Sistemi Güvenliği
Dosyaların güvenliği de en az parolalar kadar önemlidir. Bir kullanıcıya ait, ama herkes tarafından okunabilen bir e-postanın varlığı ya da /etc/passwd parola veritabanının yazılabilir olması sistem yöneticisini dehşete düşürmeye yeter.
Tripwire gibi yazılım paketleri sistemde değişen önemli dosyaları haber verir. Güvenlik gerektiren dosyaların özellikle bir kırıcı tarafından değiştirildiğinden şüphelendiğiniz anda gerekli önlemleri almalısınız.
Mutlaka sisteminizi günlük yedekleyin. Tüm işletim sistemini yedeklemenize gerek yoktur. Belli başlı dizinler yedeklendiği anda bir sorun çıktığında işletim sistemi yeniden kurulduktan sonra yedeklenen bölümler tekrar kurulur. Yedek alınması gereken belli başlı dizinler aşağıda verilmiştir:
• Yapılandırma dosyaları (/etc altında)
• E-postalar (/var/spool/mail)
• Kullanıcı dosyaları (/home)
• Sistem dosyaları (/var/log)
• Hizmet veren programların verileri (/home/ftp, /home/httpd)
En kolay yedek alma işlemi tar, gzip ile boş bir disk şeklindedir.
Dosya sistemi güvenliği için;
1. kullanıcıların ev dizinlerinde çalışmaları gereken dosyalar istemiyorsanız, /home dizinini içinde barındıran disk bölümü için /etc/fstab’ta “noexec” parametresini kullanabilirsiniz. Bu durumda kullanıcılar sadece sistemde kendilerine izin verilen (ön tanımlı olarak /bin, /usr/bin ve /usr/X11R6/bin altında) programları çalıştırabilirler.
2. NFS ile dosya sistemi paylaşımı yapmanız halinde hangi bilgisayara hangi hakları verdiğinizi iki kez kontrol edin.
3. Aşağıdaki komut, sistemdeki tüm SUID (set user ID) ve SIGN (set grup ID) dosyalarını bulup gösterecektir. Sürekli olarak dağıtımların web sayfalarında bu konuda sorunlu olan programlar (paketler) yayınlanır ve yenisini kurmanız istenir.
# find / -type f \ ( -perm –4000 –o –perm –2000 \ )
4. Gerekiyorsa “chmod a-s dosyaadı” komutu yardımıyla yukarıdaki komutun çalıştırılması sonucu listelenen dosyaların üzerindeki SUID veya SGID bitlerini kaldırın.
5. Sistemde kesinlikle herkes tarafından yazılabilir hiçbir dosya bulunmamalıdır. Aşağıdaki komut yardımıyla bu türden dosyaları ve dizinleri bularak gerekli önlemleri alabilirsiniz:
# find / -perm –21 –type 1 –ls
18.5. Yerel Güvenlik
Eğer sisteminizde yeterli güvenlik yoksa, yerel kullanıcılardan bazıları öncelikle root parolasını ele geçirmek, ya da hatalı düzenlenmiş ya da kurulmuş bir programdan faydalanıp üst düzey haklara sahip olmak isteyecektir.
Yerel güvenliği arttırmak için;
1. Hesap açacağınız kişilere ek yetkiler vermeyin. Bu kişiler için fazladan ftp alanı, disk alanı sağlamayın ve /etc/passwd, /etc/shadow veritabanını sürekli olarak denetleyin. /etc/passwd kullanıcı numarası (user ID, UID) ya da grup numarası (group ID, GID) mutlaka 0’dan farklı olmalıdır. /etc/shadow’da tüm kullanıcıların parolası tanımlı olmalı, sisteme giriş için kullanılan kabuk tanımlanan kabuktan farklı olmamalıdır. adduser ile bir hesap açarken sistem sizin için bu ayarları düzgün yapacaktır.
2. Sisteme (telnet ile) giren kişilerin hangi IP numaralarından giriş yaptığını arada sırada denetleyin, aynı anda aynı kişinin birden fazla IP numarası üzerinden giriş yapması halinde mutlaka durumu açıklığa kavuşturun. Eğer sisteme girişleri sadece belirli alanlara kısıtlayabilirseniz işiniz oldukça kolaylaşır. Bunu için /etc/hosts.deny dosyasını kullanabilirsiniz.
3. Bir hesap açtıktan sonra son giriş tarihini sürekli kontrol edin. Eğer yapabiliyorsanız uzun süredir girilmeyen hesapları (kişinin bilgisi dahilinde) kapatın ve başkalarının kullanma riskini sıfıra indirin. Hesap kapatmak için deluser (bazı sistemlerde userdel) komutunu kullanılabilir, ya da /etc/shadow dosyasındaki şifrelenmiş parola dizgisinin başına “*” karakterini ekleyebilirsiniz.
Saldırı için kullanılan hesapların önemli bir kısmı uzun süredir bekleyen ve sistem yöneticisinin farkına varmadığı masum kullanıcı hesapları olabilir.
Yukarıdaki yöntemlerin yanında, root kullanıcısının uyması gereken bazı kurallar aşağıda belirtilmiştir.
1. Öncelikle günlük işlerinizi root kullanıcısı altında yapmamaya özen gösterin. Yapacağınız en küçük hata saatlerinize mal olacaktır.
2. Sisteme sadece güvendiğiniz bir bilgisayardan giriş yapın.
18.6. Sisteme İzinsiz Girenlerin Bulunması
Her çabanıza, geceli gündüzlü sistem gözetmenize rağmen istemediğiniz kişiler sisteminize izinsiz ziyaretlerde bulunabilirler. Böyle bir durumda kullanıcıyı fark ettiğiniz anda bilgisayarın erişimini kapatın. Ancak bunu ağ kartını çıkartarak yapın. Sistemin reboot edilmesi saldırganın deşifre olduğu hissini uyandıracaktır. Hemen ardından kayıt dosyalarını kullanarak bilgisayara nasıl girildiğini araştırın. Eğer saldırgan tekrar girmek amacıyla birtakım ‘backdoor’ları (daha önce erişim elde edebilmek için açık kapılar bırakılması) makinenize yerleştirmiş olabilir. Bunları bulmak gayet zordur. /etc/passwd, .rhosts, /etc/group dosyalarını kontrol edin. Eğer sisteme nasıl girildiğini bulamazsanız sistemi yeniden kurmanız gerekebilir.
Syslogd tarafından tutulan kayıtların bulunduğu /var/log dizininde düzenli olarak yapacağınız araştırmalar da sistemin güvenliğini denetlemenizde yardımcı olacaktır. Bu kayıtları (/var/log/messages ve /var/log/security) incelerken aşağıdaki temel kriterleri göz önünde bulundurmanızda fayda vardır.
1. Makinenin sebepsiz açılıp/kapatılması.
2. Nereden girdiği belli olmayan kullanıcılar (last komutuyla öğrenilebilir). Özellikle yine giriş noktası belirsiz kullanıcıların su komutu yardımıyla root haklarına sahip olması belirsiz bir durumdur.
3. Kayıp kayıt dosyaları. Herhangi dosyaların sistem açılırken yaratıldığını mutlaka bir kenara not etmelisiniz ki daha sonra karşılaştırma yapabilesiniz.
4. Kayıt dosyalarının sahibinin, ya da grubunun root dışındaki bir kullanıcısı olması ve/veya root dışındaki bir kullanıcı tarafından içinin okunabiliyor durumda bulunması.
5. Kayıt dosyalarının belirli bir bölümünün silinmiş olması, ya da çok uzun süre hiçbir aktivitenin dosyaya eklenmediğinin anlaşılması.
6. Crontab dosyalarında ve dizinlerinde (/etc/crontab, /etc/cron.*) anlamadığınız ve/veya sistem kurulduktan sonra oluşturulan, bu yolla belirli zamanlarda belirli komutların işletilmesini sağlayan girdiler.
18.7. Diğer Güvenlik Önlemleri
18.7.1. Güvenlik Duvarı Oluşturulması
Ağ trafiğini engellemek için 2.0 Linux çekirdeğiyle birlikte ipfwadm komutu gelmiştir. 2.1 sürüm ile birlikte gelen ipchains programı çekirdeğin içine gömülen güvenlik duvarını denetler. Her iki programda 2.4’ten sonra yerini netfilter paketine bırakacaktır. Ancak gerçekten güçlü ve port bazında güvenlik isteyen sistemler için ipchains gerçekten performanslı ve gayet yeterli bir programdır.
Hem ipfwadm, hem de ipchains IP, port numarası, arayüz ya da paketin geldiği kaynak adresine göre tanımlama kabul ederler. Örneğin “etf0’a 900. porttan, 1.2.3.4 Ip numarasından gelen hiçbir isteği kabul etme” gibi bir emir verilebilir. Ipchains bunların yanında bir porta gelen istekleri başka bir porta yönlendirebilir.
Aşağıda ipchains’e göre bir örnek verilecektir. Bu örnek kısa sürede bir güvenlik duvarını nasıl kurulacağını gösterecektir. Deneme yapacağınız makine üzerinde çift ethernet kartı olsun. Bir tanesi her an tehlikelerin gelebileceği dış dünyaya bakan, diğeri de içeride, korunması gereken makinalara doğru yönelmiş olan.
Bu program geçit (gateway) olarak kullanılan bir sisteme yerleştirilebilir.
Sistemde iki ethernet kartı vardır, eth0 dışarıya bakan, eth1 ise güvenilir olan iç ağa. Güvenilir ağdan dışarıya hiçbir bağlantı denetlenmemektedir, ancak içeriye yapılabilecek birtakım bağlantılar ipchains tarafından kesilecektir.
Öncelikle bazı değişken ayarlarını yapmamız gerekecek. Aşağıdaki değişkenleri kendi sistemimize göre modifiye edin. Satır sığmadığı zaman satır sonunda bir \ karakteri göreceksiniz, bu karakter aşağıdaki satırın kendisiyle bitiştiğini gösterir.
Programın ilk satırı
# ! /bin/bash
ile başlıyor. Eğer satır başında # karakteri varsa satırın geri kalanı göz ardı edilir. Ethernet kartlarının netmaskı C sınıfı için 24, B sınıfı için 16’dır.
# ! /bin/bash
#
# ETH0IP: Dışarıdaki ağa bakan IP numarası
# (ethernet 0 ya da eth0)
# ETH0NET: Dışarıdaki ağın numarası
# ETH0NETMASK: Dışarıdaki ağın maskesi
# GUVENLI1: Dışarıdaki güvenli bir makine
# GUVENLI2: Dışarıdaki bir başka güvenli bir makine
# ETH1IP: İçerideki ağa bakan IP numarası
# (ethernet 1 ya da eth1)
# ETH1NET: Dışarıdaki ağın numarası
# ETH1NETMASK: Dışarıdaki ağın maskesi
ETH0IP: 194.24.22.1
ETH0NET: 194.24.22.0
ETH0NETMASK: 24
GUVENLI1: 212.45.3.13
GUVENLI2: 193.12.54.9
ETH1IP: 192.168.1.1
ETH1NET: 192.168.1.1
ETH1NETMASK: 24
PATH değişkeni patikayı (yolu) ayarlıyor.
PATH=/shbin
-F parametresi tüm kuralları siliyor, bir başka deyişle daha önce verilmiş bir güvenlik kuralı varsa bunu iptal ediyor.
ipchains –F input
ipchains –F output
ipchains –F forward
Spoof adı verilen bir yöntem aynı ağ üzerindeki başka bir makinanın kendisini güvenilir bir sistem olarak algılatma metodolojisine dayanır. Aşağıdaki satırlar spoof’u engelliyor.
ipchains –A input –p all –j DENY –s 10.0.0.0/8 –i eth0 –d
0.0.0.0/0
ipchains –A input –p all –j DENY –s 127.0.0.0/8 –i eth0 –d
0.0.0.0/0
ipchains –A input –p all –j DENY –s 192.168.0.0/16 –i eth0 –d
0.0.0.0/0
ipchains –A input –p all –j DENY –s 172.16.0.0/16 –i eth0 –d
0.0.0.0/0
ipchains –A input –p all –j DENY –s $ETHOIP –i eth0 –d 0.0.0.0/0
Bu satırlar ICMP paketlerini düşürüyor. ICMP, ping yardımıyla bir makinaya ulaşmak istediğinizde kullandığınız protokole verilen isimdir.
ipchains –A input –p icmp –j DENY ACCEPT –s $ETH0NET/$ETH0NETMASK –i eth0
–d0/0
ipchains –A input –p icmp –j DENY –s 0.0.0.0/0 –i eth0 –D 0/0
0.0.0.0/0 yerine 0/0 da kullanılabilir. Eğer uzaktan ssh (secure shell) ile sisteme ulaştırmak isteyenler var ise bu IP’lere ssh’ın portu olan 22 açılıyor. Aslında aşağıdaki örneği çoğaltarak açmak isrediğimiz tüm servislere izin verebilirsiniz. Örnek olarak bu makine bir web sunuculuk görevi yapacaksa 22 yerine 80 yazmanız yeterli olacaktır.
ipchains –A input –p tcp –j ACCEPT –s $GUVENLI –i eth0 –d 0.0.0.0/0 22
ipchains –A input –p tcp –j ACCEPT –s $GUVENLI –i eth0 –d 0.0.0.0/0 22
Eğer Apache web sunucusu isteklerinin de alınmasını istiyorsak,
ipchains –A input –p tcp –j ACCEPT –s 0/0 –i eth0 –d 0.0.0.0/0 80
ipchains –A input –p tcp –j ACCEPT –s 0/0 –i eth0 –d 0.0.0.0/0 80
1 ve 1023 arası tüm portlar kapatılıyor. Bu portların özelliği sistemde çalışan belli başlı tüm servislerin dinlendiği portlar olmasıdır.
ipchains –A input –p tcp –j DENY –s 0.0.0.0/0 –i \
eth0 –d 0.0.0.0/0 1024:65535
ipchains –A input –p udp –j DENY –s 0.0.0.0/0 –i \
eth0 –d 0.0.0.0/0 1024:65535
1024 ile 65535 arası portları da kapatmak isterseniz, aşağıdaki satırlar işinizi görecektir. Aslında ek bilgi vermek amacıyla 1-1023 ve 1024-65535 arası portları ikiye ayıralım, normal olarak iki satırda işimizi halledebilirdik.
ipchains –A input –p tcp –j DENY –s 0.0.0.0/0 –i \
eth0 –d 0.0.0.0/0 1024:65535
ipchains –A input –p udp –j DENY –s 0.0.0.0/0 –i \
eth0 –d 0.0.0.0/0 1024:65535
IP Masquerading yapabilmek için aşağıdaki satırlara ihtiyacınız var.
ipchains –p forward DENY
ipchains –A forward –p all –j MASQ –s $ETH1NET/$ETH1NETMASK –d
0.0.0.0/0
18.7.2. Güvenlik Duvarı (FİREWALL )
Bilgisayarlardaki firewall özel bir ağı uçsuz bucaksız olan Internet'ten korumayı sağlayan bir araçtır. Firewall'un en basit şekli ( modem yada ethernet kartı ile ) Internet'e ya da özel ağlara bağlı bir Linux makinasıdır. Firewall görevini üstlenen bilgisayar, Internet'e ve de ağa erişebilir.Bu korumalı ağ Internet'e çıkamaz ve de Internet'te bu ağa giremez. Internet'e veya Internet'ten akan bilgiler firewall tarafından filtrelenir. Ağ içinde servisleri açma ya da kapatmada daha az özen gösterilir. Bu şekilde sadece bir makine üzerinde yoğunlaşılır. Firewall kurmak oldukça karmaşık bir iştir. İlk başta makinenize bağlı iki ethernet kartı gerekir. Sonra iki ethernet kartı arası bilgi köprülerinin filterelenmesini kurmak için ipchains isimli program kurulmalıdır.
18.7.3. SSH (Secure Shell)
Ssh, güvenli telnet bağlantısı için kullanılan bir protokoldür. Telnet benzeri olarak, uzaktaki bir makinaya girmenizi sağlar ve işlemlerinizi bu makine üzerinde yapmanıza imkan verir. Kullanıcı gözüyle bakılırsa, telnet’ten tek farkı programın güvenli bir port üzerinden çalışmasıdır. Aslında kullanılan portun güvenli olması söz konusu değildir, ancak bu porttan yapılacak bağlantılar özel bir kriptoloji yöntemiyle şifrelendiği için, ağı dinleyen birisi paketleri yakalasa dahi anlamsız mesajlarla karşılaşacaktır. Ssh’ın en önemli özelliği de budur. Uzaktaki makinaya yapacağınız güvenli telnet erişimi, ağ üzerindeki sniffer programlarının parolanızı ve kullanıcı adınızı yakalamasını engeller.
Ssh’ın iki sürümü (ssh-1 ve ssh-2) bulunuyor. Her iki sürüm de farklı protokollerde çalışıyor ve farklı lisanslama özelliklerine sahip. Aslında iş kuruluma geldiği zaman hiçbir farklılık yok.
Ssh’ın rpm halini kurmak için üç farklı dosyaya ihtiyacınız var.
• Ssh: Halen 1.2 sürümünde olan ssh-1 paketinin ana dosyalarını içeren program. Bunun hem istemci, hem de sunucu tarafından kurulması gereklidir.
• Ssh-clients: Eğer bir Linux makinasından ssh çalıştıran bir sisteme bağlanmak istiyorsanız istemciye ssh-clients de kurmalısınız.
• Ssh-server: Sunucu tarafına kurulması gereken dosyaları içerir.
Ssh’ın yapılandırma dosyaları /etc/ssh dizini altındadır. Ssh_key dosyası özel bir anahtarı içerir ve diğer kullanıcılar tarafından görülmeyecek şekilde 600 iznine sahiptir. Ssh_host_key.pub ise 664 iznindedir. Eğer ssh taleplerinin sadece belli makinalardan gelmesini sağlamak istiyorsanız /etc/ssh/sshd_config dosyasındaki AllowHosts satırını değiştirebilirsiniz.
Bu aşamadan sonra güvenli telnet bağlantısının iş görebilmesi için sshd’nin her açılışta çalışması gereklidir. Bunu da sshd satırını /etc/rc.d/rc.local’ın sonuna yerleştirmekle yapabilirsiniz.
Eğer bir Linux altından, sshd çalıştıran sisteme bağlanmak isterseniz aşağıdaki örneği inceleyin. Bu örnekte “gazi” kullanıcısı ns.gelecek.com.tr makinasına ssh üzerinden bağlanıyor.
$ ssh –1 gazi ns.gelecek.com.tr |
|