25 Mart 2022

User (Account) Enumeration & Kullanıcı veya Hesap Numaralandırma Güvenlik Açığı ve Saldırı Tipleri

User (Account) Enumeration

Günümüz Web saldırıları arasında Hacker'lar (Saldırgan) tarafından çokça kullanılan saldırı tipi olan hesap veya kullanıcı numaralandırma (User Enumeration) saldırı tipi hedef Web uygulaması üzerinde kimlik avı yapmaya yönelik bir yöntemdir. Web uygulamalarının veritabanına kayıtlı kullanıcı adı, e-posta gibi bilgileri deneme yanılma yolu ile öğrenmeye çalışılması saldırı biçimi de diyebiliriz. Bu yöntem ile Hacker hedefteki site hakkında birçok bilgi edinebilir. Web uygulamalarında yanlış veya doğru deneme yanılma yöntemi ile verdiği hata mesajları sayesinde Hacker o sitede yönetici (Admin) kullanıcı adını veya kayıtlı e-posta adresini bu saldırı tipi ile bulabilir. Uygulama hakkında başta kritik görünmeyen bu bilgiler aslında çok önemli olup Hacker deneme yanılma ile bulduğu doğru bilgilerden sonra şifre saldırısı başlatarak sisteme sızabilir. Bu yüzden dikkate alınması gereken bir saldırı yöntemidir. Birçok web sitesinde buna yönelik bir önlem halen alınmasa da ilerleyen zamanlarda veri güvenliğinin öneminin artması ile birlikte mutlaka ilgili şirketlerin güvenlik ve yazılım birimleri bu saldırılara karşı önlem alacaklardır.

Hesap numaralandırma saldırısı genelde sitelerin Login (Giriş) veya Kayıt Ol (Register) sayfaları üzerinde gerçekleştirebilirsiniz. Hatta Wordpress tabanlı hazır CMS tabanlı sistemlerde WP-Admin yolunu default olarak değil de değiştirilerek kullanılması tavsiye edilir bunu da ön bir uyarı olarak söylemem gerekir. Aynı durum bir diğer CMS yazılımı olan Joomla'da da geçerlidir. Genelde Login sayfasında üyeliği olmadığı halde Hacker Sign In, Login, Forgot Your Password? Gibi hata mesajı verebilecek butonları Null (Boş) bırakarak veya herhangi bir veri girerek veritabanına kayıtlı doğru bir e-posta veya kullanıcı adı öğrenemeye çalışır. Örneğin Forgot Your Password? (Şifremi Unuttum) ekranlarında genelde e-posta adresi istenir. Bu sayfada Hacker sitenin Domain adresini baz alarak aşağıdaki gibi e-posta türevleri türetmeye başlar;

* admin@hedefdomain.com
* administrator@hedefdomain.com
* burak@hedefdomain.com
* root@hedefdomain.com

Eğer Hacker doğru bir e-posta adresini şans eseri bulursa şifreniz kayıtlı e-posta adresinize gönderildi şeklinde site mesaj vereceği için Hacker aslında siteye kayıtlı bir e-posta adresini öğrenmiş olur ve bu bir bilgidir. Bu e-posta adresi bir kullanıcısının olabileceği gibi bir yönetici hesabının da e-posta adresi olabilir.

User (Account) Enumeration

Aşağıda Forgot Your Password? (Şifremi Unuttum) sayfası için tasarlanmış örnek bir JSP Standard Templating Library (JSTL) formatında Parola Unuttum kod parçacığı vardır.

<c:choose>
    <c:when test="${statusCode == 'emailNotFound'}">
        <div id="reminder-message">Girdiğiniz e-posta adresiyle eşleşen bir hesap bulunmuyor.</div>
    </c:when>
    <c:when test="${statusCode == 'emailFound'}">
        <div id="reminder-message">Kayıtlı E-Posta adresinize şifre sıfırlama maili gönderildi.</div>
    </c:when>
</c:choose>

Burada basit bir şekilde E-Posta Label alanına istediğiniz değeri "@" formatı kullanarak girdiğiniz taktirde ekranda emailNotFound veya emailFound şeklinde cevap alacaksınız. Hacker'ın amacıda emailFound mesajını bulmak ve kayıtlı bir e-posta adresine ulaşmaktır.

Fakat ilgili kod parçacığın içerisine emailNotFound alanı için aşağıdaki gibi "Bu kullanıcıya bir hatırlatma epostası gönderildi." bir hata mesajı karşı tarafa fırlatırsak bu sefer Hacker deneme yanılma yaptığı epostanın doğruluğundan şüphe edecektir ve saldırısı boşa çıkacaktır.

<c:choose>
    <c:when test="${statusCode == 'emailNotFound'}">
        <div id="reminder-message">Girdiğiniz e-posta adresiyle eşleşen bir hesap bulunmuyor.</div>
<div id="reminder-message">Bu kullanıcıya bir hatırlatma e-postası gönderildi.</div>
    <c:when test="${statusCode == 'emailFound'}">
        <div id="reminder-message">Kayıtlı E-Posta adresinize şifre sıfırlama maili gönderildi.</div>
    </c:when>
</c:choose>

İlgili kod parçacığına yapılan bu ek güvenlik geliştirmesi ile birlikte Hacker gözünden bakacak olursak caydırıcılık artacağı için saldırı yapmayı da bıkacak ve daha kolay sonuç alabileceği başka bir Web uygulamasına bu sefer yönelecektir. Bu tip önlemleri Web uygulamalarında Giriş Formu, Şifre Sıfırlama Formu gibi yerlerde kullanabilirsiniz. Ayrıca şifre unuttum kısmına girilecek birden fazla deneme yanılma girdisi arasında belli bir sayıdan sonra Flood olacağı için süreli bekletme şeklinde güvenlik önlemi de alabilirsiniz. Örneğin üç defa yanlış girilen e-posta denemesinden sonra bir sonraki e-posta denemesi 2 dakika sonra aynı IP adresi üzerinden girilebilsin. Bu da başka bir caydırıcılık örneği olup Hacker deneme yanılmadan vazgeçecektir.

User (Account) Enumeration

Hacker bu saldırı tipi ile sisteme tam giremese bile her deneme yanılma (Brute Force) saldırı yöntemi ile site hakkında bilgiler öğrenebilir, bu bilgiler başta kullanıcı adı, eposta sonrasında bu bilgilerden de yararlanarak kişilerin telefon numarası veya başka bilgilerini de edinebilir. Aslında sisteme tam sızamasa bile sistem hakkında birçok bilgi edinir ve kimlik avı yapmış olur. Siteye sızmak için edinmesi gereken yönetici bilgilerini bulursa da büyük olasılıkla şifre saldırısı başlatıp siteye sızmaya çalışacaktır.

Burak AVCI

Hiç yorum yok:

Yorum Gönder

Makaleye Yorum ve Sorularınızı Bırakabilirsiniz.