OWASP TOP 10 | User Enumeration
Merhaba sevgili Cyber Akademi forum üyeleri, bu konumuzda yine olduğu gibi application.security'de bulunan OWASP TOP 10 da User Enumeration konusu ele alacağız vakit kaybetmeden anlatıma geçelim.
User Enumeration Nedir
User Enumeration Türkçe adı ile Kullanıcı adı numaralandırma, bir sunucu veya web uygulamasındaki tüm geçerli kullanıcı adlarının bir listesini geliştirme sürecidir. Sunucu veya uygulama, kullanıcı adının var olup olmadığı konusunda bir ipucu verirse mümkün olur.
The Application
CloudGraph, kurumsal müşteriler için bulutta barındırılan grafik veritabanı sunucuları sağlayan bir SaaS başlangıcıdır. Yakın zamanda yeni gelen CloudGraph, çok sayıda erken çekiş ve başarı elde etti.
CloudGraph'ın bir rakibi olan EasyGraph, sürekli bir müşteri kaybına tanık oldu. EasyGraph'taki satış ve pazarlama ekibi, CloudGraph'a müşteri kaybını araştırmak için bizi işe almaya karar verdiler
Access Email
Şimdi ise EasyGraph tarafından belirlenen kapsam ve hedefleri gözden geçirmek için bize gönderilen epostayı inceleyelim.
Mesajı açıp ilerleyelim.
EasyGraph'tan gelen e-posta, EasyGraph ile sözleşmelerini yenilemeyen müşterilerin e-posta adreslerinin bir listesini içerir. E-posta ayrıca CloudGraph'ın web sitesinin bir bağlantısını içerir.
CloudGraph'ın SaaS çözümü lehine geçiş yapmış olabilecek bu listedeki müşterileri belirlemekle biz görevlendirildik.
Epostanın içeriği, Türkçe çeviri;
Bize gönderilmiş olan epostadaki CloudGraph bağlantısına gidelim.
Bob, EasyGraph'ın önceki müşterilerinin CloudGraph'a geçiş yapıp yapmadığını doğrulamak için CloudGraph'ın kimlik doğrulama arabiriminde bir User Enumeration güvenlik açığını belirlemeye ve kullanmaya çalışır.
User Enumeration, geçerli ve geçersiz kullanıcı adları göndererek bir sunucu veya web uygulamasında geçerli kullanıcı adlarının bir listesini elde etme ve uygulama tarafından oluşturulan yanıt hata mesajlarını analiz etme işlemidir.
Forgot your Password? diyoruz.
Kullanıcı numaralandırma güvenlik açıklarının oluşabileceği en yaygın alan, uygulamanın Parolamı Unuttum işlevidir.
CloudGraph'ın Unutulan Parola özelliğinin bir User Enumeration saldırısına karşı savunmasız olup olmadığını test etmek için var olmayan bir kullanıcı adı gönderiyoruz.
Reset My Password
uygulamanın genel bir parola sıfırlama mesajıyla geri dönmesini bekliyorduk Fakat, uygulama aşağıdaki hatayı verdi:
Bu e-posta adresine sahip kayıtlı bir kullanıcı olmadığı için şifre sıfırlanamadı.
Not
Uygulama, gönderilen hesap kullanıcı adının geçerli olmadığını veya CloudGraph uygulamasında kayıtlı olmadığını belirten bir hata mesajı döndürdüğünden, yukarıdaki mesaj bir User Enumeration güvenlik açığının göstergesidir. bob@livemail.com
varsayımımızı daha da doğrulamak için, Unutulan Parola formu tarafından oluşturulan yanıt mesajının geçerli bir kullanıcı hesabının varlığını ortaya çıkarıp çıkaramayacağını görmek için CloudGraph'a kayıtlı bilinen bir kullanıcı hesabının mailini gönderelim.
Şimdi, aşağıdaki kullanıcı hesabına karşı bir parola sıfırlama işlemi başlatalım:
user@stscapitall.com
Cevap mesajı gerçekten farklı. Bu bilgiyle CloudGraph'a karşı bir User Enumeration salsırısı başlatılabilir. Ayrıca EasyGraph istemcilerinin listesini alabilir ve CloudGraph'ta kayıtlı bir hesaplar olup olmadığını kontrol edebiliriz.
Not
User Enumeration, bir kullanıcının var olup olmadığını kontrol etmek için bir uygulamayı araştırma yeteneğini ifade eder. Bu genellikle, yanıt iletilerinde veya yanıt sürelerinde, uygulamanın gönderilen kimlik bilgilerine verdiği yanıttaki farklılıklarla açıklanır. Bir kullanıcı adının veya epostanın kayıtlı olup olmadığını doğrulamak mümkün olduğunda, kaba kuvvet yaklaşımı, daha sonra diğer istismarlarda kullanılabilecek geçerli kullanıcıları otomatik olarak tahmin edilebilir.
User Enumeration saldırısını otomatikleştirmek için enumerate.py adında bir python komut dosyası oluşturalım.
Kullanıcıların parametre olarak ilettikleri e-postaların listesini içeren bir metin dosyasını okur ve her kullanıcı adı için bir oturum açma isteği gönderir.
1. Yukarıdaki koşulun gerçekleşmesi durumunda kullanıcı adını bir listeye ekler.true
2. Son olarak konsola bulduğu kullanıcı adlarını veya bulamaması durumunda basit bir mesaj yazar.
User Enumeration güvenlik açığının temel nedenini anlamak için Parolayı Sıfırla mesajını oluşturmak için kullanılan kaynak koduna bir göz atalım.
message
Yöntem resetPassword() , bir kullanıcı parola sıfırlama istediğinde döndürülen mesaj için bir değişken başlatır.
DBHelper.findUserByEmail(email);
Yöntem önce kullanıcının veritabanında olup olmadığını kontrol eder.
"Please check your email inbox to continue";
Kullanıcı varsa, mesaj kullanıcıya e-posta gelen kutularını kontrol etmelerini söyler.
"Could not reset password because there is no registered user with that e-mail address";
Kullanıcı yoksa, diğer taraftan, mesaj, o e-posta adresiyle kayıtlı bir kullanıcı olmadığını açıklar. Bu, harici kişilerin etrafta dolaşmasına ve sistemde bazı e-posta adreslerinin kayıtlı olup olmadığını kontrol etmesine olanak tanır.
User Enumeration Saldırılarını Nasıl Azaltacağız?
User Enumeration saldırılarını etkili bir şekilde azaltmak için geliştiriciler, kullanıcı adı, e-posta veya hesabın geçerli olup olmadığına bakılmaksızın genel bir yanıt mesajı göstermelidir.
User Enumeration saldırılarını önlemek için yukarıdaki en iyi uygulamanın savunmasız kod örneğimize nasıl uygulanabileceğini görelim.