Latest Publications

DoS Vulnerability BIND 9.x Defance

Aksam üstü , netsec listesinden email adresime gelen bir haber , henuz duymadigim BIND (Dns Sunucusu) de Dos acikligi meydana getirecek bir exploit’in yazildigindan bahsediyordu.

Bahsi gecen exploit bind sunucusuna update request paketleri gonderip ilgili servisin down-crash olmasini sagliyormus.

Bu durumda ilk olarak acikligi dogrulayan Bind’e ait siteyi ziyaret ettim,
https://www.isc.org/node/474

Malum Bind’in acilen  upgrade edilmesi ve yayinladiklari patchlerin derlenmesi gerektigini soylemisler.Bu sebeple kendi serverim da Dns servisini ( 53.Port ) IPtables ile sabit network’e actim.

Dolayisiıyla belirttigim network disinda Dns sunucuma gelen tum istekleri kapadim.Dısarıya reply etmeyen dns servisi ilgili paketlere cevap vermeyecektir.

Internette bu aciklik ile ilgili bilgi ararken , konuyla ilgili farkli guvenlik cozumleri ureten sayfalar da gordum.

Örneğin ;

http://it.slashdot.org/comments.pl?sid=1318247&cid=28862459

iptables -A INPUT -p udp --dport 53 -j DROP -m u32 --u32 '30>>27&0xF=5'

Yukarıda IPtables ile 53.porta gelen dns requesler droplanıyor. (Asagida buna benzer bir uygulama yaptim)

IPtables (Kernel packet filterd firewall) ile  asagidaki kural zincirini (Rule) girilerek BIND Servisi  ” 53.porttan tcp ve udp” istekler icin   simdilik daha safe duruma getirilebilir.

/sbin/iptables -A INPUT -p udp --dport 53 -s 217.*.187.*.74/255.255.255.0 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 53 -s 217.*.187.*.74/255.255.255.0 -j ACCEPT
/sbin/iptables -A INPUT -p udp --dport 53 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 53 -j DROP

İlgili IP dısındaki makinadan telnet ile istek gonderip Bind servisi cevap veriyor mu diye test edelim.


Ugur ENGIN

Centos IP Konfigürasyonu – Statik IP Ayarları

Linux Centos Statik IP konfigurasyonu asagidaki sekilde yapilandırılabilir.

1-Network ayarlarımız ıcın network-scripts bolumune girelim.

[root@ugurengin ~]# cd /etc/sysconfig/network-scripts
[root@ugurengin network-scripts]# ls -l
total 256
-rw-r--r-- 1 root root   254 Nov 13  2008 ifcfg-lo
-rw-r--r-- 1 root root   101 Jul 22 04:37 ifcfg-venet0
-rw-r--r-- 1 root root    73 Jul 22 04:37 ifcfg-venet0:0

ifcfg-venet0 network dosyasıni cogaltarak servera ekstra IP adresi ekleyebiliriz.Nitekim Plesk Panel de bu islem “IP Addresses“  kısmından  yapılabilir.

Makinanın temel network ayarlarini kontrol edelim once ,

[root@ugurengin network-scripts]# cat ifcfg-venet0:0
DEVICE=venet0:0
ONBOOT=yes
IPADDR=64.186.129.110
NETMASK=255.255.255.255

2. bir IP ‘yi eklemek icin ifcfg-venet0:0 dosyasini kopyaliyorum.

[root@ugurengin network-scripts]# cp /etc/sysconfig/network-scripts/ifcfg-venet0:0 /etc/sysconfig/network-scripts/ifcfg-venet0:1

Yeni ekleyecegim IP adresi icin dosyam > “ifcfg-venet0:1” bu dosyayı açıp yeni bir etrn interface giriyorum.

[root@ugurengin network-scripts]# vi ifcfg-venet0:1
DEVICE=venet0:1
ONBOOT=yes
IPADDR=64.186.129.111
NETMASK=255.255.255.255

Yukarıda subnetmask  hariç ,  yeni IP adresini IPADDR kısmının ekliyorum.
DEVICE=venet0:0 olan bolumu yeni ıp adresi ekleyecegim icin 1 olarak guncelledim.

Ayarlarımızı etkinlestirilmesi icin konsolda network’u restart edelim,

[root@ugurengin network-scripts]# service network restart
Shutting down interface venet0:                            [  OK  ]
Shutting down loopback interface:                      [  OK  ]
Bringing up loopback interface:                          [  OK  ]
Bringing up interface venet0:  SIOCADDRT: Network is unreachable
SIOCADDRT: Network is unreachable
SIOCADDRT: Network is unreachable                 [  OK  ]

Sisteme 1 Yeni IP adresi ekledik, eger sunucunuz da Plesk Panel varsa yonetici kısmında IP Address bolumune erisip ekledigimiz IP adresini gorebilirsiniz. Yeni eklenen IP adresimizi ister paylasimli (Share),  isterseniz sabit olarak(Statik) tek domaine atayabiliriz.

“ifcfg-venet0:x dosyası cogaltilarak birden fazla IP servera eklenilebilir.

Ornegini asagidaki resimde gorebilirsiniz.

Simdi bir kontrol edelim , eger ilgili islemleri hatasız yaptıysanız eklediginiz yeni IP’yi ifconfig parametresini calıştırdıgınız da  goruyor olacaksınız.

[root@ugurengin network-scripts]# ifconfig

venet0:1 Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00

inet addr:64.186.129.111 P-t-P:64.186.129.111

Bcast:64.186.129.111 Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1

Not : İnternet servis saglayicinizin, ekleyeceginiz  IP’leri sizin icin atamış olmasi gerekmektedir; yoksa eklenilen IP adresleri serverda tanımlansa da domaine atanılamaz.

Ugur Engin

WordPress Firewall Script-Plugin

WordPress Open Source alanında en basarili , devamlı kendini yenileyen ve harden (saglam) yapısı sebebi ile binlerce kisi hatta kitleler tarafindan tercih edilen bir blog sistemi.Pluginlerinde zaman zaman cikan web uygulama acikliklarini saymazsak ,default olarak bizlere sunulan simdiki WordPress  cok basarili ve guvenilir diyebilirim.

Ben daha spesifik cozum arayan arkadaslar icin kendi blog sistemimde de kullandigim URL filtreleyen, wordpress icin yazilmis bir güvenlik kutuphanesin den bahsedecegim.Scriptin arayuzu asagidaki gibidir.

Belirttigim script, wordpress de  exploit edilen web acikliklarindan buyuk oranda   korunmanizi  sagliyor, yani wordpress de kesfedilecek  (SQL Injection,Local Life İnclude) acikliklari bu plugin ile birlik de  sizin siteniz de execute edilemiyor.

Örnegin wordpress de kesfedilmesi muhtemel bir LFI acikligi olsun
http://ugurengin.com/blog/?s=../../../etc/passwd
veya sql injection da kullanilan union,select,group_concat gibi sorgular vb.

Bu plugin ile birlikde ilgili ataklar calismayacaktir.Mantiginan bahsedelim isterseniz;
Script kendi icerisinde  yukarıda parantez icinde belirttigim acikliklar da kullanilan sorgulari  loglayarak , ilgili acikliklarda kullanilan atak mekanizmasini pasif ediyor. Bunun yanında bir kac ozelligi daha sizler scripti aktif ettiginiz de goreceksiniz, en onemli olan kısımlara deginmeyi tercih ediyorum.Asagidaki resimde scriptin bir bolumunden fotosunu cektigim ekran goruntusunu gorebilirsiniz.

Sitenize atak yapan kisinin network bilgilerini (Sadece  IP adresi ) ve yaptigi “atak turunu” mail olarak adresinize gondertebilirsiniz.

Bunun yanında sitenize atak geldiginde ilgili script ile istediginiz özel bir hata sayfasina veya anasayfaya yonlendirmeniz de mumkun , tabi bu durumda saldırgan her adımda loglanmaya devem ediyor olacaktir.Asagidaki resim de ornegini gorebilirsiniz.

Not  : Sunucu’nun onunde   IDS veya web server icin derlenmis  bir uygulama  ( Apache icin Mod Security) yoksa, kesinlik scriptleriniz icin guvenlik kutuphanesi gelistirmenizi , kullanmanızı oneririm.

Kendi sitenize, guvenligini test etmek icib kimi deneme amaclı web ataklari yapmak isteyebilirsiniz , dolayisiyla sizin yaptiginiz web atak turleri de loglanip belirttiginiz email adresine gonderiliyor olacaktir, bu durumdan bir zaman sonra sıkılabilirsiniz.

Bunun icin de scriptin ara yonetiminde, asagidaki bolume,

belirtli bir ” IP” (IP adresinin Statik olmasi sart degilse de, dinamik IP  girmek bir o kadar mantıksız) adresi girerseniz ilgili ataklar dan belirttiginiz  network muaf olacaktir.  Belirttiginiz network dan gelen atak parametrelerin de   plugin pasif olacak , ayrica bu ataklar loglanmayacaktir.

Scripti, wordpress blogunuza kurmak icin asagidaki linkler araciligiyla ilgili plugin’i indirip wordpress blogunuzda /wp-content/plugins/ klasorune yükledikten sonra wp plugins bolumunde scripti aktif edebilir,ayarlar (Settings) altinda “Firewall” isimli  bolumden diÄŸer ayarlamalari yapabilirsiniz.

Scriptin indirme bilgileri.
wordpress-firewall.tar.gz
md5 Hash  : e36d51e96b796294890f6afaea1c1e74

Daha detayli bilgi >
http://www.seoegghead.com/software/wordpress-firewall.seo

Yazan : Ugur Engin
Iletisim  : mail(at)ugurengin(dat)com

ActiveX Nedir ? ActiveX Güvenliği

Yazan : Serhat Dündar

ActiveX, Microsoft’un Windows platformları için geliştirdiği bir nesne bileşeni modelidir (COM). Yazılım tabanlı olan ActiveX teknolojisi Internet Explorer eklentisi ve web sayfalarına iliştirilmiş ActiveX tabanlı uygulama olarak çalışır.

ActiveX teknolojisi geliştirilmeden önce Microsoft Windows’ta OLE (Object Linking and Embedding) ve COM (Component Object Model) olmak üzere iki standart mevcuttu. 1996 yılında sunulan ActiveX ile bu iki standart birleştirildi. (Wikipedia)

Bu tanım işin programlama kısmıyla alakalı. Biz ise bu yazımızda active-x’in ne olduğundan çok ActiveX ile neler yapılabileceğine bakacağız.

ActiveX denetimi bir kod parçasıdır, programdır. O halde ActiveX denetimleri ile bilgisayarınıza yapılabilecekleri biraz da olsa tahmin etmişsinizdir

Yazının devamını okuyunuz.

Activex nesnesi’nin islevini ve güvenlik boyutunu aciklayıcı bir sekilde anlatan arkadasa tesekkur ederiz.

MySQL (Load Data Local Infile) Disabled

Php uygulamalarinda db den cekilen string/integar degerlerin filtrelenmemesi uzerine SQL Injection acikliklari olusmaktadir.

Bu durum, atak yapan kisiye Lokal dosyalar uzerinde yetkisiz “dosya okuma” erisimi verebilir. Windows ve Linux da user’in yetkili oldugu tum klasorlere girilip istenilen dosyanın kaynak kodu okunabilir.
mysql fonksiyonlarini(load,data,infile,local) disable etmemiz ilgili problemi duzeltecektir.

Linux da veritabanimiz mysql ise asagidaki dosyayi bulup(my.cnf) , [mysqld] satırının altina asagidaki sql parametresini girelim.

set-variable=local-infile=0

[root@localdomain ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

Son hali asagidaki sekilde olmalidir.

[mysqld]
set-variable=local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

my.cnf dosyasi yukaridaki sekilde degistirdikten sonra kaydedip mysql servisini resetleyelim.
[root@localdomain ~]# service mysqld restart
Stopping MySQL:                                            [  OK  ]
Starting MySQL:

Sql injection acikligi olan bir script uzerinde deneme yapalim simdi.

/labs/news.php?id=-1+union+select+0,1,load_file(/etc/passwd/),3/*
Hexadecimal sayi sistemini(16 tabanlı) devreye alarak
fonksiyon icindeki string degeri hexleyerek ilgili sistemi
bypass etmeye calisalim.

/labs/news.php?id=-1+union+select+0,1,load_file(0x2F6574632F706173737764),3/*

Yukaridaki sonuclar bos deger(null) donecektir.

Not : Eger mysql chroot ortamında derlenmis ise ilgili bolum disindaki dosyalar okunamaz.

vhost.conf ile domain kullanicisi yetkileri.

Uzun zamandır kendi bloguma bir seyler yazamadım,  su sıralar kendi linux (vps) serverima gecmis bulunuyorum,  siteyi tasimak , mysql tr karakter problemleri derken gunun sonunda asagidaki konuya degineyim dedim.

Linux/Centos web server da, bazı domain kullanıcıları icin ozel yetkiler atamak ıstenilebilir.

Global php.ini ayarlari yerine sadece ilgili domain icin php ayarlari yapilabilir.
magic_quotes_gpc” fonksiyonunun sadece bu domain icin On veya Off olmasi gibi veya bu domain icin php de calistirilmasini istemediginiz fonksiyonlari “disable_functions” ile kisitlayabilirsiniz.Domainin istenilen yere session yazdirilmasi saglanailabilir.

Şimdi bir ornek yapalım;

İlgili domainin conf klasorune eriÅŸerek “httpd.include” dosyasının yanına  dahil edilecek vhost.conf dosyasını olusturmamiz gerekmektedir.

cd /var/www/vhosts/domain.com/conf/
ls -l
-rw-r–r– 1 root root  httpd.include

vi vhost.conf // vi editoru ile vhost.conf isimli bir dosya olusturdum.
“i” komutu ile dosyaya asagidaki fonk. yazacagiz.
Vi editoru linux’un muhtesem bir hayli prof. editorudur ;) Pico ve turevleri hikaye yani :D neyse konumuza donelim.


php_admin_flag safe_mode on
php_admin_flag disable_functions = exec

Yukarıdaki dosyayı :wq ile kaydedip cıkalım, bu ayarlarin etkili olabilmesi icin vhost.conf dosyasının httpd.include dosyasının en alt satırına include olması gerekmektedir. İste burada plesk’in buglarin dan biri karsimiza cikiyor, apache’yi resetlesek dahi bu dosya’yi server httpd.include dosyasında guncel goremeyecektir.

Gorebilmesi icin plesk panele login olup , alan adinizi secip ayarlar/setup kısmına erisip o bolum de hosting ayarlariyla oynamanız gerekmektedir.Ftp sifresini resetlemek(kullanıcılar) , yazılım yetkisi (admin) python ,perl aktif – pasif etmek gibi.Bu islemler den sonra bir kontrol edelim http.include dosyası vhost.conf dosyasını yazmıs mı diye?

[root@ugurengin conf]# cat httpd.include

</IfModule>
 </Directory>
 Include /var/www/vhosts/ugurengin.com/conf/vhost.conf
</VirtualHost>

Evet ayarlar etkin olmus gozukuyor.
Mesela yukarıda php sunucu fonksyionu olan exec kodunu o domain
icin disable ettik hemen test edelim;
Asagida php ile yazdigim ufak kodu ilgili
alan adi altinda test.php olarak kaydedip deneyelim:

http://domain.com/test.php?cmd=phpinfo();

<form action="" method="post">
<p>own
 <input type="text" name="cmd" size="30" />
<p>Execute   
<input type="submit" name="button" value="Submit">
</form>
<?
$c=$_POST['cmd'];
$write = exec($c);
echo $write;
?>

Önemli Not : Plesk normalde kullanıcıların diger domainlere gecmemesi icin her acilan yeni domaine open_basedir fonksiyonunu httpd.include dosyasına asagidaki  sekilde dahil etmektedir.

php_admin_value open_basedir "/var/www/vhosts/domain.com/httpdocs:/tmp"

Ugur Engin
mail(at)ugurengin(dot)com