23 Mayıs 2014 Cuma

Javascript's Darkside Part 1 | Same Origin Policy

Javascript's Darkside Part 1


[ + ] Same Origin Policy

Same Origin Policy, web tarayıcılar için bir güvenlik modelidir. Bu model aynı kaynaklar dışında farklı kaynaklardan dosya/script yüklememizi ve çalıştırmamızı engellemektedir. Bu model kapsamında tarayıcılar farklı kaynaklar için izole edilmiş durumdadır.

SOP'yi anlamak açısından aşağıdaki aynı kaynak ( Same Origin ) formülünü dikkatlice inceleyelim.

Origin = Scheme + Host + Port

http://www.example.com  --> SAMEORIGIN
http://www.example.com/other/document/here --> SAMEORIGIN
https://example.com/document 
https://www.example.com/document
https://www.example.com:8080/document


21 Ekim 2013 Pazartesi

Neden işletim sistemi geliştirmeliyiz?

Kuşkusuz kullandığımız bilgisayarlarda bulunan Windows serisi ve açık kaynaklı Unix türevi işletim sistemlerinin sahip olduğu güç tartışılamaz. İkisi ve diğerleri yabancı ellerden çıkmış ve buralara gelmiş işletim sistemleri/çekirdekleri. Peki ya biz ? Bizim ülkemizde var mı böyle işletim sistemleri ? Önce işletim sistemi nedir ne değildir ona bir bakalım.


İşletim sistemleri bilgisayarınızda bulunan donanım kaynaklarını yöneten, kullanıcı ile donanım arasındaki bağlantıyı sağlayan yazılımların bir bütünüdür. İşletim sistemleri sayesinde "low-level" olarak adlandırılan işlemler kullanıcıdan soyutlanır ve işletim sistemi tarafından gerçekleştirilir. Çalıştırdığınız programların bellek yönetiminden tutun, farenizin hareket etmesine kadar her şey onun tarafından kapalı kapılar ardında, gözlerden uzak olarak gerçekleştirilir.

Peki böyle bir yazılım geliştirmek neden önemli ? 

En başta gelecek nesillere bilgi birikimi bırakmak, ülkede yetişecek sistem programcılarının sayısını arttırmak için. Bugün baktığımızda işletim sistemi geliştirmek adına Türkçe olarak yazılmış makale neredeyse yok. Bir şeyler yapmaya çalışan insanlar yabancı kaynakları kullanarak yapmaya çalışıyor. Bu durumdan kurtulabilmek için bu alanda araştırma yapılmalı, ortaya elle tutulur somut kalıntılar bırakılmalı, bunun dışında sadece eğlence için bile işletim sistemi geliştirilebilir. Hobi işletim sistemi adı altında geliştirilen bu işletim sistemleri programlama bilgisini arttırmak ve donanım ile konuşmanın verdiği zevki tatmak için çok uygun. Son olarak belki de var olan işletim sistemlerini yerini alacak, daha iyi bir işletim sistemi geliştirmek. Uzun vadede bu zor bir ihtimal olsa da imkansız değil.

Peki işletim sisteminin yapısı nasıl ? 

Genel olarak işletim sistemlerinin açılabilmesi için Önyükleyici (bootloader) adı verilen işletim sistemi parçaları bulunmaktadır. Önyükleyiciler işletim sisteminin açılması için gereken ilk adımları gerçekleştirir. İşletim sistemi açıldıktan sonra devreye çekirdek girecek ve donanımla olan haberleşme tam anlamıyla başlayacaktır. Çekirdek kendi arasında bölümlere ayrılıyor, hafıza yönetimi, işlem yönetimi, dosya sistemi yönetimi gibi. Bunların her biri neredeyse ayrı ayrı uzmanlık isteyen alanlar. Hepsinin bir tek kişi tarafından bir yere kadar geliştirilmesi mümkün, fakat bir süre sonra artık içinden çıkılmaz bir hal alıyor ve takımı büyütmek durumunda kalıyorsunuz. Kağıt üzerinde çok kolay gibi gözükse de burada henüz yürüyemeyen bir bebeğin yetişkin bir insan olması gibi zor bir süreç var. İşletim sisteminiz siz öğretmediğiniz sürece alt satıra bile geçemiyor, her şeyi sıfırdan siz yazmak zorundasınız.

Başlamak için temel şeylerden bahsedip, yazıyı bitirelim. Öncelikle bilmeniz gereken şey gerçekten iyi bir sabır ve merak duygusuna sahip olmanız gerektiği. Geliştirme aşamasında karşınıza sayısız hata çıkacak, bunların hepsini tek başınıza düzeltmeniz gerekecek, destek beklememek zorundasınız. En azından ülkemizde şuan için durum böyle. Bunun dışında başlıca olmazsa olmaz Assembly bilmek zorundasınız. Bir süre sonra başka bir programlama diline ki bu genellikle C/C++ olur geçerek biraz daha rahatlayabilirsiniz fakat önyükleyici ve bazı low-level yazılımlar için assembly kullanmanız şart. Örneğin sistemin açılmasını için gereken ön yükleyiciyi assembly ile yazıp, gerçek moddan korumalı moda geçişi yapmalısınız.

Üzerinde çalıştığınız donanımların yapısını bilmeniz gerekiyor, sonuçta burada siz ram ile, cpu ile konuşacaksınız dillerini bilmeniz gerek. Nasıl çalıştıklarını derinlemesine olmasada bilmelisiniz. Bunun dışında geliştirdiğiniz kodları derleyebilmek, bağlayabilmek için gerekli yazılımların kullanımını bilmeniz gerekiyor. Örneğin C/C++ derleyicisi GCC, assembler nasm, bağlama için GNU ld... Yazdığınız işletim sistemini başlarda test edebilmek için bazı emülatörlerden yararlanmanız da gerekecek, örneğin Qemu,Bochs veya VirtualBox. Son olarak bolca zaman gerekli. İşletim sistemi geliştirmek bügün karar verip yarın ortaya koymak şeklinde olmuyor. Uzun zaman gerektiren bir iş, üstelik tek başınıza yapacaksınız bunu, destek bulabilirseniz ne âlâ. Bu konularda bilgi edinmek için bakınabileceğiniz en iyi yerlerden biri muhtemelen osdev.org. Şuan için internet üzerinde en geniş bilgi sanırım burada var, başlamak için ideal bir yer.

Ebubekir Karul
Posted on 00:51 | Categories:

17 Ekim 2013 Perşembe

strcasecmp fonksiyonu ile login bypass



strcasecmp fonksiyonu iki string'in aynı olup olmadığını kontrol etmek amaçlı kullanılmaktadır.

Fonksiyonun kullanımıyla ilgili PHP dökümantasyonuna göz atabilirsiniz.
http://uk3.php.net/manual/tr/function.strcasecmp.php

İlk olarak bu fonksiyonun sebep olduğu güvenlik açığını anlamak için ufak bir kod parçası yazalım.

<?php

    $anahtar = "gizliveri";

    $parola = "test";

    if ( strcasecmp( $_GET['parola'], $parola ) == 0 ) {

        echo $anahtar;

    }

?>

Görüldüğü gibi GET isteği ile kullanıcıdan bilgi alınıyor. vuln.php?parola=TEST veya vuln.php?parola=test yaparak anahtar değişkeninin değerini çıktı olarak görebilirsiniz.

Peki url'i şu şekilde değiştirsek neler olur?

vuln.php?parola[]=test

Burada parola isimli GET isteğini array olarak belirleyerek, parola değişkenine eşitlemiş olduk. Sonucu görmek için var_dump($_GET['parola']); fonksiyonu ile debug yapalım.

array(1) { [0] => string(5) "$parola" }

Görüldüğü gibi parola isimli array, parola değişkenine işaret ediyor ve anahtar değişkeni çıktı olarak veriyor.

Sonuç olarak, parola değerini bilmeden mevcut fonksiyonu bypass etmiş olduk.

Testlerde kullanılan PHP sürümü:
PHP 5.4.6-1ubuntu1.2 (cli)

EOF






7 Ekim 2013 Pazartesi

Kurumlar için hata ödül programı




Hata Ödül Programı ( Bug Bounty Program ) nedir?

Firmaların sistemlerinde bulduğunuz güvenlik açıklarını kendilerine bildirmeniz karşılığında ödül kazandığınız ( Para , Eşantiyon, Onur listesi vb gibi... ), karşılıklı güvene dayalı bir organizasyondur. Türkiye'de henüz bir örneğini görmediğimiz bu uygulama, yurt dışında büyük ve orta ölçekli firmalar tarafından uzun bir süre önce başlamıştır.

Örnek bir liste:
https://bugcrowd.com/list-of-bug-bounty-programs/

Neden Hata Ödül Programı?

Firmalarda yaygınlaştırılan uygulamaların, servislerin maruz kaldığı sofistike saldırılar karşısında, geleneksel çözümler yetersiz kalmaktadır. Bu noktada hata ödül programları, güvenlik katmanına bambaşka bir bakış açısı kazandırmış olup kurum kültürünü devrimsel bir şekilde yeniden biçimlendirilmiştir.

4 Ekim 2013 Cuma

Bugün Bilge Adam'daydık




ProjeX Capture The Flag yarışmasının 1’incisi Yalçın G., Bilge Adam merkez ofisine misafir oldu.

Superbug.co'dan Bilgi Güvenliği Araştırmacısı ve marka ortağı Evren Yalçın
Bilge Adam Eğitim Hiz. Ürün Yön. Birim Müdürü Başak DEMİR ile Pazarlama Müd.Yrd. Özkan YILMAZ tarafından %100 burslu Java ve Android Online Senkron eğitimi kendisine takdim edildi.

29 Eylül 2013 Pazar

Türkiye'nin ilk fiziksel CTF yarışması (sonuçlandı)


Merhabalar,

Proje X CTF yarışmamız 120 kişinin aktif/pasif katılımıyla birlikte sonuçlandı.

Yarışmacılar sokak sokak dolaşarak USB belleklere ulaşmaya çalıştı. Aktif bir şekilde kod avcılığı yaptılar. Sürprizlerle karşılaştılar. Yarışmanın, hem bizim açımızdan hem de yarışmacılar açısından sürükleyici geçtiğini düşünüyorum. Eğlenceli bir birliktelik oldu.

Kolektif bir bilinç oluşturma zamanı

Hacker yeteneklerini -hacker burada üreten kişi anlamında- 360 derece görmeye çalıştık. Bu yüzden sadece saldırgan bir üslup kullanmak yerine paradigma bağımsızlığı olan, yaratıcı olduğunu düşündüğümüz bir üslup kullanmayı tercih ettik ve yarışmayı bu çerçevede modelledik.

CTF yarışmalarında genellikle içeriğin teknik boyutu baskıcı bir tavır sergiliyor. Bu durumun farklılaşması önemli; çünkü günümüzde takım çalışması, ikili ilişkiler teknik bilginin önünde yer alıyor.


11 Ağustos 2013 Pazar

DOM-XSS - 1

Document Object Model, "DOM", "Belge Nesnesi Modeli" anlamlarına da gelmektedir. İnternet tarayıcıları girilen internet sayfasını bir belge, bu belge (sayfa) içerisinde bulunan tüm elemanları da nesne olarak kabul eder. Buna göre resim, yazı, form gibi tüm elemanlar nesnedir. İşte DOM sayfa içindeki herhangi bir nesnenin özelliğine müdahele edebilmemize, nesne özelliklerini değiştirebilmemize olanak sağlar.
Kaynak : Wikipedia

Konuya başlamadan önce incelenmesi gereken kaynaklar:
https://code.google.com/p/domxsswiki/wiki/Sources
https://code.google.com/p/domxsswiki/wiki/Sinks
 http://www.signalsec.com/statik-kod-analizi/ 


Saldırgan, DOM ağacı üzerinde bir nesneyi manipüle etmek istiyorsa kullanıcı girdisiyle bir kaynak oluşturmalı ve kaynaktan aldığı bu veriyi işlemesi gerekmektedir.