ag guvenligi

July 25, 2017 | Author: Mehmet Bagkur | Category: N/A
Share Embed Donate


Short Description

Download ag guvenligi...

Description

Bil438 AĞ GÜVENLĠĞĠ

INTEGER OVERFLOW ve SQL ENJEKSĠYON SALDIRILARI

28 Mayıs, 2011

INTEGER OVERFLOW SALDIRI

Integer Overflow Nedir? 



Günümüz sistemlerinde, 32 veya 64 bitlik işlemciler kullanılmaktadır. Herhangi bir aritmetik işlem sonucunda bu 32 veya 64 bitlik alana sığmayacak boyutta bir integer oluşması durumuna integer overflow denir. Tehlikesiz gibi gözükse de integer overflow birçok güvenlik açığına neden olabilmektedir.

Integer Overflow Tehlikeli midir? 





Integer overflow oluştuktan sonra tespit edilemez. Sonucun yanlış olduğunu uygulamaya anlatmanın bir yolu yoktur. Bunun için oluşmasına izin vermemek gerekir ve kodlarımızı buna göre yazmamız gerekir. Integer overflow‟ın doğrudan bir tehlikesi yoktur fakat başka hataların oluşmasına sebep olabilir. Örneğin buffer overflow gibi.

Integer Overflow Saldırısı(1) 



Asağıda integer overflow yaratması muhtemel bir kod kesimi bulunmaktadır. Ancak bu kod sistemi, saldırılara açık hale getirmemektedir.Ancak durum her zaman böyle değildir.

Integer Overflow Saldırısı(2) 

Aşağıdaki kod kesiminde, a=b=2^31+1 olduğunu varsayarsak, x=2 olacaktır.Daha sonra bu x değişkeni 6. satırda “malloc” fonksiyonuna parametre olarak gönderildiğinde, programcının beklentisi olan 2^32+2 byte‟lık değil sadece 2 byte‟lık bir yer alacaktır.Bu da 7. satırdaki bellek erişimi p[a](p[2^31+1])‟ nın yetkisi olmayan bir bellek bölgesine erişmesine neden olacaktır.

Integer Overflow Saldırısı(3) 

Bir saldırgan, kullanıcıdan alınan a ve b değerleri üzerinde çalışarak önemli bellek bölgelerine erişebilir hatta zarar verebilir.



Güvenli öncelikli programlarda, program maksimum yetki ile çalıştığından, kritik bellek bölgeleri programın adres uzayında bulunacaktır. Bu da saldırganın belleğe yerleştirdiği herhangi bir kod parçasına istediği gibi erişebilmesine ve çalıştırabilmesine neden olacaktır.

Yaşanmış Integer Overflow Saldırıları 

En bilindik saldıralardan bir tanesi, Linux, BSD, MacOS X and Windows üzerinde çalışan Gaim isimli anlık mesajlaşma programı üzerinde gerçekleşmiştir. 

Kullanıcıdan alınan veri manipule edilerek,Calloc() ile alınan 0 byte‟lık veri alanına while döngüsü içerisinde sürekli 4GB‟lık veri kopyalanmasına neden olunmustur.

Integer Overflow Saldırılarından Korunma 

Kullanıcının erişip değiştirme yetkisi olan verilerde aritmetik bir işlem yapılmadan önce verinin büyüklüğünün kontrol edilmesi gerekmektedir  Birçok uygulama için bu zahmetli bir işlemdir.Birçok farklı fonksiyon arasında paylaşılan verilerde sürekli büyüklük kontrolü yapmak çok maliyetlidir.



Analiz tabanlı araçlar kullanmak bir diğer korunma yöntemidir.Ancak problemin doğası gereği bu araçların prosedürler arası hareket eden bu verileri kontrol edebiliyor olması gerekmektedir.

SQL ENJEKSĠYONU

SQL Enjeksiyon Nedir??? (1) 





bir web uygulaması üzerinden arka plandaki veritabanında çalıştırılması için SQL komutlarının gönderilmesidir. saldırganların veri çalma/değiştirmede kullandıkları web saldırı metodlarından biridir. Web uygulamasındaki login formu gibi kullanıcı girişlerinin SQL sorgusunda kullanıldığı yerlerde SQL komutları eklenmesi ile veritabanına yetkisiz erişim sağlar

SQL Enjeksiyon Nedir??? (2) 

Web uygulaması geliştirimindeki bir açıktır, veri tabanı ya da web sunucusu açığı değildir. 





Çoğu programcı halen daha bu problemin farkında değillerdir. Birçok alıştırma ve demodaki örnek şablonlar bu saldırıya açıktır Daha da kötüsü internetteki birçok çözüm bu konuda yeterince iyi değildir.

Ne Sıklıkla Karşılaşılır? (1) 





Özellikle frameworkler ve ORM (Object Relational Mapping) gibi ekstra veritabanı katmanlarının popülerleşmesi ile eskisine göre bugünlerde biraz daha az görülmektedir ama hala daha sıklıkla karşılaşılmaktadır. SQL Injection Verizon'un en sık rastlanan 15 güvenlik saldırısı listesinde 3. sıradadır. Web Uygulama Güvenliği Konsorsiyum'una (WASC) göre 27 Temmuz 2006 tarihine kadar medyada rapor edilen hack olaylarının %9'u SQL Enjeksiyon saldırılarından kaynaklanmıştır.

Nerelerde Görülür?

• Hemen hemen tüm SQL veritabanları ve

programlama dilleri potansiyel olarak bu saldırıya acıktır 

Ms SQL Server, ORACLE, DB2, Potgres, Sybase vb.

• Aşağıdaki araçlar kullanılarak geliştirilmiş uygulamalarda görülmektedir.     

ASP,JSP,PHP XML,XSL ve XSQL Javascript API‟s Ve daha birçoğu

SQL ENJEKSĠYON TÜRLERĠ 

Web uygulamalarında bir çok işlem için kullanıcıdan alınan veri ile dinamik SQL cümlecikleri oluşturulur.



Sql enjeksiyon 3 farklı şekilde gerçekleştirilebilir. 1. Meta Karakterlerin doğru şekilde ele alınmamasından 2. 3.

yararlanılarak yapılan enjeksiyon Türlerin doğru şekilde ele alınmamasından yararlanılarak yapılan enjeksiyon Kör(Blind) enjeksiyon

1-Meta Karakterlerin doğru şekilde ele alınmamasından yararlanılarak yapılan enjeksiyon(1)



Bu enjeksiyon kullanıcı girdisi meta-karakterler için kontrol edilmeden SQL cümleciğine sokulduğunda gerçekleşir.Bu da orijinal SQL cümleciğinin manipüle edilebilinmesine yol açar.

“ SELECT * FROM `users` WHERE `name` = '" + userName + "';"



Bu SQL cümleciği, kullanıcının belirttiği userName ile ilgili tüm kayıtları getirmesi için tasarlanmıştır.

1-Meta Karakterlerin doğru şekilde ele alınmamasından yararlanılarak yapılan enjeksiyon(2) 

Ancak “userName” değişkenine “ ‟ or „1‟=„1 ” yazılırsa SQL cümleciği şuna dönüşecektir SELECT * FROM `users` WHERE `name` = „ ' OR '1'='1';



„1‟=1 her zaman doğru olacağından dolayı, bu cümlecik bütün “users” tablosunun dökümünü getirecektir.

2-Türlerin doğru şekilde ele alınmamasından yararlanılarak yapılan enjeksiyon



Bu enjeksiyon şekli kullanıcıdan alınan girdinin veri türü kontrolünden geçirilmeden SQL cümleciğine sokulmasından kaynaklanır. "SELECT * FROM `userinfo` WHERE `id` = " + a_variable + ";"



Yukarıdaki cümlecikte “a_variable” değişkenine “1;DROP TABLE `users` ” yazılırsa, programcının çalıştırmak istediği sorgu değil, saldırganın yazdığı “DROP TABLE” komutu çalışacak ve tüm “users” tablosu silinecektir.

3-Kör(Blind) enjeksiyon (1)





Genellikle sunucu ve uygulama hata mesajlarının veritabanına ait bilgileri sızdırmayacak şekilde ayarlandığı zaman, yollanan isteklere alınan http cevaplarındaki farklılıklardan yararlanarak hedefe ulaşmamıza ve istediğimiz sorguları çalıştırmamıza izin veren bir SQL enjeksiyon tipidir. Bu amaçla true ve false durumları oluşmasına izin verecek SQL ifadeleri uygulama parametrelerine eklenerek, her iki durum için farklı cevaplar alınması beklenir. Böylece bu farklılıklardan yararlanılarak çalışan sorgunun başarılı olup olmadığı rahatlıkla belirlenebilmekte ve saldırganın hedefine ulaşmasını sağlamaktadır.

3-Kör(Blind) enjeksiyon (2)





Uygulamanın yapısına bağlı olarak SQL Injection açığından etkilense bile farklı durumlar için (true/false durumları) farklı cevaplar üretmediği veya cevapların değişmediği durumlar ile de karşılaşılabilir. Bu tip uygulamalarda ise true ve false durumları için cevabın gelme sürelerindeki gecikmeler kullanılarak saldırının hedefine ulaşması sağlanabilir. Örneğin yollanan sql sorgusu doğru ve geçerli bir sorgu ise 5 saniye bekle, değilse bekleme gibi sorgular oluşturmamıza izin veren fonksiyonlar aracılığı ile SQL enjeksiyon saldırıları gerçekleştirmek mümkündür.

Gerçek Bir SQL Enjeksiyon Saldırısı Örneği (1) 

Şekilde, aşağıdaki SQL sorgusunu çalıştıran bir web sayfası görülmektedir.

SELECT id FROM login WHERE username = '$userName„ AND password = '$password‟

Gerçek Bir SQL Enjeksiyon Saldırısı Örneği (2) 

Kullanıcı adı olarak “Bil438" verdiğimizi ve şifre için de “falan' OR 'x'='x ” yazdığımızı varsayalım. SELECT id FROM login WHERE username = „srivinas„ AND password = „mypassword' OR 'x'='x'





Web uygulamasında kullanıcı girişleri doğru olarak filtrelenmediği için, tek tırnak kullanımı “WHERE” kısmını iki-bileşenli bir sorguya dönüştürdü. 'x'='x' bölümü ilk bölüm ne olursa olsun şartın doğru olmasını garantiler. Bu da saldırganın login form'unu geçerli bir kullanıcı / şifre kombinasyonu bilmesine gerek kalmadan aşabilmesini sağlar.

SQL Enjeksiyon'un etkileri nedir? 





SQL enjeksiyon, veritabanınızı saldırganın eline verip istediği SQL komutlarını çalıştırmasına, istediği verileri silmesine ve değiştirebilmesine izin vermektedir. Arka planda kullanılan veritabanına bağlı olarak SQL enjeksiyon açıkları saldırgan için değişik seviyelerde veri/sistem erişimi sunar. Bazı durumlarda dosyalardan okumak veya dosyalara yazmak, ya da işletim sisteminde komutlar çalıştırmak mümkün olabilir. Micorosft SQL sunucusu gibi bazı SQL sunucuları stored ve extended prosedürler içerirler. Eğer bir saldırgan bu prosedürlere ulaşabilirse bu tam bir felaket olacaktır.

SQL Enjeksiyondan Korunma Yöntemleri (1) 



Güvenlik duvarları ve benzer saldırı tespit mekanizmaları bu konuda tam bir koruma sağlamayabilir. Web sitenizin herkese açık olması gerektiği için güvenlik mekanizmaları web trafiğinin veritabanı sunucularınız ile web uygulaması aracılığı ile haberleşmesine izin verecektir. Sunucularınızı, veritabanlarını, programlama dillerini ve işletim sistemlerinizi güncelleyip yamalarını geçmeniz kritik öneme sahip fakat SQL Enjeksiyon saldırılarını engellemede tam çözüm değildir.

SQL Enjeksiyondan Korunma Yöntemleri (2) 

1.

2.

3.

SQL Enjeksiyon saldırılarından korumak 3 bölümlük bir işlemden oluşur: Sitenizin, SQL Enjeksiyon ve diğer açıklara karşı tam bir güvenlik denetiminin yapılması ile güvenliğinizin mevcut halinin analiz edilmesi. Web uygulamalarının ve BT altyapısının diğer tüm bileşenlerinin steril olması için en uygun kodlama standartlarının / tekniklerinin kullanılması Web bileşenlerindeki her değişiklik veya eklemeden sonra düzenli web güvenlik denetimi uygulanması.

SQL Enjeksiyondan Korunma Yöntemleri (3) 

Ek olarak, SQL Enjeksiyon ve diğer tüm saldırı tekniklerinin kontrolünde aklınızda olması gereken ana ilkeler şunlardır: “Web sitesinde güvenli olduğunu düşündüğümüz hangi bölümler hack saldırılarına açık?"

"Bir uygulamaya hangi veriyi göndererek normalde yapmaması gereken bir şeyi yaptırabiliriz?".

SQL Enjeksiyondan Korunma Yöntemleri (4) 

SQL Enjeksiyon açıklarının kontrolü web sitesinin ve web uygulamalarının denetimi ile olur. Manuel açık denetimi karmaşık olabilir ve çok zamanınızı alabilir.



Web uygulamalarını denetlemenin en iyi yolu otomatik ve keşifsel (heuristic) web güvenlik tarayıcısı kullanmaktır. Otomatik web güvenlik tarayıcısı tüm web sitenizi gezer ve SQL enjeksiyon açıklarını test eder. Hangi URL/betiklerin SQL enjeksiyondan etkilendiğini belirtir.



GreenSQL DB Firewall ile Sql Injection Önlemi 





GreenSQL, sql injection saldırıları için veritabanlarını koruma altına almak üzere geliştirilmiş bir veritabanı firewall uygulamasıdır. MySQL ve PostgreSQL‟ler için destek sunan GreenSQL temel olarak proxy olarak çalışarak gerçek database‟in önünde durur ve web uygulamasından gelen sql bağlantı isteklerini karşılayarak SQL komutlarını inceler ve bir risk scoring matrix kullanarak ilgili sql cümlelerini analiz ederek aksiyon alır. Bu şekilde, web uygulamanızda bir sql injection açığı bulunsa dahi GreenSQL sayesinde açıktan etkilenmemeniz mümkün olabilir.

Sonuç 

Aldığınız güvenlik önlemleri veya yazıp da kullanmayı bir alışkanlık haline getiremediğiniz güvenlik politikaları sizi güvenlik problemlerine karşı koruyabilir mi? Eğer güvenlik ile ilgili problemleri yönetmeyi süreç temelli bir güvenlik bilinci içerisinde ele almıyorsanız hiçbir güvenlik ürünü, bir güvenlik kaybına uğramanızı engelleyemez.

Referanslar •





• • •



http://www.eweek.com/c/a/ApplicationDevelopment/How-to-Defend-Against-Deadly-IntegerOverflow/ http://www.phrack.org/issues.html?issue=60&id=10#artic le http://msdn.microsoft.com/en-us/library/ms161953.aspx http://www.unixwiz.net/techtips/sql-injection.html http://en.wikipedia.org/wiki/SQL_injection http://sqlzoo.net/hack/ http://download.oracle.com/oll/tutorials/SQLInjection/inde x.htm

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF