Web Authentication Threats
- Username/Password è En yaygın kullanılan.
- Strong(er) Authentication è user/pwd yöntemin zayıflıklarını önlemek amacıyla ortaya çıkmış, token bazlı, sertifika bazlı vs.
- Authentication Services è Sitenin kimlik doğrulama işini outsource yapması (MS Passport gibi). ID management ve authentication protocol içerir.
Username/Password Threats
Username Enumeration
SALDIRI: Şifre tahmin saldırılarının etkinliğini artırmak için kullanılır. Mesela "nuri" diye bir kullanıcı yoksa "nuri" kullanıcısı için şifreler denemenin de alemi yok. Kullanıcı adı belirleme için kullanılabilecek yöntemler:- Profilleme sonuçları. Kaynak kod açıklama satırları, config dosyaları vs çoğu zaman bu konuda bilgi sağlayıcı olabiliyor.
- Login sırasındaki hata mesajları. "Kullanıcı adı yanlış" gibi bir mesaj alınca artık o kullanıcı için şifre denemeye gerek kalmaz; "Şifre yanlış" mesajı alınınca da kayıtlı bir kullanıcı adı bulduk demektir. "Kullanıcı ve/veya parola yanlış" denebilir mesela.Mesaj bilgi vermiyor olsa da mesaj için açılan sayfa bilgi verebilir: Hatalı kullanıcı adı girildiğinde "nouser.html" sayfası açılıyor, şifre hatalı olduğunda "failedlogin.html" sayfası açılıyor örneği mevcut gerçek hayattan.
- Registration. Siteye üye olmaya çalışırken "Bu isimde kullanıcı zaten var, başka isim dene" gibi mesajlar sayesinde kullanıcı adı atoplanabilir. İnsanlar genelde isimlerini kullanıcı adı olarak verme eğilimindedir: Ahmet Selim için Ahmet, AhmetS vs; bebeklerinin adını yada telefon numaralarını... Bir liste oluşturulabilir, zaten oluşturulmuş listeler bulunabilir google ile.
- Şifre değiştirme sırasındaki hata mesajı. Çoğu zaman şifre değiştirme için farklı bir sayfaya yönlendirme olsa da kullanıcı adı tekrar sorulmaz, bir hidden tag ile POST methodunda kullanıcı adı o sayfaya taşınır. Bu saldırı için proxy gerekir; ancak bazen şifre değiştirmedeki hata mesajları değerlendirerek isim tespit edilebilir.
- Hesap kilitleme. Belirli bir sayıda deneme sonrası hesabın kilitlenmesi, doğru kullanıcı üzerinde çalıştığımız anlamına da gelir. Olmayan bir hesap nasıl kilitlensin, değil mi?
Password Guessing
- Tarama teknikleri, kitapta anlatıldığından daha detaylı. 4 teknikten daha önce bu blogda söz edilmişti (http://webuygulamalariguvenligi.blogspot.com/2010/05/web-app-pentest-egitimi-11.html): Dikey, yatay, diyagonal ve 3 boyutlu tarama teknikleri mevcut.
- DİKKAT: Bu saldırı uygulamanın hizmet dışı kalmasına neden olabilir.
- Bir şifre belirleme politikası varsa, deneme uzayı daraltılabilir. Mesela 8 harften kısa şifreyi kabul etmediğini daha önce tespit etmişsek, kısa şifre denemelerini atlayabiliriz.
- Şifre tahmininde kullanılabilecek bazı araçlar:
- Hydra. Basic authentication kullanılan durumlarda kullanılabilir. Web uygulamalarına saldırmada http-head, http-get, https-head, https-get ve http-proxy metodlarını destekler.D:\Toolbox>hydra -C list.txt victim.com http-get /secure
- WebCracker. Windows tabanlı, eski, grafik arayüzlü araç. Amatörler yada script bilmeyenler için önerilebilir.
- Brutus. HTTP Basic ve Form-based kimlik doğrulamada, SMTP ve POP3 protokolleri ile kullanılabilir. Hem sözlük, hem kaba kuvvet saldırıları yapılabilir.
- NTLM Authorization Proxy Server. Entegre Windows kimlik doğrulama yönetiminin kullanıldığı durumlarda kullanılabilir. Çoğu araç bu yöntemi desteklemez.
Countermeasures of Password Guessing
- Güçlü bir şifre politikası ve güçlü bir kilitleme mekanizması kombinasyonu.
- CAPTCHA kullanımı.
- Bir saldırı altında olmanın neye benzediğinin bilinmesi. Trafiğin ve logların değerlendirilmesi gibi.
Eavesdropping and Replay Attacks
Basic Authentication: - İstemcinin korunan bir kaynağa herhangi credential bilgisi olmadan erişim talep etmesiyle başlar (Talep ve yanıtlar [requests and responses] sadeleştirilmiştir):GET /test/secure HTTP/1.0
- Sunucu erişim engellendi mesajı döner (401 Unauthorized):HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="luxor"
- Bu cevap istemcinin browser'ında bir credential ekranı açar. User/pwd bilgileri ile OK tuşouna basıldığında talep gönderilir:GET /test/secure HTTP/1.0
Authorization: Basic dGVzdDp0ZXN0
Burada dGVzdDp0ZXN0 parçası, Base64 ile encode edilmiştir, kolayce decode edilebilir. Buradaki örnekte değeri decode ettiğimizde test:test olduğunu görürüz. Bu yüzden bu metod en azından HTTPS ile kullanılmalıdır.
- HTTP protokolü üzerinde çalışıyor; basic authentication'a göre daha güvenli, fakat güçlü protokoller varken de (Public-key yada Kerberos gibi) tercih edilmemeli.
- HTTP'den daha çok IMAP, LDAP, POP3, SMTP protokollerinde kullanılır.
- Temelde basic authentication gibi çalışıyor:
- Kullanıcı, credential bilgileri olmaksızın talep yapar,
- Sunucu WWW_Authenticate header'ı ile credential gerekli mesajı gönderir.
- Sunucu, istemciye Base64 kodlu kullanıcı adı istemek yerine, NONCE adı verilen rasgele bir değer ile kimlik sorar.
- Browser "message digest" oluşturmak için tek yönlü kriptografik bir fonksiyon kullanır (hashing algoritm) è MD5!
- Kullanıcı, credential bilgileri olmaksızın talep yapar,
- Dezavantajları:
- Replay / MitM ataklarına açıktır. MitM saldırgan, istemciye basic authentication kullanacağını söyleyerek credential bilgilerini alabilir.
- Güvenlik kriterlerinin çoğu opsiyoneldir; iyi tanımlanmadığında güvenlik açığı oluşur.
- Replay / MitM ataklarına açıktır. MitM saldırgan, istemciye basic authentication kullanacağını söyleyerek credential bilgilerini alabilir.
- MD5 hash'lerini kırmak için tool: MDcrack by Gregory Duchemin.
Eavesdropping Countermeasures
128-bit SSL encryption.Forms-based Authentication Attacks
Çok esnektir. En yaygın kullanılan kimlik doğrulama çeşididir. En temelde şöyle bir trafik yaşanır:- İstemci sayfayı talep eder:
- Sunucu talebi login sayfasına yönlendirir:
HTTP/1.1 302 Found
Location: /login.aspx?ReturnUrl=%2fdefault.aspx- Kullanıcı açılan pencereden kullanıcı adı ve parolayı girer:
POST /login.aspx?ReturnUrl=%2fDefault.aspx HTTP/1.0
STATE=gibberish&txtUser=test&txtPassword=testBurada GET değil POST kullanılıyor. Bir konu da, eğer SSL kullanılmıyorsa kullanıcı adı ve parolanın açık text olarak iletilmesi.
- Eğer credential'lar doğruysa sunucu Set-Cookie header'ı içeren bir "302 found" döner:
HTTP/1.1 302 Found
Location: /Default.aspx
Set-Cookie: AuthCookie=45F68E1F33159A9158etc.; path=/
htmlheadtitleObject moved/title/headbody
Cookie'nin encyrpted olduğuna dikkat.
- Son olarak istemci ilk talebini yeniler, bu kez cookie ile birlikte:
GET /Default.aspx HTTP/1.0
Cookie: AuthCookie=45F68E1F33159A9158etc.
- Sunucu çerezin geçerli olduğuna kanaat ederse "200 OK" döner.
Strong(er) Web Authentication
- Dijital sertifikalar
- PassMark/SiteKey
- One-time Passwords (OTPs)
Web Authentication Services
Yaygın olarak kullanılan tek web kimlik doğrulama servisi Microsoft Passport. Her ne kadar Microsoft third-party şirketleri Passport kullanımına teşvik etmek istediyse de uygulamada Passport, Microsoft'un servisleriyle sınırlı denebilir (MSN, Hotmail vs). Temelde mekanizma şu şekilde çalışır: Örneğin abc.com Passport partneri olmaya karar verdi. Passport SDK'yı indirir ve Microsoft ile anlaşma imzalar. abc.com express mail aracılığıyla kriptolu bir anahtar alır, bunu SDK'daki Passport Manager aracı yardımıyla kendi web sunucularına kurar. Passport'un login sunucuları bu anahtarın bir kopyasını barındırır.
Hiç yorum yok:
Yorum Gönder