Kırık erişim kontrolü nedir?
BAC, uygulamadaki bir işlevin veya varlığın erişimi olmaması gereken biri için erişilebilir olduğu bir uygulama güvenlik açığı sınıfıdır.
Benim gibi bir şeyseniz, bu tanım sizi BAC’ın ne anlama geldiğini anlamaya daha yakın hale getirmeyecek, bu yüzden BAC hatalarının bazı hayali örnekleri:
BAC Örnek 1: Bir e-ticaret web sitesi, müşteri detaylarının yetkisiz görüntülenmesini sağlar
Diyelim ki en sevdiğiniz çevrimiçi kamp mağazası su geçirmez yürüyüş botlarında satış yapıyor, bu yüzden bir göz atmaya karar veriyorsunuz. Son zamanlarda eve taşındınız, bu nedenle bir satın alma işleminden önce teslimat adresinizin müşteri profilinizde güncel olup olmadığını kontrol etmek istersiniz. Sizi aşağıdaki URL’ye götüren hesap ayarlarınıza giriş yapın ve gidersiniz:
Bu durumda, 482 kullanıcınızın sayısal tanımlayıcısıdır. Uygulamaların nesneleri bir veritabanında depolaması ve benzersiz bir sayısal tanımlayıcı ile atıfta bulunması çok yaygındır. Veritabanının satırı şöyle görünebilir:
Kullanıcı kimliği | 482 |
e -posta | [email protected] |
şifre | $ 2y $ 10 y71tnx.pafw Fbyscbj4eo.pl0lf5 W84T/PEK00DGCAQ5BJSTKUJCK |
adres | 955 Broadway, Boston, MA, ABD |
/Kullanıcılar /482’ye giderken e -posta, adres ve kredi numarası sayfada gösterilir.
Ancak, 482’yi 481 gibi başka bir sayıya değiştirirsek ne olur?
/Kullanıcılar /481’e gidersiniz ve başka bir kullanıcının ayrıntıları görüntülenir. Tabii ki, bu detaylar Olumsuz Sizin için görüntülenebilir, yani bir BAC hatasına rastladığınız anlamına gelir. Bu, 0-481 arasındaki tüm kullanıcı ayrıntılarına erişerek daha da kullanılabilir, bu da bazı veri ihlalleri tam olarak böyle olur.
BAC Örnek 2: Bir banka yetkisiz taraflardan yapılan işlemlere izin verir
Bu örnekte, biraz farklı bir BAC güvenlik açığı stilini ele alacağız. Hassas verilere yetkisiz erişime sahip olmak yerine, saldırganın yetkisiz erişimi olacaktır. işlevsellik.
Diyelim ki bir arkadaşınıza biraz para ödemek için banka hesabınızın web sitesine giriş yaparsınız. İşlemi gönderdikten sonra tarayıcınızın şöyle görünen bir istek gönderdiğini fark ettiniz:
Post/API/V1/Transfer HTTP/1.1 Host: Bank.example.com İçerik Türü: Uygulama/JSON Yetkilendirme: Taşıyıcı Your_access_token { |
Hacker duyularınız karıncalanmaya başlar, böylece “_account “i 470000000 ve” to_account “i kendi banka hesap kimliğinize değiştirirsiniz. İsteği iletirsiniz ve hesabınızda anında 20 $ görünür.
Bir BAC hatası buldunuz ve 20 dolar kazandınız!
Sadece zamanında bir hatırlatma: Açık izniniz olmadığı sürece böyle testler çalıştırmayın, çünkü en iyi niyetlere sahip olsanız bile, sizi yasal belaya sokabilir.
BAC ve Idor arasındaki fark nedir?
Basitçe söylemek gerekirse, güvensiz doğrudan nesne referansı (idor) hataları BAC hatalarının bir alt kümesidir. Idor hataları, saldırganın kimliğine doğrudan atıfta bulunarak erişememesi gereken bir nesneye erişebileceği bir tür BAC hatasına atıfta bulunur. Bazı BAC hataları örnekleri Olumsuz İdor hataları şunları içerir:
- Zorunlu Göz atma yoluyla ayrıcalık artışı (örneğin, /admin sadece giderek idari ayrıcalıklar kazanma)
- Bir istekle müdahale ederek başka bir kullanıcının kaynaklarına erişme yeteneği (örneğin, kullanıcı adınızın kurbanın kullanıcı adı olduğunu söyleyerek), ancak aslında bir nesneye tanımlayıcı aracılığıyla doğrudan erişemiyor.
- HTTP fiil kurcalama yoluyla kırık erişim denetimleri: örneğin bir saldırgan, HTTP isteğinde bir GET isteği yerine bir posta isteği göndererek güncelleyemedikleri kayıtlarını güncelleyebilir.
Modern BAC böceklerinin yaygınlığı
BAC hatalarının şimdiye kadar çoğunlukla ortadan kaldırılması gerektiğini düşünmek cazip geliyor. Değiller. Aslında, son zamanlarda OWASP Top Ten listesinde bir numara oldukları için merkez sahne aldılar. Neredeyse sadece bu tür hatalara odaklanan çok başarılı böcek avcıları var.
Son 10 yılda enjeksiyon hatalarının (SQL enjeksiyonu gibi) miktarında bir düşüş gördük, çünkü bu tür hatalar, geliştiricileri işleri güvenli bir şekilde kodlamaya teşvik eden çerçeveler kullanarak yüksek düzeyde çözülebilir. varsayılan. Uygulamalardaki izin yapıları genellikle karmaşık ve uygulamaya özgü olduğundan bunu BAC hatalarıyla yapmak çok zordur. Erişim kontrollerinin genellikle özel kurallar olarak uygulanması ve işlev veya nesne başına tanımlanması gerekir. Eğer kaçırılırsa – bir güvenlik açığı ile sonuçlanması muhtemeldir.
BAC Tanımlayıcı Türleri
Özellikle Idor güvenlik açıkları için, geliştiricilerin tanımlayıcı olarak kullandıkları ortak türlerin farkında olmak önemlidir, böylece proxy günlüklerinde kaydırırken bunları hızlı bir şekilde tespit edebilirsiniz.
Kullanıcı tarafından seçilen tanımlayıcılar
Belki de en basit olanı, kullanıcının kullanıcı adı, e -posta adresi veya URL slug gibi seçtiği tanımlayıcı türleridir.
Doğal anahtarlar
Doğal tuşlar, verilerde doğal olarak ortaya çıkan tanımlayıcı türleridir. Örneğin, bir ABD vatandaşına atıfta bulunurken Sosyal Güvenlik numaralarını bir tanımlayıcı olarak kullanabilirsiniz.
Kompozit anahtarlar
Bu anahtarlar nesneden birden çok alandan oluşur, örneğin standart bir e-ticaret uygulamasında, bir siparişin tanımlayıcısını oluşturmak için bir kullanıcı tanımlayıcısını bir ürün tanımlayıcısıyla birleştirebilirsiniz.
Sayısal tanımlayıcılar
Yukarıda verilen örnekler sayısal tanımlayıcılardır. Bu en yaygın tanımlayıcı türüdür, sadece oluşturulan her yeni nesneye her seferinde bir sayı artar.
Örneğin, faturalar oluşturan bir web uygulamasında, ilk faturaya şu adresten erişilebilir olabilir:
Aynı şekilde, 432. faturaya şu adresten erişilebilir olabilir:
Bu tanımlayıcılar sömürülmesi en kolay olanıdır, çünkü diğer faturalara erişmek için sayacını artırabilir veya azaltabilirsiniz.
Uuids
Bir UUID (evrensel olarak benzersiz tanımlayıcı), genellikle bir tanımlayıcı olarak da kullanılan 128 bit bir sayıdır. Aynı UUID’yi bir kereden fazla üretme olasılığı son derece düşüktür. Bu nedenle, veritabanı girişleri, dağıtılmış sistemlerdeki nesneler veya veritabanlarındaki benzersiz anahtarlar gibi kaynakları tanımlamak için yazılım geliştirmede yaygın olarak kullanılırlar.
UUID’ler tipik olarak, tire ile ayrılmış beş gruba bölünmüş bir onaltılık rakam dizisi olarak temsil edilir:
550E8400-E29B-41D4-A716-446655540000 |
Özetle, tanımlayıcıları bir şekilde sızdıramadığınız sürece, UUID’ler tanımlayıcı olarak kullanılıyorsa, kırık erişim kontrollerinden yararlanmak son derece zordur (imkansız).
Karma
Hashes, özellikle dosyalarla uğraşırken genellikle tanımlayıcı olarak kullanılır. Dosya karma ve daha sonra bu karma bu dosyanın tanımlayıcısı haline gelir.
BAC hatalarını bulmak için teknikler
BAC hatalarını bulmanın birçok yolu vardır, ancak burada birkaç yaygın teknik.
İzin Eşleme
Hedefinizi seçtikten sonra iki liste oluşturun. Solda, kullanıcı rollerinin bir listesini oluşturun. Sağda, uygulamada gerçekleştirilebilecek eylemlerin bir listesini oluşturun. Örneğin, basit bir blog uygulaması için şöyle görünebilir:
Kullanıcı rolleri |
Eylem |
Kimlik doğrulanmamış |
Yeni bir blog oluştur |
Editör |
Blogları okuyun |
Yönetici |
Bir blog gönderisini güncelle |
Bir blog gönderisini sil |
Şimdi, her kullanıcıya ve iki sütun daha her eylemi atamak için bir e -tablo kullanın. “İzni olmalı” ve “izni var” diyen biri. Her satırdan geçin ve bu rolün bu iznine sahip olup olmayacağına bağlı olarak “Evet” veya “Hayır” a “İzin” olmalıdır:
Aksiyon |
Kullanıcı |
Erişim olmalı |
Erişim var mı |
Kimlik doğrulanmamış |
Yeni bir blog oluştur |
HAYIR |
|
Kimlik doğrulanmamış |
Blogları okuyun |
Evet |
|
Kimlik doğrulanmamış |
Bir blog gönderisini güncelle |
HAYIR |
|
Kimlik doğrulanmamış |
Bir blog gönderisini sil |
HAYIR |
|
Editör |
Yeni bir blog oluştur |
HAYIR |
|
Editör |
Blogları okuyun |
Evet |
|
Editör |
Bir blog gönderisini güncelle |
Evet |
|
Editör |
Bir blog gönderisini sil |
HAYIR |
|
Yönetici |
Yeni bir blog oluştur |
Evet |
|
Yönetici |
Blogları okuyun |
Evet |
|
Yönetici |
Bir blog gönderisini güncelle |
Evet |
|
Yönetici |
Bir blog gönderisini sil |
Evet |
Şimdi eğlence başlıyor! Her “hayır” için “Access” sütununa sahip olmalı, eylemi gerçekleştirip gerçekleştiremeyeceğinizi görmek için uygulamayı test edin. Sonunda, “Access” sütununa ve “EVET” sütunundaki “evet” içinde “hayır” olan herhangi bir satır varsa, bir BAC hatası buldunuz. Örneğin:
Aksiyon |
Kullanıcı |
Erişim olmalı |
Erişim var mı |
Kimlik doğrulanmamış |
Yeni bir blog oluştur |
HAYIR |
HAYIR |
Kimlik doğrulanmamış |
Blogları okuyun |
Evet |
Evet |
Kimlik doğrulanmamış |
Bir blog gönderisini güncelle |
HAYIR |
HAYIR |
Kimlik doğrulanmamış |
Bir blog gönderisini sil |
HAYIR |
HAYIR |
Editör |
Yeni bir blog oluştur |
HAYIR |
HAYIR |
Editör |
Blogları okuyun |
Evet |
Evet |
Editör |
Bir blog gönderisini güncelle |
Evet |
Evet |
Editör |
Bir blog gönderisini sil |
HAYIR |
Evet |
Yönetici |
Yeni bir blog oluştur |
Evet |
Evet |
Yönetici |
Blogları okuyun |
Evet |
Evet |
Yönetici |
Bir blog gönderisini güncelle |
Evet |
Evet |
Yönetici |
Bir blog gönderisini sil |
Evet |
Evet |
Bu tabloda, bir “editör” in bir blog yayınını silememesi gerektiğini görebilirsiniz, ancak yapabilirler. Rapor alma zamanı!
Daha büyük, daha karmaşık bir uygulama için izin haritalaması son derece tekrarlayan ve sıkıcı olabilir, ancak sabrın kapsamlı ve kapsamlı olması için temettüler.
Yetki vermek
Autorize, normal tarama isteklerinizi başka bir kullanıcı olarak tekrarlayarak BAC hatalarını ortaya çıkarmaya yardımcı olan bir Burp Suite BAPP’dir. Daha sonra, meşru talebin yanıtını, talebin başarılı olup olmadığını belirlemek için gayri meşru talebin yanıtıyla karşılaştırır. Daha sonra, ne kadar benzer olduklarına bağlı olarak kod yanıtlarını renklendirir ve ilginç istekleri kolayca filtrelemenize izin verir. Autorize hakkında daha fazla bilgi edinin.
Çözüm
Resmi: Kırık erişim kontrolü, OWASP’ye göre uygulamalarda bulunan en yaygın güvenlik sorunudur. Programlara avlanma deneyimlerime göre, bunun gerçekten böyle olduğunu doğrulayabilirim. Ayrıca anlamak için oldukça basit bir hata, yani öğrenilecek harika bir ilk hata sınıfı. Umarım bu blog yazısı size BAC hataları hakkında bilgi vermiştir ve dışarı çıkıp kendinizden birkaçını bulmanız için ilham vermiştir.
Mutlu Hacking!