Vahşi doğada kırık erişim kontrolü güvenlik açıkları nasıl bulunur


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

{
“from_account”: “472938294”,
“to_account”: “483928403”,
“Miktar”: 20.00,
“para birimi”: “USD”,
“Transfer_description”: “Pizza için teşekkürler!”
}

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.

Araç Aracı Bulundu Kırık Erişim Kontrolü

Çö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!



Source link