Yeni bir güvenlik acigi duyruldugu an merakli crakerlerin ilgili
programin güvenlik acigi olan versiyonunu bir yerlerde bulabilmek icin
bas vurduklari ilk arac arama motorlaridir. Ayni sekilde degisik admin
panelerine arama motorlari üzerinden ulasip DoS atak denemeleri ile
admin sifresini kirmayi denemek bilinen saldiri sekilerindendir.
Arada sirada /var/log/apache2/error.log
Dosyalarina göz atip durumun ne kadar ciddi oldugu konusunda ikna olabilirsiniz..
Asagida tipik bir deneme yanilma yönetimi ile phpmyadmin ara yüzü bulunmaya calisilmis..
[Sun May 06 14:24
5 2007] [error] [client 82.61.230.210] File does not exist: /var/www/phpMyAdmin
[Sun May 06 14:24
5 2007] [error] [client 82.61.230.210] File does not exist: /var/www/PHPMYADMIN
[Sun May 06 14:24
5 2007] [error] [client 82.61.230.210] File does not exist: /var/www/pma
[Sun May 06 14:24
5 2007] [error] [client 82.61.230.210] File does not exist: /var/www/PMA
[Sun May 06 14:24
6 2007] [error] [client 82.61.230.210] File does not exist: /var/www/PMA
[Sun May 06 14:24
7 2007] [error] [client 82.61.230.210] File does not exist: /var/www/mysql
[Sun May 06 14:24
7 2007] [error] [client 82.61.230.210] File does not exist: /var/www/admin
[Sun May 06 14:24
7 2007] [error] [client 82.61.230.210] File does not exist: /var/www/db
[Sun May 06 14:24
8 2007] [error] [client 82.61.230.210] File does not exist: /var/www/dbadmin
[Sun May 06 14:24
8 2007] [error] [client 82.61.230.210] File does not exist: /var/www/web
[Sun May 06 14:24
8 2007] [error] [client 82.61.230.210] File does not exist: /var/www/admin
[Sun May 06 14:24
9 2007] [error] [client 82.61.230.210] File does not exist: /var/www/admin
[Sun May 06 14:24
9 2007] [error] [client 82.61.230.210] File does not exist: /var/www/admin
[Sun May 06 14:24
9 2007] [error] [client 82.61.230.210] File does not exist: /var/www/mysql-admin
[Sun May 06 14:24:40 2007] [error] [client 82.61.230.210] File does not exist: /var/www/phpmyadmin2
[Sun May 06 14:24:40 2007] [error] [client 82.61.230.210] script '/var/www/mysqladmin/main.php' not found or unable to stat
[Sun May 06 14:24:40 2007] [error] [client 82.61.230.210] File does not exist: /var/www/mysql-admin
[Sun May 06 14:24:41 2007] [error] [client 82.61.230.210] script '/var/www/main.php' not found or unable to stat
[Sun May 06 14:24:41 2007] [error] [client 82.61.230.210] File does not exist: /var/www/phpMyAdmin-2.5.6
[Sun May 06 14:24:41 2007] [error] [client 82.61.230.210] File does not exist: /var/www/phpMyAdmin-2.5.4
[Sun May 06 14:24:42 2007] [error] [client 82.61.230.210] File does not exist: /var/www/phpMyAdmin-2.5.1
[Sun May 06 14:24:42 2007] [error] [client 82.61.230.210] File does not exist: /var/www/phpMyAdmin-2.2.3
[Sun May 06 14:24:42 2007] [error] [client 82.61.230.210] File does not exist: /var/www/phpMyAdmin-2.2.6
[Sun May 06 14:24:43 2007] [error] [client 82.61.230.210] File does
Daha kolay bir yöntem arama motorlari üzerinden phpmyadmin gibi
herhangi bir programin internet üzerinde biraktigi izleri aramak.
Mesela biraz önce bir kac google aramasi ile söyle bir arama kelimesi
buldum. "phpmyadmin/css" "Index of"
Buraya tıklayarak oldukca fazla phpmyadmin arayüzüne ulasabilirsiniz.
Bu yazinin amaclarindan biriside olasi saldirilarin ne kadar ciddi
olabilecegi konusunda sistemcileri biraz korkutmak. Buraya kadar
okuduklarinizdan yola cikarak siz dahi kafanizda ufak bir korunma
yöntemi gelistirmis olabilirsiniz. Mesela .htaccess kullanarak kimlik
sorgulamak gibi. Bu .htaccess konuda ayrintiya girmiyecegim merak
edenler google’den arastirsin.
Yeni yeni kullanilmaya baslayan diger bir yöntemse arama motorlarina
webserverinizin beli basli dizinlerini indexlememesini rica etmek. Bunu
domaninizin köküne koyacaginiz robots.txt dosyasi ile yapabilirsiniz.
Asagidaki robots.txt dosyasinin icine yazacaginiz ibare ile /temp ,
/logfiles ve phpmyadmin dizinlerinin google ve diger arammotorlari
tarafindan indexlenmesini engelemis olursunuz. robots.txt ile
yapabilecekleriniz bunlarla sinirli degil. Ayrinti icin kaynak olarak
vermis oldugum linkere bakabilirsiniz.
# Alle Robots ausschließen
User-agent: *
Disallow: /temp/
Disallow: /logfiles/
Disallow: /phpmyadmin/
Ancak burda dikkat edilmesi gereken bir nokta var. Sistemizine nokta atisi yapmak isteyen kisi direk
http://mydomain.com/robots.txtdosyasini okudugunda sizin nahmahrem dizinlerinizin neresi oldugu
görecektir. Daha zekice bir yöntemle bütün girilmesini istemediginiz
dizinlerinizi /gizli/ adli bir dizinin altina tasiyip robots.txt’nin
iceriginide söyle tutabilirsiniz.
# Alle Robots ausschließen
User-agent: *
Disallow: /gizli/
gizli/ adli dizinin icine index.html dosyasi korayak bu dizinin icine direk erisimi engelemis oluruz.
Bircok programlama dilinde mevcut olan system() gibi fonksiyonlari web
programlarken kullanmamaya calisin. Eger bunu yapmak zorundaysaniz
statik icerik yazmaya yada system(), eval(), popen() v.s. icine
yazdiginiz degiskenleri iceriklerini inceletikten sonra fonsiyonu
cagirmak gibi güvenlik önlemleri alinabilir. Özelikle system() gibi
fonksiyonlar icine global degiskenler kullanmamaya özen gösterin.
Php güvenlik üzerine daha ayrintili bilgi icin Lnkini kaynakca altinda
bulabileceginiz “PHP Güvenlik El Kitabı” mutlaka okuyun. Bunu disinda
imkaniniz varsa apache serverinize mod security kurun. Dolayisi ile
istenmeyen url komutlarini serveriniz üzerinde calistirilmasini
engelemis olursunuz. debian üzerinde apache2 icin modsecurity su
sekilde kurabilirsiniz.
Ilk önce apt-get ile mod security kuralim
apt-get install libapache2-mod-security
kendinizde gelisitirip günceleyebileceginiz mod security icin düsünülmüs kurallari surdan indirebilirsiniz.
cd /etc/apache2/
wget
http://fatihgenc.com/upload/filter.confapache2 mod-security ile gelen conf dosyasina filter.conf dosyasini include ile ekliyoruz
vi /etc/apache2/mods-available/mod-security.conf
SecFilterDebugLevel 0
SecFilterDebugLog /var/log/apache2/modsec_debug_log
# Include rules
Include /etc/apache2/modsecurity/filter.conf
enson olarak mod secury aktive edip apacheyi yeniden calistiralim.
a2enmod mod-security
/etc/init.d/apache2 restart
Asagidaki url’yi kendi kendi domaininiz icin uyarlayip internet gezgininizden cagirarak apache error.log’larini inceleyin..
http://yourdomain.com/?query=”insert into users (id, name) values (1,’stefan’)”
mod secur calisiyor ise bunu loglardan konrtol edebilirsiniz. ayriyetten sayfa bulunamadi seklinde 404 hatasi verilir…
ssh serverinde de durum farkli degil oradan da degisik saldirilara magzur kalabilirsiniz..
Asagida degisik kullanici adlari ile sisteme baglanmaya kalkisilmis.
Cracker muhtemelen beli bir ag maskerini tariyarak sayisiz deneme ile
herhangi bir servere baglanmayi denemis olsa gerek.
grep -i "Invalid user" /var/log/auth.log
May 13 13:07:25 mail sshd[28338]: Invalid user andrew from 218.69.18.143
May 13 13:07
0 mail sshd[28341]: Invalid user adam from 218.69.18.143
May 13 13:07
5 mail sshd[28344]: Invalid user trial from 218.69.18.143
May 13 13:07:45 mail sshd[28347]: Invalid user calendar from 218.69.18.143
May 13 13:07
5 mail sshd[28350]: Invalid user poq from 218.69.18.143
May 13 13:08
mail sshd[28356]: Invalid user fluffy from 218.69.18.143
May 13 13:08:25 mail sshd[28359]: Invalid user admin from 218.69.18.143
May 13 13:08:40 mail sshd[28365]: Invalid user guest from 218.69.18.143
May 13 13:08:45 mail sshd[28368]: Invalid user webmaster from 218.69.18.143
May 13 13:09:00 mail sshd[28374]: Invalid user oracle from 218.69.18.143
May 13 13:09
mail sshd[28377]: Invalid user library from 218.69.18.143
May 13 13:09:20 mail sshd[28380]: Invalid user info from 218.69.18.143
May 13 13:09
5 mail sshd[28383]: Invalid user shell from 218.69.18.
DoS atagi engeliyebilecegimiz iptable yada pf gibi güvenlik duvarlari
üzerinden yapabileceginiz gibi. Su sekilde de ssh servisini kismen
güvence altina alabiliriz.
Bilindigi üzer ssh standart olarak 22 nolu portu dinler. Eger bu portu 1022 yaparsak
22 nolu porta baglanmaya calisan kullanici sonuc alamayinca vaz gecicektir.
Ilk önce 1022 portunuzun kullanilip kullanilmadigina göz atalim.
vs2052020:~# netstat -alnp | grep :22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 29974/sshd
tcp 0 52 85.XX.XX.XX:22 89.56.XX.XX:4392 ESTABLISHED18071
yukarida oldugu gibi 22 trafigi dinliyor. Hatta 4392’den ssh portuna uzaktan baglanmisim bilene.
Simdide 1022’ye bakalim. Evet orasi bos..
vs2052020:~# netstat -alnp | grep
22
vs2052020:~#
vi /etc/ssh/sshd_config dosyasini acip
Port 22 yazili satirda gerekli degisikligi yaptikdan sonra ssh servisini yenden calistirmak kafi olucaktir.
/etc/init.d/sshd restart
bu arada ssh clientinizde standart 22 portunu 1022 yapmayi unutmayin.
Alernatif bir ssh güvenligi ise root kullanicisina ssh üzerinden
baglanmayi engelemek süreci ile yapilabilir. Söyleki bir sisteme DoS
atak ile ssh üzerinden baglanmaya calissaniz. Hangi kullanicin
sifresini kirmayi denerdiniz tabiyki her sistemde olan ve en güclü
kullanicinin yani root’un. Uzaktan erisimi sagliyabilmek icin ilk önce
sisteminize 2. bir kullanici acin. ssh’ya daima bu kullanici ile
baglanip sonra su – komutu ile root haklarini alin.
ssh’ya root olarak baglanmayi engelemek icin
vi /etc/ssh/sshd_config dosyasini acip
PermitRootLogin yes anahtarini no olarak degistirip
/etc/init.d/sshd restart
ssh hizmetini yeniden calistirmaniz kafi gelicektir.
Gelgelelim ftp hizmetimize. Proftp gibi ftp serverleri virtual ftp
kullanicisi kullanma sansi taniyor. Mümkünse ftp serverinizi virtual
ftp kullanicilari ile kullanin. Sistem kullanicilari ile ftp
kullanicilarini ayni ise birde root ftp üzerinden sisteme baglaniyorsa.
Hic hos olmayan durumlarla karsilasabilirsiniz.
Bunun ne kadar tehlikeli olabilecegini ngrep ile yapacagimiz ufak bir
testle göstereyim. ngrep ile port 21 yani ftp komut portunu dinliyelim..
karsilasabilirsiniz.
Bunun ne kadar tehlikeli olabilecegini ngrep ile yapacagimiz ufak bir
testle göstereyim. ngrep ile port 21 yani ftp komut portunu dinliyelim..
ngrep port 21
interface: venet0 (127.0.0.1/255.255.255.255)
filter: ip and ( port 21 )
#######
T 85.XX.XX.XX
-> 89.YY.YY.YY
480 [AP]
220 ProFTPD 1.2.10 Server (ProFTPD) [85.25.52.20]..
#
T 89.YY.YY.YY
480 -> 85.XX.XX.XX
[AP]
USER kara..
##
T 85.XX.XX.XX
-> 89.YY.YY.YY
480 [AP]
331 Password required for kara...
#
T 89.56.135.77
480 -> 85.XX.XX.XX
[AP]
PASS lahana..
#
T 85.XX.XX.XX
-> 89.YY.YY.YY
480 [AP]
230 User kara logged in...
Peki yukarida ne oldu. Sirasi ile
client servere baglandi
client kullanici ismini yani kara’yi servere bildirdi
server parola talep etti
client parolayi yani lahana kelimesini bildirdi..
ve kara adli kullanici sisteme baglandi
Görüldügü gibi tüm sifre ve kullanici transferi acik olarak isliyor.
Client ile server arasindaki trafigi dinliyebilen herhangi birisi
sisteminizin kullanici bilgileri ulasabilir. Dolayisi ile ftp ulasimi
olan sistem kullanicilarini sisteme baglanmalarini engelememiz fayda
var. Böylelikle ftp sifremiz bir sekilde ele gecirilmis olsa dahi
budurum sistemimizin güvenligi icin sorun ihtiva etmez.
Simdi sistemimizin kullanici bilgilerini barindirildigi /etc/passwd dosyasini aciyoruz
Her kullanici icin bir satir oldugunu ve bagzi kullanicilarn /bin/false
yada /bin/nologin gibi kabuklari kullandigini göreceksiniz. Bu
kullanicilar sisteme baglanma haklari olmayan kullanicilardir. Örnek
ftp kullanicimiz olan kara’nin da kabuk bilgisini asagida ki gibi
/bin/false degistirince sisteme ssh üzerinden baglanmasini engelemis
oluruz.