Yarış koşulları: böcek ödülleri
Yarış koşulları güvenlik açıkları bence en ilginç web güvenlik açıklarından biridir. Geliştiricilerin yaptığı en basit hatalardan kaynaklanırlar ve bu hataların maliyeti kanıtlanmıştır.
Geçmişte, bilgisayar korsanları çevrimiçi bankalardan, kripto para borsası web sitelerinden , e-ticaret web sitelerinden ve daha fazlasından para çalmak için yarış koşullarını kullandılar.
Yarış koşulları nelerdir?
- Yarış koşulları, bir sırada yürütülmek üzere tasarlanan iki kod bölümü sıra dışı yürütüldüğünde ortaya çıkar.
- Bu güvenlik açıklarını daha iyi anlayabilmek için öncelikle eşzamanlılık kavramını anlamalısınız.
- Bilgisayar programlamada eşzamanlılık, programın sonucunu etkilemeden kodun farklı bölümlerini aynı anda yürütme yeteneğidir.
- Eşzamanlılığın iki türü vardır: çoklu işleme ve çoklu okuma.
- Çoklu işlem, eşzamanlı görevleri gerçekleştirmek için birden fazla CPU kullanmayı ifade eder.
- Ancak multithreading, tek bir CPU'nun eş zamanlı görevleri "threads" kullanarak gerçekleştirmesidir. Ancak, bu iş parçacıkları aslında aynı anda yürütülmez; sırayla CPU'nun gücünü kullanırlar. Bir iş parçacığı boştayken, diğer iş parçacıkları kullanılmayan bilgi işlem kaynaklarından yararlanmaya devam edebilir. Birden çok iş parçacığının yürütme sırasını düzenlemeye planlama denir.
- Bu zamanlama , yarış koşullarına neden olan şeydir.
- Bir yarış koşulu, bir güvenlik kontrol mekanizmasını etkilediğinde bir güvenlik açığı haline gelir.
- İki iş parçacığının banka hesapları arasında para transferini gerçekleştirdiğini hayal edin. Uygulamanın parayı doğru bir şekilde aktarmak için üç görevi gerçekleştirmesi gerekir. İlk olarak, kaynak hesabın yeterli parası olup olmadığını kontrol eder, ardından parayı hedef hesaba ekler ve son olarak, tutarı kaynak hesaptan çıkarır.
İPLİK 1
- A(>100$) hesap bakiyesini kontrol edin; 2. B hesabına 100$ ekleyin; 3. A hesabından 100$ düş
- A'nın hesap bakiyesini kontrol edin (<100$) => Transfer başarısız, yetersiz bakiye.
- [Konu 1] A hesabı bakiyesini kontrol edin (100$);
- [Konu 2] A hesabı bakiyesini kontrol edin (100$);
- [Konu 1] B hesabına 500$ ekleyin; [A'da 100$, B'de 100$]
- [Konu 2] B hesabına 500$ ekleyin; [A'da 100$, B'de 200$]
- [Konu 1] A hesabından 500$ kesinti yapın; [A'da 0$; B'de 200$]
- [Konu 2] A hesabından 500$ düş; [A'da 0$; B'de 200$]
Yarış koşullarındaki güvenlik açıkları çoğunlukla finansal web siteleriyle ilişkilendirilse de, bilgisayar korsanları bunları çevrimiçi oylama kampanyalarına hile karıştırmak gibi başka durumlarda da kullanabilir.
nasıl önlenir
Programlamada eşzamanlılık söz konusu olduğunda senkronizasyon kavramı önemlidir. Yarış koşullarına ve veri tutarsızlıklarına yol açabileceğinden, iş parçacıklarının veya süreçlerin paylaşılan kaynaklara aynı anda erişmemesini sağlamayı içerir. Eşzamanlamayı sağlamanın bir yolu, diğer iş parçacıklarının bir kaynağa erişimini, kilidi tutan iş parçacığı onunla bitene kadar engelleyen kaynak kilitlerinin kullanılmasıdır.
Senkronizasyona ek olarak, yarış koşullarının daha ciddi güvenlik sorunları haline gelmesini önlemek için güvenli kodlama uygulamalarını takip etmek de önemlidir. En az ayrıcalık ilkesi, başvuruların verilmesini içeren ve yalnızca görevlerini tamamlamak için ihtiyaç duydukları ayrıcalıkları işleyen böyle bir uygulamadır. Örneğin, bir uygulamanın yalnızca bir dosyayı okuması gerekiyorsa, ona yazma veya yürütme izinleri verilmemelidir. Bu, bir saldırı sırasında sistemden ödün verme risklerini azaltır.
Nasıl avlanır?
1. Yarış koşullarına eğilimli özellikleri bulun:
- Yarış koşulları genellikle çevrimiçi oylama, oyun puanları, banka havaleleri, e-ticaret ödemeleri ve hediye kartı bakiyeleri gibi sayısal değerlerin güncellenmesini içeren özelliklerde ortaya çıkar. Bir uygulamada bu özellikleri tanımlamak için, bu numaraların güncellenmesiyle ilgili istekleri arayabilirsiniz. Örneğin, bir bankacılık sitesinden para transfer etmek için kullanılan talebi test etmek istiyorsanız, Burp Suite'i kullanarak sağ tıklayıp “Copy as curl komutunu” seçerek talebi kopyalayabilirsiniz.
- Bir hedefteki yarış koşullarını test etmek ve bunlardan potansiyel olarak yararlanmak için sunucuya aynı anda birden çok istek gönderebilirsiniz. Örneğin, banka hesabınızda bulunandan daha fazla para transfer etmenin mümkün olup olmadığını kontrol etmek istiyorsanız, aynı anda birden fazla transfer talebi göndermek için curl komutunu kullanabilirsiniz. Bunu yapmanın bir yolu, Burp'tan komutu kopyalayıp terminale yapıştırmak ve ardından her komutun arasına bir "&" simgesi eklemektir. Bu, bir Linux sisteminde arka planda aynı anda birden çok komutu yürütmenize izin verecektir.
curl (transfer $3000) & curl (transfer $3000) & curl (transfer $3000)
& curl (transfer $3000) & curl (transfer $3000) & curl (transfer $3000)
- Bu hiç akıllıca değil, saldırınızın başarılı olup olmadığını kontrol edin
Güvenlik açığının önem derecesini değerlendirirken bir yarış koşulunun etkilenen işlevsellik üzerindeki olası etkisini dikkate almak önemlidir. Bir saldırganın nakit çekme veya fon transferi gibi yollarla finansal kaynaklara sınırsız erişim elde etmesine izin veren bir yarış durumu, hem etkilenen bireyler hem de kuruluş için oldukça zararlı olabilir.
Saldırgan, finansal kazancın yanı sıra sosyal nüfuz elde etmek veya hassas bilgilere erişmek için bir yarış koşulunu kullanabilir. Örneğin, bir saldırganın bir sosyal medya hesabına yetkisiz erişim elde etmesine izin veren bir yarış durumu, potansiyel olarak yanlış bilgi yaymak veya kamuoyunu manipüle etmek için kullanılabilir.
Bir yarış koşulunun etkisi hakkında rapor verirken, etkilenen bireyler ve kuruluş için olası sonuçları açıkça ifade etmek önemlidir. Bu, potansiyel mali kaybı, hassas bilgilerin kaybını veya kuruluşun itibarının zarar görmesini içerebilir. Güvenlik açığının potansiyel etkisi hakkında net ve ayrıntılı bilgi sağlamak, güvenlik açığının çözümüne öncelik verilmesine ve olası sonuçların hafifletilmesine yardımcı olabilir.
Umarım bu blog gönderisi yardımcı olmuştur! Mutlu avlar ve mutlu Noeller!

![Bağlantılı Liste Nedir? [Bölüm 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































