Vbulletin, popüler ve ücretli (lisans gerektiren), php tabanlı bir forum yazılımıdır. Günümüzde pekçok forum sitesi, esnek ve değiştirilebilir yapısı, şifrelenmemiş kodları, eklenti desteği nedeniyle Vbulletin'i tercih etmektedir. Böylesine tercih edilen ve kodları şifresiz olan yazılım için hergün yeni exploitler çıkmakta, yeni açıklar keşfedilmektedir. Eğer siz de bir Vbulletin kullanıcısıysanız aşağıdaki tedbirlerle kendinizi gelecek saldırılara karşı büyük oranda koruyabilirsiniz. Maddeler halinde vereceğimiz bu güvenlik ipuçlarının bir kısmı genel site güvenliğiyle ve linux sunucularla da ilgilidir.
Vbulletin güvenliğine giden yollar şöyledir:
1. Seçeceğiniz hosting firmasının en azından yazılımsal açıdan güvenilir olmasına dikkat ediniz. Bu bağlamda;
a) Forumunuzun yayınında temel olan sunucu yazılımları güncel mi? Örneğin Apache, PHP ve Mysql'un son ve stabil sürümleri mi kullanılıyor?
b) Sunucuda en azından yazılımsal bir firewall olmalıdır. Günümüzün popüler yazılımsal firewalleri arasında CSF ve APF gösterilebilir.
c) Sunucuda url, referer vb. tabanlı açıkların büyük bölümünü engelleyebilen mod_security eklentisi Apache'de bulunuyor mu? Ancak bu eklentinin tek başına bulunması yeterli değildir. Mod_security'e uygun kuralların (rules) tanımlanmış olması gerekir. Bu rulelerin güncel biçimlerine http://www.gotroot.com/tiki-index.php?page=mod_security+rules veya http://www.modsecurity.org/projects/rules/index.html adreslerinden ulaşılabilir.
d) Barınacağınız sunucu donanımsal açıdan yeterli mi?
2. Vbulletin superuser (erişim sınırlamasız kurucu admini) şifresini olabildiğince zor seçin. Örneğin 1234567 gibi bir şifre kesinlikle güvenli olmayacaktır. Bunun yerine 389_saxne23-a0 biçiminde 6 karakterden uzun sayı, harf karışımı şifreler daha güvenli olacaktır. Şifrelerinizi belli sürelerde yenileyin.
3. Superuser yetkisi vereceğiniz kişileri sınırlı tutun. Eğer gerek yoksa config.php dosyanızdan sadece kendinize bu yetkiyi tanıyın.
4. admincp ve modcp panellerinizin bulunduğu klasörleri ayrı ayrı şifreleyin. Cpanel'de bunu Şifre Korumalı Dizinler bölümünde yapabilirsiniz.
5. Dosyalarınızı sunucuya gönderirken, FTP yaparken mutlaka güvenli bir FTP istemcisi kullanın. Örneğin CuteFTP'nin yasadışı dağıtımları sitelerinize zararlı kodlar bırakabiliyor veya şifrelerinizi saldırganlara yollayabiliyor. Eğer ücretsiz, trial harici bir FTP programı arıyorsanız http://filezilla-project.org/ adresinden FileZilla'nın ücretsiz sürümünü indirip kullanabilirsiniz.
6. Vbulletin yönetici panelinden, Vbulletin seçeneklere gelin. Burada sansürlenen/yasaklı sözcükler bölümüne "<scrip redire locate "' '" "" <ifram <?p locatio <html </html <pre do= document." baştaki ve sondaki tırnaklar hariç olarak girin.
7. Hiçbir dosyanızın veya klasörününüzün iznini (chmodunu) 777 veya 666 yapmayın.
8. Lisanslı ve son sürüm Vbulletin kullanın. Güncellemeleri http://www.vbulletin.com resmi sitesinden sık sık takip edin.
9. Forumunuzda veya kullanıcı gruplarınızda HTML kullanım iznini açmayın.
10. Gereksiz yetki vermekten kaçının.
11. Gereksiz, güvenmediğiniz eklenti (plugin veya ürün) kurmayın. Eklentilerde bulunan açıklar da en az Vbulletin'de bulunan açıklar kadar saldırıya uğrayabiliyor.
12. Eğer PHP bilginiz varsa ve yukarıda sıralanandan daha çok güvenliğe gereksiniminiz bulunuyorsa şunları yapın;
PHP ile URL kontrolü freni: Özgün bir düşünce
Vbulletin'in header.php dosyasına Stiller-Temalar > Temaları Düzenle > header bölümünden ulaşın. Dosyanın üst kısmında url kontrolü yapabileceğiniz ve kendinize göre geliştirebileceğiniz aşağıdaki fikri kullanabilirsiniz. Bu kodu eğer SEF, url rewrite kullanıyorsanız kullanmayın veya kendinize göre değiştirin.
<?php
$frenle=$_SERVER['REQUEST_URI'];
//Aşağıdaki if deyimiyle eğer url satırı 55 karakterden uzunsa -Url tabanlı exploitlerin bir çoğu bu değerden uzundur.- diğer satırlara geçmeyi durduruyor. Eğer SEF, url rewrite yapmıyorsanız bu kod ile çoğu URL tabanlı saldırının önüne geçebilirsiniz.
if (strlen($frenle)>=65) {
exit;
}
// Aşağıdaki kod ise eğer url bölümünüzde istenmeyen bir karakter, bölüm varsa çalışmayı durdurmaktadır. Bu da henüz çıkmamış, duyrulmamış url tabanlı açıkların bile önüne geçmenizi sağlayabilir. $bnd1,2,3,4... alanlarını çoğaltarak kendinize göre zenginleştirebilirsiniz. Anlaşılır olması açısından değerler tek tek yazılmış ve döngüye sokulmuştur.
$frenle=strtolower($frenle);
$bnd1=strpos($frenle, "tool");
$bnd2=strpos($frenle, "locate");
$bnd3=strpos($frenle, "redire");
$bnd4=strpos($frenle, "location");
$bnd5=strpos($frenle, "script");
$bnd6=strpos($frenle, "html");
$bnd7=strpos($frenle, "include");
$bnd8=strpos($frenle, "insert");
$bnd9=strpos($frenle, "delete");
$bnd10=strpos($frenle, "exit");
$bnd11=strpos($frenle, '//');
$bnd12=strpos($frenle, 'where');
$bnd13=strpos($frenle, 'vb_login');
$bnd14=strpos($frenle, 'xss');
$bnd15=strpos($frenle, 'echo');
$bnd16=strpos($frenle, 'die');
$bnd17=strpos($frenle, 'command');
$bnd18=strpos($frenle, 'cookie');
$bnd19=strpos($frenle, 'cmd');
$bnd20=strpos($frenle, '_md5');
//yukarıda tanımladığımız 11 kural için bir ihlal yakalanmışsa ihlali yapan kişi karşısında echo ile belirtilmiş iletiyi görecek ve orada kalacaktır.
if (($bnd1== true) or ($bnd2== true) or ($bnd3== true) or ($bnd4== true) or ($bnd5== true) or ($bnd6== true) or ($bnd7== true) or ($bnd8== true) or ($bnd9== true) or ($bnd10== true)or ($bnd11== true)or ($bnd12== true)or ($bnd13== true)or ($bnd14== true)or ($bnd15== true)or ($bnd16== true)or ($bnd17== true)or ($bnd18== true) or ($bnd19== true) or ($bnd20== true)) {
echo 'Zararlı olabilecek Url durduruldu! Lütfen kullandığınız Urlye dikkat ediniz.';
exit; }
?>
Vbulletin forumunuz için alabileceğiniz güvenlik önlemleri bu 12 maddeyle sınırlı değildir. Ancak bu 12 maddenin gereklerini yerine getiren bir forumun hekleme saldırıları karşısında ayakta durabilme olasılığı oldukça yükselir.
İlk yayın yeri: http://bnd.com.tr/vbulletin-guvenligi_.php (özgündür)
Vbulletin güvenliğine giden yollar şöyledir:
1. Seçeceğiniz hosting firmasının en azından yazılımsal açıdan güvenilir olmasına dikkat ediniz. Bu bağlamda;
a) Forumunuzun yayınında temel olan sunucu yazılımları güncel mi? Örneğin Apache, PHP ve Mysql'un son ve stabil sürümleri mi kullanılıyor?
b) Sunucuda en azından yazılımsal bir firewall olmalıdır. Günümüzün popüler yazılımsal firewalleri arasında CSF ve APF gösterilebilir.
c) Sunucuda url, referer vb. tabanlı açıkların büyük bölümünü engelleyebilen mod_security eklentisi Apache'de bulunuyor mu? Ancak bu eklentinin tek başına bulunması yeterli değildir. Mod_security'e uygun kuralların (rules) tanımlanmış olması gerekir. Bu rulelerin güncel biçimlerine http://www.gotroot.com/tiki-index.php?page=mod_security+rules veya http://www.modsecurity.org/projects/rules/index.html adreslerinden ulaşılabilir.
d) Barınacağınız sunucu donanımsal açıdan yeterli mi?
2. Vbulletin superuser (erişim sınırlamasız kurucu admini) şifresini olabildiğince zor seçin. Örneğin 1234567 gibi bir şifre kesinlikle güvenli olmayacaktır. Bunun yerine 389_saxne23-a0 biçiminde 6 karakterden uzun sayı, harf karışımı şifreler daha güvenli olacaktır. Şifrelerinizi belli sürelerde yenileyin.
3. Superuser yetkisi vereceğiniz kişileri sınırlı tutun. Eğer gerek yoksa config.php dosyanızdan sadece kendinize bu yetkiyi tanıyın.
4. admincp ve modcp panellerinizin bulunduğu klasörleri ayrı ayrı şifreleyin. Cpanel'de bunu Şifre Korumalı Dizinler bölümünde yapabilirsiniz.
5. Dosyalarınızı sunucuya gönderirken, FTP yaparken mutlaka güvenli bir FTP istemcisi kullanın. Örneğin CuteFTP'nin yasadışı dağıtımları sitelerinize zararlı kodlar bırakabiliyor veya şifrelerinizi saldırganlara yollayabiliyor. Eğer ücretsiz, trial harici bir FTP programı arıyorsanız http://filezilla-project.org/ adresinden FileZilla'nın ücretsiz sürümünü indirip kullanabilirsiniz.
6. Vbulletin yönetici panelinden, Vbulletin seçeneklere gelin. Burada sansürlenen/yasaklı sözcükler bölümüne "<scrip redire locate "' '" "" <ifram <?p locatio <html </html <pre do= document." baştaki ve sondaki tırnaklar hariç olarak girin.
7. Hiçbir dosyanızın veya klasörününüzün iznini (chmodunu) 777 veya 666 yapmayın.
8. Lisanslı ve son sürüm Vbulletin kullanın. Güncellemeleri http://www.vbulletin.com resmi sitesinden sık sık takip edin.
9. Forumunuzda veya kullanıcı gruplarınızda HTML kullanım iznini açmayın.
10. Gereksiz yetki vermekten kaçının.
11. Gereksiz, güvenmediğiniz eklenti (plugin veya ürün) kurmayın. Eklentilerde bulunan açıklar da en az Vbulletin'de bulunan açıklar kadar saldırıya uğrayabiliyor.
12. Eğer PHP bilginiz varsa ve yukarıda sıralanandan daha çok güvenliğe gereksiniminiz bulunuyorsa şunları yapın;
PHP ile URL kontrolü freni: Özgün bir düşünce
Vbulletin'in header.php dosyasına Stiller-Temalar > Temaları Düzenle > header bölümünden ulaşın. Dosyanın üst kısmında url kontrolü yapabileceğiniz ve kendinize göre geliştirebileceğiniz aşağıdaki fikri kullanabilirsiniz. Bu kodu eğer SEF, url rewrite kullanıyorsanız kullanmayın veya kendinize göre değiştirin.
<?php
$frenle=$_SERVER['REQUEST_URI'];
//Aşağıdaki if deyimiyle eğer url satırı 55 karakterden uzunsa -Url tabanlı exploitlerin bir çoğu bu değerden uzundur.- diğer satırlara geçmeyi durduruyor. Eğer SEF, url rewrite yapmıyorsanız bu kod ile çoğu URL tabanlı saldırının önüne geçebilirsiniz.
if (strlen($frenle)>=65) {
exit;
}
// Aşağıdaki kod ise eğer url bölümünüzde istenmeyen bir karakter, bölüm varsa çalışmayı durdurmaktadır. Bu da henüz çıkmamış, duyrulmamış url tabanlı açıkların bile önüne geçmenizi sağlayabilir. $bnd1,2,3,4... alanlarını çoğaltarak kendinize göre zenginleştirebilirsiniz. Anlaşılır olması açısından değerler tek tek yazılmış ve döngüye sokulmuştur.
$frenle=strtolower($frenle);
$bnd1=strpos($frenle, "tool");
$bnd2=strpos($frenle, "locate");
$bnd3=strpos($frenle, "redire");
$bnd4=strpos($frenle, "location");
$bnd5=strpos($frenle, "script");
$bnd6=strpos($frenle, "html");
$bnd7=strpos($frenle, "include");
$bnd8=strpos($frenle, "insert");
$bnd9=strpos($frenle, "delete");
$bnd10=strpos($frenle, "exit");
$bnd11=strpos($frenle, '//');
$bnd12=strpos($frenle, 'where');
$bnd13=strpos($frenle, 'vb_login');
$bnd14=strpos($frenle, 'xss');
$bnd15=strpos($frenle, 'echo');
$bnd16=strpos($frenle, 'die');
$bnd17=strpos($frenle, 'command');
$bnd18=strpos($frenle, 'cookie');
$bnd19=strpos($frenle, 'cmd');
$bnd20=strpos($frenle, '_md5');
//yukarıda tanımladığımız 11 kural için bir ihlal yakalanmışsa ihlali yapan kişi karşısında echo ile belirtilmiş iletiyi görecek ve orada kalacaktır.
if (($bnd1== true) or ($bnd2== true) or ($bnd3== true) or ($bnd4== true) or ($bnd5== true) or ($bnd6== true) or ($bnd7== true) or ($bnd8== true) or ($bnd9== true) or ($bnd10== true)or ($bnd11== true)or ($bnd12== true)or ($bnd13== true)or ($bnd14== true)or ($bnd15== true)or ($bnd16== true)or ($bnd17== true)or ($bnd18== true) or ($bnd19== true) or ($bnd20== true)) {
echo 'Zararlı olabilecek Url durduruldu! Lütfen kullandığınız Urlye dikkat ediniz.';
exit; }
?>
Vbulletin forumunuz için alabileceğiniz güvenlik önlemleri bu 12 maddeyle sınırlı değildir. Ancak bu 12 maddenin gereklerini yerine getiren bir forumun hekleme saldırıları karşısında ayakta durabilme olasılığı oldukça yükselir.
İlk yayın yeri: http://bnd.com.tr/vbulletin-guvenligi_.php (özgündür)