1 / 71

MVC-Tipi Web Yazilimlarindaki Hatalari Otomatik Dogrulama Yontemleri Ile Duzeltmek

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. 20 th ACM SIGSOFT International Symposium on the.

Télécharger la présentation

MVC-Tipi Web Yazilimlarindaki Hatalari Otomatik Dogrulama Yontemleri Ile Duzeltmek

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. 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

  3. University of California at Santa Barbara

  4. 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/

  5. 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

  6. University of California at Santa Barbara

  7. 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

  8. NSF Fastlane Web Sayfasi (7/25/2011)

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

  10. 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

  11. 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

  12. VLab Stratejisi • Amacimiz web yazilimlarinin guvenilebilirligini arttirmak • Nasil? • Hatalari yok ederek • Nasil? • 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

  13. 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.

  14. Bizim Cekicimiz Otomatik dogrulama

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

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

  17. 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

  18. 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!

  19. 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

  20. 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

  21. Niye Navigasyon Ile Ilgileniyoruz?

  22. Niye Navigasyon Ile Ilgileniyoruz?

  23. Niye Navigasyon Ile Ilgileniyoruz?

  24. 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

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

  26. 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

  27. 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)

  28. 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

  29. 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

  30. 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 • Yoneticilere odaklan • Veri modeli ile ilgili ozellikleri denetlemek icin • Modele odaklan

  31. 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)

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

  33. 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

  34. 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

  35. 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 • Modul: Yonetici • 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

  36. 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

  37. Girdi Onaylamasi Dogrulamasi Ugulama/ Scripts (Lekeli) Bagimlilik Diyagrami Cozumleyici/ LekeAnalizi Ulasilabilir Saldiri Stringleri Saldiri kalibi GuvenlikAcigiAnalizi Guvenlik Acigi Imzasi ImzaUretimi Sanitization YamaSentezi

  38. XSS Guvenlik Acigi Bir PHP ornegi: 1:<?php 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 ... >

  39. 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 ... >

  40. 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

  41. 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

  42. 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 [^A-Za-z0-9 .-@://], 4 “URL”, 3 “”, 4 $www, 2 $l_otherinfo, 3 “: “, 5 preg_replace, 4 str_concat, 5 $www, 4 str_concat, 5 echo, 5 Bagimlilik Diyagrami

  43. Guvenlik Acigi Analizi Ileri = Σ* Saldiri Kalibi = Σ*<Σ* $_GET[www], 2 [^A-Za-z0-9 .-@://], 4 “”, 4 $www, 2 “URL”, 3 Ileri = ε Ileri = [^A-Za-z0-9 .-@/] Ileri = Σ* Ileri = URL “: “, 5 preg_replace, 4 $l_otherinfo, 3 Ileri = : Ileri = [A-Za-z0-9 .-@/]* Ileri = URL 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 .-@/]*) ≠ Ø

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

  45. Geri Giderek Imza Hesaplamasi Ileri = Σ* Geri = [^<]*<Σ* $_GET[www], 2 node 3 node 6 [^A-Za-z0-9 .-@://], 4 “”, 4 $www, 2 “URL”, 3 Ileri = [^A-Za-z0-9 .-@/] Ileri = ε Ileri = Σ* Ileri = URL 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 = [A-Za-z0-9 .-@/]* Ileri = URL: node 11 Geri = [A-Za-z0-9 .-;=-@/]*<[A-Za-z0-9 .-@/]* Geri = ?????? 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 .-@/]*

  46. 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

  47. 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 {<}

  48. 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: ?>

  49. 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)

  50. 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.

More Related