Selamlar TURKHACKTEAM Ailesi Yeni bir Konu ile Sizlerleyim
Bu konumda Web uygulama Güvenliğini Ele Alacağım
Web Uygulama Güvenliği Nedir?
Kullanıcıların bankacılık ve e-ticaret gibi özel bilgilerini işleyen
web uygulamaların en iyi bir şekilde korunması çok önemlidir. Aksi takdirde kullanıcıların özel bilgileri hacklenebilir.
Web uygulamalarının korunması için güvenlik testlerinin yapılması çok önemlidir.
Kurumların internet üzerinde bulunan açıklıkları ve zafiyetleri saldırgan kişilerin iç ağa sızmasına imkan sağlayabilir.
Web sunucu uygulamalarının yapısı oldukça karışıktır.
Ayrıca veri tabanı uygulamalarının kod enjeksiyon saldırılarına potansiyel bir şekilde açıktır
Ve güvenliği göz önünde tutarak yazılmayan kodlar kurumu bir takım saldırılara uğratabilir.
Özellikle kullanıcıdan özel bilgi girdisi alıp veri tabanıyla etkileşime sokan uygulamalar web ataklarını oldukça kolaylaştırmaktadır.
Web uygulama zafiyetlerinin ortaya çıkmasında ağ katmanında daha çok uygulama katmanında bulunan HTTP protokolündeki
bileşenler etkili olmaktadır.
Web uygulamalarının güvenlik için dizayn edilmesi gereken önemli bileşenleri
1-Kullanıcı Girdilerinin Kontrolü:
Kötü amaçlı olan bir kullanıcının normal veri yerine uygulamanın zafiyetlerini istismar
etmek için bir komutu yada kod parçasını enjekte edip siteye beklenmeyen bir girdi gönderebilmesi gibi bir nedenle
her zaman girdi alanlarına ayrıntılı güvenlik denetlemesi yapılması gerekmektedir.
Kütü niyetli istekleri filtrelemek için beyaz liste ve kara liste (white listing , black listing ) yöntemi kullanılmaktadır.
Kullanıcıdan gelen form bilgilerinin denetlenmesi için geliştirilen ve kötü niyetli istekleri reddetmek için kullanılan
kara liste yönteminde gelebilecek zararlı isteklerin sayısının çok fazla olması olası kötü isteklerden oluşan bu listenin
devamlı güncellenmesi işlemini zorlaştırmaktadır. ayrıca kara listenin oluşturulması sırasında
olası bütün durumlar hesaba katılmalı ve mümkün olduğu kadar çok sayıda kısıtlanma uygulanmaktadır.
Beyaz liste yöntemi ise kullanıcıdan alınan bilgilerin kabul edilebilen bir bilgi ile sınırlandırılmasına denir.
Beyaz listede girilen değer URL veya tarih gibi (gg/aa/yyyy) gibi belirli bir formatta olmasıdır.
Bu yöntem ile girilen bilgilerin belirlenen formata uymayınca sistem tarafından kabul edilmez.
Diğer bir yöntem ise girdileri sanitize etme yöntemidir. bu yöntemde beklenmeyen girdileri reddetmek yerine
kaldırılmış bir kara liste oluşturulur. Bu uygulama girdinin içine eklenmiş mesela <script> gibi kötü amaç ile kullanılabilecek
etiketlerin veya zararlı kod parçalarının tespit edilip kaldırılması gibi.
Güvenlik için öneriler
- uygulanabildiği bir durumda beyaz liste oluşturulması
- Beyaz listenin oluşturulamadığı durumlarda kara liste oluşturmak
- Mümkün olduğu kadar kısıtlama uygulamak
- Olabilecek saldırılar için alarm oluşturmak
- Girdiyi kullanıcıya tekrar yansıtmamak
- Girdilerin arka planda çalışan önemli servislere ulaşmamasını sağlamak
2- HTML Çıktı Kodlama-Output Encoding
Web uygulamaları sadece kullanıcıdan gelen verileri işlemez. Veri tabanından ve başka servislerden gelen
verileri de işlemektedir. Bu dataları filtrelemek de zordur çünkü tek tırnak (') ve küçüktür(<) gibi karakterler içermektedir.
Bu noktada uygulanması gereken çözüm çıktı kodlama (output encoding) kullanmaktır.
Çıktı kodlama kısaca sistem ve hata yakalama mekanizmaları ile ilgili olan önemli bilgileri sızdırabilecek olan
hata mesajlarının kullanıcıya yansıtılmaması ve bu sayede verilerin saldırı için kullanılmasını önlemek
amacıyla son formata dönüştürülme işlemidir.
Güvenlik İçin Öneriler
- Uygulamanın ve sistem bilgilerini kullanıcıya yansıtabilecek olan tüm sonuç verileri için
uygun bir kodlayıcı ile çıktı kodlama uygulanması
- Web uygulama geliştirme editöründe bulunan çıktı kodlama özelliklerini kullanmak
- Veriyi işlenmemiş şekilde saklamak ve derleme (rendering) aşamasında kodlamak
- Kodlamayı güvenli olmayan platformları ve JavaScript işlevlerini kullanmamak
3- Veri Tabanı Güvenliği
Veri tabanlarını siber saldırılardan korumak çok çok önemlidir. çünkü veri tabanları kolayca kurtarılamayan
bir yapıya sahiptirler ve çok önemli hassas bilgileri barındırırlar.
Veri tabanlarının güvenliğini korumak için uygulanan yöntemlerin başında parameter binding (Türkçe meali parametre bağlama)
seçeneği gelmektedir. Parametre bağlama çalıştırılacak veri tabanı sorgusu ile veriler kodlama(encoding) ve kaçış(escape)
geçirilip birbirinden ayrılmasını sağlayan bir yöntemdir.
SQL sorgusu eğer ki birleştirme (concenation) yada formatlama yöntemlerini kullanıyorsa üretilmiş olan sonucun
sorgusunun kullanıcıdan alınmış olan girdi ile oluşturulmamalıdır.
Güvenlik için öneriler
- Kullanıcının girmiş olduğu bilgileri kullanarak SQL sorgusu oluşturmaktan kaçınmak
- Parametrelerle oluşturulmuş sorguları ve kaydedilmiş prosesleri bağlamak(Binding)
- Bağlama(Binding) için daha güvenli olan gömülü(built-in) fonksiyonları kullanmak
4- Hareket Halindeki Veriyi Korumak
Bilgi güvenliğinin temel kavramlarından olan verinin bütünlüğünün ve gizliliğin korunmasının ilkeleri
ağ trafiğinden geçen verilerin ele geçirilmesini engelleyen mekanizmaları da içermektedir.
İstemci ve sunucudan geçen verilerin dinlenmesini , değiştirilmesini ve hassas bilgilerin çalınmasını önleyemeyen HTTP
protokolü
veya tasarımında açık ve zafiyet barındıran telnet gibi diğer bağlantı protokolleri
HTTPS, SSL ve TSL
gibi güçlü şifreleme
algoritmalarını destekleyen protokollerin dizayn edilmesi ihtiyacını doğurmuştur.
Güvenlik için öneriler
- HTTP protokolünü tüm iletişimler için kullanmak
- Normal web tarayıcılarına güvenilmek zorunda kalınca sertifika makamlarından sertifika alınarak hizmet vermek
- Gizli anahtarın korunması
- Güvenli olan HTTPS konfigürasyonu için bir yapılandırma aracı bulmak
- Cookie'ler için secure flag ayarlanması
- Hassas ve önemli bilgileri URL de sızdırmamak
- HTTPS si ayarladıktan sunucu yapılandırmasını denetlemek ve bu denetimi her ay tekrarlamak
- Sitelere kendisiyle iletişime geçen tarayıcıların yalnızca HTTPS üzerinden haberleşmesini şart koşan
HSTS(HTTP Strict Transport Security) protokolünü kullanmak
5- Parola Güvenliği
Geleneksel bir yöntem olan periyodik şifre kuralıda ki hedef saldırganın parolasını ele geçirdiği
hesabın bir süre sonra kilitlenmesidir. Ancak çoğu kişiler yeni parolayı belirlerken eski parolada ki harflerin sadece
bazılarını değiştirdiğinde eski parolayı ele geçiren bir hackerın yeni parolayı bulması da hiç zor olmaz.
Periyodik şifre değişimi (kullanıcının bir kaç ayda bir şifre yenilemesine denir.
şifrenin güvenliğini güçlendirdiğinden daha çok kötü bir yönde etkilediği uzun süredir beri tartışılmaktadır.
Ayrıca NIST yayınladığı bir raporda periyodik şifre değişiminin kalkmasını önermektedir.
Harflerin, numaraların ve özel kombinasyonların kullanılması ile oluşturulan şifreler artık bir güvenlik tedbiri olarak
görülmemektedir ayrıca kullanıcıları şart olarak koşulmasını da yanlış olarak bulunmaktadır.
Bu düşünceye gerekçe olarak kullanıcının tahmini zor şifreler koymasını engellediğidir.
Yeni oluşturulan parolaların kontrol edilmesi de yeni bir yöntem olarak görülmektedir.
bu sayede kullanıcıların "12345678" veya "şifre" gibi parolalar seçmesi önlenir.
Güvenlik için öneriler
- Tüm parolaları özet alma(hashing) ve salt işleminden geçirmek
- Güvenli olarak tanımlanan bir algoritmayı kullanmak
- Parola saklama mekanizmasını yapılandırılabilir şekilde yapmak
- Harici sistem ve servisler için parola saklamaktan kaçınmak
- Parola uzunluğunu küçük boyutta seçmemek
Buraya kadar okuduysanız teşekkürler
bir daha ki konumda görüşmek üzere...
Bu konumda Web uygulama Güvenliğini Ele Alacağım
Web Uygulama Güvenliği Nedir?
Kullanıcıların bankacılık ve e-ticaret gibi özel bilgilerini işleyen
web uygulamaların en iyi bir şekilde korunması çok önemlidir. Aksi takdirde kullanıcıların özel bilgileri hacklenebilir.
Web uygulamalarının korunması için güvenlik testlerinin yapılması çok önemlidir.
Kurumların internet üzerinde bulunan açıklıkları ve zafiyetleri saldırgan kişilerin iç ağa sızmasına imkan sağlayabilir.
Web sunucu uygulamalarının yapısı oldukça karışıktır.
Ayrıca veri tabanı uygulamalarının kod enjeksiyon saldırılarına potansiyel bir şekilde açıktır
Ve güvenliği göz önünde tutarak yazılmayan kodlar kurumu bir takım saldırılara uğratabilir.
Özellikle kullanıcıdan özel bilgi girdisi alıp veri tabanıyla etkileşime sokan uygulamalar web ataklarını oldukça kolaylaştırmaktadır.
Web uygulama zafiyetlerinin ortaya çıkmasında ağ katmanında daha çok uygulama katmanında bulunan HTTP protokolündeki
bileşenler etkili olmaktadır.
Web uygulamalarının güvenlik için dizayn edilmesi gereken önemli bileşenleri
1-Kullanıcı Girdilerinin Kontrolü:
Kötü amaçlı olan bir kullanıcının normal veri yerine uygulamanın zafiyetlerini istismar
etmek için bir komutu yada kod parçasını enjekte edip siteye beklenmeyen bir girdi gönderebilmesi gibi bir nedenle
her zaman girdi alanlarına ayrıntılı güvenlik denetlemesi yapılması gerekmektedir.
Kütü niyetli istekleri filtrelemek için beyaz liste ve kara liste (white listing , black listing ) yöntemi kullanılmaktadır.
Kullanıcıdan gelen form bilgilerinin denetlenmesi için geliştirilen ve kötü niyetli istekleri reddetmek için kullanılan
kara liste yönteminde gelebilecek zararlı isteklerin sayısının çok fazla olması olası kötü isteklerden oluşan bu listenin
devamlı güncellenmesi işlemini zorlaştırmaktadır. ayrıca kara listenin oluşturulması sırasında
olası bütün durumlar hesaba katılmalı ve mümkün olduğu kadar çok sayıda kısıtlanma uygulanmaktadır.
Beyaz liste yöntemi ise kullanıcıdan alınan bilgilerin kabul edilebilen bir bilgi ile sınırlandırılmasına denir.
Beyaz listede girilen değer URL veya tarih gibi (gg/aa/yyyy) gibi belirli bir formatta olmasıdır.
Bu yöntem ile girilen bilgilerin belirlenen formata uymayınca sistem tarafından kabul edilmez.
Diğer bir yöntem ise girdileri sanitize etme yöntemidir. bu yöntemde beklenmeyen girdileri reddetmek yerine
kaldırılmış bir kara liste oluşturulur. Bu uygulama girdinin içine eklenmiş mesela <script> gibi kötü amaç ile kullanılabilecek
etiketlerin veya zararlı kod parçalarının tespit edilip kaldırılması gibi.
Güvenlik için öneriler
- uygulanabildiği bir durumda beyaz liste oluşturulması
- Beyaz listenin oluşturulamadığı durumlarda kara liste oluşturmak
- Mümkün olduğu kadar kısıtlama uygulamak
- Olabilecek saldırılar için alarm oluşturmak
- Girdiyi kullanıcıya tekrar yansıtmamak
- Girdilerin arka planda çalışan önemli servislere ulaşmamasını sağlamak
2- HTML Çıktı Kodlama-Output Encoding
Web uygulamaları sadece kullanıcıdan gelen verileri işlemez. Veri tabanından ve başka servislerden gelen
verileri de işlemektedir. Bu dataları filtrelemek de zordur çünkü tek tırnak (') ve küçüktür(<) gibi karakterler içermektedir.
Bu noktada uygulanması gereken çözüm çıktı kodlama (output encoding) kullanmaktır.
Çıktı kodlama kısaca sistem ve hata yakalama mekanizmaları ile ilgili olan önemli bilgileri sızdırabilecek olan
hata mesajlarının kullanıcıya yansıtılmaması ve bu sayede verilerin saldırı için kullanılmasını önlemek
amacıyla son formata dönüştürülme işlemidir.
Güvenlik İçin Öneriler
- Uygulamanın ve sistem bilgilerini kullanıcıya yansıtabilecek olan tüm sonuç verileri için
uygun bir kodlayıcı ile çıktı kodlama uygulanması
- Web uygulama geliştirme editöründe bulunan çıktı kodlama özelliklerini kullanmak
- Veriyi işlenmemiş şekilde saklamak ve derleme (rendering) aşamasında kodlamak
- Kodlamayı güvenli olmayan platformları ve JavaScript işlevlerini kullanmamak
3- Veri Tabanı Güvenliği
Veri tabanlarını siber saldırılardan korumak çok çok önemlidir. çünkü veri tabanları kolayca kurtarılamayan
bir yapıya sahiptirler ve çok önemli hassas bilgileri barındırırlar.
Veri tabanlarının güvenliğini korumak için uygulanan yöntemlerin başında parameter binding (Türkçe meali parametre bağlama)
seçeneği gelmektedir. Parametre bağlama çalıştırılacak veri tabanı sorgusu ile veriler kodlama(encoding) ve kaçış(escape)
geçirilip birbirinden ayrılmasını sağlayan bir yöntemdir.
SQL sorgusu eğer ki birleştirme (concenation) yada formatlama yöntemlerini kullanıyorsa üretilmiş olan sonucun
sorgusunun kullanıcıdan alınmış olan girdi ile oluşturulmamalıdır.
Güvenlik için öneriler
- Kullanıcının girmiş olduğu bilgileri kullanarak SQL sorgusu oluşturmaktan kaçınmak
- Parametrelerle oluşturulmuş sorguları ve kaydedilmiş prosesleri bağlamak(Binding)
- Bağlama(Binding) için daha güvenli olan gömülü(built-in) fonksiyonları kullanmak
4- Hareket Halindeki Veriyi Korumak
Bilgi güvenliğinin temel kavramlarından olan verinin bütünlüğünün ve gizliliğin korunmasının ilkeleri
ağ trafiğinden geçen verilerin ele geçirilmesini engelleyen mekanizmaları da içermektedir.
İstemci ve sunucudan geçen verilerin dinlenmesini , değiştirilmesini ve hassas bilgilerin çalınmasını önleyemeyen HTTP
protokolü
veya tasarımında açık ve zafiyet barındıran telnet gibi diğer bağlantı protokolleri
HTTPS, SSL ve TSL
gibi güçlü şifreleme
algoritmalarını destekleyen protokollerin dizayn edilmesi ihtiyacını doğurmuştur.
Güvenlik için öneriler
- HTTP protokolünü tüm iletişimler için kullanmak
- Normal web tarayıcılarına güvenilmek zorunda kalınca sertifika makamlarından sertifika alınarak hizmet vermek
- Gizli anahtarın korunması
- Güvenli olan HTTPS konfigürasyonu için bir yapılandırma aracı bulmak
- Cookie'ler için secure flag ayarlanması
- Hassas ve önemli bilgileri URL de sızdırmamak
- HTTPS si ayarladıktan sunucu yapılandırmasını denetlemek ve bu denetimi her ay tekrarlamak
- Sitelere kendisiyle iletişime geçen tarayıcıların yalnızca HTTPS üzerinden haberleşmesini şart koşan
HSTS(HTTP Strict Transport Security) protokolünü kullanmak
5- Parola Güvenliği
Geleneksel bir yöntem olan periyodik şifre kuralıda ki hedef saldırganın parolasını ele geçirdiği
hesabın bir süre sonra kilitlenmesidir. Ancak çoğu kişiler yeni parolayı belirlerken eski parolada ki harflerin sadece
bazılarını değiştirdiğinde eski parolayı ele geçiren bir hackerın yeni parolayı bulması da hiç zor olmaz.
Periyodik şifre değişimi (kullanıcının bir kaç ayda bir şifre yenilemesine denir.
şifrenin güvenliğini güçlendirdiğinden daha çok kötü bir yönde etkilediği uzun süredir beri tartışılmaktadır.
Ayrıca NIST yayınladığı bir raporda periyodik şifre değişiminin kalkmasını önermektedir.
Harflerin, numaraların ve özel kombinasyonların kullanılması ile oluşturulan şifreler artık bir güvenlik tedbiri olarak
görülmemektedir ayrıca kullanıcıları şart olarak koşulmasını da yanlış olarak bulunmaktadır.
Bu düşünceye gerekçe olarak kullanıcının tahmini zor şifreler koymasını engellediğidir.
Yeni oluşturulan parolaların kontrol edilmesi de yeni bir yöntem olarak görülmektedir.
bu sayede kullanıcıların "12345678" veya "şifre" gibi parolalar seçmesi önlenir.
Güvenlik için öneriler
- Tüm parolaları özet alma(hashing) ve salt işleminden geçirmek
- Güvenli olarak tanımlanan bir algoritmayı kullanmak
- Parola saklama mekanizmasını yapılandırılabilir şekilde yapmak
- Harici sistem ve servisler için parola saklamaktan kaçınmak
- Parola uzunluğunu küçük boyutta seçmemek
Buraya kadar okuduysanız teşekkürler
bir daha ki konumda görüşmek üzere...
Moderatör tarafında düzenlendi: