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

Download Report

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

MVC-Tipi Web Yazilimlarindaki Hatalari
Otomatik Dogrulama Yontemleri Ile
Duzeltmek
Tevfik Bultan
Verification Lab
Computer Science Department
University of California Santa Barbara
[email protected]
http://www.cs.ucsb.edu/~vlab
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
– 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
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)
Model denetlemesi
Sembolik calistirma
(SMT cozuculerle)
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)
50%
45%
40%
File Inclusion
XSS
SQL Injection
35%
Sadece web
uygulamalarina
bakarsak
OWASP ilk 10, 2007:
1. Cross Site Scripting
2. Injection Flaws
30%
25%
OWASP ilk 10, 2010:
1. Injection Flaws
2. Cross Site Scripting
20%
15%
10%
5%
0%
2001 2002 2003 2004 2005 2006 2007 2008 2009
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 …
Giri
onaylamasi
hatalari
Otomatik dogrulama
yapabilmemiz icin biraz daha
yardima ihtiyacimiz var!
Navigasyon
hatalari
Veri modeli
hatalari
Web uygulamalari
ile ilgili sorunlar
Otomatik
dogrulama
yontemleri
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%
model
gorunumler
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 (eventhandler)
– 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
– Yoneticilere odaklan
• 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 …
Giri
onaylamasi
hatalari
Yonetici
dogrulamasi
Navigasyon
hatalari
Yonetici
dogrulamasi
Veri modeli
hatalari
Model
dogrulamasi
Web uygulamalari
ile ilgili sorunlar
biraz daha yardima
ihtiyacimiz var!
Otomatik
dogrulama
yontemleri
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:
1. Eger mumkunse programlardan otomatik olarak
otomatik soyutlama ve statik analiz tekniklerini
kullanarak bir dogrulama modeli cikarmak
• Otomatik model cikarma
2. 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
1. Kaygi: Girdi onaylamasini denetlemek
– Modul: Yonetici
– Otomatik soyutlama ile dogrulama modeli cikariyoruz:
Bagimlilik analizi ile bagimlilik diyagrami cikariyoruz
– Dogrulama yontemi: string analizi
2. Kaygi: Navigasyonu denetlemek
– Modul: Yonetici
– Dogrulama modeli gelistirici tarafindan yaziliyor:
Calisma zamaninda otomatik model uygulamasi
– Dogrulama yontemi: Model denetleme
3. 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
Giri
onaylamasi
hatalari
Navigasyon
hatalari
Veri modeli
hatalari
Yoneticiden
otomatik
soyutlama
Yoneticide
calisma zamani
model uygulamasi
Veri modelinden
otomatik
soyutlama
String
analizi
Model
denetlemesi
Sinirli
denetleme
(SAT
cozuculu
denetleme)
Girdi Onaylamasi Dogrulamasi
Ugulama/
Scripts
Cozumleyici/
Leke Analizi
Saldiri
kalibi
(Lekeli) Bagimlilik
Diyagrami
Ulasilabilir Saldiri
Stringleri
Guvenlik Acigi Analizi
Guvenlik Acigi
Imzasi
Imza Uretimi
Sanitization
Yama Sentezi
XSS Guvenlik Acigi
Bir PHP ornegi:
1:<?php
<script ... >
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
Sanitization
Guvenlik acigini kapatmak icin sanitization eklenmis:
1:<?php
<!sc+ri++pt! ... >
2: $www = $_GET[”www”];
3: $l_otherinfo = ”URL”;
<script ... >
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
•
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
“URL”, 3
$l_otherinfo,
$_GET[www],
“”, 4
[^A-Za-z0-9 .-@://], 4
3
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:?>
“: “, 5
preg_replace, 4
str_concat, 5
$www, 4
str_concat,
echo,
5
5
Bagimlilik
Diyagrami
2
$www, 2
Guvenlik Acigi Analizi
Ileri = Σ*
Saldiri Kalibi = Σ*<Σ*
$_GET[www],
“URL”,
“”, 4
[^A-Za-z0-9 .-@://], 4
3
“: “, 5
$l_otherinfo,
3
$www, 2
Ileri = ε
Ileri = [^A-Za-z0-9 .-@/]
Ileri = URL
2
Ileri = Σ*
preg_replace, 4
Ileri = :
Ileri = [A-Za-z0-9 .-@/]*
Ileri = URL
str_concat, 5
$www, 4
Ileri = [A-Za-z0-9 .-@/]*
Ileri = URL:
str_concat,
5
Ileri = URL: [A-Za-z0-9 .-@/]*
echo,
L(Σ*<Σ*)
∩
5
L(URL:
.-@/]*) .-@/]*
=
Ileri = [A-Za-z0-9
URL: [A-Za-z0-9
L(URL: [A-Za-z0-9 .-;=-@/]*<[A-Za-z0-9 .-@/]*)
≠Ø
Ulasilabilir Saldiri Stringleri
U
R
L
:
[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],
node 3
“URL”,
node 6
“”, 4
[^A-Za-z0-9 .-@://], 4
3
$www, 2
Ileri = URL
Ileri = [^A-Za-z0-9 .-@/]
Ileri = ε
Ileri = Σ*
Geri = ??????
Geri = ??????
Geri = ??????
Geri = [^<]*<Σ*
“: “, 5
Guvenlik Acigi Imzasi = [^<]*<Σ*
$l_otherinfo, 3
Ileri = URL
2
preg_replace, 4
Ileri = :
Ileri = [A-Za-z0-9 .-@/]*
Geri = ??????
Geri =
[A-Za-z0-9 .-;=-@/]*<[A-Za-z0-9 .-@/]*
Geri = ??????
node 10
$www, 4
str_concat, 5
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 .-@/]*
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
<
Σ
[^<]
kesik {<}
• Demek ki kullanici girdisinden sadece “<“ silersek guvenlik
acigini kapatmis olacagiz
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)
Uygulama
#Dosya
LOC
# XSS
hassas
komut
# SQLI
hassas
komut
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
• Saldiri kaliplari:
– Σ∗<scriptΣ∗
– Σ∗ or 1=1 Σ∗
(XSS)
(SQLI)
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)
Ortalama
hafiza (KB)
Ileri
(s)
Geri
(s)
Iliskisel
(s)
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
SQL
(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
SQL
(20, 0, 0, 0)
(0, 0, 0, 0)
7.87
6.7
0.22
-
0.22
-
-
9948
<1
Diger Kaygilar
Kaygilarin ayrilmasi + Modulerlik + Soyutlama
Giri
onaylamasi
hatalari
Navigasyon
hatalari
Veri modeli
hatalari
Yoneticiden
otomatik
soyutlama
Yoneticide
calisma zamani
model uygulamasi
Veri modelinden
otomatik
soyutlama
String
analizi
Model
denetlemesi
Sinirli
denetleme
(SAT
cozuculu
denetleme)
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
Navigasyon
Ozellikleri
Navigation
State
Machine
Cevirici
Hata Ornegi
SMV
Statik Dogrulama
Calisma Zamani Model Uygulamasi
NSM Eklentisi
(NSM Yorumlayicisi)
Dogrulandi
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
8
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
Uygulama
Eylem
Eklentisiz
sure(ms)
Eklenti ile sure
(ms)
Digitalus
Dosya yarat
28
26
Digitalus
Dosya yukle
18
32
BambooInvoice
Yeni makbuz
938
574
• PHP hatasi ureten eylemlerin islenme suresi
Ugulama
Eylem
Eklentisiz sure
(ms)
Eklenti ile sure
(ms)
Digitalus
Sayfa degistir
416
32
Digitalus
Dosya sil
424
36
BambooInvoice
Makbuza bak
564
594
Diger Kaygilar
Kaygilarin ayrilmasi + Modulerlik + Soyutlama
Giri
onaylamasi
hatalari
Navigasyon
hatalari
Veri modeli
hatalari
Yoneticiden
otomatik
soyutlama
Yoneticide
calisma zamani
model uygulamasi
Veri modelinden
otomatik
soyutlama
String
analizi
Model
denetlemesi
Sinirli
denetleme
(SAT
cozuculu
denetleme)
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
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