28 Ekim 2014 Salı

SQL Injection

     SQL Injection, veri odaklı uygulamalarda tabanda çalışan SQL dili özelliklerinden faydalanılarak standart uygulama ekranındaki ilgili alana ek SQL ifadelerini ekleyerek yapılan bir tür atak tekniğidir. SQL Injection, uygulama yazılımları içindeki güvenlik açığından faydalanır. Örneğin, uygulama üzerinde girilen kullanıcı verisine SQL ifadeleri gömülür ve bu veri içeriği uygulama içerisinde filtre edilmiyorsa beklenmedik bir şekilde uygulamanın hata vermeden çalıştığı görülür. Bu saldırı diğer saldırılardan farklı bir atak tipi olduğu için yazılım geliştiricilerin bu açıdan saldırı geleceğini düşünmesi oldukça güçtür. Çoğunlukla web siteleri için kullanılan bir saldırı türü olarak bilinse de SQL veritabanına ait tüm uygulamalar için denenebilir bir ataktır.
     2012'de yapılan bir çalışmada, güvenlik şirketi olan Imperva'nın web uygulamalarında gözlemlemiş olduğu 'Ay başına 4 atak' seferberliğinde perakendeciler ve diğer sanayi kuruluşlarının 2 kat daha fazla atak aldıkları gözlemlendi.
Tarih
    SQL Injection üzerindeki ilk kamu tartışmaları 1998 yılında başlamıştır. 1998'de Phrak dergisinde yayımlanan bir makalede bundan söz edilmiştir.
Teknik Uygulamaları
Saldırgan, uygulama üzerinde kullanıcı giriş ifadesine SQL ifadeleri ekleyerek güvenlik açığı arar. Bunu gerçekleştirebilmek için SQL ifadelerini ve sözdizimini yeteri kadar bilmek gerekir. Aşağıdaki kod satırı, bu güvenlik açığını göstermektedir:
sorgu = "SELECT * FROM kullanicilar WHERE isim =' " + kullaniciAdi + " ';"
Yukarıdaki SQL sorgusunda kullaniciAdi alanına kullanıcı girdisi gelecektir, bu girdiye göre veritabanında arama yapılacak ve sonuç olumlu ise yazılımcının belirlediği işlemler gerçekleşecektir. Bu işlemler muhtemelen arayüzünde kullanıcıAdi verisi girişi için bir alana sahip ve bu veriye göre sisteme dahil edilme işlemini ayarlayan uygulama yazılımıdır. Arka planda girilen veriye göre veritabanında karşılaştırma yapacak ve veri veritabanında bulunuyor ise sisteme giriş sağlanacak, bulunmuyor ise sağlanmayacaktır. Günümüzde uygulamalar güvenliğin daha üst düzey olması için kullanıcı adı verisinin yanında parola da istemektedirler. Burada SQL Injection atağının etkili olabileceği bir açık varsa aşağıdaki şekilde:

' or '1' = '1 
SQL verisini giriş verisi olarak gönderir isek uygulama tabanında çalışacak sorgu:
sorgu = "SELECT * FROM kullanicilar WHERE isim =' " + kullaniciAdi ' or '1' = '1 + " ';"

şeklinde olur. kullaniciAdi verisi ne olursa olsun '1'='1' koşulu sağlanacağından ve aradaki işlemin OR olmasından dolayı sorgu sonucu her zaman olumlu olacaktır ya da SQL sözdiziminin yorum satırı haline getirme karakterlerini kullanarak:

' or '1' = '1 '--
' or '1' = '1' ({
' or '1' = '1'  /*
olumlu sonuç elde edilir. Bu karakterlerden sonra gelen tüm karakterler yorum niteliği kazanacaktır ve bir önemi kalmayacaktır.

Dispatcher property kullanımı


      WPF uygulamanızda threadleri kullanarak bir şeyler gerçekleştirmeye çalışırken (multithreading) "thread kaynağa erişemiyor hatası" almanız muhtemeldir. Bu hatayı Visual Studio IDE'si 'Başka bir iş parçacıcığına ait olduğundan çağıran iş parçacığı bu nesneye erişemiyor.' (ya da İngilizce olarak 'The calling thread cannot access this object because a different thread is own it.')  şeklinde mesaj kutusu olarak görüntüler. Alınan bu hatanın nedeni sizin ana thread'inizin (siz oluşturmasanız dahi bir program açıldığında o program bir iş parçacığı yani bir thread tarafından yürütülür, bu ana thread'tir. Diğer oluşturulan threadler eş zamanlı çalışma ve çalışma yükü hafiflesin diye oluşturulur.) kullanabileceği GUI nesnesine (button, listbox, textbox gibi) başka bir thread tarafından gelen erişim isteğidir. Başka bir thread bu nesnelere direkt olarak erişemez. Örnek ile gösterirsem:


Yukarıdaki örnekte ana thread'in ulaşabileceği myTextBox textbox'una, oluşturulmuş olan yeni bir thread erişerek textini değiştirmeyi amaçlamıştır. Fakat göründüğü üzre yukarıda bahsettiğim hata mesajı dönmüş. Bu hataya bir çözüm olarak nesnenin Dispatcher (sevk eden olarak çevirilebilir) property'sinin (özelliğinin) BeginInvoke metodu kullanılarak ve ilgili parametre olarak delegate bir metod oluşturarak üstesinden gelebiliriz. Bahsetmiş olduğum çözüm:


Böylece delegate bir metod yardımı ile ilgili thread'in erişimi altındaki nesneye müdahale edebiliriz.

11 Ekim 2014 Cumartesi

VirtualBox içindeki sanal işletim sisteminin sabit diskini resize etme

          Virtual Box ile sanal makine oluşturma işlemi gerçekleştirirken sanal makinemizin sanal sabit sürücüsünün boyutunu megabayt cinsinden belirleriz. Bu sanal sürücü boyutu, sabit diskte depolanabilecek bir sanal makine dosya verisinin miktarını sınırlandırır. Sanal makinemizi oluşturduktan sonra bazı durumlarda sanal sabit diskte yere ihtiyacımız olabilmektedir. Virtual Box IDE'si arayüzü üzerinde ne yazık ki bu alanı değiştiremiyoruz. Bu sebepten dolayı farklı bir çözüm yolu bulmalıyız. Ben yakın bir zaman önce bu problem ile karşılaştım ve şu çözümü buldum. Gerçek işletim sistemim Windows 8.1'de sanal olarak çalıştırdığım işletim sistemi Ubuntu için cmd ekranını açarak aşağıdaki şekilde sabit diski resize ettim;

1.   İlk olarak cmd komut satırına, VBoxManage uygulamasının bulunduğu dizine geçmek için;

       cd C:\Program Files\Oracle\VirtualBox

yazıyoruz. Böylelikle bu dizin içerisindeki VBoxManage uygulamasını komut satırına direkt VBoxManage yazarak çalıştırabileceğiz. Sizin path'iniz farklı olabilir, buna dikkat edin.

2.   Cmd komut istemcisine ;

       VBoxManage modifyhd --resize <Ne kadar boyutlu olsun istiyorsanız (MB cinsinden)> "vdi uzantılı sanal makinezin path'i"

yazarak işlemi gerçekleştirebiliriz.




Yukarıda benim yaptığım örneğin ekran görüntüsü bulunmaktadır. Bu işlemde yetersiz alan resize etmek kayıplara yol açabileceğinden MB cinsinden olan değere dikkat edilmelidir. Gerçek işletim sistemi olarak ubuntu kullanıyorsanız uçbirime aşağıdaki şekilde komut yazmak aynı işlevi görecektir.

   VBoxManage modifyhd <sanal makinenin yolu> --resize <yeni size>

Tabiki bu komutu yazarken VBoxManage'in bulunduğu dizinde olmamız gerekmektedir. Eğer değil isek VBoxManage'in path'ini aynı bölüme çift tırnak işareti arasında yazarken işlem gerçekleşecektir.

10 Ekim 2014 Cuma

NetBIOS (139. port) portunu disable etme

      İşletim sistemimiz üzerinde bu portun açık olup olmadığını öğrenmek için eğer işletim sistemimiz windows ise cmd.exe'yi çalıştırıp komut satırına  netstat -an yazarak görebiliriz. Ayrıca bu komut listening durumda (yani bir istek dinleyen, açık) olan tüm portları gösterecektir. Eğer işletim sistemimiz windows değilse nmap aracını sistemimize kurup (buradan indirebilirsiniz: http://nmap.org/download.html) kullanarak port taraması gerçekleştirebiliriz. 139 numaralı yani NetBIOS portu, ağ üzerindeki dosya ve yazıcı paylaşımını gerçekleştirmek için kullanılır. Bir işyerinde birden çok bilgisayarın aynı dosyalara ve yazıcıya erişimini sağlar. Herhangi bir yolla dışarıdan ağa sızan yabancı bir bilgisayar da aynı şekilde bu yolla paylaşımdaki sürücü ve dosyalara erişebilir. Bu nedenle tek bilgisayar kullananlar, bu portu kapalı tutmalıdırlar (güvenlik açısından 139 nolu portun kapatılması önerilir). Bu portu kapatmak için Windows'un eski sayılmayan sürümlerinde aşağıdaki benzer şekilde kapatabiliriz. Aşağıdaki örnek Windows 8 işletim sisteminde gerçekleştirilmiştir.




Ağ ve Paylaşım Merkezi > yerel ağ bağlantınız>Özellikler>Internet Protocol Surum 4 Ozellikler >Gelismis>WINS tabı altındaki NetBIOS'u devre dısı bırak seçenekleri takip edilerek işlem onaylanır. Böylelikle 139. port yani NetBIOS devre dışı bırakılmış olunur.




17 Temmuz 2014 Perşembe

Windows Applocker...



Applocker, bilgisayar üzerinde admin yetkisini kullanarak bilgisayarı kullanan kullanıcıların veya grupların uygulamalar üzerindeki yetkilerini kısıtlamak amacıyla kullanılan bir Windows bileşenidir. Örnek ile açıklar isek; Applocker'ı kullanarak bilgisayarımız üzerinde var olan Adobe Reader uygulamasını standart bir kullanıcı tarafından çalıştırılmasını engelleyebiliriz. Applocker'ı Windows 7 ve üzeri Windows işletim sistemleri üzerinde kullanabilirsiniz. Ek bir yükleme gerektiren bir yazılım falan değildir. Applocker'ı kullanarak bir örnek yaptığımda daha iyi anlaşılacağını düşünüyorum. Active Directory yapınız varsa bunu merkezi olarak gerçekleştirebilirsiniz. Mesela bilgisayarımda admin yetkisi ile vSphere programının belirlemiş olduğum standart bir kullanıcı tarafından çalıştırmasını engelleyelim. İlk iş olarak;




Bilgisayar üzerinde Windows+R tuş kombinasyonu ile veya başlat arama çubuğuna gpedit.msc yazarak programı çalıştırıyoruz. Karşımıza gelecek olan ekran görüntüsü;


şeklinde olucak ve yukarıda göründüğü gibi Applocker'ı göreceksiniz. Alt dizini olan Executable Rules seçeneğine sağ tıklayarak Create New Rule ile yeni kural belirleme işleme başlıyoruz.



Yukarıdaki resimde görünen arayüzde farklı bir işlem yapmayacağız. Tabi yukarıda belirten bilgileri okumada yarar var. Next diyoruz.


Burada ne tür bir eylem gerçekleştireceğimiz soruluyor. Biz yetki kısıtlayacağımız için doğal olarak Deny (Reddetmek - gelen çalıştırma isteklerini) seçeneğini işaretleyip hangi kullanıcı veya gruba bu işlemi yansıtacağımızı Select butonuna tıklayarak gelen arayüzden belirliyoruz. Ben TestEmre kullanıcısına kısıtlamayı uygulamak istediğim için Enter the object name to select bölümüne TestEmre yazıp Check Names seçeneği ile bilgisayar içinden kullanıcıya ulaştım. Burada sizdeki kullanıcı farklı domainde yer alıyorsa kullanıcıya ulaşmak için gerekli ayarları üstteki bölümlerden yapmanız gerekmektedir. Next diyoruz.



Burada hiçbir işlem yapmayıp Next diyeceğiz fakat kısaca bilgi vermekte yarar olacaktır.

Publisher : Yayımcı, uygulamayı imzalamadıysa bu seçeneği seçiyoruz. Biz imzalamadığını kabul ediyoruz.

Path : Belirli bir dosya veya dizin için kural oluşturmak için seçilir. Dizin seçilmiş ise dizin altındaki tüm klasör ve dosyalar kurala tabi tutulacaktır.

File hash : İmzalanmamış bir uygulamaya kural koyacaksak seçilmelidir.

Publisher seçeneğini seçerek devam ediyoruz.


Yukarıdaki resimde gördüğünüz gibi kural koyacağınız uygulamayı seçiyoruz. Alttaki seçeneğe bakarsak exe uzantılı olmasına dikkat etmeliyiz. Ben buradan vSphere uygulamasını seçiyorum, bilgilerin çekildiğini görüyorum ve Next ile ilerliyorum.



Yine buna bağlı olarak özel durumlar olabilir örnek vermek gerekirse Office paketi için böyle bir kural oluşturduğumuzu varsayalım. İlgili kullanıcı Outlook uygulamasını yasakladığımızı düşünürsek Excel, ve Word uygulamasını çalıştırmasını sağlayabiliriz. Şuan öyle bir seçeneğimiz olmadığı için ilerlemeye devam edelim.



Bu bölümde oluşturduğumuz kurala bir isim veriyoruz ve Create diyoruz.


Önemli sistem dosyalarının çalışabilmesi için bizden varsayılan kuralların oluşturulması gerektiği bilgisi görüntüleniyor. Yes butonuna tıklayarak devam ediyoruz.




Buradan gördüğümüz üzere işlemimiz ve varsayılan kurallar gerçekleştirilmiş durumda.



Uyarı: Oluşturduğumuz kuralın client bilgisayarlar üzerinde etkin olabilmesi için Application Identitiy (Uygulama Kimliği) servisinin açık olması ve otomatik olarak çalışıyor olması gerekmektedir. Burada otomatikten anlatmak istediğim işletim sistemi her açıldığında Uygulama Kimliği servisinin otomatik olarak başlaması gerekmektedir. Aksi taktirde oluşturduğumuz kural etkin olarak çalışmayacaktır.

Yukarıdaki resim ile bu işlemi nasıl gerçekleştirdiğimizi görüntülüyoruz. Service status Start olması gerektiğini unutmamalıyız.

Şimdi son olarak yaptığımız işlemleri test edeceğiz. Kuralı ilişkilendirdiğimiz standart user account'u ile bilgisayara giriş yaptığımızda ve vSphere uygulamasını çalıştırmak istediğimizde;




Yukarıdaki resimdeki ekran görüntüsüyle testimizin istediğimiz şekilde gerçekleştirdiğini görüyoruz. Artık bu kullanıcı hiç bir şekilde bu uygulamayı çalıştıramayacaktır ta ki admin yetki vermedikçe.


15 Temmuz 2014 Salı

Local Group Policy Editor'ü ile yetkilendirme...



Merhaba, bugün size Windows üzerinde önceden çoğu kez aklıma gelen fakat bir türlü öğrenip uygulamaya girişim göstermediğim bir olaydan bahsedeceğim. Bu olayı kısaca tanımlarsak bilgisayarda bazı kullanıcılar tarafından çalıştırılmasını veya görülmesini istemediğimiz bileşenlere erişimini engellemesi diyebiliriz. Bu daha çok Active Directory dizin sistemini kullanan kurumlar içindeki kullanıcı, bilgisayar veya printer gibi bileşenler üzerinde erişim yetkilerini belirlemek için kullanılmaktadır. Bu Group Policy denilen sistem ile gerçekleştiriliyor. Ben bu yazıda daha çok localimizdeki bilgisayar üzerinde bazı erişim yetkilerini kısıtlama hakkında bahsetmeyi hedefledim(Local Group Policy Editor). Mesela bilgisayarımız üzerinde arka plan resminin değiştirilmesi ve default olarak gelen Windows Sounds ayarlarının yapılabilmesi yetkisini kullanıcıların elinden almayı deneyelim. Tabi bu yetkileri düzenlemek için o bilgisayar üzerinde admin olarak bu işlemleri yapmalısınız. Engelsiz halde iken engelleyeceğimiz özelliklerin bir ekran görüntüsünü gösterirsem:




Görüldüğü üzere renkli çerçeveye aldığım bölümlere tıklayarak bu olayları standart kullanıcı rahatlıkla yapabiliyordu. Şimdi bu kullanıcının yoluna taş koyma işlemine başlayalım. İlk olarak arama bölümüne gpedit.msc komutunu yazıp arama sonucu çıkan programı çalıştırıyoruz.



Karşımıza gelen arayüzde kısıtlamaları yapabileceğimiz iki tür configuration seçeneği bulunuyor. Computer Configuration üzerinden bir kısıtlama gerçekleştirirsek bu bilgiasayarın kendi üzerindeki kısıtlaması olacaktır. User Configuration bölümünden ise bilgisayarı kullanan userlara kısıtlama getirebiliriz. Biz User Configuration seçeneği altında Administrator Templates ve altında Control Panel (Denetim Masası) dizini altından Personelization (Kişiselleştirme) dizini altından arka planı değiştirilmesini engelleyecek olan bileşeni bulup çift tıklama yapıyoruz. Bu bölümde user'lara uygulayabileceğimiz tüm kısıtlamalar gerçekleştirilebilir, buraya bir göz atmanızı tavsiye ederim.




Karşıma gelen arayüzde Not Configured olarak işaretlenmiş seçeneği Enable yapıp uyguluyoruz.


Aynı şekilde sounds (ses) ayarı yetkisini değiştirebileceğimiz seçeneğiniz bulup çift tıklıyoruz.


Enable olarak işaretleyip uyguluyoruz.



Dilersek yukarıdaki seçenekten local üzerinde program ekle veya kaldırma işlemini de kısıtlayabiliriz.


Ya da yukarıdaki seçenekten olduğu gibi Control Panel (Deneim Masası)'ine erişim yetkisini de kısıtlayabiliriz. Fakat biz şu an bu işlemleri gerçekleştirmeyelim.


Yukarıda yapmış olduğum iki seçeneği Enable olarak değiştirmiş iseniz cmd'yi açıp komut satırına gpupdate /force yazarak yapılan yetkilendirme işlemlerini aktif edebilirsiniz. Eğer bunu yapmaz iseniz bu değişikliklerin aktif olmasının biraz gecikme olasılığı var. Karşınıza gelen soruya y veya e (YES/EVET) olarak girdiğinizde oturumunuz kapanacaktır ve işlemler aktif olacaktır. Bu işlemi yapmadan önce işlemin aktif olup olmadığını kontrol edin, eğer aktif olmuş ise bu işlemi gerçekleştirmenize gerek yoktur. Yeniden logon olunduğunda ya da işlemler aktif olmuşsa;



İşaretlemiş olduğum alanlara tıklayamadığınızı göreceksiniz. Bu işlemi eski haline döndürmek için aynı şekilde Enable yaptığınız seçeneği Not Configured yapıp apply etmeniz yeterli olucaktır.

Active Directory hakkında...



           Active Directory yapı olarak etkileşimi olduğu ağ içerisinde var olan kaynaklara erişimin kullanıcı bazında yetkilendirme işlemlerinin ayarlanması amacıyla oluşturulmuş bir dizin sistemidir. Bu işlemler kullanıcıya özel olarakta yapılabilir, kullanıcıları bir gruba tabi tutarakta yapılabilir veya sistem üzerindeki bir printer’a da uygulanabilir.
Staj yapmakta olduğum şirket içinde Active Directory yapısından bahsedersek kullanıcıların, şirket bilgisayarlarının, müşterisi olan firmaların ve varsa bunların çeşitli lokasyonlarının bilgilerini tutuyor, gruplama yapıyor ve bunları Group Policy ile yetkileri düzenlemiş halde tutuyor. Mesela bir şirkete personel alımı durumunda Active Directory içine o personelin hesabı yaratılır, tüm gerekli bilgileri eklenir. O kişiye verilecek bilgisayar için aynı işlemler yapılır ve kişiyle ilişkilendirilir. Bu personel hangi grup içinde yer alacaksa (Sistem yönetim ekibinde ise Sistem Yönetim Grubuna eklenir) o gruba eklenir ve bu ekleme işlemi ile o grubun yetkilerine tabi tutulur. Eklenen personelin sisteme dahil olabilmesi için birer kullanıcı adı ve parolası bulunur. Bu kullanıcı adı ve parola ile lokasyon içinde herhangi bir bilgisayardan sisteme giriş yapabilir fakat kendi bilgisayarından giriş yapmadığı durumlarda standart user olarak işlemini yapabilir. Yani o bilgisayar üzerinde kendi bilgisayarı üzerinde yapabileceği şeylerin hepsini yapamayacaktır. Kendi bilgisayarında oturum açtığında local user olup grubu ya da kendi adına hangi yetkilendirmeler belirlenmişse o yetkiler aktif olur. Standart userların yetkileri farklı bir bilgisayarda oturum açan kullanıcılar için geçerlidir. Standart user olan kullanıcı şirket içerisinde o bilgisayar içerisinde program kaldırma, değiştirme gibi olayları gerçekleştiremeyip sadece programları çalıştırabilir. Eğer kullanıcı domain user (ya da administrator) ise tüm bilgisayarlarda istediği işlemleri gerçekleştirebilecektir.
Active Directory içindeki temel terimlerden bahsedersek ;
·         Domain, kullanıcı ve kaynakları barındırır. Domain’e girmek için kullanıcı adı ve parola kullanılır. İçinde operational unit’leri barındırır.
·         Operational Unit, domainin alt parçalarıdır (Gruplar, user’lar, computer’lar). Kısıtllamalara tabi tutulurlar.
·         Tree, domain içinde belli bir hiyerarşi sağlar.
·         Forrest, içerisinde domainleri barındıran ortamın genel adıdır. İçinde treeler, domainler bulunur.



          Bu sistemde tüm kontrolleri yapıldığı Primary Domain Controller adı verilen bir server bulunur.Bu server’a replike olan Additional Server  adı verilen server’lar bulunur. Bu, sistem için ayrıca süreklilik sağlar. Primary serverda Additional server’ların içerdiği bilgileri barındırır. Bir Additional server’ın problem yaşadığı durumlarda bilgi Primary server’da bulunduğundan geri döndürülebilir, primary serverdaki oluşan bir problemde ise bilgiler zaten Additional server’larda var olduğundan sorun olmayacaktır. Etki alanı denetleyici olarak kullanılan domain controller sunucusunun şirket bütünlüğünü koruması, bilgisayarların daha etkili kullanılması ve güvenliğe kattığı önem bakımından kritik bir konuma sahiptir.