|
Sisteminizin saldırılardan etkilenmesini
istemiyorsanız, sisteminize erişimi minimuma
indirmeli ve dışarıya sisteminiz
hakkında minimum
bilgi vermelisiniz. Sisteme minimum
erişim
saldırganın sisteme
girişini elgelleyeceği gibi, sistem hakkında minimum bilgi
vermek de saldırganın sisteminiz hakkında
bilgi toplamasını engelleyecek ve işini
zorlaştıracaktır. Basit bir finger komutu
sisteminiz hakkında saldırgana az denemeyecek
kadar bilgi veriyor. Bu bölümde
sisteminizin maksimum şekilde güvenli olması için yapmanız
gerekenler
madde-madde ele alınmıştır.
a) Password
Sisteminiz çok kullanıcılı bir sistem ise,
kullanıcıları kompleks ve
uzun şifreler seçmeye
zorlayın.
Genelde , kırılamayacak şifre yoktur,
fakat şifreler uzun ve kopleksse bu
saldırganın
işini zorlaştırır ve hatta belki çok zamanını aldığı için
sisteminizi kır-
maktan vaz geçire de bilir. Şifreleri
kompleks ve uzun tutmak için ilk
yapmaniz gereken
şey
kullanıcıları bu konuda uyarmak , daha sonra
da sistemde bir takım önlemler almaktır.
İlk olarak /etc/login.defs dosyasını
herhangi bir editörde açarak PASS_MIN_LEN
satırının
sonundakı
sayıyı (default olarak 5'tir) 8 yapınız.
Daha sonra ise /etc/pam.d/login
dosyasını
yine bir editörde açarak auth ve account kelimeleriyle başlayan
satırlardan
sonra aşağıdaki satırı ekleyiniz
password required /lib/security/pam_cracklib.so
Bu satır , kullanıcıyı şifre seçerken
kompleks şifreler seçmeye zorlayacaktır.
NOT: Pam , sistem güvenliyini artırmak için
önemli bir araçtır. Daha
fazla bilgi almak
için /usr/doc/pam-xx/
dizinine göz ata bilirsiniz.
b) /etc/exports dosyası
Bu dosya sisteminizdeki hangi dizinleri ortak
kullanıma açtığınızı gösterir.
NFS
kullanmıyorsanız
bu dosyanın içinin boş olmasına dikkat edin. Dosyanın
attribute'unu da
değiştirerek
immutable (değişmez) yapınız.
[root@server /root]# chattr +i /etc/exports
c) /etc/inetd.conf dosyası
Bu dosya sisteminizin dışarıya hangi
hizmetleri verdiğinizi gösteren bir
dosyadır. Dosya
hizmet
adlarıyla başlayan satırlardan oluşur.
Satırın başında # işareti
varsa bu satır
comment'lenmiştir
ve bu hizmet
artık verilmemekktedir, direk hizmet programı adıyla
başlıyorsa
bu hizmet halen verilmektedir.
Örneğin, aşağıdaki /etc/inetd.conf
dosyasından götürülmüş satırlar bu
sistemde ftp hizmetinin verildigini, telnet hizmetinin
ise verilmediğini gösterir.
ftp stream tcp nowait root /usr/sbin/tcpd
in.ftpd -l -a
#telnet stream tcp nowait root /usr/sbin/tcpd
in.telnetd
İlk olarak bu dosyanın modunu sadece root
tarafından okunup-yazıla bilinecek
şekilde
değiştiriniz,
başka kullanıcıların bu dosyayı görmeleri sistem hakkında
gerektiğinden
fazla bilgi
almalarına neden olur.
[root@server /root]# chmod 600 /etc/inetd.conf
Daha sonra ise attribute'unu değiştirerek
immutable yapınız.
[root@server /root]# chattr +i /etc/inetd.conf
Daha sonra sisteminizin vermesini
istemediginiz hizmet progamlarını tespit
ederek bu
programın
adıyla başlayan satırın başına # koyup bu
satırı comment'leyerek hizmet
programını
kaldırınız. Örneğin sisteminizin
artık finger'lere cevap vermesini
istemiyorsanız
önceden
finger stream nowait root /usr/sbin/tcpd
in.fingerd
şeklinde olan satırı değiştirerek
aşağıdakı şekle getiriniz
#finger stream nowait root /usr/sbin/tcpd
in.fingerd
Sisteminiz temel görevleri arasında olmayan
tüm hizmetleri kesinlike kaldırmanız lazım.
inetd.conf dosyası ile işiniz bittikten
sonra yaptığınız
değişikliklerin aktif olması için
aşağıdaki
komutu çalıştırınız
[root@server /root]# killall -HUP inetd
d) /etc/hosts.allow ve /etc/hosts.deny
dosyalari
Makinenize erişimi kısıtlamalısınız.
Bunun için /etc/hosts.deny dosyasına aşağıdakı
satırı ekleyiniz
ALL: ALL@ALL, PARANOID
Bu satır makinenize herhangi bir şekilde
erişimi yasaklayacaktır. Tabii
ki , bazi
kullanıcılara
bazı programları kullanmaları için izin
vermeniz gereke bilir. Bu izinleri
ise /etc/hosts.allow
dosyası vasıtasıyla veriyorsunuz. Örnegin , makinenize
192.168.1.1
adresinden
telnet çekile bilmesini
istiyorsanız, /etc/hosts.allow dosyasına aşağıdakı
satırı
eklemeniz lazim:
in.telnetd: 192.168.1.1 myhost.mydomain.
myhost.mydomain 192.168.1.1 IP adresli
makinenin domain name'idir.
e)/etc/aliases dosyasi
Saldırgan bu dosyayı kullanarak
sisteminizde root hakkına sahip ola bilir.
Bundan dolayı
bu dosyayı
açarak bin, daemon ve nobody kelimeleri ile baslayan satırlar
hariç tüm
satırları
,satır başına # koyarak comment'leyiniz.
f) Sisteminizin ping'e cevap vermesini
yasaklayınız
Ping, TCP/IP protokollarındaki
zayıflıklardan dolayı saldırganlar tarafından
sıkça
kullanılan
bir programdır. Sisteminize ping çekilmesini yasaklarsanız,
önemli bir açiği
kapatmış
olursunuz. Ayrıca sisteminize
ping çekemeyen saldırgan sisteminiz hakkında
daha az bilgi alır ve hatta belki
sisteminizin şu an ayakta olup olmadığından bile haberi
olmaz. Sisteminize
ping çekilmesini yasaklamak için aşağıdaki komutu çalıştırmanız
lazım:
[root@server /root]# echo 1 >
/proc/sys/net/ipv4/icmp_echo_ignore_all
Bunun sistemi reboot ettikten sonra da aktıf
olmasını istiyorsaniz yukarıdaki
satırı
/etc/rc.d/rc.local
dosyasına da eklemeniz lazım.
g) Issue dosyası
Sisteminiz telnet hizmeti veriyorsa, /etc/inetd.conf
dosyasındakı telnet
kelimesi ile
başlayan
satırı aşağıdaki gibi değiştiriniz
telnet stream nowait root /usr/sbin/tcpd
in.telnetd -h
Daha sonra "killall -HUP inetd"
komutu ile inetd'yi değerleri tekrar okumaya
mecbur
ediniz.
/etc/inetd.conf dosyasını bu şekilde değiştirmeniz
makinenize telnet çekildiginde
ekrana
gelen issue dosyasının içeriğinin
görüntülenmemesini sağlıyacaktır. Bu ise
sisteminiz
hakkında dışarıya daha az bilgi verecek. Örneğin
saldırgan kernel versiyo-
nunuzu bilemiyecek ve hangi crack
programını kullanması gerektiğine karar
vermekte
zorlanacaktır.
h) /etc/host.conf dosyasi
Bu dosyayı açarak order kelimesi ile başlayan
satırı değiştirerek şu şekle
getiriniz
"order
bind, hosts". Bu makinenizi Adres sorgulamasını ilk
olarak DNS'den yapmasına
zorlayacaktir.
Daha sonra dosyaya şu
satırı ekleyiniz. " nospoof on" .Bu satır da
makinenizi
IP address spoofing'e
karşı dikkatli olmaya zorlayacaktır.
i) Source routing
IP Source routing saldirganların sistemi
kırmak için kullandıkları başka
bir yöntemdir.
Bunu
yasaklamak için aşağıdaki komutu çalıstırmanız
gerekmektedir.
[root@server /root]# for f in
/proc/sys/net/ipv4/conf/*/accept_source_route;do
echo 0> $f
done
Çalıştırdığınız komutun makine reboot
edildikten sonra aktif olmasını istiyorsanız
yukarıdaki
komutu /etc/rc.d/rc.local dosyasına da eklemeniz lazım.
j) SYN Cookie'ler.
"SYN attack" DoS'a (Denial Of
Service) neden ola bilecek önemli bir saldırı
çesididir.
Denial Of
Service saldırıları sistemdeki tüm kaynakların tükenmesine
yol açarak sizi
makineyi
reboot etmeye zorlar.Bu saldırıya karşı koymak istiyorsanız
aşağıdaki komutu
çalıştırmanız
lazım
[root@server /root]# echo 1 >
/proc/sys/net/ipv4/tcp_syncookies
Komutun sistem reboot edildikten sonra da
aktif olmasını istiyorsanız yukarıdaki
komutu
/etc/rc.d/rc.local
dosyasına da eklemeniz lazım.
k) /etc/services dosyası
Bu dosya sistemdeki hizmet programlarının
port numaralarını belirler Bu
dosyanin kimse
tarafından
değiştirile ve görüle bilmemesi için aşağıdaki
komutları çalıştırarak
attribute'unu
ve modunu değiştiriniz Saldırgan
bu dosyaya yaza bilmesi halinde portları
kafasına göre
kullanıma açar, ve başka
bir zaman geri döne bilmek için backdoor bıraka
bilir.
[root@server /root]# chattr +i /etc/services
[root@server /root]# chmod 600 /etc/services
l) /etc/securetty dosyasi
Bu dosyanın var olması sisteminize root
olarak telnet çekilememsini saglar.
Dosyayı açarak
içine
makineye root olarak login olma hakkı tanıdığınız
terminallerin adını yaza
bilirsiniz.
Örneğin , makineye sadece
birinci terminalden root olarak login oluna
bilmesini
istiyorsaniz dosyaya "tty1" satırını ekleyiniz,
birinci ve ikince terminaller-
den login olunmasını istiyorsanız
"tty1" ve "tty2" satırlarını ekleyiniz.
m) gereksiz hesaplar
Sisteminizde default olarak gelen , fakat hiç
bir şekilde kullanmadığınız hesaplar
vardır.
Örneğin
gopher , uucp genelde kullanılmayan hesaplar. /etc/passwd
dosyasına bakın ve
uid'si 500'ün
altında olan tüm kullanıcıları teker-teker gözden
geçiriniz. Bunu
kullanmıyorum,
dediğiniz tüm hesapları
kaldırınız. Çünki bu hesaplar herbiri saldırganın
sisteminize
girmesi için birer kapıdır.
Bir kullanıcı hesabını kaldırmak için
aşağıdaki komutu çalıştırmanız lazım:
[root@server /root]# userdel gopher
Bu komut gopher kullanıcısını
sisteminizden kaldırır.
n) su izni
Kimsenin su yapmasına izin vermemeniz lazım.
Bunu yaparsanız, birisi bir
şekilde root
şifresini
öğrendiyse bile ,root olarak telnet çekemeyeceği (bak. madde
l. ) ve su izni
olmadığı
için sisteminizde root hakkı
kazanamayacaktır. Kullanıcıların su yapmasını
engellemek
için aşağıdaki
satırları /etc/pam.d/su dosyasına eklemeniz lazım.
auth sufficient /lib/security/pam_rootok.so
debug
auth required /lib/security/pam_wheel.so
group=wheel
Bundan sonra su yapa bilmesini istediğiniz
kullanıcı adlarını /etc/group
dosyası içine
wheel'le başlayan
satırın sonuna virgülle ayırarak
ekleye bilirsiniz.
o) /etc/limit.conf
Dos(Denial Of Service)'lerle
karşı-karşıya kalmak istemiyorsanız bu
dosyaya aşağıdaki
satırları
eklemeniz lazım
* hard rss 5000
* hard nproc 20
Birinci satır bir kullanıcının maksimum 5
M RAM kullana bileceğini, ikinci
satır ise bir
kullanıcının
sistemde maksimum 20 proses çalıştıra bileceğini belirtir.
Tabii ki, bu
sayıları
kullanmak zorunda değilsiniz ve bunları değiştirip
istediğiniz değerleri yaza
bilirsiniz.
p) Derleyiciler ve rpm.
Sisteminizde Derleyicinin bulunması (gcc,
cc) sisteminize sızmış saldırgana
sisteminizde
kaynak
kodunu derleyerek çalıştırmasına izin
verir.Bunu önlemek için derleyicileri
(kullanmıyorsanız)
kaldırınız. Ayni
şey rpm komutu için de geçerlidir, sisteme sızmış bir
saldırgan
rpm komutunu kullanarak
istediği programı sisteminize yükleye bilir.
Fakat rpm derleyiciler gibi degil.
Derleyiciyi uninstall ettikten sonra tekrar
install ede
bilirsiniz.
Rpm için ise aynı şey geçerli değil.Yapmanız gereken şey
rpm komutunu /bin/
dizininde
saldırganin düşünemeyeceği bir yere kopyalamaktır. Hatta
en saglami rpm'i bir
floppy'ye
kopyalamaktır.Gerektiği
zaman rpm'i geri yerine kopyalayıp çalıştıra bilirsiniz.
q) history size
Sistemdeki su yapma yetkisine sahip (bak .
madde n.) birisinin şifresini ele geçirmis
saldırgan, bu kullanıcının history'sine
bakar ve yanlışlıkla yazılmış bir şifre arar.
Saldırgana minimum imkan tanımak için
history uzunluğunu mümkün
kadar kısa tutunuz,
örnegin
20. Bunu yapmak için
/etc/profile dosyasında HISTSIZE ve HISTFILESIZE satırlarını
değiştirerek
bu kelimelerden sonraki sayıyı değiştirerek 20 yazmanız
yeterli olacaktır.
r) /etc/lilo.conf
Makineniz herkesin girip-çıka bileceği bir
mekanda ise aşağıdaki ayarları
yapmanızde fayda
vardir.
Makine sadece siz ve güvendiğiniz insanların
gire bildigi bir yerde ise bu maddeyi
geçe
bilirsiniz. /etc/lilo.conf
dosyasını açınız ve aşağıdaki satırları ekleyiniz
timeout=00
restricted
password="your_password"
timeout satırı makine açılırken LILO'nun
beklememesini sağlar ki bu da
LILO'ya parametre
verilmesini
engeller. restricted
satırı makinenin single modda açılması için şifre
verilmesi
gerektiğini belirtir. Şifreyi ise siz veriyorsunuz. (password
satırının
önüne yazarak). Bunları yaptıktan sonra
şifrenizin gözükmemesi için aşağıdaki
komutu
çalıştırarak
/etc/lilo.conf dosyasının izinlerini değiştirmeniz lazım
[root@server /root]# chmod 600 /etc/lilo.conf
s) log'lar
Sisteminizin herhangi bir şekilde
kırılması durumunda , saldırı hakkında bilgi
ala
bileceginiz
tek kaynak log'lardır. Bundan dolayı, sisteminizi kırmış
olan bir saldırgan
,işi
bittikten sonra log dosyalarını siler ve saldırı
hakkında herhangi bir bilgi
alamazsınız.
Bunu önlemek için log dosyalarının
saldırıyı yapan şahsın ulaşamayacağı bir
yerde
kopyalarının tutulması
gerekir. En sağlıklı yöntem log'ların print edilmesidir.
Bunun için /etc/syslog.conf dosyasının
sonuna aşağıdaki satırı eklemeniz lazım.
authpriv.* ; mail.*;local7.*;auth.*;daemon.info
/dev/lp0
Fakat bu yontemin birtakım dezantajları var,
makinenizde printer tanıtılmamış ola bilir,
her log'un çıktısını almak fazla
masraflı ve karışık ola bilir.Bundan dolayı en iyi
yöntem log'ların başka bir makineye
kopyalanmasıdır. Log'ları kopyalacağınız örnek
makinenin adı logserver olsun.Bu durumda
sizin makinenizin /etc/syslog.conf dosyasının
sonuna şu satırı eklemeniz
lazım.
authpriv.* ; mail.*;local7.*;auth.*;daemon.info
@logserver
logserver makinesinde ise /etc/rc.d/init.d/syslog
scriptindeki
"daemon syslogd -m 0 " satırını
"daemon syslogd -r -m 0" olarak değiştirmeniz ve
değişikliği kayd ettikten sonra her iki
makinede aşağıdaki komutu
çalıştırarak syslog
programını
restart etmeniz lazım
[root@server /root]# /etc/rc.d/init.d/syslog
restart
t) /etc/rc.d/init.d dizini
Bu dizinin altında programları çalıştıran
scriptler yer almaktadır. Bu
dizin altindakı tüm
dosyaların
izinlerini aşağıdaki komutla değiştiriniz
[root@server /root]# chmod 700 /etc/rc.d/init.d/*
NOT: Genel olarak kullanıcılara mutlaka görmeleri
gereken dosyalar ve dizinler
hariç , hiç
bir dosya
ve dizine yazma ve okuma izni vermemeye çalışın.
u) suid bitli dosyalar
Bu tür dosyalar çalışma esnasında ,
işlemlerini devam ettirmek için root
hakkı kazanırlar.
Örneğin
kullanıcı passwd komutunu çalıştırarak şifresini
değiştirirken, passwd programı
/etc/passwd
dosyasına yazmak için
root hakkı kazanır. Saldıgran bu tür programları farklı
şekilde
kullanarak sisteminize zarar
vere bilir. Bundan dolayı sistemdeki tüm suid
bitli
dosyaların
bulunup, bunlardan kullanıcıların kullanmak zorunda
olmadıklarını tespit
edilerek
suid bitinin kaldırılması lazım.Sistemdeki suid bitli
dosyalar aşağıdaki komut
kullanılarak
buluna bilir:
[root@serveer /root]# find / -type f \( -perm
-04000 -o -perm -02000
\) \-exec ls -l {} \;
Çıktının aşağıdaki gibi olmasi lazım.
-rwsr-xr-x 1 root root 34565 sep 22 23:35 /usr/bin/chage
Buna benzer 20-30 civarında satır çıka
bilir. En sağdaki /usr/bin/chage adını
ve yerini
gösterir.
Sağdaki satıra bakın ve hangi dosyaların kullanıcı
tarafından çalıştırılmaması
gerektiğine
karar verin. Daha sonra "chmod
a-s dosya_adi" komutu ile bu dosyanın suid
bitini
kaldırınız.Örnegin kullanıcının /usr/sbin/traceroute ve
/bin/ping kullanmasına ge-
rek yok. O zaman aşağıdaki komutları çalıstırmanız
lazım
[root@server /root]# chmod a-s /usr/sbin/traceroute
[root@server /root]# chmod a-s /bin/ping
v) Gizli dosyalar
Sisteminize crack programları ve ya passwd
dosyaları getirmiş olan bir kullanıcı
bu
program ve
dosyaların bulunamaması için onları gizli olarak
tutar.Ve verdiği isimlerin
dikkat
çekici olmamasına dikkat eder. Örneğin
bir crack programını ".. " adı ile tutar ve
bu size
sıradan bir şeymiş
gibi gelir. Bundan dolayı sistemdeki gizli dosyaları sürekli
inceliyor
olmanız lazım. Sistemdeki gizli dosyaları görmek için aşağıdaki
komutu
çalıştırmanız
lazım.
[root@server /root]# find / -name
".*"
Bu komut noktayla başlayan (gizli )
dosyaları bulur ve siz de size normal gözükmeyen
dosyaları inceleye bilirsiniz.
w) Herkes Tarafından Yazıla Bilen Dosya ve
Dizinler
Sisteminizi sürekli tarayarak sizin yazma
izni verdiginiz dosya ve dizinler hariç hiç bir
dosya veya dizinin herkes tarafından
yazılabilir olmamasına
dikkat etmeniz lazim.
Sisteminizi
kırmayı başarmış olan bir saldırgan
sisteme tekrar geri döne bilmek bu tür
dosyaları
ve dizinleri backdoor
olarak bırakmış ola bilir. Bu tür dosya ve dizinleri
bulmak
için aşağıdaki komutu çalıştırınız.
[root@server /root]# find / -type f \( -perm
-2 -o -perm -20 \) -exec ls -lg {} \;
THE END..
|