WEB GÜVENLİĞİNE TEMEL BİR BAKIŞ



Benzer belgeler
Linux Sunucuları için Güvenlik İpuçları. Korhan Gürler, Burç Yıldırım

WEB SUNUCU GÜVENLİĞİ: Web Siteleri Neden Hacklenir?

Linux işletim sistemlerinde dosya hiyerarşisinde en üstte bulunan dizindir. Diğer bütün dizinler kök dizinin altında bulunur.

Linux altında komut satırında...

Linux Dosya ve Dizin Yapısı

Veri Tabanı Yönetim Sistemleri Bölüm - 02

Bölüm 10: PHP ile Veritabanı Uygulamaları

Temel Linux Eğitimi 1., 2. ve 3. Bölümler

PHP 1. Hafta 2.Sunum

ProFTPD FTP Sunucusu. Devrim GÜNDÜZ. TR.NET Sistem Destek Uzmanı.

IPCop ile Ağ Güvenliği ve Yönlendirme. Kerem Can Karakaş.

5651 ve 5070 Sayılı Kanun Tanımlar Yükümlülükler ve Sorumluluklar Logix v2.3 Firewall. Rekare Bilgi Teknolojileri

Kets DocPlace LOGO Entegrasyonu

HUAWEI Cihazlara Erişim Yöntemleri

MCR02-AE Ethernet Temassız Kart Okuyucu

Web Uygulama Güvenliği Kontrol Listesi 2010

Ders Tanıtım Sunumu. Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı. 26 Şub Öğr. Gör.

PHP I PHP I. E. Fatih Yetkin. 26 Eylül 2011

NFS (Network File System) & NIS (Network Information System) H. Coşkun Gündüz cgunduz@cs.bilgi.edu.tr

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Ağ Üzerinde MATLAB kurulum rehberi (Sunucu makine)

AKINSOFT. Eofis NetworkAdmin. AKINSOFT EOfis NetworkAdmin Kurulumu Bilgi Notu. Doküman Versiyon : Tarih : Copyright 2008 AKINSOFT

Microsoft SQL Server 2008 Oracle Mysql (Ücretsiz) (Uygulamalarımızda bunu kullanacağız) Access

Türkiye Linux Kullanıcı Grubu NFS & NIS. Kerem ERZURUMLU. kerem@linux.org.tr. 1. Linux ve Özgür Yazılım Şenliği.

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 7. LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ. LINUX Yapısı

1.PROGRAMLAMAYA GİRİŞ

LİNUX. Dosyalar ve dizinler

Coslat Monitor (Raporcu)

Temel Linux Sunucusu Kurulumu

man komut man ls (ls komutu hakkında bilgi verir.) man pwd (pwd komutu hakkında bilgi verir.)

HAZIRLAYAN BEDRİ SERTKAYA Sistem Uzmanı CEH EĞİTMENİ

SIMAN KULLANIM KILAVUZU

AÇIK KAYNAK İŞLETİM SİSTEMLERİ - BÖLÜM 1. Temel komutlar,dosya ve Dizin İşlemleri, Kullanıcı ve Grup İşlemleri

Ağ Nedir? Birden fazla bilgisayarın iletişimini sağlayan printer vb. kaynakları, daha iyi ve ortaklaşa kullanımı sağlayan yapılara denir.

Denetim Masası/Programlar/Windows özelliklerini Aç/Kapat

Komut Penceresi ile Çalışmaya Başlamak

NETFİLTER VE LİNUX TABANLI BİR FİREBOX TASARIMI

İNTERNET PROGRAMCILIĞI HAFTA MYSQL - PHPMYADMIN. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Mysql Nedir.

FreeBSD Erişim Kontrol Listeleri

Mod Security Hızlı Kurulum Kılavuzu

MODSECURITY DENETİM KAYITLARINI ANLAMAK. Gökhan Alkan,

Kurumsal Güvenlik ve Web Filtreleme

CHAPTER 6 FTP SERVER

Internet Programming II

Aktif Dizin Logon/Logoff Script Ayarları Versiyon

LDAP VE WORDPRESS İLE

WAMP SERVER KURULUMU

Sun Solaris Jumpstart Sistemi

Kurumsal Güvenlik ve Web Filtreleme

Linux Temelli Zararlı Yazılımların Bulaşma Teknikleri, Engellenmesi ve Temizlenmesi

İÇERİK YÖNETİM SİSTEMİ (CMS) Bir web sitesi yayınlamak için yapılması gerekenler:

30 Mayıs ETASQLMNG Programına giriş

Bilgi ve iletişim teknolojileri

EKLER EK 12UY0106-5/A4-1:

Web Servis-Web Sitesi Bağlantısı

Linux'ta Kabuk ve Kabuk Programlama

Fidye Virüslerinden Korunma Rehberi

WiFi Relay Sayfa 1 / 11. WiFi Relay. Teknik Döküman

BİLGİ İŞLEM DERS 3. Yrd Doç Dr. Ferhat ÖZOK MSGSU FİZİK BÖLÜMÜ MSGSU FİZİK BÖLÜMÜ

BLGM 343 DENEY 8 * TCP İLE VERİ İLETİŞİMİ

ORSOFT 5.22 AMERİKAN KÜLTÜR DERNEĞİ DİL OKULLARI YÖNETİM BİLGİ SİSTEMİ KURULUMU

.: Linux Kullanıcıları Derneği. III. Linux ve Özgür Yazılım Şenliği Mayıs Milli Kütüphane Ankara :.

ERİŞİM ENGELLEME DOS VE DDOS:

Paralel Hesaplama - Beowulf Cluster

WiFi RS232 Converter Sayfa 1 / 12. WiFi RS232 Converter. Teknik Döküman

SquidGuard Kurulumu. Öncelikle gerekli paket temin edilmelidir. adresinden temin edilebilir. Basitçe kurulumu ;

PHP 1. Hafta 1. Sunum

VERİ GÜVENLİĞİ. Web Uygulamaları Güvenliği. Özer Çelik Matematik-Bilgisayar Bölümü

Saldırı Tespit ve Engelleme Sistemleri Eğitimi Ön Hazırlık Soruları

Bilgi Güvenliği Nedir? Bilgi Güvenliğinde Saldırı Kavramı. Bilgi Güvenliğinde Saldırı Örneği : SPAM Mail

Yerel Disk Üzerinde CentOS 7.0 Kurulumu 17 Red Hat Enterprise Linux 6 Kurulumu 32. Sisteme Giriş ve Çıkış 49 İÇİNDEKİLER 1 LINUX HAKKINDA 1

WINDOWS SERVER 2008 R2-SERVER 2012 DE IP SANALLAŞTIRMA

LİNUX. Dosyalar ve dizinler

TC KİMLİK NO SMS GÖNDERİM XML API

BİLGİSAYAR BİLİMLERİ ARAŞTIRMA VE UYGULAMA MERKEZİ BİLGİ GÜVENLİĞİ

Wolvox Kapı Ekranı. AKINSOFT Wolvox Kapı Ekranı Yardım Dosyası. Doküman Versiyon :

Güvenli Kabuk: SSH. Burak DAYIOĞLU, Korhan GÜRLER

İşletim Sistemleri. Discovering Computers Living in a Digital World

PHP ile İnternet Programlama

Script. Statik Sayfa. Dinamik Sayfa. Dinamik Web Sitelerinin Avantajları. İçerik Yönetim Sistemi. PHP Nedir? Avantajları.

İNTERNET EXPLORER AYARLARI 1. Başlat-Ayarlar-Denetim Masası menüsünden "İnternet Özellikleri" (Seçenekleri)'ni seçiniz. Resim. 1

LOGO için Online Mutabakat Kullanım Kılavuzu

Widows un çalışmasında birinci sırada önem taşıyan dosyalardan biriside Registry olarak bilinen kayıt veri tabanıdır.

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

BİLGİ İŞLEM DERS 1. Yrd Doç Dr. Ferhat ÖZOK MSGSU FİZİK BÖLÜMÜ MSGSU FİZİK BÖLÜMÜ

BİLGİ GÜVENLİĞİ VE ZARARLI YAZILIMLAR. Bilgi Güvenliği: Kendimize ait olan bilginin başkasının eline geçmemesidir.

Paketi Açalım Indirmiş olduğunuz paketi tar komutu ile açın: tar xzf nagios version.tar.gz Kullanıcı Gruplarını Oluşturalım Paketi derledikten sonra n

Windows 7 - IIS 7.5 üzerine PHP ve MySQL kurulumu

NicProxy Registrar AWBS Modül Kurulumu Versiyon 1.0

Temel Bilgisayar Programlama

İnternet te Bireysel Güvenliği Nasıl Sağlarız? Rauf Dilsiz Bilgi Güvenliği Uzmanı

BONASUS. Ertuğrul AKBAS [ANET YAZILIM]

Pac Dosyası İle Proxy Kullanmak

BİLGİ & İLETİŞİM TEKNOLOJİLERİ

Clonera Bütünleşik İş Sürekliliği Gereksinimler ve Kurulum Dökümanı

Bilgi ve Olay Yönetim Sistemi

Bilindik engelleme yöntemlerinin dışında olan, kurumsal web filitreleri nasıl aşılır?

Öğr. Gör. Serkan AKSU 1

FABREKA YAZILIM ELEKTRONİK DANIŞMANLIK TİC. LTD. ŞTİ.

Transkript:

WEB GÜVENLİĞİNE TEMEL BİR BAKIŞ Linux Sunucuda Güvenlik İyilemeleri Apache WEB Sunucuda Güvenlik İyilemeleri PHP Güvenlik İyilemeleri Bora Tahir İZGÖRDÜ İstanbul Teknik Üniversitesi Uzaktan Eğitim Merkezi Teknik Asistan Haziran 2006 E-ileti: izgordu@uzem.itu.edu.tr

LINUX SUNUCU DA GÜVENLİK İYİLEMELERİ Linux sunucuların kullanımı, açık kaynak kodlu olması ve kendisini destekleyen çok çeşitli Network yazılımlarının bulunması dolayısıyla hızla artmakta, bununla beraber güvenlik konusu önem kazanmaktadır. Her şeyden önce şu bilinmelidir ki hiçbir güvenlik önlemi tam garanti veremez. Bundan dolayı sunucudaki bilgilerin önemine göre ayrı bir optik/manyetik aygıta düzenli olarak yedekleme yapılmalı, RAID kontrol kartları kullanılmalıdır. Sunucunun kurulum aşamasında kurulacak bileşenlerin elle seçilmesi makine üzerinde tam bir hakimiyet sağlar. Ayrıca /var, /usr ve /home dizinlerinin ayrı disklere bağlanması olası bir güvenlik ihlali durumunda bir dizinde oluşacak hasar diğer dizinleri etkilemez. Genelde Linux dağıtımı ile gelen yazılımlar (apache vb.) son sürümleri değildir. Bunun için kullanılacak yazılımlar resmi sitelerinden indirilmeli (tar.gz uzantılı kaynak kod) ve derlenerek kurulmalıdır. Sunucu da C, C++ derleyicileri bulunmamalı, ihtiyaç halinde kurulup kaldırılmalıdır. Böylece makineye erişen bazı kullanıcıların zararlı kaynak kodları derlemeleri engellenmiş olur. Çekirdek (kernel) kaynak kodu makineda bulundurulmamalıdır. Çünkü, bir takım alt seviye güvenlik kırma programları kerneldeki C++ başlık dosyalarını kullanıp root erişimine sahip olabilmektedir. Hatasız program yoktur. Dolayısıyla sunucu makine üzerinde ne kadar az yazılım bulunursa risk o kadar azalır. Bunun için sunucu kurulumundan önce, hangi amaçlar için kullanılacağına dair bir liste yapılmalı ve yalnızca gerekli yazılımlar listelenmelidir. Kurulumdan sonra bu liste dışında kalan tüm paketler kaldırılmalıdır. Örneğin Xwindows 1

bileşenleri çok büyük ve onlarca hatalı kod barındırabilecek bir yapıda olduğundan kaldırılmalıdır. Genel olarak gereksiz/güvenlik açığı oluşturabilecek diğer paketler: git, mc, rsh, login, rcp, rdate, rdist, rusers, rwall, rwho, ntalk, talk, telnet sunucu, KDE ve QT kütüphaneleri, Snmpd yazılımı, NFS/NIS ile ilgili paketler, Multimedia-Grafik paketleri Sunucu güvenliğindeki kilit noktalardan biri de kullanıcı hesaplarıdır. Sunucu üzerindeki kullanıcı hesaplarından birini elde etmek, güvenlik açıklarından faydalanmak isteyen kötü niyetli kimselerin işini oldukça kolaylaştırır. Bu nedenle makine üzerindeki her şifrenin root şifresi gibi hassasiyetle korunması gerekir. Buna yönelik olarak sistemdeki şifrelerin genel özellikleri kısıtlanabilir: /etc/login.defs dosyasına PASS_MIN_LEN n direktifi verilerek şifredeki minimum karakter sayısı n olarak belirlenebilir. Kullanıcı hesapları konusunda yapılan tipik bir hata da, sisteme login olan fakat uzun süre faaliyet göstermeyen kullanıcıların sistemde bekletilmesidir. Bu durum önlenebilir: /etc/profiles dosyasına TMOUT = 7200 direktifi verilerek 7200 saniye boyunca işlem yapmayan kullanıcı otomatik olarak sistemden atılır. Güvenliği artırıcı diğer konfigürasyon değişiklikleri şu şekilde sıralanabilir: /etc/exports dosyası Sunucuda NFS (Network File System) yada NIS(Network Information System) gibi bir sistem kullanılmıyorsa, ki kullanılması pek tavsiye edilmez, /etc/exports dosyası içersinde herhangi bir şey olması gerekli değildir. Bu dosya NFS sunucular için paylaştırılacak dizinleri belirtir. Eğer NFS kullanılacaksa buradaki paylaşım listesi aşağıdakine benzer bir yapıda olmalıdır. /paylaştırılacak/dizin1 yetkili.makine.com.tr(ro,root_squash) /paylaştırılacak/dizin2 160.75.67.180(ro,root_squash) 2

Yukarıdaki dosyada ro seçeneği, bu paylaşımın salt okunur olduğunu, root_squash seçeneği ise root kullanıcı yazma haklarına sahip herhangi bir koşulun olamayacağı anlamına gelir. /etc/security/console.apps/ dizini Red Hat Linux sistemlerde normal kullanıcıların makineyi kapatmak, yeniden açmak vb... özel haklara sahip olmalarını sağlayan bazı dosyalar bulunur. Bu dosyalar, /etc/security/console.apps dizininde bulunur. Buradaki bazı dosyaları silmek bizi beklenmedik sürprizlere karşı koruyacaktır. Aşağıdaki komutlar ile gereksiz bazı dosyalar temizlenebilir. rm f /etc/security/console.apps/halt rm f /etc/security/console.apps/poweroff rm f /etc/security/console.apps/reboot rm f /etc/security/console.apps/shutdown Eğer sistemde root kullanıcı harici kimsenin Xwindows sistemini kullanmaması isteniyorsa yine /etc/security/console.apps/ dizini içindeki xserver dosyasının da silinmesi yeterli olacaktır. /etc/pam.d/ dizini Bir diğer güvenlik artırımı da pam.d sisteminde sağlanabilir. Red Hat sistemlerde /etc/pam.d dizininde bulunan betikler, yazılımların kullanıcıları nasıl yetkilendireceğini düzenler. Aşağıdaki komutlar verdildiği takdirde kullanıcılar tehlikeli sayılabilecek bazı konsol haklarından mahrum edileceklerdir. $cd /etc/pam.d $for i in * ; do $sed '/[^#].*pam_console.so/s/^/#/' <$i> temp && mv temp $i done 3

/etc/inetd.conf dosyası Bu dosya Linux makinenin sunucu yazılımlarının pek çoğunu kontrol eder. Arka planda çalışan inetd adlı yazılım, bu dosyada belirtilen portlardan gelen istekleri dinleyerek bir istek karşısında yine bu dosyada belirtilen programın bir kopyasını çalıştırır. Bu şekilde hiç kullanılmayan yada az kullanılan bazı sunucu yazılımların bellekte gereksiz yer kaplamaları engellenmiş olur. Dosyanın temel yapısı şu şekildedir. ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l a telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd Bu dosya, sistemin güvenliği için en önemli dosyalardandır. Gerekli olmayan her şey kapatılmalıdır. Örneğin makine ftp sunucu olarak kullanılmayacak ise, ilgili satırın başına diyez (#) işareti konularak yazılım aktif halden kaldırılmalı yada tamamen silinmelidir. Başka bir örnek vermek gerekirse, çok zararsız gibi görünen "echo" servisi, bu porta gönderilen her bilgiyi aynen geri göndermekle görevlidir. Eğer kötü niyetli birisi bu porta, sürekli işe yaramaz bilgi gönderen bir yazılım yazarsa, bu servis gelen anlamsız karakterlerin hepsine birden cevap vermek isterken sistem kaynaklarının çok önemli bir kısmını tüketecektir. Aynı programın bir worm tarzında yazıldığını ve Internet üzerinde binlerce makineden aynı anda anlamsız karakterler gönderildiğini varsayarsak, sunucu büyük ihtimalle göçecektir. Bir diğer önemli madde ise her ihtimale karşı /etc/inetd.conf dosyasının haklarının kontrol edilmesidir. Bu dosyanın hakları 600 yani sadece root kullanıcı tarafından okunabilir ve yazılabilir şekilde olmalıdır. Bu, aşağıdaki komut ile sağlanabilir. chmod 600 /etc/inetd.conf 4

Bu dosyanın içeriğinden emin olunduktan sonra, bir daha root kullanıcı dahil kimse tarafından değiştirilmemesi için şu komut verilmelidir. chattr +i /etc/inetd.conf /etc/hosts.deny dosyası Bu dosya, ağ servislerine ulaşmaya yetkili kullanıcıları kısıtlamaya yarar. Genellikle bu dosya içinde herkese bütün yetkiler kısıtlanır. Ardından sisteme girmeye yetkili IP adresi veya bilgisayar adları /etc/hosts.allow dosyası içinde belirlenir. Aşağıda standart bir /etc/hosts.deny dosyası görünmektedir. # Bütün erişim haklarını kapat!!!... ALL:ALL /etc/hosts.allow dosyası Bu dosya, /etc/hosts.deny dosyasında tamamen kapattığınız erişim haklarını bazı yetkili bilgisayarlara iade etmek için kullanılır. Örneğin sunucu makineye sadece trlinux.com (195.244.37.241) alan adından ve sadece sshd adlı protokol ile erişilmesini isteniyorsa, bu dosyada aşağıdaki değişiklikler yapılmalıdır. sshd: 195.244.37.241 trlinux.com /etc/issue ve /etc/issue.net dosyaları Bu dosyalar, sisteme konsoldan veya telnet yolu ile bağlanmak isteyen kişilere login: belirtecinden önce gösterilen bilgi satırlarını içerirler. Bu, genelde kişiyi kullandığı sistemin bir Linux sistem olduğunu göstermesi açısından faydalı olabilir fakat, yüksek güvenlik gerektiren sistemlerde kullanılan işletim sistemi, kullanılan çekirdek(kernel) gibi bilgilerin kötü niyetli kişilerin eline geçmesi doğru değildir. Bu nedenle /etc/inetd.conf dosyasında telnet programını çalıştıran satırda in.telnetd sonuna h parametresinin eklenmesi bu bilgilerin ekrana getirilmemesini sağlar. 5

telnet protokolü, bir makineye uzaktan erişim amaçlı kullanılır ve üzerinden akan bilgiyi şifrelemeden gönderdiği için güvenli bir makinede bulunması kesinlikle tavsiye edilmez. Şifrelenmeden yollanan her türlü bilgi, bir sniffer yazılımı aracılığı ile rahatlıkla dinlenebilir. Bunu engellemek için ssh adı verilen protokol tercih edilmelidir. /etc/services Bu dosya, bir portta bağlanacak olan programa bir isim vermek amaçlı kullanılır. Örneğin 65000 nolu portu kullanan ve inetd aracılığı ile bu portu dinleyen bir Netbus tarzı bir worm programı yazılmak istendiğinde yapılması gereken, /etc/services dosyasında bu porta bir isim vermek ve /etc/inetd.conf dosyasında verilen ismi içeren ve bu porttaki istekleri işleyen bir program yazmaktır. Bunu engellemek için bu dosyada değişiklik yapmayı engelleyen şu komutun verilmesi yeterlidir. chattr +i /etc/services /etc/securetty dosyası Bu dosya root kullanıcının sisteme direk login belirtecinde kullanıcı adı ve şifresini girerek bağlanabileceği terminal aygıtlarını listeler. Bu dosya silindiği takdirde sisteme telnet ile bağlanan herkese kullanıcı adı olarak root verebilir. Bu çok büyük bir güvenlik açığıdır. Yapılması gereken eğer bu dosya yerinde yoksa yaratılması ve içine "tty1" yazılmasıdır. Bu sayede root kullanıcı sadece bilgisayarın önünde iken ve 1 nolu sanal terminali kullanırken sisteme direk bağlanabilir. /etc/passwd ve /etc/shadow dosyaları passwd ve shadow dosyaları birlikte, kullanıcı şifreleri ve hesapları hakkında ayrıntılı bilgiyi barındırır. Bu nedenle korunmasına özel önem verilmelidir. Internet' te yer alan pek çok hack sitesinde, bu dosyaların bir şekilde ele geçirilmesi ve ardından bir brute force yazılımı ile bu şifrenin güçlü bir bilgisayarda deneme yanılma yöntemi ile kırılması 6

anlatılmaktadır. Bunun önüne geçmek için yapılması gereken /etc/shadow dosyasının okuma haklarını normal kullanıcılardan kaldırmak olmalıdır. Bu işlem şu komutla gerçekleştirilir. chmod 600 /etc/shadow Kullanıcıların su komutu ile root kullanıcı olmalarının engellenmesi su komutu herhangi bir kullanıcının root şifresini bildiği takdirde root kullanıcı haklarına sahip olmasını sağlar. Bu çok büyük bir güvenlik riskidir, fakat engellemek mümkündür. Aşağıdaki satırlar /etc/pam.d/su dosyasının en tepesine eklendiği takdirde sadece wheel adlı ön tanımlı gruba üye olan kullanıcılar su komutunu çalıştırarak root kullanıcı haklarına sahip olabilirler. auth sufficient /lib/security/pam_rootok.so debug auth required /lib/security/pam_wheel.so group=wheel Artık sistemde wheel grubuna üye olmayan hiçbir kullanıcı root haklarına sahip olamayacaktır. Wheel grubuna aşağıdaki komut ile kolayca umut adlı bir kullanıcı eklenebilir. chmod G10 bora Kullanıcıların CPU ve RAM kullanımlarının sınırlanması Bu Linux' un çok gelişmiş özelliklerinden bir tanesidir. Sisteme bağlanan kullanıcılara herhangi bir kaynak limiti verilmediği takdirde sistemi kırmak için özelleşmiş bazı programları çalıştırarak sistemi meşgul etmelerine ve belki de sonuçta başarılı olmalarına neden olunabilir. Aşağıdaki satırlar /etc/security/limits.conf dosyasına eklendiği takdirde root kullanıcı haricindeki kullanıcılar maksimum 20 tane proses açabilecek ve 5 MB bellek kullanabileceklerdir. 7

hard core 0 hard rss 5000 hard nproc 20 Ardından bu özelliği aktif hale geçirmek için kullanıcılar sisteme bağlanırken kullanılan /etc/pam.d/login betiğine bu özelliğin belirtilmesi gereklidir. Sonuçta bu dosya aşağıdaki gibi olacaktır. #%PAM-1.0 auth required /lib/security/pam_securetty.so auth required /lib/security/pam_pwdb.so shadow uth required /lib/security/pam_nologin.so ccount required /lib/security/pam_pwdb.so assword required /lib/security/pam_cracklib.so assword required /lib/security/pam_pwdb.so nullok ession required /lib/security/pam_pwdb.so ession required /lib/security/pam_limits.so Linux işletim sistemi, doğru ellerde dünyanın en güvenli işletim sistemi haline getirilebilir. Fakat, bu özelliklerin pek çoğu aktif olarak gelmez. Güvenlik açısından iyi konfigüre edilmiş bir işletim sistemi yaratmak için Linux dünyasında duyurulan güvenlik uyarıları da dikkate alınmalıdır. 8

APACHE SUNUCU DA GÜVENLİK İYİLEMELERİ Her şeyden önce, duvarları olmayan bir evin kapısını güçlendirmek anlamsız olacağından Apache yazılımının sürekli güncellenmesine özen gösterilmelidir. Default Apache konfigürasyonunda hangi Apache sürümünün ve hangi işletim sisteminin kullanıldığı hatta hangi Apache modüllerinin kurulu olduğu görülebilir durumdadır. Bu bilgiler hackerlerin işine oldukça yaramakla beraber default ayarların ellenmediği izlenimini uyandırır. httpd.conf dosyasında ServerSignature Off direktifi verilerek 404 sayfaları ve klasör listeleri gibi Apache tarafından yaratılan sayfalarda bilgi görüntülenmesi engellenebilir. httpd.conf dosyasında ServerTokens Prod direktifi verilerek http cevap başlığında Server: kısmına sadece Apache yazılması sağlanır. Bazı apache kurulumları nobody kullanıcı hesabı ile çalışır. Bu durumda aynı zamanda örneğin Eposta sunucusu da nobody kullanıcı hesabı ile çalışıyorsa bu sunucuya yapılan başarılı bir saldırıdan Apache de etkilenir. Bunun önlenmesi için Apache kendi kullanıcı hesabı ve grubunda çalıştırılmalıdır: User apache Group apache Bir diğer güvenlik tedbiri de Apache nin web ana klasörü dışındaki dosyalara erişiminin engellenmesidir. <Directory /> Order Deny,Allow 9

Deny from all Options None AllowOveride None </Directory> <Directory /web> Order Allow,Deny Allow from all </Directory> Bunlara ek olarak directory tag i içinde şu direktiflerin verilmesi güvenliği artırıcı rol oynar: Options -Indexes Options -Includes Options -ExecCGI Options -FollowSymLinks AllowOverride None //klasör içeriğinin görüntülenmesini engeller //sunucu tarafı dahil etmeleri (server side include) kapatır //CGI çalıştırmayı kapatır //Sembolik linklerin takip edilmesini engeller //.htaccess dosyaları için desteği kaldırır Eğer override gerekliyse erişim dosyasının ismi.htaccess ten başka bir şeye örneğin.httpdoverride olarak değiştirilmeli ve.ht ile başlayan tüm dosyaların indirilmesi engellenmelidir. AccessFileName.httpdoverride Order allow,deny Deny from all Satisfy All mod_security mod_security, Ivan Ristik tarafından geliştirilmiş güvenlik açısından yararlı pek çok özellik barındıran bir Apache modülüdür. Aşağıdaki özelliklerinden dolayı kullanılması tavsiye edilir: 10

Basit filtreleme Düzenli ifadeler (Regular Expressions) tabanlı filtreleme URL kodlama kontrolü Unicode kodlama kontrolü Null byte saldırısı önleme Upluoad hafıza sınırları Sunucu kimliği maskeleme vb Gereksiz modüllerin kaldırılmasıyla da güvenlik riski azaltılabilir. Kullanılmayan modülleri devre dışı bırakmak için httpd.conf dosyasında LoadModule kısmında ilgili modülün başına diyez (#) işareti konulmalıdır. Genellikle kullanılmayan modüllerin başlıcaları şunlardır: mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex grep LoadModule httpd.conf # modul_adi Apache konfigürasyon ve çalıştırılabilir dosyalarına erişim hakkının kısıtlanması da güvenlik artırımı açısından olumludur. $chown -R root:root /usr/local/apache $chmod -R o-rwx /usr/local/apache komutları ile sadece root bu dosyalar üzerinde okuma hakkına sahip olur. Servis kullanımı engelleme saldırılarının potansiyel etkilerini azaltmak için ise timeout değerinin düşürülmesi yerinde olur. Timeout 45 direktifi ile default olarak 300 e ayarlı değer düşürülür. 11

Ayrıca büyük boyutlu isteklerin sınırlandırılması da faydalı olur. LimitRequestBody 1048576 direktifi ile default olarak unlimited olan değer 1 mb olarak sınırlanabilir. 12

PHP DE GÜVENLİK İYİLEMELERİ Veri Kontrolü Web uygulamalarında güvenlik söz konusu olduğunda en önemli nokta, etkin veri kontrolüdür. Kullanıcıdan alınan, veri tabanına yazılan ve geri döndürülen bilgiler veri kontrolünden geçirilmelidir. Sözü edilen veri kontrolü, kullanıcıdan e-posta bilgisini alan bir kod parçasında basitçe gösterilmiştir: <? php $eposta = $_POST['eposta']; if (valid_eposta($eposta) == false) { die('geçerli bir eposta adresi değil!'); } $eposta = mysql_real_escape_string($eposta);?> valid_eposta() fonksiyonu ile (bu işi yapan onlarca fonksiyon bulunmaktadır) girilen bilginin geçerli bir e-posta bilgisi olup olmadığı sınanarak tehlikeli olabilecek verilerin girişi önlenmiş oldu. Bu şekilde veri daha güvenli hale getirilmiş olsa da veri tabanına işlenmeden önce çağrılacak ek bir işlevle güvenlik artırılmalıdır. php bu noktada programcıya mysql_real_escape_string() fonksiyonunu sunar. Bu fonksiyon hem girdiyi mysql özel karakterlerinden arındırır hem de string olup olmadığını kontrol eder. Girdilerde olduğu gibi dışarıya sunulan tüm verilerin de filtrelenmesi gerekmektedir. Filtrelenmesi gereken en önemli şey ise HTML tag leridir. php de bunu sağlayan htmlentities() fonlsiyonu bulunur. 13

<?php echo htmlentities($_get['eposta'], ENT_QUOTES, 'UTF-8');?> Böylece muhtemel çapraz betik çalıştırma (cross-site scripting) saldırıları (saldırganın html koduna kendi yazdığı web uygulamasını ekleyerek çerezleri çalması) önlenmiş olur. Ancak bu fonksiyonda 3. argüman olan karakter tipinin de düzgün ayarlanması gerekir ki Google böyle bir hatadan ötürü çapraz betik çalıştırma saldırılarından etkilenmiştir. register_globals register_globals belirteci bir çok php sürümünde ön tanımlı olarak kapalı halde (değeri Off) gelir. Ancak bu değerin açık olması, web uygulamasında kullanılan bir değişkene dışardan bir başlangıç değişkeni verilebilmesine olanak tanır ve bir çok web uygulaması için çok ciddi bir güvenlik tehdidi oluşturur. Örnek vermek gerekirse:?php if (yetkili_kulanici()) { $authorized= true; } if ($authorized) { include '/cok/onemli/bilgi.php'; }?> register_globals'ın açık olması durumunda bu sayfa adres satırına?authorized=1 eklenerek çağırıldığında çok önemli bilgiye ulaşılmış olur. 14

Bu durumun engellenmesi için register_globals değerinin kapalı olduğu doğrulanmalı yada kullanılan değişkenlere daima başlangıç değeri verilmelidir. Hata Raporlama PHP5'ten önceki sürümlerde hata raporlama işlemini bazı belirteçleri ayarlanarak kolayca yapılabilir. Bu sürümlerde hata raporlama programlamadan çok PHP yorumlayıcısı tarafından yapılır. Bunun için kullanılacak belirteçler : error_reporting belirteci hata raporlama seviyesinin belirlenmesini sağlar. Değerinin E_ALL olması tavsiye edilir. display_errors belirteci hataların ekrana yazılıp yazılmayacağını belirtilmesine yarar. Geliştirme aşamasında değeri On olursa hatalar anlaşılır. Uygulama kullanılmaya başlandığında değerinin Off yapılması daha uygundur. Böylece hatalar kulanıcılardan ve hataların faydalı olacağı art niyetli kişilerden gizlenmiş olur. log_errors belirteci hataların belirli bir log dosyasına yazılıp yazılmayacağının belirtilmesini sağlar. Değerinin On olması durumunda çalışmada yavaşlamaya sebep olabilir. Geliştirme aşamasında kullanılması tavsiye edilir. 15