Checklist for Web Application Pentesting
Bugünden itibaren bir web uygulama sızma testinde temel olarak hangi testlerin yapılması gerektiğini konu edinen bir yazı dizisi oluşturmayı planlıyorum. Plana sadık kalabilirsem bu yazı dizisi, şu yazılardan oluşacak:
- Application Information
- Information Gathering & Configuration Management
- Authentication
- Session Management
- Authorization
- Data Validation
- Denial of Service
1. Application Information
- Uygulamanın IP adresi belirlenir.
- Uygulamanın üzerinde çalıştığı uygulama sunucu belirlenir.
- Uygulamada var olan roller ve kayıtlı kullanıcı bilgileri toplanır (Blackbox bir test değilse bu bilgi uygulama sahibinden alınır).
- Uygulama sunucuyu barındıran işletim sistemi tespit edilir.
- Uygulama yazılım dili belirlenir
- Ayrıntılı site haritası çıkarılır (crawling).
- Uygulama girdi (input) alanları belirlenir.
- Uygulamanın çalıştığı ana çatılar belirlenir (Joomla, LifeRay vb.).
- Web servisleri kullanılıp kullanılmadığı tespit edilir.
2. Information Gathering & Configuration Management
2.1. Minimum Bilgi Prensibi Testleri
- Uygulama özellikle uyarı mesajlarında minimum bilgi vermelidir. Örneğin: “Şifreniz yanlış” ya da “Şifreniz 6 karakter olmalıdır” yerine “Şifreniz ya da Kullanıcı İsminiz yanlış” kullanılmalıdır.
- Uyarı mesajlarının kodları da değerlendirilmelidir. Aynı mesaj farklı kodlarla veriliyor olabilir. Örneğin:
- http://www.foo.com/err.jsp?User=baduser&Error=0
- http://www.foo.com/err.jsp?User=gooduser&Error=2
- Sayfa içindeki gizli alanlar dikkatle incelenmelidir; hassas bilgi içeriyor olabilir.
- Talebe dönen yanıtlarda (response) uygulamanın yazıldığı teknoloji hakkında bilgi olup olmadığı kontrol edilmelidir. Örneğin:
- X-Powered-By: ASP.NET
- X-AspNet-Version: 2.0.50727
2.2. Yardım Sayfaları
- Uygulamanın detayları ile ilgili bilgi verebileceğinden yardım sayfaları sadece kayıtlı kullanıcılara gösterilmelidir.
2.3. SSL Kullanımı
- Verinin internet tarayıcısı ile sunucu arasında şifrelenmesini sağlamak için mutlaka SSL kullanılmalıdır. Diğer taraftan SSL hizmeti veriliyor ise kesinlikle aynı uygulama (uygulama bölümü ) için SSLsiz hizmet sunulmamalıdır. Bu özellikle SSLStrip gibi HTTPS bağlantıları HTTP olarak yansıtan araya girme saldırını mümkün kılan ürünlerin kullanılabilmesi nedeniyle önemlidir.
- Sunucu sertifikasının onaylanmış bir sertifika makamı tarafından verilmiş olması ve tarayıcının da bu sertifikayı tanıması zaruridir, kontrol edilmelidir.
- SSL3.1 ve TLS1.1 altı protokoller, belirlenmiş açıklıkları olduğundan kullanılmıyor olmalıdır.
2.4. HTML Açıklama Satırları
- HTML kodunun içine gömülmüş ve daha sonra unutulmuş yorumlar, kullanıcı bilgisi ya da sistem sürümü ile ilgili bilgiler içerebilirler. Bu nedenle varlıkları kontrol edilmelidir.
2.5. Sunucu Bilgisinin Kısıtlanması
- Özellikle hata sayfalarında sunucu bilgisi (özellikle 400 ve 500'lü HTTP response kodları) kullanıcıya gösterilmektedir. Minimum bilgi prensibi gereğince, bu bilginin saklanması gerekmektedir.
- Ayrıca yanıtta (response) "Server" başlığı bulunup bulunmadığı kontrol edilir.
2.6. Hata Sayfalarının Gösterimi
- Hata sayfaları 400’lü kodlar yerine 200’lü kodlarla tarayıcıya döndürülmeli ve mümkünse standart bir uygulama sayfasının (ana sayfa) içinde görülebilir bir formatlama ile gösterilmelidir.
2.7. Dosya Uzantılarının Test Edilmesi
- Sitenin hangi tür bir yazılım altyapısına sahip olduğu konusunda bilgi verebilir. Özellikle sayfa kaynağı görüntülenip, ilgili uzantılara erişilmeye çalışılabilir. Diğer taraftan, JSP uzantılı bir uygulama PHP sayfalarını da yorumlayabiliyor olabilir. Dolayısıyla, benzeri bir test bu kapsamda da gerçekleştirilebilir.
2.8. Yedeklenmiş yada Unutulmuş Dosyalar
- Uygulama geliştiricileri betik ya da sayfaları güncellerken, ilgili modüllerin yedeklerini almış olabilir. Örneğin Cp_config.jsp config.jsp.backup gibi. Bu tür sayfalar henüz geliştirme aşamasında ya da test amaçlı oluşturulduğu için ciddi açıklıklar barındırabilir. Tespit edilmeleri önemlidir.
2.9. Yönetici Arayüzü Erişim Testi
- Test edilen site üzerindeki
- http://sirket.com.tr/admin
- http://sirket.com.tr/yonetici
- http://sirket.com.tr/manager gibi sadece yetkili kullanıcılara açık olması gereken bağlantılar tespit edilmeye çalışılır. Tespit edilmesi durumunda ise gerekli taramalar yapılır.
- Yönetici arayüzleri uygulama sunucuya göre değişebilir ya da web sunucudan farklı bir portta çalışabilir. Örneğin JBOSS JMX-CONSOLE ya da Glassfish Admin arayüzü gibi.
2.10. Desteklenen HTTP metotları ve XST Açıklığı
- HTTP servisi sunucular farklı HTTP metotlarını desteklemekte ve varsayılan kurulumda bu metotların bir kısmı aktiftir. OPTIONS sorgusu ile hangi metotların desteklendiği bilgisine erişilebilir. OPTIONS sorgusunun kısıtlanması durumunda tarama araçları kullanılarak gerekli bilgiye ulaşmak mümkündür.
2.11. Bilinen Açıklıklar
- Uygulamanın üzerinde çalıştığı uygulama sunucu (hangi versiyon ise), yazıldığı programlama dili, mimarisinde kullanılan framework'ler ve teknolojiler için açıklanmış açıklıklar internetten taranmalı ve bu açıklıklar için gerekli önlemlerin alınıp alınmadığı mutlaka kontrol edilmelidir.
2.12. E-posta Adresleri Tespiti
- Web sayfalarında kaba bir şekilde tutulmuş e-posta adreslerinin varlığı, bu posta adreslerin otomatik tarama araçlarıyla yakalanmasına ve bu adreslerin "spam" e-postaların hedefi haline gelmesine sebebiyet verebilir. Bu tür e-posta adresleri sistemde otomatik araçlar tarafından yakalanamayacak şekilde tutulmalıdırlar. Örneğin:
- abc at hotmail nokta com
Bir sonraki yazı, kimlik denetimi (authentication) konulu test maddeleri üzerine olacak.
Hiç yorum yok:
Yorum Gönder