Sızma Testi Rehberi

Uygulama Güvenliği ( Sürüm 0.1 )
  • Parolalar ve güvenlik sorularında kullanılan input type'ı  type = password olmalıdır.
  • Parolaların veya güvenlik sorularının gönderildiği bütün alanlarda HTTPS(SSL) kullanılmalıdır.
  • "Eski parolayı gir" alanını kaldırarak yeni parola girilmesine izin verilmemelidir .( Test için Tamper Data vs. kullan)
  • Form değişkenlerinde, Hidden(gizli) form değerlerinde, URL içinde < > $ % ^ ; & ' "  vb gibi beklenmedik karakterlere karşı uygulama test edilmelidir.
  • Hassas bilgiler cookie içerisinde saklanmamalıdır.
  • Hassas bilgileri Cache headerından korunmalıdır.(Cache-Control: no-cache, no-store)
  • Session bilgileri sunucu tarafında saklanmalıdır.
  • Hata mesajları kullanıcıya sunulmadan önce düzenlenmelidir.
  • Parola oluştururken dikkat edilecek hususlar: En az yedi karakter uzunluğundadır. Büyük/Küçük karakterler, sayılar ve özel karakterler kullanılmalıdır.
  • Debug fonksiyonları normal kullanıcılar tarafından ulaşılabilir olmamalıdır.
  • robots.txt dosyası sistem hakkında hassas bilgi içermemelidir.
  • crossdomain.xml sadece güvenilir bir domain tarafından kullanılmalıdır.
  • Access Control(Erişim Kontrolü) bütün sayfalar için kullanılmalıdır.
  • Access Control(Erişim Kontrolü) Rol tabanlı olmalıdır.
  • Access Control(Erişim Kontrolü), Authentication(Kimlik Belirleme) işleminden sonra gerçekleştirilmelidir.
  • Authentication(Kimlik Belirleme) işlemi sunucu tarafında yapılmalıdır.
  • Access Control(Erişim Kontrolü) ve Authentication(Kimlik Belirleme) obsecurity tabanlı olmamalıdır. 
  • Authentication(Kimlik Belirleme) "gizli url" tabanlı olmamalıdır. Kaynak : http://stackoverflow.com/questions/4833314/are-secret-urls-truly-secure/6784690#6784690
  • Access Control(Erişim Kontrolü), kullanıcı tanımlama bilgisi ile kullanılmamalıdır.
  • "Şifremi unuttum" alanı kullanılarak gönderilen parolaların kısıtlanması gerekmektedir. ( Örn : Gün içinde X kadar istek gibi... )
  • "Şifremi unuttum" alanı kullanılarak oluşturulan URL, kullanıcı parolası yenilendikten sonra kullanım dışı kalmalıdır.
  • Uygulama E-posta ile parola göndermemelidir. Onun yerine parolasını değiştirebileceği bir sıfırlama bağlantısı göndermelidir.
  • Şifremi unuttum kısmında gizli cevap yazılırken, cevap gizlenmelidir.
  • Kullanıcı bilgileri değiştirilirken "geçerli parola" kullanılmalıdır.
  • Kayıt alanları spam botlara karşı Captcha ile korunmalıdır.
  • Güvenlik soruları/cevapları veritabanında düz metin olarak bulundurmamalıdır.
  • Test kullanıcıları iptal edilmelidir.
  • Parolalar brute-force saldırısına karşı korunmalıdır. Parola testi için : https://howsecureismypassword.net/
  • Authentication(Kimlik Belirleme) sistemlerinde user enumeration engellenmelidir.
  • Hesap Kilitleme(DOS) saldırıları engellenmelidir.
  • Parolalar ve tokenlar tahmin edilebilir olmamalıdır.
  • Parolalar, Hash+Salt+Güçlendirilmiş parolalar olmalıdır.
  • Kullanıcı girdisi olarak kullanılan dosya ismi ve dosya yolu encode işleminden geçirilmelidir.
  • SQL sorguları kullanıcı girdisi olarak kullanılmadan önce encode işleminden geçirilmelidir.
  • XML dökümanları kullanıcı girdisi olarak kullanılmadan önce encode işleminden geçirilmelidir.
  • XPATH sorguları  kullanıcı girdisi olarak kullanılmadan önce encode işleminden geçirilmelidir.
  • HTML çıktıları encode işleminden geçirilmelidir.
  • LDAP komutları kullanıcı girdisi olarak kullanılmadan önce encode işleminden geçirilmelidir.
  • HTTP headerları  kullanıcı girdisi olarak kullanılmadan önce encode işleminden geçirilmelidir.
  • XSL(T) kullanıcı girdisi/çıktısı olarak kullanılmadan önce encode işleminden geçirilmelidir.
  • SSI komutları kullanıcı girdisi olarak kullanılmadan önce encode işleminden geçirilmelidir.
  • Sistem komutları  kullanıcı girdisi olarak kullanılmadan önce encode işleminden geçirilmelidir.
  • Eval fonksiyonu kullanıcı girdisi olarak kullanılmadan önce encode işleminden geçirilmelidir.
  • Regex ifadeleri kullanıcı girdisi olarak kullanılmadan önce encode işleminden geçirilmelidir.
  • Güvenilmeyen XML External Entities kaynakları kullanılmamalıdır.
  • Güvenilmeyen XML External DTDs kaynakları kullanılmamlıdır.
  • Yüklenen dosyalar ulaşabilir veya çalıştırabilir olmamalıdır.
  • Yüklenen dosyalar üzerinde dosya limiti uygulanmalıdır.
  • Yüklenen dosyalar kök dizin dışında saklanmalıdır.
  • E-mail fonksiyonları spam servislerine karşı güçlendirmelidir.
  • Oturum kimlikleri için yeterli entropi uygulanmalıdır.
  • Session Cookie bilgisi HTTPS üzerinden geçmelidir.
  • Session Cookie bilgisi için Secure Flag tanımlanmalıdır.
  • Session Cookie bilgisi için HttpOnly Flag tanımlanmalıdır.
  • Session veri değişimleri POST methodu kullanılarak yapılmalıdır.
  • Oturum süresi belirlenmelidir. Süre bitiminde otomatik olarak oturum sonlanmalıdır.
  • Oturum bilgisini taşıyan token her post istediği için yeniden tanımlanmalıdır.
  • Anti-clickjacking tedbirleri uygulanmalıdır.
  • Logout fonksiyonu çalıştırıldığında oturum bilgisi mutlaka sonlandırılmalıdır.
  • Login fonksiyonunda mutlaka yeni bir oturum bilgisi üretilmelidir.
  • Parolaları veritabanında saklarken MD5 veya SHA1 yerine Bcrypt kullanmalısınız. https://github.com/ircmaxell/PHP-PasswordLib gibi standart kütüphaneler de sizin için güvenli olabilir.
  • Captcha görselleri download'a açık olmamalıdır.
  • Captcha, free-ocr.com vb gibi sitelerde deşifre edilmemelidir.
  • Sayfa yenilendiğinde yeni bir Captcha görseli oluşturmalıdır.
  • Web uygulamalarınız için Google reCaptcha veya http://www.nucaptcha.com/ hizmetini kullanmanız önerilir.
Wordpress Güvenliği ( Sürüm 0.1 )
  • Bir takım HTML etiketlerini kapatın. wp-config.php dosyasının en üstüne define( 'DISALLOW_UNFILTERED_HTML', true ); ekleyiniz.
  • Yeni kurulan siteniz saldırgan tarafından bulunmasın diye bütün default postları ve yorumları kaldırmalısınız. Düzenlenecek dosya :  wp-includes/general-template.php
function the_generator( $type ) {
echo apply_filters('the_generator', get_the_generator($type), $type) . "\n";
}
Güvenlik önleminden sonra:
function the_generator( $type ) {
#echo apply_filters('the_generator', get_the_generator($type), $type) . "\n";
}
  • Wordpress kurulumlarında veya güncellenmelerinde wp-admin/install.php ve wp-admin/upgrade.php dosyalarını silmeniz gerekmektedir.
  • Klasör indexlemeyi engellemek için .htaccess dosyasına "Options --indexes" ifadesini yerleştiriniz.
  • Güvenli bir yönetici paneli için http://www.yubico.com'u kullanabilirsiniz.
  • Zararlı yazılım kontrolleri içib http://sitecheck.sucuri.net/scanner/ adresini kullanabilirsiniz.
  • WP Secret Key'inizi değiştirmeniz gerekmektedir. https://api.wordpress.org/secret-key/1.1/salt/ adresinden rasgele bir anahtar alarak wp-config.php dosyasına yazınız.
  • "wp_" olan default veritabanı prefix'ini değiştiriniz.
  • wp-config.php dosyanızı .htaccess ile korumalısınız. (.htaccess içine aşağıdaki kodu yerleştiriniz.)
<Files wp-config.php>
order allow,deny
deny from all
</Files>
  • .htaccess dosyasını korumalısınız. (.htaccess içine aşağıdaki kodu yerleştiriniz.)
<Files .htaccess>
order allow,deny
deny from all
</Files>
  • Wordpress sürüm bilgisini saklayınız. http://www.wpbeginner.com/wp-tutorials/the-right-way-to-remove-wordpress-version-number/
  • Login hata mesajlarını saklayınız. (function.php dosyasına ekleyiniz.)
add_filter('login_errors',create_function('$a', "return null;"));

Sunucu Tasarımı ve Uygulaması ( Sürüm 0.1 )
  • GCC stack koruması açık durumda olmalıdır.
  • Kernel datası sadece okunabilir modda olması gerekmektedir.
  • /dev/mem erişimi kısıtlanmalıdır.
  • /dev/kmem erişimi kısıtlanmalıdır.
  • grsecurity / PaX aktif durumda olmalıdır. (http://grsecurity.net/)
  • Finger, ruser gibi servislerden kullanıcı bilgisi alınabildiği için devre dışı bırakılmalıdır.
  • Telnet, FTP yerine SSH, SFTP gibi güvenli protokoller kullanılmalıdır.
  • /etc/hosts.equiv ve home dizininde bulunan .rhosts dosyalarına erişim kontrol edilmelidir. Çünkü bu dosyalara erişim sağlayan tümüne erişim sağlayabilir.
  • /etc, /bin, /sbin, /dev, /user, /var dizinleri altındaki dosyalara verilen yazma izinleri kontrol edilmelidir.
  • Parola politikası geliştirin (Parolanın minimum kaç karakter olacağı, Küçük/Büyük harf duyarlı parola, Kullanıcı giriş yaptıktan sonraki bekleme süresi, Kullanıcının parolasını değiştirme süresi vb gibi... )
  • Htop/top kullanarak sistemin işlemci,hafıza durumunu devamlı izlemeniz gerekmektedir.
  • netstat -a ile sistemdeki aktif portları kontrol etmelisiniz.
  • SSH servisine root yetkili bir kullanıcı erişmemelidir. Sisteme erişebilecek bir grup oluşturabilir.
  • SSH için varsayılan port yerine(22) farklı bir port kullanmalısınız.
  • Sistem üzerinde SSHv2 kullanmanız gerekmektedir. Örnek konfigürasyon:
PermitRootLogin=no
AllowGroups  admin admin
RhostsAuthentication no
PasswordAuthentication yes
PermitEmptyPasswords no
Port 222
Protocol 2

  • Logları temizlemek(Saldırgan Persfektifi) :
rm -rf /tmp/logs 2> /dev/null
rm -rf /root/.ksh_history 2> /dev/null
rm -rf /root/.bash_history 2> /dev/null
rm -rf /root/.bash_logout 2> /dev/null
rm -rf /usr/local/apache/logs 2> /dev/null
rm -rf /usr/local/apache/log 2> /dev/null
rm -rf /var/apache/logs 2> /dev/null
rm -rf /var/apache/log 2> /dev/null
rm -rf /var/run/utmp 2> /dev/null
rm -rf /var/logs 2> /dev/null
rm -rf /var/log 2> /dev/null
rm -rf /var/adm 2> /dev/null
rm -rf /etc/wtmp 2> /dev/null
rm -rf /etc/utmp 2> /dev/null


Sosyal Mühendislik ( Sürüm 0.1 )

  1. Çöp karıştırma durumlarına karşı gizli verilerin çöpe atılmaması gerekmektedir.
  2. Omuz sörfüne karşı son kullanıcıyı bilinçlendirmek.
  3. Post-it lere gizli veriler yazılmamalıdır.
  4. Kullanım kılavuzları herkesin görebileceği yerlere bırakılmamalıdır.



Sızma Testi Rehberine destek vermek için:
Konu : Sızma Testi Rehberi
E-posta : evren[at]superbug[dot]co

Kaynaklar :
En yakın zamanda eklenecektir.

0 yorum:

Yorum Gönder