top of page

Business logic vulnerabilities (İş mantığı zafiyetleri)

Yazarın fotoğrafı: Songül ÖZÜGÜRLER
Songül ÖZÜGÜRLER
28 Nis
7 dakikada okunur

Business logic vulnerabilities (İş mantığı zafiyetleri)

Bu bölümde, iş mantığı zafiyetleri kavramını tanıtacağız ve bu zafiyetlerin, kullanıcı davranışları hakkında yapılan hatalı varsayımlar nedeniyle nasıl ortaya çıkabildiğini açıklayacağız. Ayrıca mantık hatalarının olası etkilerini ele alacak ve bu hataların nasıl istismar edilebileceğini öğreteceğiz.

Öğrendiklerinizi, gerçek dünyada karşılaşılan hatalardan esinlenerek hazırlanmış etkileşimli lab’lerde pratik yaparak pekiştirebilirsiniz. Son olarak, kendi uygulamalarınızda bu tür mantık hatalarının oluşmasını önlemek için bazı genel en iyi uygulamaları (best practices) paylaşacağız.

Business logic vulnerabilities (İş mantığı zafiyetleri)

Business logic vulnerabilities (İş mantığı zafiyetleri) nedir?

İş mantığı zafiyetleri , bir uygulamanın tasarımında veya uygulanmasında bulunan ve saldırganın beklenmeyen davranışlar elde etmesine olanak tanıyan hatalardır. Bu durum, saldırganların meşru fonksiyonları kötüye kullanarak zararlı bir amaca ulaşmasını mümkün kılabilir. Bu tür hatalar genellikle, uygulamada oluşabilecek olağandışı durumların öngörülememesi ve bu durumların güvenli şekilde ele alınmaması sonucunda ortaya çıkar

Not: Bu bağlamda “iş mantığı (business logic)” terimi, uygulamanın nasıl çalıştığını tanımlayan kural setini ifade eder. Bu kurallar her zaman doğrudan bir “iş” ile ilgili olmadığından, bu zafiyetler “application logic vulnerabilities” veya kısaca “logic flaws (mantık hataları)” olarak da adlandırılır

Mantık hataları, genellikle uygulamanın normal kullanımı sırasında fark edilmez . Ancak bir saldırgan, geliştiricilerin hiç öngörmediği şekillerde uygulama ile etkileşime girerek bu davranışsal gariplikleri istismar edebilir

İş mantığının temel amaçlarından biri, uygulama veya fonksiyon tasarlanırken belirlenen kuralları ve kısıtlamaları uygulamaktır. Bu kurallar, belirli bir senaryoda uygulamanın nasıl tepki vermesi gerektiğini tanımlar. Buna, işletmeye zarar verecek veya anlamsız işlemleri kullanıcıların yapmasını engellemek de dahildir

Mantıktaki hatalar, saldırganların bu kuralları aşmasına olanak tanıyabilir. Örneğin, bir satın alma sürecinin gerekli adımlarını takip etmeden işlemi tamamlayabilirler. Bazı durumlarda ise, kullanıcıdan alınan verilerin yetersiz veya hiç yapılmayan doğrulaması , işlem açısından kritik değerlerin keyfi olarak değiştirilmesine ya da anlamsız verilerin gönderilmesine neden olabilir. Sunucu tarafındaki mantığa beklenmeyen değerler göndererek, saldırgan uygulamanın yapmaması gereken bir şeyi yapmasını sağlayabilir

Mantık tabanlı zafiyetler son derece çeşitlidir ve çoğu zaman uygulamaya ve onun özel işlevlerine özgüdür. Bu zafiyetleri tespit etmek genellikle, iş alanına dair bilgi veya saldırganın hedeflerini anlayabilme gibi insani sezgiler gerektirir. Bu da onları otomatik güvenlik tarayıcılarıyla tespit etmeyi zorlaştırır . Bu nedenle mantık hataları, bug bounty avcıları ve manuel test yapanlar için oldukça cazip hedeflerdir

Business logic zafiyetleri nasıl ortaya çıkar?

İş mantığı zafiyetleri çoğunlukla, tasarım ve geliştirme ekiplerinin kullanıcıların uygulama ile nasıl etkileşime gireceğine dair yanlış varsayımlar yapması sonucu ortaya çıkar. Bu hatalı varsayımlar, kullanıcı girdilerinin yetersiz doğrulanmasına yol açabilir. Örneğin, geliştiriciler kullanıcıların veriyi yalnızca tarayıcı üzerinden göndereceğini varsayarsa, uygulama tamamen zayıf istemci tarafı kontrollerine güvenebilir. Bu kontroller ise bir intercepting proxy kullanılarak kolayca aşılabilir

Sonuç olarak, saldırgan beklenen kullanıcı davranışından saptığında, uygulama bunu engellemek için gerekli adımları atamaz ve durumu güvenli şekilde ele alamaz

Mantık hataları özellikle, geliştirici ekibin bile tamamını tam olarak anlayamadığı aşırı karmaşık sistemlerde yaygındır. Bu tür hatalardan kaçınmak için geliştiricilerin uygulamayı bir bütün olarak anlaması gerekir. Büyük kod tabanlarında çalışan geliştiriciler, uygulamanın tüm parçalarına hâkim olmayabilir. Bir bileşen üzerinde çalışan biri, başka bir bileşenin nasıl çalıştığına dair yanlış varsayımlar yapabilir ve farkında olmadan ciddi mantık hataları ekleyebilir. Bu varsayımlar açıkça belgelenmezse, bu tür zafiyetlerin uygulamaya sızması oldukça kolaydır

Business logic zafiyetlerinin etkisi nedir?

İş mantığı zafiyetlerinin etkisi bazen önemsiz gibi görünebilir. Bu çok geniş bir kategoridir ve etkisi büyük ölçüde değişkenlik gösterir. Ancak istenmeyen herhangi bir davranış , doğru şekilde manipüle edildiğinde yüksek şiddette saldırılara yol açabilir. Bu nedenle, nasıl istismar edileceği tam olarak anlaşılamasa bile, garip görünen mantıklar ideal olarak düzeltilmelidir

Bir mantık hatasının etkisi temelde, hangi fonksiyonla ilişkili olduğuna bağlıdır. Örneğin hata kimlik doğrulama mekanizmasında ise, bu genel güvenliği ciddi şekilde etkileyebilir. Saldırganlar bunu yetki yükseltme veya kimlik doğrulamayı tamamen atlatma için kullanabilir ve hassas verilere erişebilir. Bu durum aynı zamanda başka saldırılar için daha geniş bir saldırı yüzeyi oluşturur

Finansal işlemlerdeki hatalı mantıklar ise, çalınan paralar, dolandırıcılık gibi nedenlerle işletme için büyük maddi kayıplara yol açabilir Ayrıca, mantık hataları saldırgana doğrudan bir kazanç sağlamasa bile, işletmeye zarar vermesine imkân tanıyabilir

Business logic zafiyetlerine örnekler nelerdir?

İş mantığı zafiyetlerini anlamanın en iyi yolu, gerçek dünya örneklerini incelemek ve yapılan hatalardan ders çıkarmaktır. Bu amaçla, yaygın mantık hatalarına dair somut örnekler ve bu zafiyetleri bizzat deneyimleyebileceğiniz bilinçli olarak zayıf bırakılmış uygulamalar sunulmaktadır

Business logic zafiyetleri nasıl önlenir?

Kısaca, iş mantığı zafiyetlerini önlemenin anahtarları şunlardır:

Geliştirici ve test ekiplerinin, uygulamanın hizmet ettiği iş alanını iyi anlaması

Kullanıcı davranışları veya uygulamanın diğer bölümlerinin davranışları hakkında örtük varsayımlardan kaçınılması

Sunucu tarafındaki durumla ilgili yapılan varsayımların açıkça belirlenmesi ve bu varsayımların doğrulandığından emin olunması

İşleme devam etmeden önce tüm girdilerin mantıklı ve geçerli olduğunun kontrol edilmesi

Buna ek olarak, geliştirici ve test ekiplerinin bu varsayımları ve uygulamanın farklı senaryolarda nasıl davranması gerektiğini tam olarak anlayabilmesi önemlidir. Bunu sağlamak için aşağıdaki en iyi uygulamalar önerilir:

Tüm işlem ve iş akışları için, her aşamadaki varsayımları belirten net tasarım dokümanları ve veri akışları oluşturmak

Kodu mümkün olduğunca anlaşılır yazmak. Anlaşılması zor kodda mantık hatalarını tespit etmek de zor olur. Zorunlu karmaşık durumlarda ise açık dokümantasyon şarttır

Her bileşeni kullanan diğer kodlara yapılan bağımlılıkları not almak ve kötü niyetli bir kullanımda ortaya çıkabilecek yan etkileri düşünmek

Mantık hataları çoğu zaman tek seferlik bir insan hatası gibi görülüp geçiştirilebilir. Ancak bu hatalar genellikle uygulamanın ilk tasarım aşamalarındaki kötü pratiklerin sonucudur. Bir mantık hatasının neden oluştuğunu ve ekip tarafından neden fark edilmediğini analiz etmek, süreçlerdeki zayıflıkları görmenizi sağlar. Küçük iyileştirmelerle, benzer hataların daha kaynağında engellenmesi veya daha erken aşamada yakalanması mümkün hale gelir

Business Logic Vulnerabilities Örnekleri (İş Mantığı Zafiyetleri)

İş mantığı zafiyetleri, ortaya çıktıkları bağlama oldukça özgüdür. Ancak tek tek mantık hataları büyük ölçüde farklılık gösterse de, çoğu zaman ortak temalar paylaşırlar. Özellikle, zafiyetin ilk ortaya çıkmasına neden olan temel hatalara göre gevşek biçimde gruplandırılabilirler

Bu bölümde, tasarım ve geliştirme ekiplerinin sıklıkla yaptığı bazı tipik hatalara bakacağız ve bunların iş mantığı zafiyetlerine doğrudan nasıl yol açtığını göstereceğiz. İster kendi uygulamalarınızı geliştiriyor olun ister mevcut bir uygulamayı denetliyor olun, bu örneklerden çıkarılan dersleri karşılaştığınız diğer uygulamalara da aynı eleştirel bakış açısıyla uygulayabilirsiniz

Mantık hatalarına örnekler

İstemci tarafı kontrollere aşırı güven

Alışılmadık (beklenmeyen) girdilerin ele alınamaması

Kullanıcı davranışları hakkında hatalı varsayımlar yapılması

Alan (domain) özelinde mantık hataları

Bir şifreleme oracle’ı sağlanması

E-posta adresi ayrıştırıcı (parser) tutarsızlıkları

İstemci tarafı kontrollere aşırı güven

Temel olarak hatalı bir varsayım, kullanıcıların uygulama ile yalnızca sağlanan web arayüzü üzerinden etkileşime gireceğidir. Bu varsayım son derece tehlikelidir çünkü istemci tarafı doğrulamanın kötü niyetli girdileri engelleyeceği düşüncesini doğurur. Oysa bir saldırgan, Burp Proxy gibi araçlar kullanarak tarayıcıdan çıkan veriyi sunucuya ulaşmadan önce kolayca değiştirebilir. Bu da istemci tarafı kontrolleri tamamen işlevsiz hale getirir

Sunucu tarafında yeterli doğrulama ve bütünlük kontrolleri yapılmadan verinin olduğu gibi kabul edilmesi, saldırganın çok az çabayla ciddi zararlar vermesine olanak tanır. Bu durumun etkisi, ilgili fonksiyonun ne yaptığına bağlıdır. Doğru bağlamda, hem iş süreçleri hem de uygulamanın güvenliği açısından yıkıcı sonuçlar doğurabilir

Alışılmadık girdilerin ele alınamaması

Uygulama mantığının amaçlarından biri, kullanıcı girdilerini iş kurallarına uygun değerlerle sınırlamaktır. Örneğin uygulama belirli bir veri tipindeki tüm değerleri teknik olarak kabul edebilir, ancak iş mantığı bu değerin iş açısından geçerli olup olmadığını belirler

Birçok uygulama, sayısal sınırlamalar içerir. Bunlar stok yönetimi, bütçe kısıtları veya tedarik zinciri aşamaları gibi amaçlarla kullanılır.

Örneğin bir e-ticaret sitesinde kullanıcılar sipariş vermek istedikleri ürün miktarını belirtir. Her ne kadar teoride her tam sayı geçerli olsa da, iş mantığı stoktan fazla ürün sipariş edilmesini engellemelidir

Geliştiricilerin tüm olası senaryoları öngörmesi ve bunları uygulama mantığına dahil etmesi gerekir. Eğer belirli bir durum için açık bir kontrol yoksa, bu beklenmeyen ve istismar edilebilir davranışlara yol açabilir

Örneğin, sayısal bir alan negatif değerleri kabul edebilir. İş mantığı açısından bu anlamsız olabilir. Ancak sunucu tarafı doğrulama yoksa, saldırgan bu negatif değeri göndererek istenmeyen sonuçlar doğurabilir

Banka transferi örneği $transferAmount = $_POST[‘amount’]; $currentBalance = $user->getBalance();
if ($transferAmount <= $currentBalance) { // Transferi tamamla } else { // Yetersiz bakiye }

Eğer amount parametresinin negatif olmasını engelleyen bir kontrol yoksa, saldırgan bu kontrolü atlatabilir. Örneğin -1000 gönderilirse, sistem bakiyeyi yeterli kabul eder ve transferi onaylar. Bu da paranın ters yönde aktarılmasına yol açabilir

Bu tür basit mantık hataları, doğru fonksiyon üzerinde gerçekleştiğinde son derece yıkıcı olabilir ve istemci tarafı kontroller nedeniyle geliştirme ve test aşamalarında kolayca gözden kaçabilir

Kullanıcı davranışları hakkında hatalı varsayımlar

Mantık zafiyetlerinin en yaygın nedenlerinden biri, kullanıcıların her zaman beklenen şekilde davranacağı varsayımıdır. Bu varsayımlar, geliştiricilerin tehlikeli senaryoları göz ardı etmesine yol açar

Güvenilen kullanıcılar her zaman güvenilir kalmaz

Bazı uygulamalar, kullanıcı ilk kontrolleri geçtikten sonra artık sürekli güvenilebilir olduğunu varsayar. Bu da ilerleyen aşamalarda kontrollerin gevşetilmesine neden olur. Güvenlik önlemleri uygulamanın her yerinde tutarlı şekilde uygulanmazsa, ciddi güvenlik açıkları oluşur

Kullanıcılar her zaman zorunlu alanları doldurmaz

Tarayıcılar zorunlu alanları boş bırakmayı engellese de, saldırganlar parametreleri değiştirebilir veya tamamen silebilir. Özellikle tek bir sunucu tarafı script’te birden fazla fonksiyon varsa, parametrenin varlığı veya yokluğu hangi kodun çalışacağını belirleyebilir. Bu da erişilmemesi gereken kod yollarına erişim sağlayabilir

Test sırasında:

Parametreleri tek tek silin

Hem parametre adını hem değerini kaldırmayı deneyin

Çok adımlı süreçleri sonuna kadar takip edin

URL, POST ve cookie parametrelerini test edin

Kullanıcılar her zaman doğru adım sırasını takip etmez

Birçok işlem, belirli adımlardan oluşan iş akışlarına dayanır. Arayüz kullanıcıyı yönlendirse de, saldırganlar bu sıraya uymak zorunda değildir. Bu durum özellikle 2FA atlatma gibi ciddi zafiyetlere yol açabilir

Burp Proxy ve Repeater ile:

Adımları atlayın

Aynı adımı birden fazla kez çağırın

Önceki adımlara geri dönün

Parametre setlerini değiştirin

Bu testler sırasında oluşan hata mesajları ve debug çıktıları, bilgi sızıntısı açısından çok değerlidir

Domain-özel mantık hataları

Bazı mantık hataları tamamen uygulamanın hizmet ettiği iş alanına (domain) özgüdür. Özellikle e-ticaret sitelerindeki indirim mekanizmaları, mantık hataları açısından klasik bir saldırı yüzeyidir

Örneğin, 1000$ üzeri alışverişe %10 indirim yapan bir sistem, indirim uygulandıktan sonra sepetin değiştirilip değiştirilmediğini kontrol etmezse istismar edilebilir. Saldırgan önce limiti aşar, sonra ürünleri çıkarır ve indirimi korur

Bu tür zafiyetleri tespit etmek için saldırganın hedeflerini ve uygulamanın bu hedeflere nasıl hizmet ettiğini anlamak gerekir. Domain bilgisi yoksa, tehlikeli davranışlar kolayca göz ardı edilebilir

Şifreleme oracle’ı sağlanması

Kullanıcı kontrolündeki girdilerin şifrelenip çıktısının kullanıcıya verilmesi durumunda bir encryption oracle oluşabilir. Saldırgan bu mekanizmayı kullanarak keyfi verileri geçerli şekilde şifreleyebilir ve bu verileri başka hassas fonksiyonlara sokabilir

Eğer tersine bir çözme (decrypt) mekanizması da varsa, saldırgan veri yapısını kolayca öğrenebilir. Etki, aynı algoritmayı kullanan fonksiyonlara bağlıdır

E-posta adresi ayrıştırma tutarsızlıkları

Bazı uygulamalar, e-posta adreslerinden domain bilgisini ayıklayarak kullanıcının hangi kuruma ait olduğunu belirler. Ancak RFC uyumlu e-posta adreslerinin ayrıştırılması oldukça karmaşıktır

Uygulamanın farklı bölümleri e-postayı farklı şekilde işlerse, saldırgan encoding teknikleriyle bu farkları istismar edebilir. Bu sayede kısıtlı domain’lerden geliyormuş gibi görünen e-postalarla yetkisiz erişim sağlanabilir

Bu tür hataların ana sonucu yetkisiz erişimdir ve admin panelleri gibi hassas alanlara erişim sağlayabilir

 
 
bottom of page