Link:
Logic Flaw
Çalışma Mantığı Zafiyetleri
Bu bölümde default varsayımlar nedeniyle oluşan çalışma mantığındaki zafiyetlerden yararlanmayı ve bunların oluşumlarını anlatacağız.
Bu hataların potansiyel etkilerini tartışacağız ve size bundan yararlanmayı öğreteceğiz.
Burada öğrendiklerinizi (gerçek hayat örneklerimizi) interaktif lab'larda pratik yapabilirsiniz.
Son olarak bu tarz çalışma mantığı hatalarını önlemenizi sağlayacak örnekler sunacağız.
Çalışma mantığı hataları, uygulamada veya onun tasarımında oluşabilen ve saldırganın başaramaması gerekenleri başarmasını sağlayan kusurlardır.
Bu potansiyel kusurlar da saldırganın amacına ulaşması için uygulamayı manipüle edebilmesini sağlar. Bu kusur/hatalar sistemde oluşabilecek olağandışı durumları düşünmemiş olmaktan dolayısıyla oluşabilecek olağandışı durumlara karşı önlem almamaktan kaynaklanır.
Not:
Bu metindeki "çalışma mantığı" kavramı basitçe bahsi geçen uygulamanın çalışmak için uyguladığı bir dizi fonksiyonu kasteder. Bahsi geçen fonksiyonlar her zaman direkt olarak uygulamayla ilgili olmadığından dolayı bu zaafiyetler "çalışma mantığı zaafiyetleri" olarak bilinir.
Çalışma mantığı zaafiyetleri uygulamayı amacına uygun şekilde normal olarak kullananların karşılaşabileceği şeyler değildir ancak saldırgan bu normal kullanımın dışına çıkarak geliştiricilerin beklemediği şekilde uygulamayla etkileşim kurabilir ve kötü amaçlar için kullanabilir.
Uygulamanın çalışmasını sağlayan fonksiyonların temel işlevlerinden biri de kullanıcıları kısıtlayarak belli senaryolara belli tepki almalarını sağlamaktır. Gerçekleşen senaryoya göre uygulamanın tepki vermesini sağlarlar. Bu sayede kullanıcılar olağan senaryolar dışına çıkamazlar.
Çalışma mantığındaki zaafiyetler sayesinde saldırganlar bu sınırlardan muaf olabilir. Mesela satın alma gerçekleşmeden ürünü elde edebilirler. Başka bir örnekte kullanıcı verilerinin doğrulanmasındaki bir zaafiyette veya bu doğrulamanın hiç var olmadığı bir senaryoda kullanıcılar işlem yaparken sistemdeki değerleri değiştirebilir veyahut sistemde tanımlı olmayan girdiler gönderebilir ve bu sayede uygulamanın yapmaması gereken şeyleri zafiyet aracılığıyla yaptırılabilir.
Çalışma mantığı zafiyetleri çok geniş bir yelpazededir ve genellikle bu zafiyetler uygulamanın kendisine özgüdür. Bunları tespit etmek epey bilgi gerektirir. Bu yüzden otomatik scannerlar ile tespit edilemezler. Sonuç olarak bu zafiyetler bug bounty kovalayanlar ve manuel pentesterlar için güzel hedeflerdir.
Çalışma Mantığı Zafiyetleri Nasıl Ortaya Çıkar?
Bu zaafiyetler genelde tasarım ekibi veya geliştirme ekibinin kullanıcılar ile uygulama arasındaki etkileşimleri eksik öngörmesinden kaynaklanır. Bu öngörüsüzlük sebebiyle kullanıcı verilerinin eksik doğrulanmasına sebep olabilir. Mesela geliştirici ekip gelen verilerin sadece web tarayıcı üzerinden geleceğini öngörebilir dolayısıyla basit bir güvenlik protokolü kullanıyor olabilir ancak bu proxy kullanan bir salgırdan tarafından kolayca bypass edilebilir. Sonuçta bu, saldırganın beklenmeyen bir şekilde uygulama ile olan etkileşiminden dolayı yaşanmıştır. Yani saldırgan öngörülemeyen bir davranışta bulundu ve bu davranışa önlem alınmadığı için kolayca güvenlik açığı sömürüldü.
Bu zafiyetler daha çok karmaşık sistemlerde (geliştirici ekibin bile ne yaptığını Totalde bilemeyeceği) yaygındır. Bu zafiyetleri önlemek için geliştiriciler sistemin kendine hakim olmalıdır. Büyük kod tabanlarıyla çalışan bu geliştiriciler uygulamanın her tarafının nasıl çalıştığını tam olarak bilemeyebilir. Uygulamanın bir fonksiyonu ile çalışan bir geliştirici diğer fonksiyonlara hakim olmadığı için hatalı bir öngörüde bulunabilir ki bu da konumuz olan çalışma mantığı zafiyetlerine sebep olabilir. Geliştiriciler bu öngörü/varsayımlarını açıkça sürekli ifade etmeseler de bunların yaşanması olasıdır.
Çalışma Mantığı Zafiyetlerinin Etkileri
Bu zafiyetler ara sıra meydana çıkabilir buna rağmen pek önem arz etmezler. Kategorinin genişliğinden bahsetmiştik dolayısıyla etkileri de oldukça değişken diyebiliriz. Eğer saldırgan uygulamayı doğru şekilde sömürebilirse uygulamanın yapmaması gereken davranışların sonuçlarından biri olarak yüksek seviyede zarara yol açma potansiyeli vardır da diyebiliriz. Bu yüzden bunu yapmayı kendimiz öğrenemeseniz bile uygulamanız teorik olarak ideal bir çalışma mantığına sahip olmalıdır. Yoksa başka birinin bundan yararlanma ihtimali her zaman vardır.
Temeline inersek, bu zafiyetlerin etkileri hangi fonksiyonda ortaya çıktıklarına bağlıdır. Mesela doğrulama sisteminde ortaya çıktıysa bu büyük bir genel güvenlik sorunudur. Saldırganlar admin yetkisi elde edebilir veya kimlik doğrulamayı bypass ederek hassas verilere ulaşabilir. Bu da diğer zafiyetlere kapı aralar.
Finansal işlemlerdeki çalışma mantığı zafiyeti; fon çalma, dolandırıcılık ve benzeri maddi problemlere neden olabilir.
Ayrıca bu zafiyetler direkt olarak bir sömürüye izin vermese de saldırganlar tarafından kuruma veya işletmeye bir şekide zarar verilmesine izin verebilir.
Çalışma Mantığı Zafiyetlerinin Örnekleri
Bahsi geçen çalışma mantığı zafiyetlerini anlamanın en iyi yolu gerçek hayat örneklerini incelemek ve yapılmış hatalardan öğrenmektir. Bunu sağlayan bir takım yaygın çalışma mantığı zafiyeti örneklerini ve bu konuda pratik yapabileceğiniz örnekleri derledik. Aşağıdaki linkten ulaşabilirsiniz:
Tıkla bana
Çalışma Mantığı Zafiyetleri Nasıl Önlenir?
Kısaca birkaç madde sıralayabiliriz:
1-Geliştiriciler ve testerların uygulamanın çalıştığı domainleri iyice kavramasını sağlayın.
2-Kullanıcıların uygulama ile gireceği davranışları ve uygulamanın tepkileri hakkında dar görüşlü olmayın.
3-Sunucunun durumu hakkında bazı varsayımlar yaptığımızı fark etmeliyiz. Sonra bu varsayımların doğru olup olmadığını kontrol etmek için gerekli adımları atmalıyız. Böylece sunucunun gerçekte ne durumda olduğundan emin olabiliriz. Bu, devam etmeden önce girdinin değerinin uygunluğunun kontrolünü de içerir.
Ayrıca testerların ve geliştiricilerin, uygulamanın farklı senaryolarda nasıl tepki vermesi gerektiğini anlamaları da oldukça önemli. Bu, geliştirici ekibin çalışma mantığı zafiyetlerini en kısa zamanda tespitine de yardımcı olur. Bunun içinse geliştirici ekip aşağıdaki talimatlar hakkında bolca pratik yapmalıdır:
•Her aşamada yapılan olası senaryolar not alınmalı , tüm veri akışı ve belgeler güvenli şekilde kayıt altına alınmalı.
•Kod açık yazılmalı, anlaşılması zor bir kod olası senaryolardaki uygulama tepkilerinin ne olması gerektiğinin anlaşılmasını zor hale getirir. İdeal bir kodun anlaşılması için ekstra dökümantasyona ihtiyaç duyulmaz.
•Karışık bir kodu yazmanız gereken kaçınılmaz durumlarda ise diğer geliştiricilerin ve testerların öngörülen senaryoları bilmelerini sağlayacak anlaşılması kolay bir belge hazırlamanız çok önemlidir.
• Birbiriyle bağlı kodlara ait referansları not edin. Bunların sıradışı bir şekilde sömürülmesi ile oluşabilecek yan etkileri düşünün
• Çalışma Mantığı Zafiyetlerinin kendilerine has yapısı nedeniyle insan kaynaklı tek seferlik hata diye geçiştirip üstünü örtmek oldukça kolaydır lakin daha önce gösterdiğimiz gibi bu zafiyetler uygulamanın yapımı aşamasındaki kötü yapılmış pratiklerin bir sonucudur.
•Bir çalışma mantığı zafiyetinin nasıl oluştuğunu ve niçin geliştirici ekibin tespit edemediğini iyi analiz etmek sürecinizdeki zayıflıkların tespitini kolaylaştırabilir. Ufak dokunuşlar benzer hataların önüne geçebilir veya hataların geliştirme sürecindeki erken tespitini sağlayabilir.
Logic Flaw
Çalışma Mantığı Zafiyetleri
Bu bölümde default varsayımlar nedeniyle oluşan çalışma mantığındaki zafiyetlerden yararlanmayı ve bunların oluşumlarını anlatacağız.
Bu hataların potansiyel etkilerini tartışacağız ve size bundan yararlanmayı öğreteceğiz.
Burada öğrendiklerinizi (gerçek hayat örneklerimizi) interaktif lab'larda pratik yapabilirsiniz.
Son olarak bu tarz çalışma mantığı hatalarını önlemenizi sağlayacak örnekler sunacağız.
[COLOR=rgb(255, 255, 255)][B]Lab'lar:
Zaten çalışma mantığı hatası konsepti nedir ne değildir biliyorsanız ve amacınız sadece pratik yapmaksa aşağıdaki linke tıklayın[/B][/COLOR]
All labs | Web Security Academy
Mystery lab challenge Try solving a random lab with the title and description hidden. As you'll have no prior knowledge of the type of vulnerability that ...
portswigger.net
Çalışma mantığı hataları, uygulamada veya onun tasarımında oluşabilen ve saldırganın başaramaması gerekenleri başarmasını sağlayan kusurlardır.
Bu potansiyel kusurlar da saldırganın amacına ulaşması için uygulamayı manipüle edebilmesini sağlar. Bu kusur/hatalar sistemde oluşabilecek olağandışı durumları düşünmemiş olmaktan dolayısıyla oluşabilecek olağandışı durumlara karşı önlem almamaktan kaynaklanır.
Not:
Bu metindeki "çalışma mantığı" kavramı basitçe bahsi geçen uygulamanın çalışmak için uyguladığı bir dizi fonksiyonu kasteder. Bahsi geçen fonksiyonlar her zaman direkt olarak uygulamayla ilgili olmadığından dolayı bu zaafiyetler "çalışma mantığı zaafiyetleri" olarak bilinir.
Çalışma mantığı zaafiyetleri uygulamayı amacına uygun şekilde normal olarak kullananların karşılaşabileceği şeyler değildir ancak saldırgan bu normal kullanımın dışına çıkarak geliştiricilerin beklemediği şekilde uygulamayla etkileşim kurabilir ve kötü amaçlar için kullanabilir.
Uygulamanın çalışmasını sağlayan fonksiyonların temel işlevlerinden biri de kullanıcıları kısıtlayarak belli senaryolara belli tepki almalarını sağlamaktır. Gerçekleşen senaryoya göre uygulamanın tepki vermesini sağlarlar. Bu sayede kullanıcılar olağan senaryolar dışına çıkamazlar.
Çalışma mantığındaki zaafiyetler sayesinde saldırganlar bu sınırlardan muaf olabilir. Mesela satın alma gerçekleşmeden ürünü elde edebilirler. Başka bir örnekte kullanıcı verilerinin doğrulanmasındaki bir zaafiyette veya bu doğrulamanın hiç var olmadığı bir senaryoda kullanıcılar işlem yaparken sistemdeki değerleri değiştirebilir veyahut sistemde tanımlı olmayan girdiler gönderebilir ve bu sayede uygulamanın yapmaması gereken şeyleri zafiyet aracılığıyla yaptırılabilir.
Çalışma mantığı zafiyetleri çok geniş bir yelpazededir ve genellikle bu zafiyetler uygulamanın kendisine özgüdür. Bunları tespit etmek epey bilgi gerektirir. Bu yüzden otomatik scannerlar ile tespit edilemezler. Sonuç olarak bu zafiyetler bug bounty kovalayanlar ve manuel pentesterlar için güzel hedeflerdir.
Çalışma Mantığı Zafiyetleri Nasıl Ortaya Çıkar?
Bu zaafiyetler genelde tasarım ekibi veya geliştirme ekibinin kullanıcılar ile uygulama arasındaki etkileşimleri eksik öngörmesinden kaynaklanır. Bu öngörüsüzlük sebebiyle kullanıcı verilerinin eksik doğrulanmasına sebep olabilir. Mesela geliştirici ekip gelen verilerin sadece web tarayıcı üzerinden geleceğini öngörebilir dolayısıyla basit bir güvenlik protokolü kullanıyor olabilir ancak bu proxy kullanan bir salgırdan tarafından kolayca bypass edilebilir. Sonuçta bu, saldırganın beklenmeyen bir şekilde uygulama ile olan etkileşiminden dolayı yaşanmıştır. Yani saldırgan öngörülemeyen bir davranışta bulundu ve bu davranışa önlem alınmadığı için kolayca güvenlik açığı sömürüldü.
Bu zafiyetler daha çok karmaşık sistemlerde (geliştirici ekibin bile ne yaptığını Totalde bilemeyeceği) yaygındır. Bu zafiyetleri önlemek için geliştiriciler sistemin kendine hakim olmalıdır. Büyük kod tabanlarıyla çalışan bu geliştiriciler uygulamanın her tarafının nasıl çalıştığını tam olarak bilemeyebilir. Uygulamanın bir fonksiyonu ile çalışan bir geliştirici diğer fonksiyonlara hakim olmadığı için hatalı bir öngörüde bulunabilir ki bu da konumuz olan çalışma mantığı zafiyetlerine sebep olabilir. Geliştiriciler bu öngörü/varsayımlarını açıkça sürekli ifade etmeseler de bunların yaşanması olasıdır.
Çalışma Mantığı Zafiyetlerinin Etkileri
Bu zafiyetler ara sıra meydana çıkabilir buna rağmen pek önem arz etmezler. Kategorinin genişliğinden bahsetmiştik dolayısıyla etkileri de oldukça değişken diyebiliriz. Eğer saldırgan uygulamayı doğru şekilde sömürebilirse uygulamanın yapmaması gereken davranışların sonuçlarından biri olarak yüksek seviyede zarara yol açma potansiyeli vardır da diyebiliriz. Bu yüzden bunu yapmayı kendimiz öğrenemeseniz bile uygulamanız teorik olarak ideal bir çalışma mantığına sahip olmalıdır. Yoksa başka birinin bundan yararlanma ihtimali her zaman vardır.
Temeline inersek, bu zafiyetlerin etkileri hangi fonksiyonda ortaya çıktıklarına bağlıdır. Mesela doğrulama sisteminde ortaya çıktıysa bu büyük bir genel güvenlik sorunudur. Saldırganlar admin yetkisi elde edebilir veya kimlik doğrulamayı bypass ederek hassas verilere ulaşabilir. Bu da diğer zafiyetlere kapı aralar.
Finansal işlemlerdeki çalışma mantığı zafiyeti; fon çalma, dolandırıcılık ve benzeri maddi problemlere neden olabilir.
Ayrıca bu zafiyetler direkt olarak bir sömürüye izin vermese de saldırganlar tarafından kuruma veya işletmeye bir şekide zarar verilmesine izin verebilir.
Çalışma Mantığı Zafiyetlerinin Örnekleri
Bahsi geçen çalışma mantığı zafiyetlerini anlamanın en iyi yolu gerçek hayat örneklerini incelemek ve yapılmış hatalardan öğrenmektir. Bunu sağlayan bir takım yaygın çalışma mantığı zafiyeti örneklerini ve bu konuda pratik yapabileceğiniz örnekleri derledik. Aşağıdaki linkten ulaşabilirsiniz:
Tıkla bana
Çalışma Mantığı Zafiyetleri Nasıl Önlenir?
Kısaca birkaç madde sıralayabiliriz:
1-Geliştiriciler ve testerların uygulamanın çalıştığı domainleri iyice kavramasını sağlayın.
2-Kullanıcıların uygulama ile gireceği davranışları ve uygulamanın tepkileri hakkında dar görüşlü olmayın.
3-Sunucunun durumu hakkında bazı varsayımlar yaptığımızı fark etmeliyiz. Sonra bu varsayımların doğru olup olmadığını kontrol etmek için gerekli adımları atmalıyız. Böylece sunucunun gerçekte ne durumda olduğundan emin olabiliriz. Bu, devam etmeden önce girdinin değerinin uygunluğunun kontrolünü de içerir.
Ayrıca testerların ve geliştiricilerin, uygulamanın farklı senaryolarda nasıl tepki vermesi gerektiğini anlamaları da oldukça önemli. Bu, geliştirici ekibin çalışma mantığı zafiyetlerini en kısa zamanda tespitine de yardımcı olur. Bunun içinse geliştirici ekip aşağıdaki talimatlar hakkında bolca pratik yapmalıdır:
•Her aşamada yapılan olası senaryolar not alınmalı , tüm veri akışı ve belgeler güvenli şekilde kayıt altına alınmalı.
•Kod açık yazılmalı, anlaşılması zor bir kod olası senaryolardaki uygulama tepkilerinin ne olması gerektiğinin anlaşılmasını zor hale getirir. İdeal bir kodun anlaşılması için ekstra dökümantasyona ihtiyaç duyulmaz.
•Karışık bir kodu yazmanız gereken kaçınılmaz durumlarda ise diğer geliştiricilerin ve testerların öngörülen senaryoları bilmelerini sağlayacak anlaşılması kolay bir belge hazırlamanız çok önemlidir.
• Birbiriyle bağlı kodlara ait referansları not edin. Bunların sıradışı bir şekilde sömürülmesi ile oluşabilecek yan etkileri düşünün
• Çalışma Mantığı Zafiyetlerinin kendilerine has yapısı nedeniyle insan kaynaklı tek seferlik hata diye geçiştirip üstünü örtmek oldukça kolaydır lakin daha önce gösterdiğimiz gibi bu zafiyetler uygulamanın yapımı aşamasındaki kötü yapılmış pratiklerin bir sonucudur.
•Bir çalışma mantığı zafiyetinin nasıl oluştuğunu ve niçin geliştirici ekibin tespit edemediğini iyi analiz etmek sürecinizdeki zayıflıkların tespitini kolaylaştırabilir. Ufak dokunuşlar benzer hataların önüne geçebilir veya hataların geliştirme sürecindeki erken tespitini sağlayabilir.
Moderatör tarafında düzenlendi: