SQL Enjeksiyon Saldırı Uygulaması ve Güvenlik Önerileri



Benzer belgeler
VERİTABANI. SQL (Structured Query Language)

SQL (Structured Query Language)

Veri Tabanı-I 1.Hafta

SQL e Giriş. Uzm. Murat YAZICI

DAO İLE SQL KOMUTLARI. Sql komutlarını artık veri tabanında kullanmaktan başka çaremiz yok arkadaşlar. Şimdi bu sql derslerimize başlayalım.

Bölüm 10: PHP ile Veritabanı Uygulamaları

VERİ TABANI YÖNETİM SİSTEMLERİ I

İNTERNET PROGRAMLAMA 2 A S P. N E T. Marmara Teknik Bilimler MYO / Hafta 5 Veri Tabanı İşlemleri

Veritabanı. SQL (Structured Query Language)

VERİTABANI Veritabanı Yönetimi

SQL veri tabalarına erişmek ve onları kullanmak için geliştirilmiş bir lisandır.

8 Oracle da tablo yapısı içinde otomatik artan kolon yoktur. (identity kolon

Birden Çok Tabloda Sorgulama (Join)

SQL Komutları (2) Uzm. Murat YAZICI

Microsoft SQL Server 2008 Oracle Mysql (Ücretsiz) (Uygulamalarımızda bunu kullanacağız) Access

Bu işleçlerin dışında, aşağıda belirtilen karşılaştırma işleçlerinden de yararlanılır.

Doküman JETSMS XML Mesaj Đşlemleri Yardım Dokümanı Tarih Sürüm 1.1.0

VERİ TABANI UYGULAMALARI

Aşağıdaki şemaya dikkat edin. Sorgulamalarımızı genellikle bu şemaya göre yapacağız.

Bilgisayar Uygulamaları. MySql

-- işareti tek satırlık açıklamalarda kullanılır. Açıklama olarak yazılan satırın önüne konulması yeterlidir.

Oracle da kullanılan veri tipleri:

Veri Tabanı Tasarım ve Yönetimi

Tablolar Arası İlşikiler ve Alan Özellikleri Siparis.musteri_no musteri.musteri_no Siparis.urun_kodu musteri.urun_kodu

VERİ TABANI ve YÖNETİMİ

İngilizce'de Relational Database Management System (RDBMS) olarak ifade edilir.

Veri Tabanı Yönetim Sistemleri Bölüm - 4

SQL'e Giriş. SELECT Deyimi. SQL Komutları. 1. DDL (Data Definition Language - Veri Tanımlama Dili)

1. Hafta MS SQL Server 2008 Kurulum ve Tanıtımı BPR255 Veritabanı. Bu Derste Öğrenecekleriniz: Kurulum:

Veritabanı Tasarımı. Kullanıcı Erişimini Kontrol Etme

SQL Deyimleri. Öğr.Gör.Volkan ALTINTAŞ Volkanaltintas.com

SP_RENAMEDB eski_isim, yeni_isim VEYA SP_RENAMEDB 'eski isim', 'yeni isim'

Sorgudan elde edilen değerin değişkenlere aktarılmasını sağlar. Sorgudan tek satır dönmesi gerekir. Çok satır dönerse hata verir.

State Yönetimi. Bir web sayfası ile sunucu arasındaki etkileşim ;

SORGULAR. Öğr.Gör.Volkan Altıntaş

VERİTABANI ve YÖNETİMİ

SQL'e Giriş. SELECT Deyimi. SQL Komutları. Yardımcı Deyimler

ORACLE DA KÜRSÖRLER. Gerekli sistem değişkenleri

VERİ TABANI YÖNETİM SİSTEMLERİ I

Her Yönüyle SQL Enjeksiyonu. OWASP-Türkiye Bünyamin Demir

Web Application Penetration Test Report

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER

Veritabanı Güvenliği ve Savunma Algoritmaları

Web Formlar ve Sayfalar Arasında Bilgi Gönderme. BATML İnternet Programcılığı 1

Veri Tabanı SQL Server ve Management Studio kurulum linkleri:

ELIF KIOTZEOGLOU RESUL MURAD MERT PACOLARI

Veritabanı. Ders 2 VERİTABANI

Tablolar Arası İlşikiler ve Alan Özellikleri. Şekil 1. Magaza veritabanının tabloları ve tablolar arasındaki ilişkiler

License. Veri Tabanı Sistemleri. Konular büyük miktarda verinin etkin biçimde tutulması ve işlenmesi. Problem Kayıt Dosyaları

Veritabanına Giriş. Oğuzhan Ceylan. 19 Eylül 2011

HSancak Nesne Tabanlı Programlama I Ders Notları

8. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ.

Data Programming SQL Language. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Veri Tabanı Hafta Dersi

DSİ kapsamında oluşturulan dağınık durumdaki verilerinin düzenlenmesi, yeniden tasarlanarak tek bir coğrafi veri tabanı ortamında toplanması,

VERİ TABANI YÖNETİM SİSTEMLERİ I

Web Uygulama Güvenliği Kontrol Listesi 2010

VERİ TABANI YÖNETİM SİSTEMLERİ II. 9. FORMLAR ve ORACLE FORMS PROGRAMINDA FORM OLUŞTURMA

VERİ TABANI YÖNETİM SİSTEMLERİ I

BİLGİ GÜVENLİĞİ. İsmail BEZİRGANOĞLU İdari ve Mali İşler Müdürü Türkeli Devlet Hastanesi

Algoritmalar ve Programlama. Algoritma

Bölüm 1: Veritabanı Yönetim Sistemlerine Giriş

Oracle Database 11g: Introduction to SQL

Çok tablolu sorgulamalar

Aşağıdaki tabloyu inceleyin. Sorgulama işlemlerini bu tabloya göre yapacağız.

SP_RENAMEDB eski_isim, yeni_isim VEYA SP_RENAMEDB 'eski isim', 'yeni isim'

İnternet Programcılığı

Veri Tabanı-I 1.Hafta

BMB202. Veritabanı Yönetimi Ders 5. İlişkisel Cebir ve SQL. Erdinç Uzun NKÜ Çorlu Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

VERİ GÜVENLİĞİ. Web Uygulamaları Güvenliği. Özer Çelik Matematik-Bilgisayar Bölümü

VERİ TABANI ve YÖNETİMİ

2-Veritabanı Yönetim Sistemleri/ Temel Kavramlar

Outlook ta Mail Arama

Fırat Üniversitesi Personel Bilgi Sistemi Penetrasyon(Sızma) Testi

ACCESS PLATFORMUNDA SQL

İLERİ VERİTABANI SİSTEMLERİ SUAT ÜSTKAN

SUNGURLU MESLEK YÜKSEKOKULU 5. T-SQL-2

İNTERNET PROGRAMLAMA 2 A S P. N E T. Marmara Teknik Bilimler MYO / Hafta 4 MasterPage

Yukarıdakilerden hangileri DML (Data Manipulation Language) ile gerçekleştirilir?

Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü Veri Tabanı ve Yönetimi (BİL 301)

VERĐTABANI YÖNETĐM SĐSTEMLERĐ

13 Aralık Đlgili Versiyon/lar : ETA:SQL, ETA:V.8-SQL. Đlgili Modül/ler : Raporlar. Kullanıcı Tanımlı Raporlar Bölümünden Yapabildiklerimiz

LINQ Language Integrated Query Dille Bütünleştirilmiş Sorgu Bir Veri Tabanı Tablosundan Veri Gösterme

1 Temel Kavramlar. Veritabanı 1

Kets DocPlace LOGO Entegrasyonu

Coslat Monitor (Raporcu)

T.C GAZİOSMANPAŞA ÜNİVERSİTESİ

ASP.NET 1. DURUM YÖNETİMİ. BLM 318 e-ticaret ve Uyg. Durum Yönetimi Nedir? Durum Yönetimi: Karșılaștırma İÇERİK. Sunucu-taraflı Durum Yönetimi

VERİ TABANI YÖNETİM SİSTEMLERİ I

LOGO için Online Mutabakat Kullanım Kılavuzu

Veritabanı Tasarımı. DML İşlemleri ve Görünümler

Fonksiyonlar istenilen deger tipinde dönüs yapabilir. INT, VARCHAR deger döndürebileceğiniz gibi bir tablo da döndürebilirsiniz.

SAKLI YORDAM (Stored Procedure) Sibel Somyürek

Bölüm 4: DDL Veri Tanımlama Dili

Coğrafi Bilgi Sistemlerine Giriş. Ünite 5 - Veri Tabanı Yönetim Sistemleri

Güvenlik Java ve Web Uygulama Güvenliği

Başlangıç; Sayfa 1. Sanal pos tanımlandığında üye numarası admin kullanıcı adı parolası ile Garanti Bankasından tarafınıza iletilecektir.

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER

Transkript:

1st International Symposium on Digital Forensics and Security (ISDFS 13), 20-21 May 2013, Elazığ, Turkey SQL Enjeksiyon Saldırı Uygulaması ve Güvenlik Önerileri Doygun DEMİROL 1, Resul DAŞ 2, Muhammet BAYKARA 2 1 Fırat University, Elazig/Turkey, doygundemirol@gmail.com 2 Fırat University, Elazig/Turkey, resuldas@gmail.com, muhammetbaykara23@gmail.com Abstract In recent years, the vast majority of web applications that serve professional services use SQL standard. These web applications communicate with the database through Structural Query Language. According to user requests in web applications, values are returned from database by using queries or parameters. These return values are presented the user or administrator in specific formats, according to the design of the application. However, web applications, malicious code entered by the attacker, can be manipulated dynamically generated SQL queries. SQL injection is a full malicious code entered by the user in the meantime. So, information extraction can be performed in data input areas or in the web browser address bar of the web data entry by entering malicious SQL commands. The information that obtained only this way is not public and may be hidden. An attacker could access to other information in the database using this important information about the system by adding new and different achievements to the SQL injection scenario. The attacker could damage to application or database server by executing some commands on the database server. In this study, an example of SQL injection attack and its analysis are presented on an ASP.NET- MSSQL based web application. In addition, security measures that can be taken for security vulnerabilities that encountered in web applications and solutions for SQL injection attacks are stated. Keywords SQL Injection, Web Attacks, Web Security, Information Security Özet Son yıllarda, profesyonel olarak hizmet veren web uygulamalarının büyük çoğunluğu SQL standardını kullanmaktadır. Bu web uygulamaları, veri tabanı ile yapısal bir sorgulama dili olan SQL aracılığıyla haberleşmektedir. Web uygulamalarında kullanıcı isteklerine göre, sorgu veya parametreler kullanılarak veri tabanından değerler döndürülür. Geriye döndürülen bu sonuç değerleri, uygulamanın tasarımına göre kullanıcıya veya yöneticiye belli formatlarda sunulur. Ancak, web uygulamalarında saldırgan tarafından girilen kötücül kodlarla, dinamik olarak oluşturulan SQL sorguları manipüle edilebilir. SQL enjeksiyon, kullanıcı tarafından girilen kötücül kodlarla bu işlemler gerçekleştirilirken yapılır. Yani, tarayıcı adres çubuğu veya giriş kontrolleri gibi veri girişi yapılabilen alanlara kötücül SQL komutları girilerek bilgi çıkarımı yapılabilir. Elde edilen bu bilgiler, genel kullanıma açık olmayan gizli bilgilerdir. Saldırgan, elde ettiği önemli bilgilerle SQL enjeksiyon senaryosuna yeni ve farklı boyutlar kazandırarak, veri tabanında bulunan diğer bilgilere ulaşabilir. Saldırgan, veri tabanı sunucusu üzerinde bulunan bazı komutları çalıştırarak uygulamaya veya sunucuya zarar verebilir. Bu çalışmada, ASP.NET-MSSQL tabanlı web uygulaması üzerinde, bir SQL enjeksiyonu saldırı örneği ve analizi sunulmuştur. Ayrıca, web uygulamalarında karşılaşılan güvenlik zafiyetlerine yönelik alınabilecek güvenlik önlemleri ve çözüm önerileri belirtilmiştir. Anahtar Kelimeler SQL Enjeksiyon, Web Atakları, Web Güvenliği, Bilgi Güvenliği S I. GİRİŞ QL (Structured Query Language), veri tabanlarından veri seçme, silme ve güncelleme gibi işlemleri yapabilmek için kullanılan yapısal bir sorgulama dilidir. Hem ANSI, hem de ISO standardı olan SQL, yaygın olarak kullanılan Oracle, PostgreSQL, MSSQL Server, MySQL, DB2 gibi modern veri tabanı yönetim sistemlerinin temelini oluşturmaktadır [1]. Günümüzde profesyonel olarak hizmet sunan web uygulamalarının tamamına yakını veri tabanlarını kullanmaktadır. Online çalışan bu web uygulamaları, veri tabanı ile yapısal bir sorgulama dili olan SQL aracılığıyla haberleşirler [2]. SQL Enjeksiyon ise, web uygulamalarından alınan kullanıcı girdileri ile oluşturulan SQL sorgularının manipülasyonu olarak tanımlanabilir [3]. Kullanıcıların etkileşimde bulundukları veri tabanlı web uygulamalarında, sorgu veya parametreler kullanılarak veri tabanı tablolarındaki bilgiler belli şartlara göre filtrelenerek uygulama ara yüzüne aktarılır. Aktarılan bu sonuç değerleri, uygulamanın tasarımına göre kullanıcıya veya yöneticiye belli formatlarda sunulur. SQL enjeksiyonu yöntemi tam bu işlemler gerçekleştirilirken yapılır. Saldırgan, web tarayıcı adres çubuğuna veya uygulamada bulunan giriş kontrollerine kötücül kodlar ekleyerek, SQL enjeksiyon saldırısını gerçekleştirir. Genel kullanıma açık olmayan ancak bu şekilde elde edilen bilgiler önemli ve gizli olabilir. Saldırgan, sistem ve veri tabanı hakkında elde ettiği bu önemli bilgilerle SQL enjeksiyon senaryosuna farklı boyutlar kazandırarak, veri tabanında bulunan diğer bilgilere ulaşabilir. Sonrasında elde ettiği bilgileri kullanarak, hedefini gerçekleştirir.

D.Demirol, R. Das, M.Baykara Bu çalışmada, ASP.NET-MSSQL tabanlı web uygulaması üzerinde, web saldırı tekniklerinden biri olan SQL enjeksiyon saldırısı ve analizi sunulmuştur. Ayrıca, bu saldırıya karşı alınabilecek çözüm önerileri verilmiştir. II. WEB GÜVENLİĞİ Günümüz teknoloji çağında, internetin kullanımıyla bilginin küreselleşmesi arasında doğru bir orantı vardır. İnternet kullanımı arttıkça bilgi küreselleşmekte ve en ücra köşedeki bilgilere internet vasıtasıyla kolaylıkla ulaşılabilmektedir. Uluslararası Telekomünikasyon Birliği nin 2012 Bilgi Toplumu Ölçümü raporuna göre dünyadaki internet kullanıcı sayısı her geçen yıl artmaktadır. 2011 senesine oranla 2012 yılında internet kullanıcı sayısı %11 lik bir artışla 2,3 milyara ulaşmıştır [4]. İnternet in yaygın kullanımı ile web üzerinde bulunan bilgilerin mahremiyeti ve güvenliğinin sağlanması, kişisel ve kurumsal olarak daha önemli bir hale gelmiştir. Kullanıcılar, bilgi sistemleri üzerinden hizmet alıp verirken kurumsal bilgi kaynaklarını doğrudan ya da dolaylı olarak kullanmaktadır. Bu kaynaklar kişiye özel bilgileri barındırabilmektedir. Bu durum kurumsal bilgi kaynaklarının güvenliğini, daha da önemli hale getirmiştir [5]. İnternet kullanıcılarının, bilgi kaynaklarıyla etkileşimleri sonucunda veri tabanlarında tutulan kişisel bilgiler, internet korsanları tarafından illegal erişimlerle kötü amaçlar doğrultusunda kullanılabilir. Bu tarz illegal erişimler sadece kullanıcılara değil, ülke ekonomilerine de ciddi zararlar vermektedir. Symantec firmasının 2012 Norton Siber Suç Raporu na göre, Türkiye de siber suçların toplam net zarar maliyeti 556 milyon doları bulmaktadır. Rapora göre bu maliyet dünya çapında 110 milyar dolar gibi büyük bir rakama tekabül etmektedir [6]. Raporda telaffuz edilen rakamlara bakılınca siber alanda güvenliğin ne kadar önemli ve gerekli olduğu anlaşılmaktadır. Web sunucularında barındırılan web uygulamaları; veri tabanları veya diğer içeriklerle etkileşim içinde olan betiklerden meydana gelir. Bu uygulamalarda, sunucu ile istemciler etkileşim halindedir [7]. Kullanıcı istekleri, web sunucuları üzerinde çalıştırıldığından sunucular, saldırganlar tarafından yapılan saldırılara karşı korunmasız ve açık bir hedef halindedirler. Web teknolojilerinin gelişmesiyle beraber insanlar, kurum ve kuruluşlar web uygulamalarını daha çok kullanmaya başlamıştır. Çevrimiçi web hizmetlerine her yerden erişimin kolayca sağlanabilmesi, zaman kaybını azalttığı ve işlemlerin daha kolay bir halde yapılmasını sağladığı için web uygulamalarının kullanımı gün geçtikçe artmıştır. Bütün bunlara paralel olarak web saldırılarında da artış olmuştur. Literatürde SQL enjeksiyonu saldırıları ile ilgili birçok çalışma yapılmıştır. Halfond ve arkadaşları yaptıkları çalışmada, SQL Enjeksiyonu yöntemini; SQL sorgularında web uygulamaları aracılığıyla istemci tarafından sağlanan verileri kullanarak arka planda çalışan, web tabanlı giriş alanlarına meta karakteri ve komutları ekleme tekniği olarak tanımlamışlardır. Ayrıca SQL enjeksiyonu saldırılarını sınıflandırarak, alınabilecek önlemlerden bahsetmişlerdir [8]. OWASP (The Open Web Application Security Project) web sitesinde SQL Enjeksiyonu yöntemi, istemciden uygulamaya gelen giriş verilerinin SQL sorgularına enjekte edilmesi olarak tanımlanmıştır. Buna ilaveten, bu yöntemin tehlikelerinden ve saldırganların enjeksiyon ile neler yapabileceklerinden bahsedilmiştir [9]. Gregory T. Buehrer ve arkadaşları çalışmalarında, SQL Enjeksiyonu yöntemini; güvenlik saldırı türü olarak ele almış ve kötü niyetli bir kullanıcının arka planda veri tabanına SQL deyiminin bir parçası olarak gönderdiği kullanıcı girdisi olarak tanımlamıştır. Çalışmalarında Ayrıştırma Ağacı (Parse Tree) yöntemini kullanarak bu saldırının nasıl önlenebildiğini belirtmişlerdir [10]. Khaleel Ahmad ve arkadaşları ise SQL enjeksiyon yöntemini; web uygulamasının veri tabanını kullanan bir metot olarak tanımlamış, bir giriş dizesi olarak SQL ifadelerine enjekte edilip veri tabanına yetkisiz erişim sağlanması şeklinde ifade ederek, çalışmalarında SQL saldırılarını sınıflandırmışlardır [11]. III. SQL ENJEKSİYONU UYGULAMASI Bu bölümde, SQL veri tabanı kullanan bir web uygulaması üzerinde SQL enjeksiyon saldırısı örneği sunulmaktadır. Saldırı, MSSQL veri tabanı kullanan basit bir ASP.NET haber uygulaması üzerinde gösterilmiştir. Uygulamanın veri tabanındaki tabloları ve ilişkileri Şekil-1 de gösterilmiştir. Şekil 1: Veri Tabanı Tabloları ve İlişkileri Saldırı, web uygulaması üzerinde bir SQL enjeksiyon açığının olup olmadığını aramakla başlamaktadır. Şekil- 2 de örnek web uygulamasının haber kategorilerinin listesi görülmektedir.

SQL Enjeksiyon Saldırılarına Karşı Güvenlik Önlemleri QueryString ile veri gönderiminde URL adresine müdahale edilerek veri tabanı hatası alınmaya çalışılmıştır. Şekil-5 de görülen hata mesajından, bu sayfaya SQL enjeksiyonu saldırısı yapılabileceği anlaşılmaktadır. B. Veri Tabanı Hakkında Bilgi Toplanması Şekil 2: Web Uygulamasından Örnek Bir Kesit A. SQL Enjeksiyonu için Açıkların Tespit Edilmesi SQL Enjeksiyonu açığı bulmak için çeşitli yollar vardır. Bu uygulamada, tarayıcının adres çubuğuna çeşitli SQL komutları yazılarak, saldırı gerçekleştirilmektedir. Bu yöntem ile SQL enjeksiyonu açığını bulabilmek için öncelikle QueryString ile veri gönderen sayfaları bulup, bu sayfalar üzerinde güvenlik açığının olup olmadığı bulunmalıdır. Şekil-2 de gösterilen kategorilerden Policy News kategorisi seçildiğinde Default.aspx web formundan id QueryString değişkeni ile Default2.aspx web formuna Şekil-3 de görüldüğü gibi bir QueryString değeri gönderilir. Öncelikle saldırı amacına yönelik, veri tabanı ile ilgili bilgi toplanması gerekmektedir. Veri tabanında bulunan tablo ve tablo alan isimleri Şekil-5 de gösterilen hatanın alındığı sayfadan yararlanılarak öğrenilebilir. Öğrenilen tablo ve tablo alan isimlerine göre saldırıya yön verilmesi gerekmektedir. Bu amaçla, ilk önce saldırı yapılacak web sitesi için neler yapılacağının belirlenmesi gerekir. Eğer bu web sitesi tamamen ele geçirilmek isteniyorsa buna yöneticinin kullanıcı adı ve şifresinin tutulduğu SQL tablosunu bulmakla başlanabilir. Saldırı için tarayıcı adres çubuğuna HAVING 1=1 SQL komutu yazıldığında Şekil-6 da gösterilen hata alınmıştır. Bu hata mesajının Şekil-5 deki hatadan farkı, veri tabanında haberlerin bulunduğu tablonun ismini ve bu tablo içinde bulunan primary key kolonunun ismini göstermesidir. HAVING ifadesi GROUP BY ifadesi ile birlikte kullanılan bir ifadedir. HAVING ifadesinin işlevi WHERE ifadesinin işlevi ile benzerdir. Ancak kümeleme fonksiyonu olan GROUP BY ile WHERE ifadesi birlikte kullanılamadığı için HAVING ifadesine ihtiyaç duyulmuştur. Eğer HAVING ifadesinde tanımlı tablo alanı yok ise primary key olan tablo alanı, HAVING ifadesinden sonra varsayılan olarak tanımlanır. Bu nedenle kullanılan tablo ismi ile primary key alanının ismini Şekil-6 deki gibi hataya ekler [12]. Şekil 3: QueryString Gönderimi id değişken adı ile gönderilen bu değer, veri tabanında ilgili tablodaki satırın kayıt numarasını göstermektedir. QueryString ile veri gönderen bu sayfayı bulduktan sonra bu sayfada SQL enjeksiyon açığının olup olmadığını kontrol etmek gerekmektedir. Bu işlemi gerçekleştirebilmek için adres çubuğundaki URL adresinin sonuna Şekil-4 de belirtilen tek tırnak gibi karakterler yazılır. Bu işlem, veri tabanında hata oluşup oluşmadığını göstermektedir. Şekil 4: Tek Tırnak İşaretinin Kullanılması System.Data.SqlClient.SqlException (0x80131904): Unclosed quotation mark after the character string ''. Şekil 5: Veri Tabanı Hatası Örneği Şekil 6: HAVING Komutu Uygulama Sonucu Ekran Çıktısı Saldırının uygulandığı veri tabanında, TBL_CONTENT adında bir tablo olduğu ve bu tablonun CONTENT_ID adında bir alanının olduğu Şekil-6 dan anlaşılabilir. Bu tabloda bulunan diğer alanların isimlerini bulabilmek için SQL sorgusunda biraz değişiklik yapılmalıdır. Tabloda CONTENT_ID adında bir alanın olduğu bilindiğine göre HAVING ifadesinden önce GROUP BY ifadesi kullanılarak diğer tablo isimlerinin öğrenilmesi gerekmektedir. Şekil- 7 de görüldüğü gibi HAVING ifadesinden önce adres çubuğunda ilgili yere GROUP BY CONTENT_ID ifadesi yazılınca, hata mesajında tabloda bulunan bir başka alanın ismi görüldü. Diğer alan isimlerinin öğrenilmesi için adres 3

D.Demirol, R. Das, M.Baykara çubuğuna Şekil-8 deki gibi GROUP BY ifadesinden sonra elde edilen diğer alan ismi virgül ile ayrılarak yazılmalıdır. Bu sayede diğer tüm tablo alanı isimleri bulunabilir. Şekil 7: Hata Ekran Çıktısı Şekil 8: Hata Ekran Çıktısı sonuna eklenmelidir. Bu işlem sonucunda Şekil-10 da görüldüğü gibi TBL_ADMIN tablosu hata mesajında yer almaktadır. Bu tabloya yeni bir yönetici eklenerek, sistem yönetimi ele geçirilebilir ve veri tabanında bulunan tablolar silinebilir. Saldırgan, SQL dilini kullanarak tespit ettiği açıklardan yararlanarak, sisteme birçok farklı zararlar verebilir. Default2.aspx?id=2+UNION+SELECT+TOP+1+TABLE_NA ME,TABLE_NAME,TABLE_NAME,TABLE_NAME+FROM +INFORMATION_SCHEMA.TABLES+WHERE+TABLE_N AME+NOT+IN+('TBL_CONTENT') AND TABLE_NAME NOT IN ( TBL_CATEGORIES ) Böylece, veri tabanında bulunan bir tablonun adı ve içerdiği tüm alanların isimleri tespit edilir. Daha sonra asıl hedef olan yönetici bilgilerinin tutulduğu tablo isminin bulunması gerekmektedir. Bunun için adres çubuğundaki SQL ifadesinde birkaç değişiklik yapılmalıdır. UNION deyimi kullanılarak SQL sorguları birleştirilip ekranda bir hata oluşturulması sağlanabilir. UNION deyimi SQL dilinde iki veya daha fazla sorgunun sonuçlarını birleştirmek için kullanılabilir. Bu komutu kullanırken dikkat edilmesi gereken nokta, deyimin her iki tarafında da bulunan select sorgularının seçtiği sütun sayılarının aynı olmasıdır. Yukarıda TBL_CONTENT tablosundaki alan isimlerinin nasıl bulunduğuna değinilmişti. Bu tabloda dört tane alan olduğu Şekil-1 deki veri tabanı diyagramından da görülebilir. Bu dört alana karşılık gelmek üzere UNION ifadesinden sonra bir select sorgusunun daha yazılması gerekmektedir. Bu select sorgusu için veri tabanındaki tablo isimlerini listeleyen sorgu ifadesi Şekil-9 da gösterilmiştir. Default2.aspx?id=2+UNION+SELECT+TOP+1+TABLE_NAM E,TABLE_NAME,TABLE_NAME,TABLE_NAME+FROM+I NFORMATION_SCHEMA.TABLES+WHERE+TABLE_NAM E+NOT+IN+('TBL_CONTENT') Şekil 10: Yönetici Tablosu Adının Öğrenilmesi C. Saldırının Uygulanması ve Sonuçları Uygulamaya ait yönetici tablosu bulunduktan sonra saldırı hedefinin doğrultusunda HAVING ifadesi ile TBL_ADMIN tablosunun alan isimleri öğrenilebilir. Bu işlem, TBL_ADMIN tablosuna yeni bir yönetici eklenmesi için gerekli olacaktır. Yeni yönetici eklenmesi için adres çubuğundaki SQL ifadesinin Şekil-11 deki gibi değiştirilmesi gerekir. Default2.aspx?id=2+INSERT+INTO+TBL_ADMIN(USERNA ME,+PASS,+EMAIL)+VALUES('Hacker','12345', 'hacker@example.com') Şekil 11: INSERT INTO Deyimi İle Yeni Yönetici Ekleme Şekil-12 de yönetici tablosunun INSERT INTO komutu uygulanmadan önceki durumu, Şekil-13 de ise bu komut uygulandıktan sonraki görünümü gösterilmektedir. INSERT INTO komutu ile yeni yönetici eklendiğine göre artık web sitesinin tüm yönetimi ele geçirilmiş demektir. Şekil 9: UNION Komutu Uygulaması ve Çıktısı UNION ifadesinin sol tarafında id=2 olan SQL ifadesi, web formunda arka planda mevcuttur. UNION ifadesinin sağ tarafına Şekil-9 da görüldüğü gibi eklenen ifade ile select sorgularının sonuçları birleştirilmiştir. TABLE_NAME ifadesi TBL_CONTENT tablosunda dört tane alan olduğu için dört kere tekrarlandı ve NOT IN ( TBL_CONTENT ) ifadesi sayesinde de önceden ismi bilinen tablonun isminin tekrar görünmemesi sağlanmış oldu. Böylece Şekil-10 da görüldüğü üzere veri tabanında bulunan bir diğer tablonun adı bulundu. Amaç yönetici tablosunun tespiti olduğu için adres çubuğundaki SQL ifadesine diğer tablonun ismi Şekil- 10 daki gibi eklenmiştir. Bu şekilde yönetici tablosu bulunana kadar, bulunan her tablonun ismi SQL ifadesinin Şekil 12: INSERT INTO Komutu Öncesi Yönetici Tablosu Şekil 13: INSERT INTO Komutundan Sonra Yönetici Tablosu

SQL Enjeksiyon Saldırılarına Karşı Güvenlik Önlemleri IV. SONUÇ VE ÖNERİLER Veri tabanı kullanan bir web uygulamasındaki SQL enjeksiyonu açığı tespit edildikten sonra yapılabilecek işlemler, uygulanan SQL ifadeleri sonucu alınan hatalar dikkate alınarak belirlenebilir. Böylece web sitesinin yönetimi ele geçirilebilir, veri tabanına yeni tablolar eklenebilir, var olan tablolar silinebilir. Veri tabanı yönetimi ele geçirilerek, sistem üzerinde yönetici hakkı elde edilebilir. Erişilen bilgilere göre saldırının türü, boyutu ve yapılabilecek işlemler farklılık gösterebilir. Bu nedenle, geliştirilen bir web uygulamasında muhtemel sızma veya saldırılara karşı, birçok husus göz önünde bulundurulmalıdır [18]. Yapılan kapsamlı literatür çalışmaları ile elde edilen bilgiler ve gerçekleştirilen örnek uygulamalar ile sızmalara karşı kazanılan tecrübeler ışığında, bu konuda ilk akla gelen öneriler aşağıda belirtilmiştir. Veri tabanında bulunan tablo ve tablo alanı isimlerinin kolay tahmin edilebilecek şekilde olmaması gerekir. Web formlarında parametrik sorguların kullanılması tercih edilmelidir. Web formlarındaki giriş kontrollerine veri girişi yapılırken bu verilerin doğrulanması, girdi uzunluğunun kontrol edilmesi önemlidir. Web formlarında kullanılan ve veri tabanında bir kayıt satırını temsil eden sayısal değerler için (QueryString değeri) formlar arası geçişlerde bu değerlerin sayısal değer olup olmadığının kontrol edilmesi gerekir. SQL tabanlı web uygulamalarında kullanıcı, veri girişi yaptıktan sonra veri tabanına gönderilen SQL sorgusu karakterlerinde arama yaptırılarak tehlikeli karakterleri, replace vb. komutlarla SQL Sunucuda hataya yol açmayacak şekilde zararsız karakterlere çevrilmelidir. SQL sunucuda oluşacak hataların web formlarında görüntülenmesi engellenmelidir. Web uygulamalarında kullanılan veri tabanına yazma, okuma, silme gibi temel özelliklerin yalnızca bir yönetici tarafından yönetilmesi gerekir. Uygulamada web formlarına sorgu yazmak yerine, bu sorguları veri tabanı kısmında saklı yordam (Stored Procedure) olarak yazılması sağlanmalıdır. SQL enjeksiyon yönteminde kullanılabilecek sözcüklerin (select, insert, update vb.) bir fonksiyon ile filtrelenmesi olası sızmalara karşı bilgi verilmesini engeller. Veri tabanının kullanacak yöneticilerin yetkilendirilme işlemlerinde, sınırlı yetkilere sahip kullanıcı hesabı ile çalıştırılmasına büyük özen gösterilmelidir. Kullanılmayan saklı yordamların ve yönetici hesaplarının kaldırması gerekir. Sistem nesneleri için genel erişim verilmemeli, gerekirse kullanıcı bazında yetki verilmelidir. Web uygulaması ve veri tabanı sunucularının bulunduğu sistem, donanım veya yazılım tabanlı bir güvenlik duvarı ile saldırılara karşı muhafaza edilmelidir. Yukarıda belirtilen öneriler dikkate alındığında, veri tabanı kullanan web uygulamaları, büyük ölçüde SQL enjeksiyon saldırılarından korunmuş olacaktır. KAYNAKLAR [1] Vural, Y., "Kurumsal Bilgi Güvenliği ve Sızma Testleri" Yüksek Lisans Tezi, Bilgisayar Mühendisliği, Gazi Üniversitesi, ANKARA, 2007. [2] İnternet:http://www.gokselcuryan.com/haberler/3-teknolojiyenilikleri/100-SQL-injection-nedir.html, Erişim Tarihi: 20.04.2013. [3] Anley, C., Advanced SQL Injection In SQL Server Applications, Next Generation Security Software Publication, Surrey, 2002. [4] İnternet: International Telecommunication UNION, http://www.itu.int/itu- D/ict/publications/idi/material/2012/MIS2012_without_Annex_ 4.pdf, Erişim Tarihi: 25.03.2013. [5] Vural, Y., Sağıroğlu Ş., Kurumsal Bilgi Güvenliği ve Standartları Üzerine Bir İnceleme, Gazi Üniv. Müh. Mim. Fak. Der, Cilt 23, No 2, 507-522, 2008. [6] İnternet:http://www.symantec.com/tr/tr/about/news/release/artic le.jsp?prid=20121113_03, Erişim Tarihi: 28.03.2013. [7] Takcı H., Akyüz T., Soğukpınar İ., Web Atakları İçin Metin Tabanlı Anormallik Tespiti, Gazi Üniv. Müh. Mim. Fak. Der, Cilt 22, No 2, 247-253, 2007. [8] William G.J. Halfond, Jeremy Viegas, and Alessandro Orso, A Classification of SQL Injection Attacks and Countermeasures, College of Computing, Georgia Institute of Technology, 2006. [9] İnternet:https://www.owasp.org/index.php/Guide_to_SQL_Injec tion, Erişim Tarihi: 25.03.2013. [10] Gregory T. Buehrer, Bruce W. Weide, and Paolo A. G. Sivilotti, "Using Parse Tree Validation to Prevent SQL Injection Attacks", Computer Science and Engineering, The Ohio State University, 2005. [11] Khaleel Ahmad, Jayant Shekhar, K.P. Yadav, Classification of SQL Injection Attacks, VSRD-TNTJ, Vol. I (4), 2010, 235-242. [12] İnternet: http://mbsbilisim.com/sql-injection-nasil-yapilir- Ornek-841, Erişim Tarihi:16.03.2013. [13] İnternet:http://www.sans.org/reading_room/whitepapers/securec ode/ SQL- injection-modes-attack-defence-matters_23, Erişim Tarihi: 28.03.2013. [14] J. Clarke, SQL Injection Attacks and Defense, USA: Laura Colantoni, 2009. [15] İnternet: http://www.yazgelistir.com/ipucu/sql-injection-vekorunma-yontemleri-2, Erişim Tarihi: 28.03.2013. [16] İpek İ. T., Avcı K., SQL Injection ve Bilgi Güvenliği, MYO- ÖS 2010-Ulusal Meslek Yüksekokulları Öğrenci Sempozyumu, 2010. [17] İnternet: http://soulsecurity.wordpress.com/2012/12/05/sqlinjection-temel-saldiri-ve-savunma/, 28.03.2013. [18] Daş, R., Kara, Ş., Gündüz, M.Z., "Casus Yazılımların Bilgisayar Sistemlerine Bulaşma Belirtileri ve Çözüm Önerileri", 5. Uluslararası Bilgi Güvenliği ve Kriptoloji Konferansı (5th International Conference on Information Security and Cryptology), 17-18 Mayıs 2012, ODTÜ, Ankara. 5