Tevfik Bultan Verification Lab Computer Science Department

Slides:



Advertisements
Benzer bir sunumlar
Değişkenler.
Advertisements

Dört Bölüm 1.Tanıtım ve Mevcut Durum 2.Hedefler 4.Demo 3.Yeni Sürüm Planlaması.
VERİTABANI YÖNETİM SİSTEMLERİ
PHP VE MYSQL.
BPR151 ALGORİTMA VE PROGRAMLAMA - I
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
MIT503 Veri Yapıları ve algoritmalar Algoritma Oluşturma – Açgözlü algoritmalar ve buluşsallar Y. Doç. Yuriy Mishchenko.
 Bir iletişim mimarisidir.  Bir DTD si yoktur.  Roy Fielding 2000 Yılında ortaya atmıştır.  En başarılı Rest Uyarlamalarından biri HTTP protokolüdür.
MIT563 Yapay Zeka ve Makine Öğrenmesi
.NET FRAMEWORK.
Mysql, PhpMyAdmin, PHP, Dinamik Web Sayfası, PHPNuke Kullanımı
Oracle Kurulumu.
Ürolojide Uzmanlık Sonrası Doktora Eğitiminin Yararları
Görme Engelliler İçin Servis Platformu
04/02/10 Django Web Uygulamaları Geliştirmede Çağdaş bir Yaklaşım.
Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP.
INTERNET TABANLI HASTA KAYDI PAYLAŞIMI VE TELEKONSÜLTASYON PLATFORMU
B İ LG İ GÜVENL İĞİ NDE KULLANICI SORUMLULU Ğ U. Sistemi içeriden yani kullanıcıdan gelebilecek hatalara ve zararlara kar ş ı koruyan bir mekanizma yoktur.
Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the Creative Commons Attribution-ShareAlike.
SQL Enjeksiyon Saldırı Uygulaması ve Güvenlik Önerileri
Dizi (array) değişkenleri
BTP 108 BİLGİSAYAR AĞ SİSTEMLERİ AĞ KAVRAMI Birden çok bilgisayarın birbirine bağlı olarak kullanılmasıyla oluşturulan çalışma biçimine bilgisayar ağı.
1 DİNAMİK WEB SAYFASI. 2 Personel ve Öğrenciler ile tüm internet kullanıcılarına hizmet verebilecek, Ziyaretçilerin kolay anlaşılabilir bir ara yüz ile.
Karar ifadeleri ve Döngüler
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP.
Bora GÜRSEL CBÜ BAUM Proje Yöneticisi
Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP.
İnternet Programcılığı II
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ DERLEYENLER: Ahmet Can ÇAKIL Ali Murat GARİPCAN Özgür AYDIN Şahin KARA KONTROL : Prof. Dr. Asaf VAROL KONU : KAPSÜLLEME.
Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP.
MIT503 Veri Yapıları ve algoritmalar Veri ağaçları
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Strateji Geliştirme Daire Başkanlığı
Temel tanımlar ve işleyiş
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 8: Windows Formları
İnternet Teknolojisi Temel Kavramlar
Görsel Programlama Dr. Muhammet Balcılar
Akış Kontrol Mekanizmaları
İnternet Programlama PHP.
E-OKUL HATALARI VE ÇÖZÜMLERİ
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
BTP102 VERİTABANI YÖNETİM SİSTEMLERİ 1
Güvenli ve Pratik Web’de çalışma saatleri için;
ARAŞTIRMA - UYGULAMA MERKEZİ BİLGİ SİSTEMİ KOORDİNATÖRLÜĞÜ
KOBİ – ŞİRKET PORTALI BİTİRME PROJESİ EMRE UYUMAZ & ANIL GÜR.
Quest Atlantis Dünya Üzerine Yayılmış Çok-Kullanıcılı Çevrim-İçi Eğitsel Bir Bilgisayar Oyununun Teknik Yapısı.
İnternet Programcılığı II
BTP102 VERİTABANI YÖNETİM SİSTEMLERİ 1
İnternet Teknolojisi Temel Kavramlar
Erman Yukselturk1 PHP NEDİR? Scripting / Progralama dilidir (C’ye benzer) C ++ ortamında geliştirilmiştir Bedava / Açık Kod Hızlı, açık, dengeli (stable),
Java GUI Programming.
İKMAP İnternet 1 Ders Notu
Veri Tabanı Tasarım Süreci
Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP.
Gizem Tanış Bozok Üniversitesi Öğr. Görevlisi.  Veri erişimi için ADO.NET kodunu yazmak ve yönetmek zordur.  Microsoft, uygulamada veritabanı aktivitelerini.
TEMEL php Dersleri - Ders 1 Değişgenler
BULUTBİLİŞİM.
Veritabanı Yönetim Sistemleri - I
Bilgisayar Mühendisliğine Giriş
BM-103 Programlamaya Giriş Güz 2012 (3. Sunu)
ÖTÖ 451 Okul Yönetiminde Bilgisayar Uygulamaları R. Orçun Madran.
İÇERİK YÖNETİM SİSTEMİ Öğr. Gör. Emine TUNÇEL Kırklareli Üniversitesi Pınarhisar Meslek Yüksekokulu.
PHP ve HTML İnternet Programlama - 2. Koşullu İfadeler ve Döngüler Döngü ya da çevirim diyebileceğimiz, belli şart ve koşullarda istenilen değerleri yapabilmemizi.
Yazılım Mühendisliğine Giriş YYurtaY. Ders İçeriği o Yazılım mühendisliğine giriş, o Yazılım mühendisliği ve etik, o Yazılım mühendisli ğ inin önemi ve.
haZIRLAYAN: ELİF KARAOĞLU
Öğretim Görevlisi Alper Talha Karadeniz Veri Tabanı 1
YAZILIM KOD ÜRETEÇLERİ
Dünya Üzerine Yayılmış Çok-Kullanıcılı Çevrim-İçi Eğitsel
FIRAT ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ
Sunum transkripti:

MVC-Tipi Web Yazilimlarindaki Hatalari Otomatik Dogrulama Yontemleri Ile Duzeltmek Tevfik Bultan Verification Lab Computer Science Department University of California Santa Barbara bultan@cs.ucsb.edu http://www.cs.ucsb.edu/~vlab

Foundations of Software Engineering 20th ACM SIGSOFT International Symposium on the Foundations of Software Engineering November 10-17, 2012. Research Triangle, Cary, North Carolina, USA. Submission: 16 March 2012 Notification: 18 June 2012

University of California at Santa Barbara

UCSB Bilgisayar Bolumu 33 ogretim gorevlisi Ogrenciler Lisans oncesi ~400 Lisans ustu: ~100 Phd ve ~50 MS Siralamalar UCSB Bilgisayar bolumu Amerika’da Bilgisayar bolumleri arasinda ilk 10’da (2010 National Research Council Ranking) UCSB universitesi butun dunyadaki universiteler arasinda 29’uncu sirada (2010 Times Higher Education Ranking) Daha cok bilgi almak icin: http://www.cs.ucsb.edu/

Verification Lab (VLab) VLab arastirma konulari: yazilim muhendisligi, program analizi, otomatik dogrulama, web uygulamalari, web servisleri VLab mezunlari: 1postdoc, 7 PhD, 6 MS 4 yardimci docent, 1 docent, 1 post-doc (Ed Clarke ile), 1 universitede arastirmaci, 1 start-up’da arastirmaci VLab’a katilacak doktora ogrencileri ariyorum, UCSB Bilgisayar Bolumune basvurun! Doktora ~5 yil, Master ~2 yil Doktora ogrencilerimize 5 yil asistanlik garantisi veriyoruz Basvurunuzda (statement of purpose) benim adimdan ya da VLab’den bahsederseniz ben basvuru dosyanizi gorurum

University of California at Santa Barbara

Arastirmalarimiza Katkida Bulunanlar Bugun bahsedecegim arastirmalari ogrencilerimle beraber yaptik: Jaideep Nijjar (PhD adayi) Muath Alkhalaf (PhD adayi) Fang Yu (yardimci docent, National Chengchi University, Taiwan) Sylvain Halle (yardimci docent, Universite du Quebec a Chicoutimi, Canada) Arastirmalarimizi National Science Foundation (NSF, ABD’nin TUBITAK’i) destegiyle yapiyoruz

NSF Fastlane Web Sayfasi (7/25/2011)

Web Yazilimlari Heryerde Ticaret, eglence, sosyal iletisim Gelecekte web yazilimlari daha da yaygin olacak Yazilimin gelecegi: Web uygulamalari + “cloud computing”

Onemli Bir Engel Web uygulamalari guvenilir degiller Guvenlik eksiklikleri ve beklenmedik duraklamalari ile meshurlar Web uygulamarini gelistirmek ve test etmek zor Dagitilmis, eszamanli, bir cok modul arasinda etkilesim, bir cok dilin kullanilmasi Yazilim hatalarinin onemi: Yazilim gelistirme cabalarinin 50% test etmeye harcaniyor Yazilim hatalarinin ABD ekonomisine maliyeti yilda 60 milyar dolar

Web Yazilimlari Niye Hata Dolu? “script”-yonelimli yazilim Program akisi statik olarak belirli olmayan bir dizi “script” Cok fazla “string” manipulasyonu Kullanici girdisi “string” olarak geliyor, cikti (html, SQL) “string” manipulasyonu ile uretiliyor Karisik etkilesimler Web tarayicisi ile kullanici etkilesimi, istemci-tarafi sunucu-tarafi etkilesimi, veritabani ile etkilesim Dagitilmis sistem Bircok modul arasinda koordinasyon gerektiriyor

VLab Stratejisi Amacimiz web yazilimlarinin guvenilebilirligini arttirmak Nasil? Hatalari yok ederek Otomatik dogrulama yontemlerini kullanarak Hatalari yok etmek derken hata ayiklamayi (debugging) kastetmiyoruz Hata ayiklamasi hata bulunduktan sonra yapilir Isin zor tarafi hatayi bulmak Bizim amacimiz hatalari otomatik olarak bulmak ve hatalari yazilim dagitilmadan once yok etmek

Bir Amerikan Atasozu “If you have a hammer everything looks like a nail.” yani “Cekici olana hersey civi gibi gozukur!” Ozellikle akademisyenler arasinda yaygin oldugu dusunulen bir durum.

Bizim Cekicimiz Otomatik dogrulama

Aslinda Bir Kac Cekicimiz Var Sinirli dogrulama (SAT cozuculerle) Sembolik calistirma (SMT cozuculerle) Model denetlemesi String analizi Otomatik dogrulama yontemleri

Ne Yazik ki, Evdeki Hesap Carsiya Uymuyor Web uygulamalari ile ilgili sorunlar Otomatik dogrulama yontemleri

Otomatik Dogrulama Zor Is Eger zor olmasaydi herkes kullaniyor olurdu Otomatik dogrulama zor, cunku yazilim sistemleri cok karisik sistemler Teorik olarak bircok otomatik dogrulama problemi “undecidable” Otomatik dogrulama yontemlerini pratik olarak kullanilabilir yapmamiz icin dikkatimizi odaklamamiz lazim

Otomatik Dogrulama Yontemlerini Pratiklestirme Dikkatimizi nasil odakliyoruz? Soyutlama (Abstraction) Bizim denetledigimiz ozelliklerle ilgili olmayan detaylari sakliyoruz Modulerlik Sistemi parca parca analiz ediyoruz Kaygilarin ayrilmasi (Separation of concerns) Her kaygi ile ilgili ozelligi ayri olarak analiz ediyoruz Bu uc prensip zaten yazilim tasariminin da ana prensipleri O zaman otomatik dogrulama yaparken, yazalimin yapisindan faydalanabilmemiz lazim!

Kaygilarin Ayrilmasi Ilk once kaygilarimizin ne olduguna karar vermemiz lazim Eger amacimiz web uygulamalarindaki hatalari yok etmekse, nelerden kaygilanmaliyiz? Bazi ornekler: Girdi onaylamasi Girdi onaylamasindaki hatalar bircok web uygulamasinda guvenlik acigina sebep oluyor Navigasyon Bircok web uygulamasi kullanicidan gelen beklenmedik girileri yanlis isliyor Veri modeli Veri modelinin tutarliligi ve butunlugu web uygulamalarinin dogrulugu acisindan cok onemli

Niye Girdi Onaylamasi Ile ilgileniyoruz? Girdi onaylamasi ile ilgili guvenlik aciklarinin butun guvenlik aciklari icinde yuzdesi (CVE raporu) Sadece web uygulamalarina bakarsak OWASP ilk 10, 2007: Cross Site Scripting Injection Flaws OWASP ilk 10, 2010: Injection Flaws Cross Site Scripting

Niye Navigasyon Ile Ilgileniyoruz?

Niye Navigasyon Ile Ilgileniyoruz?

Niye Navigasyon Ile Ilgileniyoruz?

Niye Veri Modeli Ile Ilgileniyoruz? Bircok web uygulamasi icin en degerli kaynak veritabaninda saklanan veriler Verilerin tutarligi ve butunlugu web uygulamasinin guvenilebilirligi icin cok onemli

Kaygilarin Ayrilmasi Sadece bir kaygiya odaklanirsak: Giri onaylamasi hatalari Navigasyon hatalari Veri modeli hatalari Pratik otomatik dogrulama yontemleri gelistirme sansimiz daha yuksek

Biraz Ilerleme Kaydettik Ama … Otomatik dogrulama yapabilmemiz icin biraz daha yardima ihtiyacimiz var! Giri onaylamasi hatalari Navigasyon hatalari Veri modeli hatalari Otomatik dogrulama yontemleri Web uygulamalari ile ilgili sorunlar

Modulerlik: Model-Gorunum-Yonetici (MVC) Model-gorunum-yonetici (MVC) mimarisi web yazilimi icin standart bir tasarim yapisi haline geldi Ruby on Rails Zend Framework for PHP CakePHP Spring Framework for Java Struts Framework for Java Django for Python, … MVC mimarisi moduler bir mimari, modullerin farkli gorevleri var Verinin nasil ve nerede saklandigi (model) Verinin nasil sunuldugu (gorunum)

MVC Mimarisi MVC uc modulden olusuyor Model: Verilerden sorumlu Gorunum: Kullaniciya sunudan sorumlu Yonetici: Uygulamanin kullanicinin girdisine nasil tepki verdigini karar veriyor a=50% b=30% c=20% gorunumler model

Web Uygulamalari Icin MVC Model: Veritabaninda saklanan verilerin soyut bir temsili nesne-iliskisel baglanti (object-relational mapping) kullanarak uygulamanin nesne siniflari ile veritabaninin veri tablolari arasinda baglanti saglaniyor Gorunumler: Web sayfalarinin nasil gorundugunden sorumlular, yani verilerin kullanicinin web tarayicisinda nasil gorundugunden sorumlular Yoneticiler: Kullanici girdilerini isleyen olay-isleyicileri (event-handler) Data modelini degistirip, kullaniciya yeni bir gorunum sunuyorlar

MVC’den Yararlanarak Dogrulama MVC mimarisinin modulerliginden otomatik dogrulama sirasinda faydalinilabilir Navigasyon ile ilgili ozellikleri denetlemek icin Yoneticilere odaklan Giri onaylamasi ile ilgili ozellikleri denetlemek icin Veri modeli ile ilgili ozellikleri denetlemek icin Modele odaklan

Biraz Daha Ilerleme Kaydettik! Kullandigimiz prensipler kaygilarin ayrilmasi bir tip ozelligi denetle (navigasyon, giri onaylamasi, veri modeli) modulerlik bir module odaklan (yonetici ya da model)

Biraz Daha Ilerleme Kaydettik Ama … biraz daha yardima ihtiyacimiz var! Giri onaylamasi hatalari Yonetici dogrulamasi Yonetici dogrulamasi Navigasyon hatalari Veri modeli hatalari Model dogrulamasi Otomatik dogrulama yontemleri Web uygulamalari ile ilgili sorunlar

Otomatik Dogrulama icin Model Tamamen otomatik olarak dogrulama yapabilmemiz icin Programlari otomatik dogrulama tekniklerinin uzerinde calisabilecegi bir model haline getirmemiz gerekiyor Programlardan dogrulama modelleri cikarmamiz lazim Yani bir program verildiginden o programa karsilik gelen bir dogrulama modeli uretmemiz lazim

Dogrulama Modelini Nasil Bulacagiz? Dogrulama modeli uygulamanin davranisinin soyutlanmis (dogrulama ile ilgilisi olmayan detaylari silinmis) bir halidir Bu soyutlamayi iki sekilde elde edebiliriz: Eger mumkunse programlardan otomatik olarak otomatik soyutlama ve statik analiz tekniklerini kullanarak bir dogrulama modeli cikarmak Otomatik model cikarma Eger otomatik olarak model cikaramazsak, gelistiriciden bir model yazmasini istiyoruz. O zaman programin calisma zamaninda modele gore davrandigini garanti etmemiz lazim Calisma-zamani otomatik model uygulamasi

Bu Prensiplerle Gelistirdigimiz Uc Teknik Kaygi: Girdi onaylamasini denetlemek Modul: Yonetici Otomatik soyutlama ile dogrulama modeli cikariyoruz: Bagimlilik analizi ile bagimlilik diyagrami cikariyoruz Dogrulama yontemi: string analizi Kaygi: Navigasyonu denetlemek Dogrulama modeli gelistirici tarafindan yaziliyor: Calisma zamaninda otomatik model uygulamasi Dogrulama yontemi: Model denetleme Kaygi: Veri modelini denetlemek Modul: Model Otomatik soyutlama ile dogrulama modeli cikariyoruz Dogrulama yontemi: Sinirli SAT cozuculu dogrulama

Sonucta Vidalari Civi Yapabildik Kaygilarin ayrilmasi + Modulerlik + Soyutlama Yoneticiden otomatik soyutlama Giri onaylamasi hatalari String analizi Yoneticide calisma zamani model uygulamasi Model denetlemesi Navigasyon hatalari Veri modelinden otomatik soyutlama Sinirli denetleme (SAT cozuculu denetleme) Veri modeli hatalari

Girdi Onaylamasi Dogrulamasi Ugulama/ Scripts (Lekeli) Bagimlilik Diyagrami Cozumleyici/ Leke Analizi Ulasilabilir Saldiri Stringleri Saldiri kalibi Guvenlik Acigi Analizi Guvenlik Acigi Imzasi Construct dependency graphs for the PHP programs Combine symbolic forward and backward symbolic reachability analyses Forward analysis Assume that the user input can be any string Propagate this information on the dependency graph When a sensitive function is reached, intersect with attack pattern Backward analysis If the intersection is not empty, propagate the result backwards to identify which inputs can cause an attack Imza Uretimi Sanitization Yama Sentezi

XSS Guvenlik Acigi Bir PHP ornegi: 2: $www = $_GET[”www”]; 3: $l_otherinfo = ”URL”; 4: echo ”<td>” . $l_otherinfo . ”: ” . $www . ”</td>”; 5:?> 4. satirdaki echo komutu guvenlik acisindan hasas Burada “Cross Site Scripting (XSS)” guvenlik acigi var <script ... >

Sanitization Guvenlik acigini kapatmak icin sanitization eklenmis: 1:<?php 2: $www = $_GET[”www”]; 3: $l_otherinfo = ”URL”; 4: $www = preg_replace(”[^A-Za-z0-9 .-@://]”,””,$www); 5: echo ”<td>” . $l_otherinfo . ”: ” . $www . ”</td>”; 6:?> Ama saldirilar karmasik olabilir! 4. satir {A-Za-z0-9 .-@:/} disinda herseyi siliyor Ama “.-@” anlami “.” ve “@” arasindaki butun semboller demek (“<” ve “>” bunlarin arasinda) 5. satirda hala XSS guvenlik acigi var <!sc+ri++pt! ... > <script ... >

String Analizi String analizi: string degiskenlerinin program calismasi sirasinda alabilecegi butun degerleri belirlemek String analizi kullanarak hasas komutlara ulasan string degerlerini bulabiliriz Eger string analizi kullanarak, saldiri kalibi ile hasas komutlara ulasan string degerlerinin kesisiminin bos oldugunu gosterirsek Program guvenli Eger kesisim bos degilse, o zaman yine string analizi kullanarak, guvenlik acigi imzasi uretebiliriz Guvenlik acigi imzasi: Guvenlik acigi acisindan programa girdi olmasi sakincali olan butun stringlerin kumesi

Automataya Dayali String Analizi Biz otomat-dayali (automata-based) string analizi yapiyoruz Programdaki her satirdaki her string degiskeni icin bir otomat sakliyoruz Bu otomat o degiskenin o satirda alabilecegi butun string degerlerini kabul ediyor Bu otomatlari kullanarak programi sembolik olarak calistiriyoruz (sadece stringlerli ilgili operasyonlara odaklaniyoruz) Saldiri kaliplarini “regular expression” olarak yaziyoruz ve onlari da otomata ceviriyoruz

Bagimlilik Diyagrami PHP programindan ilk once bagimlilik diyagramini olusturuyoruz 1:<?php 2: $www = $_GET[”www”]; 3: $l_otherinfo = ”URL”; 4: $www = preg_replace( ”[^A-Za-z0-9 .-@://]”,””,$www ); 5: echo $l_otherinfo . ”: ” .$www; 6:?> $_GET[www], 2 “URL”, 3 [^A-Za-z0-9 .-@://], 4 “”, 4 $www, 2 $l_otherinfo, 3 “: “, 5 preg_replace, 4 str_concat, 5 $www, 4 str_concat, 5 echo, 5 Bagimlilik Diyagrami

Guvenlik Acigi Analizi Ileri = Σ* Saldiri Kalibi = Σ*<Σ* $_GET[www], 2 [^A-Za-z0-9 .-@://], 4 “”, 4 “URL”, 3 $www, 2 Ileri = URL Ileri = [^A-Za-z0-9 .-@/] Ileri = ε Ileri = Σ* “: “, 5 preg_replace, 4 $l_otherinfo, 3 Ileri = : Ileri = URL Ileri = [A-Za-z0-9 .-@/]* str_concat, 5 $www, 4 Ileri = URL: Ileri = [A-Za-z0-9 .-@/]* str_concat, 5 Ileri = URL: [A-Za-z0-9 .-@/]* echo, 5 ∩ L(Σ*<Σ*) L(URL: [A-Za-z0-9 .-@/]*) = Ileri = URL: [A-Za-z0-9 .-@/]* L(URL: [A-Za-z0-9 .-;=-@/]*<[A-Za-z0-9 .-@/]*) ≠ Ø

Ulasilabilir Saldiri Stringleri : [A-Za-z0-9 .-;=-@/] [A-Za-z0-9 .-@/] Space < URL: [A-Za-z0-9 .-;=-@/]*<[A-Za-z0-9 .-@/]*

Geri Giderek Imza Hesaplamasi Ileri = Σ* Geri = [^<]*<Σ* $_GET[www], 2 node 3 node 6 “URL”, 3 [^A-Za-z0-9 .-@://], 4 “”, 4 $www, 2 Ileri = URL Ileri = [^A-Za-z0-9 .-@/] Ileri = ε Ileri = Σ* Geri = ?????? Geri = ?????? Geri = ?????? Geri = [^<]*<Σ* Guvenlik Acigi Imzasi = [^<]*<Σ* “: “, 5 preg_replace, 4 $l_otherinfo, 3 Ileri = : Ileri = [A-Za-z0-9 .-@/]* Ileri = URL Geri = ?????? Geri = [A-Za-z0-9 .-;=-@/]*<[A-Za-z0-9 .-@/]* Geri = ?????? node 10 str_concat, 5 $www, 4 Ileri = URL: Ileri = [A-Za-z0-9 .-@/]* node 11 Geri = ?????? Geri = [A-Za-z0-9 .-;=-@/]*<[A-Za-z0-9 .-@/]* str_concat, 5 Ileri = URL: [A-Za-z0-9 .-@/]* Geri = URL: [A-Za-z0-9 .-;=-@/]*<[A-Za-z0-9 .-@/]* node 12 echo, 5 Ileri = URL: [A-Za-z0-9 .-@/]* Geri = URL: [A-Za-z0-9 .-;=-@/]*<[A-Za-z0-9 .-@/]*

Guvenlik Acigi Imzasi Guvenlik acigi imzasi butun tehlikeli girdileri kapsiyor Guvenlik acigi imzasina uymayan bir girdi saldiriya yol acamaz Programa guvenlik acigi imzasini kullanarak bir yama yapabilir miyiz? < Σ [^<] Ornegimiz icin hesaplanan Guvenlik acigi imzasi

Imzadan Yama Cikarma Ana fikir: Guvenlik acigi imzasi icin hesaplanan otomatin baslangic ve sonuc noktalarini bir birinden ayiran (mumkun oldugu kadar kucuk) bir kesik bul Girdiyi temizlemek icin bu kesikteki sembolleri kullanicinin girdisinden sil Demek ki kullanici girdisinden sadece “<“ silersek guvenlik acigini kapatmis olacagiz < Σ [^<] kesik {<}

Otamatik Olarak Uretilen Yama 1: <?php P: if(preg match(’/[^ <]*<.*/’,$_GET[”www”])) $_GET[”www”] = preg replace(<,””,$_GET[”www”]); 2: $www = $_GET[”www”]; 3: $l_otherinfo = ”URL”; 4: $www = preg_replace(”[^A-Za-z0-9 .-@://]”,””,$www); 5: echo ”<td>” . $l_otherinfo . ”: ” .$www. ”</td>”; 6: ?>

Deneyler Bu yontemi uc PHP yazilimina uyguladik Webchess 0.9.0 (internet satranc programi) EVE 1.0 (oyun programi) Faqforge 1.3.2 (dokuman yonetme uygulamasi) Saldiri kaliplari: Σ∗<scriptΣ∗ (XSS) Σ∗ or 1=1 Σ∗ (SQLI) Uygulama #Dosya LOC # XSS hassas komut # SQLI 1 Webchess 0.9.0 23 3375 421 140 2 EVE 1.0 8 906 114 17 3 Faqforge 1.3.2 10 534 375 133

Dogrulama Sonuclari (1, 2, 3, 4) guvenlik aciklarinin tek girdi, iki girdi, uc girdi, ya da dort girdiye bagli olmasi anlamina geliyor. Her tip guvenlik acigi icin kac tane buldugumuzu belirtiyoruz. Tip # Guvenlik acigi (1, 2, 3, 4) Toplam zaman (s) Ileri (s) Geri Iliskisel Ortalama hafiza (KB) 1. XSS SQL (24, 3, 0, 0) (43, 3, 1, 2 ) 46.08 110.7 1.73 4.87 0.92 12.04 6.30 38.03 16850 136790 2. XSS (0, 0, 8, 0) (8, 3, 0, 0) 288.50 23.9 6.80 1.5 - 8.47 127.80 5.2 125382 17280 3. XSS (20, 0, 0, 0) (0, 0, 0, 0) 7.87 6.7 0.22 9948 <1

Diger Kaygilar Kaygilarin ayrilmasi + Modulerlik + Soyutlama Yoneticiden otomatik soyutlama Giri onaylamasi hatalari String analizi Yoneticide calisma zamani model uygulamasi Model denetlemesi Navigasyon hatalari Veri modelinden otomatik soyutlama Sinirli denetleme (SAT cozuculu denetleme) Veri modeli hatalari

Navigasyon Dogrulamasi Web uygulamasini yazan gelistiriciden navigasyon davranisini aciklayan bir “navigation state machine (NSM)” yazmasini istiyoruz MVC uygulamalari genelde hiyerarsik bir yapi kullaniyor (eylemler/moduller/yoneticiler) Biz de navigation state machine’in hiyerarsik bir sekilde tanimlanmasina destekliyoruz

Navigasyon Dogrulamasi Ozellikleri Hata Ornegi Navigation State Machine Cevirici SMV Statik Dogrulama Dogrulandi Calisma Zamani Model Uygulamasi NSM Eklentisi (NSM Yorumlayicisi)

Navigasyon Dogrulamasi Ornekleri Uc web uygulamasini uzerinde calistik: BambooInvoice: makbuz yonetme uygulamasi 159,000 satir, 60 eylem Capstone: Ogrenci projesi yonetme sistemi 41,000 satir, 33 eylem Digitalus: dokuman yonetme sistemi 401,000 satir, 26 eylem

NSM’in yazilimi Biz bu uygulamalar icin NSM’leri uygulamanin davranislarina bakarak elle yazdik Elle yazmak ne kadar zaman aliyor? Bir uygulama icin yarim gun Uygulama States Transitions Degiskenler Digitalus 32 48 7 BambooInvoice 63 80 8 Capstone 16 1

NSM’ler icin Model Denetlemesi SMV adli model denetleme aracini NSM’leri dogrulama icin kullandik Dogruladigimiz bazi navigasyon ozellikleri: Bir kere uygulamaya giris yapildiktan sonra, uygulamadan cikis yapilmadan yeniden giris yapilamaz Butun yoneticilere ilk olarak indeks eyleminden giris yapilir NSM’leri SMV’yi kullanarak otomatik olarak dogrulayabiliyoruz Dogrulama 4.4MB hafiza kullaniyor ve 1 saniyeden az suruyor

Calisma Zamani Model Uygulamasi PHP eklentisi ile calisma zamaninda NSM’leri uyguluyoruz Kullanicinin sayfa isteklerinini dinleyip NSM’ye gore uygun olup olmadigini kontrol ediyor Eger uygun degilse izin vermiyor Bu kontrolu yapmak calisma zamanina fazla bir ekstra yuk getirmiyor Uygulama Eklentisiz sure (ms) Eklenti ile sure (ms) Digitalus 11 12 BambooInvoice 183 199 Capstone 90 122

Model Uygulamasi Hizlandirabilir Bile! PHP uyarisi ureten eylemlerin islenme suresi PHP hatasi ureten eylemlerin islenme suresi Uygulama Eylem Eklentisiz sure(ms) Eklenti ile sure (ms) Digitalus Dosya yarat 28 26 Dosya yukle 18 32 BambooInvoice Yeni makbuz 938 574 Ugulama Eylem Eklentisiz sure (ms) Eklenti ile sure (ms) Digitalus Sayfa degistir 416 32 Dosya sil 424 36 BambooInvoice Makbuza bak 564 594

Diger Kaygilar Kaygilarin ayrilmasi + Modulerlik + Soyutlama Yoneticiden otomatik soyutlama Giri onaylamasi hatalari String analizi Yoneticide calisma zamani model uygulamasi Model denetlemesi Navigasyon hatalari Veri modelinden otomatik soyutlama Sinirli denetleme (SAT cozuculu denetleme) Veri modeli hatalari

Veri Modeli Dogrulamasi Ruby-on-Rails uzerinde statik veri modelinin otamatik dogrulamasi uzerine calistik Rails “active records” diye bir nesne-iliskisel baglanti kullaniyor “active records” dosyalarinda kullanilan secenekler veri modeli uzerine sinirlamalar getiriyor Bizim amacimiz: Rails uygulamalarindaki active records dosyalarinda tanimlanan veri modeli uzerinde, belirttigimiz ozellikleri, otomatik olarak dogrulamak Nasil yapiyoruz: Sinirli (SAT cozuculu) dogrulama Otomatik olarak veri modeli uzerindeki hatalari belirli bir sinir icinde ariyoruz

Veri Modeli Dogrulamasi Active Records Cevirici Alloy yazilimi Hata ornegi Data Model Ozellikleri Alloy Analyzer Construct dependency graphs for the PHP programs Combine symbolic forward and backward symbolic reachability analyses Forward analysis Assume that the user input can be any string Propagate this information on the dependency graph When a sensitive function is reached, intersect with attack pattern Backward analysis If the intersection is not empty, propagate the result backwards to identify which inputs can cause an attack Dogrulandi

Veri Modeli Dogrulamasi Deneyleri Iki Rails uygulamasi uzerinde calistik: TRACKS: Yapilicak is listesi yonetimi yazilimi 6062 satir, 44 sinif, 13 veri modeli sinifi Alloy cevirimi: 301 satir Fat Free CRM: Musteri iliskisi yonetimi yazilimi 12069 satir, 54 sinif, 20 veri modeli sinifi Alloy cevirimi: 1082 satir

Dogruladigimiz Ozellik Tipleri Iliski sayisi Bir kullanicinin iki hesabi olabilir mi? Gecisli iliskiler Bir kitabin yazari o kitabin baskisinin yazari ile ayni olmali Silme ile ilgili ozellikler Bir kullanizi silindigi zaman siparisler oksuz kalmamali TRACKS icin 10 ve Fat Free CRM icin 20 ozellik yazdik

Veri Modeli Dogrulamasi Deneyleri Dogruladigimiz 30 ornekten 7’si hatali cikti Ornegin TRACKS’de bir notun kullanicisi ile notun projesinin kullanicisi ayni olmayabiliyor

Sonuclar Web uygulamasinin guvenligi cok onemli bir sorun Otomatik dogruluma kullanarak web uygulamalarindaki hatalari kullanima sokmadan bulup yok ediyoruz Otomatik dogrulamanyi pratik yapabilmek icin MVC mimarisinden yararlaniyoruz ve soyutlama, modulerlik ve kaygilarin ayrilmasi presiplerini kullaniyoruz Yazilim gelistiricisinin dogrulukla ilgili ozellikleri yazmasi gerekiyor (ornegin, saldiri kalibi) Bazi durumlarda uygulamanin dogru calismasi ile ilgili daha cok bilgi vermek gerekiyor (ornegin, navigasyon)

Bizim Yayinlarimiz Patching Vulnerabilities with Sanitization Synthesis [Yu, Alkhalaf Bultan ICSE’11] Stranger: An Automata-based String Analysis Tool for PHP [Yu, Alkhalaf, Bultan TACAS’10] Generating Vulnerability Signatures for String Manipulating Programs Using Automata-based Forward and Backward Symbolic Analyses [Yu, Alkhalaf, Bultan ASE’09] Symbolic String Verification: An Automata-based Approach [Yu, Bultan, Cova, Ibarra SPIN’08] Eliminating Navigation Errors in Web Applications via Model Checking and Runtime Enforcement of Navigation State Machines [Halle, Ettema, Bunch, Bultan ASE’10] Bounded Verification of Ruby on Rails Data Models [Nijar, Bultan, ISSTA’11]

Ilgili Yayinlar “context free grammar” ile string analizi [Christensen et al., SAS’03] [Minamide, WWW’05] Web uygulamalari ile string analizi [Wassermann and Su, PLDI’07, ICSE’08] [Halfond and Orso, ASE’05, ICSE’06] Otomaton ile string analizi [Xiang et al., COMPSAC’07] [Shannon et al., MUTATION’07] “symbolic” ya da “concolic” calistirma ile string analizi [Bjorner et al., TACAS’09] Sinirli string analizi [Kiezun et al., ISSTA’09] Otomatik test girdisi, saldiri uretme [Wassermann et al., ISSTA’08] [Kiezun et al., ICSE’09] Guvenlik acigi imzasi uretme [Brumley et al., S&P’06] [Brumley et al., CSF’07] [Costa et al., SOSP’07]

Ilgili Yayinlar Web uyugulamalarinda navigasyon sorunlari [Licata and Krishnamurthi, ASE 2004] Programlama dillerine bagli cozumler [Krishnamurthi et al. 2006] Web uygulamasi ile ilgili modeller [Miao, Zeng ICECCS 2008], [Han, Hofmeister MODELS 2007] Calisma zamani analizleri [see Runtime Verification Conference]

Ilgili Yayinlar Veri modeli tanimlamasi ve analizi [McGill et al, ISSTA 2011] Alloy ile veri modeli analizi [Cunha and Pacheco, SEFM 2009], [Wang et al, ASWEC 2006] WebAlloy [Chang, 2009] WebML [Ceri et al, Computer Networks 2000]

Gelecekte Yapmak Istediklerimiz Baska kaygilar Daha cok otomasyon Mobile uygulamalar

Gelecekte Yapilmasi Gerekenler Web uygulamalarinin guvenilirligini saglamamiz lazim Bu konuda yazilim muhendisligi alanin liderligi gerekli Sadece program dillerine bagli bir cozum olmayabilir Statik analiz ve otomatik dogrulama yontemlerinin yazilim gelistirme surecine pratik olarak eklenmesi lazim Bu modellere dayali bir sekilde yapilmali Model ve program arasindaki baglanti net olmali Gelecekte web uygulamalarini yazanlar bilgisayar egitimi almamis insanlar da olabilir O zaman guvenilirlik daha da onemli hale gelecek