- 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.
- 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
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;"));
- 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 )
- Çöp karıştırma durumlarına karşı gizli verilerin çöpe atılmaması gerekmektedir.
- Omuz sörfüne karşı son kullanıcıyı bilinçlendirmek.
- Post-it lere gizli veriler yazılmamalıdır.
- 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