Friday, August 30, 2013

Mengamankan Kode Aplikasi Web dengan Analisis Statis dan Perlindungan Runtime 1

Posted by Info market on Friday, August 30, 2013

Mengamankan Kode Aplikasi Web denganAnalisis Statis dan Perlindungan RuntimeYao- Wen Huang + * , Fang Yu * , Christian Tunggu # , Chung - Hung Tsai + , DT Lee + * , Sy - Yen Kuo +{ ywhuang , yuf , dtlee } @ iis.sinica.edu.tw , christian.hang @ web.de , sykuo@cc.ee.ntu.edu.tw+ Departemen Teknik Elektro ,National Taiwan UniversityTaipei 106 , Taiwan .* Institut Ilmu Informasi ,Academia SinicaTaipei 115 , Taiwan# Departemen Ilmu Komputer ,RWTH AachenAachen , JermanAbstraksiKeamanan tetap menjadi hambatan utama penerimaan universalWeb untuk berbagai jenis transaksi , terutama karena baru-baru inipeningkatan tajam dalam kerentanan jauh dimanfaatkan telahdikaitkan dengan aplikasi web bug . Banyak alat verifikasimenemukan kerentanan yang sebelumnya tidak diketahui dalam warisan Cprogram , meningkatkan harapan bahwa keberhasilan yang sama dapat dicapaidengan aplikasi Web . Dalam tulisan ini, kami menggambarkan suara danpendekatan holistik untuk memastikan keamanan aplikasi Web . melihatKerentanan aplikasi web sebagai arus informasi amanMasalahnya , kami menciptakan sebuah algoritma analisis statis berbasis kisiberasal dari sistem jenis dan typestate , dan ditangani nyakesehatan . Selama analisis , bagian kode dianggaprentan diinstrumentasi dengan penjaga runtime , sehingga mengamankanAplikasi Web tanpa adanya campur tangan pengguna. denganpenjelasan yang memadai , overhead runtime dapat dikurangi menjadi nol .Kami juga menciptakan alat bernama WebSSARI ( aplikasi WebKeamanan dengan Analisis Statis dan Runtime Inspeksi ) untuk menguji kamialgoritma , dan menggunakannya untuk memverifikasi 230 aplikasi Web open sourceproyek di SourceForge.net , yang dipilih untuk mewakiliproyek jatuh tempo yang berbeda , popularitas, dan skala . 69 terkandungkerentanan dan pengembang mereka telah diberitahu . 38 proyekmengakui temuan kami dan menyatakan rencana mereka untuk memberikanpatch . Statistik kami juga menunjukkan bahwa analisis statis berkurangpotensi biaya overhead runtime dengan 98,4 % .Kategori dan Deskriptor PerihalD.2.4 [ Rekayasa Perangkat Lunak ] : Software / Verifikasi Program -invariants kelas , metode formal , D.4.6 [ Sistem Operasi] :Keamanan dan Perlindungan - kontrol arus informasi , kebenaranbukti , metode formal , K.6.5 [ Komputasi Milieux ] : Keamanandan Perlindungan - perangkat lunak invasif , akses yang tidak sah .Ketentuan UmumKeamanan , Verifikasi .Kata kunciKeamanan aplikasi web , kerentanan keamanan , Programkeamanan, verifikasi , jenis sistem , arus informasi ,noninterference .1 . PENDAHULUANSebagai layanan yang lebih dan lebih banyak disediakan melalui World Wide Web ,upaya dari kedua akademisi dan industri berusaha untuk menciptakanteknologi dan standar yang memenuhi canggihpersyaratan aplikasi Web saat ini dan pengguna . di banyaksituasi , keamanan tetap menjadi hambatan utama ke universalpenerimaan Web untuk semua jenis transaksi . menurutlaporan Symantec dirilis awal tahun ini , lebih dari sebelumnya 12bulan di tahun 2002 , terjadi peningkatan 81,5 % pada didokumentasikankerentanan , dengan mayoritas terkait dengan beberapa sangatkerentanan parah [ 36 ] . Penulis laporan menyarankan bahwaKekuatan pendorong di belakang kecenderungan ini adalah " perkembangan yang pesat danpenyebaran aplikasi Web jauh dimanfaatkan . " Merekamelaporkan bahwa jumlah kerentanan aplikasi Webditemukan pada tahun 2002 adalah 178 % lebih tinggi dari tahun 2001 , bahwa 95 persendari mereka jauh dimanfaatkan , dan bahwa 99 persendianggap sangat atau cukup parah .Scott dan tajam [ 62 ] [ 63 ] telah menegaskan bahwa aplikasi Webkerentanan adalah ) yang melekat dalam program aplikasi Web , dan b )independen dari teknologi di mana aplikasi dalamPertanyaan diimplementasikan , keamanan server Web , dandatabase back -end . Teknologi saat ini seperti anti -virusprogram perangkat lunak dan firewall jaringan menawarkan relatifperlindungan aman di tingkat host dan jaringan , tetapi tidak padatingkat aplikasi [ 17 ] . Namun, ketika jaringan dan host - tingkatentry point relatif aman , antarmuka publik Webaplikasi menjadi fokus serangan [ 46 ] [ 17 ] .Pengakuan masalah ini tercermin oleh ledakan baru-baru iniupaya yang bertujuan untuk meningkatkan keamanan aplikasi Web melalui berbagaipendekatan yang berbeda . Scott dan tajam mengusulkan penggunaangateway yang menyaring input tidak valid dan berbahaya pada aplikasitingkat, Sanctum yang AppShield [ 58 ] , Kavado yang InterDo [ 43 ] , danjumlah produk komersial sekarang menawarkan strategi yang sama . palingdari vendor firewall terkemuka juga menggunakan paket yang mendalampemeriksaan [ 24 ] teknologi dalam upaya mereka untuk menyaring applicationlevellalu lintas. Menurut laporan Gartner baru-baru ini [ 67 ] , mereka yangtidak menawarkan perlindungan tingkat-aplikasi pada akhirnya akan " menghadapikepunahan . "Meskipun firewall aplikasi - tingkat menawarkan jaminan segeraKeamanan aplikasi web , mereka memiliki setidaknya dua kelemahan : merekamemerlukan konfigurasi hati [ 12 ] , dan mereka hanya menawarkan Webaplikasi perlindungan ( yaitu, mereka tidak mengidentifikasi kesalahan ) . Huanget al . [ 38 ] dirancang penilaian keamanan aplikasi Webkerangka yang menawarkan tes hitam - kemas untuk mengidentifikasi Webkerentanan aplikasi . Namun , proses pengujian tidak bisaHak Cipta dipegang oleh penulis / pemilik ( s ) .WWW 2004 , 17-22 Mei 2004, New York , New York , Amerika Serikat.ACM 1-58113-844-X/04/0005 .40
 menjamin identifikasi semua bug , dan mereka tidak dapat memberikankeamanan langsung untuk aplikasi Web dengan cara yang sama bahwaScott dan solusi Sharp bisa. Dalam proyek ini, kami mencoba untukmenciptakan pendekatan yang secara bersamaan menyediakan langsungkeamanan untuk aplikasi Web dan mengidentifikasi semua kerentanandalam kode mereka.Seperti yang akan kita bahas dalam bagian berikutnya , tantangan utamaterkait dengan aplikasi Web adalah bahwa mereka yang paling pentingkerentanan sering hasil arus informasi tidak aman ,terhadap yang baik enkripsi atau akses Web tradisionalmodel kontrol [ 55 ] menawarkan perlindungan [ 57 ] . Sabelfeld danMyers [ 57 ] baru-baru ini menerbitkan sebuah survei komprehensif tentangteknik berbasis bahasa untuk menentukan dan menegakkanKebijakan arus informasi . Di antara mereka , sistem tipe suara [ 70 ]berdasarkan model kisi Denning [ 22 ] tampil paling menjanjikan .Banerjee dan Naumann [ 7 ] mengusulkan sistem tersebut untuk Java -sepertibahasa , dan Pottier dan Simonet [ 56 ] mengusulkan satu untuk ML .Myers [ 50 ] melangkah lebih jauh untuk memberikan JIF aktualimplementasi yang aman aliran verifier informasi untuk Javabahasa. Namun, meskipun bahasa ini dapat menjaminarus informasi aman , banyak yang menganggap mereka terlalu ketat ;Selanjutnya , mereka memerlukan usaha yang cukup dalam halpenjelasan tambahan untuk mengurangi positif palsu . lainMasalahnya adalah bahwa sebagian besar aplikasi Web saat ini tidak dikembangkan diJIF atau Java , namun dalam bahasa script ( misalnya , PHP , ASP , Perl , danPython) [ 40 ] . Menggunakan kualifikasi teori jenis [ 27 ] , Shankar et al .[ 65 ] terdeteksi arus informasi tidak aman dalam kode warisan dengansedikit penjelasan tambahan . Menggunakan metacompilation berbasiscatur [ 33 ] , dan Ashcraft Engler [ 3 ] juga mampu mendeteksiarus informasi tidak aman di Linux dan OpenBSD kode tanpapenjelasan tambahan . Namun, dam tidak sehat , dan keduanyaditujukan hanya banyak ditemukan arus informasi tidak amanmasalah dalam C. Untuk pengetahuan kita , tidak ada upaya yang sebanding memilikitelah dibuat untuk aplikasi Web, yang melibatkan berbagaibahasa dan masalah aliran informasi yang unik .Berbeda dengan teknik kompilasi -time , perlindungan run-timeteknik yang menarik karena akurasi mereka dalam mendeteksikesalahan . Pendekatan run-time khas adalah kode instrumen denganpenjaga dinamis selama fase kompilasi . CowanStackguard [ 15 ] merupakan perwakilan dari pendekatan ini ; rendahakurasi overhead dan tinggi telah menyebabkan dimasukkan dalam berbagaipaket perangkat lunak komersial . Immunix Dijamin Linux 7 + adalahdistribusi komersial Linux ( RedHat 7.0 ) yang telahdikompilasi untuk menggabungkan Stackguard instrumentasi . Microsoftjuga termasuk fitur yang sangat mirip dengan Stackguard di terbarurilis Visual C + + . NET compiler [ 47 ] .Tujuan proyek kami adalah untuk menggunakan campuran fitur statis dan runtime untukmembentuk suatu pendekatan holistik dan praktis untuk memastikan Webkeamanan aplikasi . Untuk mencapai hal ini , kami telah membuat alat yang a)statis memverifikasi kode aplikasi Web yang ada tanpaupaya tambahan penjelasan , dan b ) setelah verifikasi ,secara otomatis akan mengamankan bagian yang rentan dari kode .Makalah ini memiliki kontribusi sebagai berikut :1 . Kami telah menunjukkan bahwa masalah keamanan aplikasi yang paling Webtimbul dari pelanggaran integritas data yang disebabkan oleh tidak amanmekanisme arus informasi , dan yang diperlukan untuk mengekspresikandan menegakkan kebijakan non-interference [ 30 ] .2 . Untuk menentukan dan memverifikasi kebijakan non-interference, kita memilikimengusulkan sistem tipe berdasarkan aksioma Denning [ 22 ] danStrom ini typestate [ 68 ] . Keuntungan sistem ada dua:pertama, menangkap semantik informasi - aliran yang lebih tepat daripadasistem statis , sehingga tingkat positif palsu rendah , kedua,membutuhkan usaha penjelasan pada bagian dari programmer .3 . Sistem yang diusulkan kami bertindak sebagai ekstensi untuk bahasa yangada sistem tipe . Kami telah menerapkan WebSSARI ( WebKeamanan aplikasi dengan Analisis Statis dan Runtime Inspeksi )sebagai kerangka kerja untuk memperluas bahasa script yang ada dengan kamisistem . Saat ini , WebSSARI mendukung PHP - yang paling banyakaplikasi bahasa pemrograman Web yang digunakan [ 40 ] . mengingattata bahasa yang sesuai , WebSSARI juga dapat mendukung lainnyabahasa yang digunakan untuk pemrograman aplikasi Web .4 . WebSSARI otomatis memasukkan penjaga runtime yang berpotensibagian aman dari kode , yang berarti bahwa sepotong kode PHPakan diamankan setelah pengolahan WebSSARI bahkantanpa adanya intervensi programmer . Overhead yang diinduksi adalahrendah karena jumlah insersi direduksi menjadi minimumketika informasi yang dikumpulkan dari analisis statis digunakan .Pengguna dapat menambahkan penjelasan untuk lebih mengurangi jumlah ini ,mungkin ke nol .5 . Kami telah menerapkan algoritma ke WebSSARI . Kami menggunakanuntuk memverifikasi 230 proyek aplikasi Web open-source padaSourceForge.net , yang dipilih untuk mewakili proyekjatuh tempo yang berbeda , popularitas, dan skala . 69 proyek , antarayang banyak yang banyak digunakan , terdapat kerentanan .Banyak menemukan kerentanan memungkinkan penyerang remoteuntuk sepenuhnya kompromi mesin yang menjalankan perangkat lunak.Setelah pemberitahuan , pengembang dari 38 proyek mengakui kamitemuan dan menyatakan rencana mereka untuk menyediakan patch . statistik kamijuga menunjukkan bahwa analisis statis mengurangi potensi runtimeoverhead dengan 98,4 % .Untuk yang terbaik dari pengetahuan kami , seperti alat belum pernah tersediauntuk dan bereksperimen dengan kode aplikasi Web dunia nyata .2 . APLIKASI WEBKERENTANANPada bagian ini kami akan memberikan beberapa contoh singkat Webkerentanan aplikasi . Karena kita hanya akan memberikan singkatdeskripsi yang paling banyak dieksploitasi kerentanan -scriptinjeksi - pembaca disebut Scott dan Sharp [ 62 ] [ 63 ] ,Curphey et al . [ 17 ] , Curphey dkk . [ 54 ] [ 17 ] , dan Meier et al . [ 46 ]untuk lebih jelasnya .2.1 Cross-Site Scripting ( XSS )Cross- site scripting ( XSS ) mungkin adalah Web yang paling umumkerentanan aplikasi . Gambar 1 memberikan contoh XSSbug kami diidentifikasi dalam SquirrelMail , yang populer e -mail berbasis Webaplikasi.$ bulan = $ _GET [ ' bulan ' ] , $ tahun = $ _GET [ ' tahun ' ] ;$ hari = $ _GET [ 'hari' ] ;echo " < a href = \ " day.php ? tahun = $ tahun & "echo " bulan = $ bulan & hari = $ hari \ " > " ;Gambar 1 . Sebuah kerentanan XSS ditemukan di SquirrelMail .Nilai untuk variabel $ bulan , $ hari, dan $ tahun berasal dariPermintaan HTTP dan digunakan untuk membangun hasil HTML dikirim kepengguna . Sebuah contoh dari URL menyerang akan :41
 http://www.target.com/event_delete.php?year = > <script> berbahaya_script ( ) ; < / script>Penyerang harus menemukan cara untuk membuat korban membuka URL ini . satuStrategi adalah untuk mengirim e - mail yang berisi javascript yang diam-diammeluncurkan jendela browser tersembunyi untuk membuka URL ini . lain adalahuntuk menanamkan javascript yang sama di dalam halaman Web , ketika korbanmembuka halaman , script mengeksekusi dan diam-diam membuka URL .Setelah kode PHP yang ditunjukkan pada Gambar 1 menerima permintaan HTTPuntuk URL , itu menghasilkan output HTML dikompromikan ditampilkanpada Gambar 2 .<a href= "day.php?year=> <script> malicious_script ( ); < / script>Gambar 2 . Berkompromi hasil HTML .Dalam strategi ini , output dikompromikan berisi script berbahayadisiapkan oleh seorang penyerang dan dikirimkan atas nama server Web .Integritas keluaran HTML maka rusak dan Javascript SamaKebijakan asal [ 62 ] dilanggar . Karena skrip berbahaya adalahdisampaikan atas nama server Web, diberikan kepercayaan yang samaTingkat sebagai server Web, yang minimal memungkinkan script untukbaca pengguna cookie ditetapkan oleh server. Hal ini sering mengungkapkan passwordatau memungkinkan untuk sesi pembajakan , jika server Web terdaftar diDomain Terpercaya browser korban , hak-hak lain ( misalnya ,akses sistem file lokal ) dapat diberikan juga.2,2 SQL InjectionDianggap lebih parah dari XSS , SQL injection kerentananterjadi ketika nilai-nilai dipercaya digunakan untuk membangun perintah SQL ,sehingga pelaksanaan perintah SQL sewenang-wenang yang diberikan olehpenyerang . Contoh di bawah ini didasarkan pada kerentanan kitaditemukan pada ILIAS Open Source , pembelajaran berbasis web populersistem manajemen .$ sql = " INSERT INTO tracking_temp " ." VALUES ( ' $ HTTP_REFERER '); "; mysql_query ( $ sql ) ;Gambar 3. Sebuah disederhanakan SQL injection kerentanan ditemukan di ILIASOpen Source.Pada Gambar 3 , $ HTTP_REFERER digunakan untuk membangun SQLperintah. Bidang pengarah dari permintaan HTTP adalah dipercayanilai yang diberikan oleh klien HTTP , penyerang dapat mengatur lapangan untuk :'); DROP TABLE ( ' penggunaHal ini akan menyebabkan kode pada Gambar 3 untuk membangun variabel $ sqlsebagai :INSERT INTO NILAI tracking_temp ( '' ) ;DROP TABLE ( ' pengguna ' ) ;Tabel " user " akan berkurang bila perintah SQL inidieksekusi . Teknik ini , yang memungkinkan untuk sewenang-wenangmanipulasi database backend , bertanggung jawab untuk mayoritasserangan aplikasi Web yang sukses . selama kamieksperimen dengan WebSSARI , kami menemukan bahwa pengembang yangmengakui bahwa variabel dari permintaan HTTP tidak bolehterpercaya cenderung lupa bahwa hal yang sama berlaku untuk bidang pengarah ,pengguna cookies , dan jenis-jenis informasi yang dikumpulkan dari HTTPpermintaan .2.3 Umum Script InjectionKerentanan script injeksi Umum dianggap palingparah dari tiga jenis dibahas dalam makalah ini . Mereka terjadi ketikauntrusted data digunakan untuk memanggil fungsi-fungsi yang memanipulasi sistemsumber daya ( misalnya , di PHP : fopen ( ) , mengubah nama ( ) , copy ( ) , unlink ( ) , dll)atau proses ( misalnya , exec ( ) ) . Gambar 4 menyajikan versi sederhanadari kerentanan script injeksi umum kami temukan diegroupware , yang secara luas diadopsi groupware suite yang berbasis webdisponsori oleh Toshiba . HTTP request variabel " csvfile " adalahdigunakan sebagai argumen untuk memanggil fopen ( ) , yang memungkinkan file sewenang-wenang untukdibuka . Bagian kode selanjutnya memberikan file dibuka untukklien HTTP , memungkinkan penyerang untuk men-download file sewenang-wenang .$ csvfile = $ _POST [ ' csvfile ' ] ;if ( $ _POST [ 'action ' ] == 'download' ) $ fp = fopen ( $ csvfile , ' rb ' ) ;Gambar 4 . Sebuah script injeksi bug umum ditemukan di egroupware .Sebuah contoh yang lebih parah kerentanan ini jenis - bug kamiditemukan dalam Surveyor PHP manajemen survei online sistem adalahditunjukkan pada Gambar 5 .exec ( " htpasswd.exe - b . htpasswd " ." { $ _POST [ 'User' ] } { $ _POST [ ' lulus ' ] } " ) ;Gambar 5. Sebuah script injeksi bug umum ditemukan dalam Surveyor PHP .Maksud untuk kode ini adalah untuk memungkinkan administrator survei untukmengubah password pengguna untuk mengakses sistem . Namun , sejak"User " dan " lulus " variabel dipercaya , kode memungkinkanpelaksanaan perintah sistem sewenang-wenang . Misalnya , jikaadministrator survei berbahaya mengirimkan permintaan HTTP dengan:user = "; PENGGUNA NET foo / ADD " dan pass = " " , yang sebenarnyaperintah menjadi :htpasswd.exe - b htpasswd , . NET PENGGUNA FOO / ADDHal ini menghasilkan penciptaan pengguna baru " foo " dengan hak logon .2.4 Pemodelan Kerentanan Aplikasi WebTujuan utama dari sistem keamanan informasi harusmelindungi kerahasiaan , integritas , dan ketersediaan [ 60 ] . dari kamicontoh , jelas bahwa untuk aplikasi Web , kompromi dalamintegritas adalah penyebab utama dari kompromi dalam kerahasiaandan ketersediaan . Hubungan ini diilustrasikan pada Gambar 6 .Untrusted data digunakan untuk membangun output yang terpercaya tanpasanitasi , sehingga pelanggaran integritas data . Hal ini menyebabkaneskalasi hak akses , yang kemudian menghasilkan kompromi dalamketersediaan dan kerahasiaan . Jelas ada kebutuhan untukMekanisme yang menentukan dan melaksanakan arus informasi amankebijakan dalam program aplikasi Web .Gambar 6 . Sebuah model kerentanan aplikasi Web umum.3 . KEAMANAN INFORMASI ARUSJenis sistem telah terbukti berguna untuk menentukan dan memeriksasifat keselamatan Program . Dengan cara programmer - dipasokAplikasi Web PenyerangPelanggaran integritaskerahasiaan PelanggaranData yang Terpercaya dipercaya dataRahasia data Public DataHak aksesPelanggaran !!!Informasi Insecure Arus ! Pelanggaran keamanan42
 penjelasan , kedua kode bukti pembawa ( PCC ) [ 51 ] dan diketikbahasa assembly ( TAL ) [ 49 ] dirancang untuk memberikan keamananbukti untuk tingkat rendah program compiler yang dihasilkan . Kami juga menggunakanketik sistem untuk memverifikasi program keamanan , tapi kami menargetkan highlevelbahasa ( PHP ) dan mencoba untuk menghindari penjelasan tambahan .Banyak upaya verifikasi keamanan sebelumnya telah difokuskan padaSifat keselamatan duniawi terkait untuk mengontrol aliran . Schneider [ 61 ]meresmikan properti keamanan yang diusulkan menggunakan automata keamanan,yang menentukan urutan tindakan hukum Program . Walker [ 73 ]mengusulkan perpanjangan TAL yang menggunakan kebijakan keamanan menyatakandalam automata Schneider untuk mendapatkan sistem jenisnya . Jensen et al . [ 41 ]diusulkan menggunakan logika temporal menentukan programsifat keamanan berdasarkan aliran kontrol , dan menawarkan modelmemeriksa teknik untuk verifikasi . Dalam upaya yang sama , Chen danWagner [ 13 ] mencari kerentanan dalam program C nyata denganModel memeriksa pelanggaran keamanan sementara sebuah programproperti . Meskipun fokus utama mereka adalah tidak pada keamanan , Ball danRajamani [ 5 ] mengadopsi pendekatan yang sama untuk proyek SLAM merekadan berhasil diterapkan untuk driver Windows XP perangkat .3.1 Analisis Jenis - BasedKarena kerentanan dalam aplikasi web terutama terkaitdengan arus informasi tidak aman , kami fokus upaya kami untuk memastikanarus informasi yang tepat daripada aliran kontrol . Yang pertama secara luasModel diterima untuk aliran informasi aman diberikan oleh Bell danLa Padula [ 9 ] . Mereka menyatakan dua aksioma : a) subjek tidak dapat mengaksesinformasi rahasia atas izin nya , dan b ) subjek tidak bisamenulis ke objek diklasifikasikan di bawah izin nya . asli merekaModel hanya ditangani dengan kerahasiaan; Biba [ 10 ] dikreditkan denganmenambahkan konsep integritas .Denning [ 22 ] mendirikan model kisi untuk menganalisis amanarus informasi dalam bahasa pemrograman imperatif berdasarkanabstraksi Program ( mirip dengan Cousot dan Cousot itu [ 14 ]interpretasi abstrak ) yang berasal dari semantik diinstrumentasisebuah bahasa. Andrews dan Reitman [ 2 ] menggunakan logika aksiomatikuntuk merumuskan model yang Denning dan mengembangkan waktu kompilasiMetode sertifikasi menggunakan logika Hoare itu , dalam kedua kasus , kesehatanhanya ditujukan intuitif ( pengobatan yang lebih formalKesehatan Denning dapat ditemukan di Mizuno dan Schmidt [ 48 ] ) .Orbaek [ 53 ] mengusulkan perlakuan yang sama , tetapi membahasaman masalah arus informasi dalam hal integritas data, bukankerahasiaan . Volpano et al . [ 70 ] berpendapat bahwa baik bekerjaterbukti kesehatan sehubungan dengan beberapa semantik diinstrumentasiyang validitasnya terbuka untuk pertanyaan , tidak berarti ditawari untukmembuktikan bahwa semantik diinstrumentasi benar mencerminkanarus informasi dalam semantik bahasa standar. untuk dasarlangsung pada semantik bahasa standar , Volpano dkk . menunjukkanaksioma bahwa Denning dapat ditegakkan menggunakan sistem ketikvariabel program yang berhubungan dengan kelas keamanan yangmemungkinkan arus informasi antar - variabel yang akan statis diperiksakebenaran . Kesehatan dibuktikan dengan menunjukkan bahwa baik diketikProgram menjamin kerahasiaan dalam hal non-interference, yangproperti diperkenalkan oleh Goguen dan Meseguer [ 30 ] untuk mengekspresikankebijakan arus informasi . Sistem jenis baru , berfungsi penuhdirancang untuk memastikan arus informasi yang aman telah ditawarkan untuktingkat tinggi , bahasa yang kuat -mengetik seperti ML [ 56 ] dan Jawa [ 50 ][ 7 ] . Berdasarkan teori Foster kualifikasi jenis [ 27 ] , Shankar et al .[ 65 ] menggunakan kendala berbasis mesin inferensi tipe untuk memverifikasiarus informasi aman dalam program C , dan mendeteksi beberapaFormat string kerentanan dalam beberapa program C nyata bahwa merekamenyadarinya dari sebelumnya .Pendekatan berbasis Type untuk analisis program statis yang menarikkarena mereka membuktikan kebenaran program tanpa masuk akalupaya perhitungan . Kelemahan utama mereka adalah mereka palsu tinggiTingkat positif , yang sering membuat mereka tidak praktis untuk dunia nyatagunakan . Terlepas dari apakah kelas keamanan ditetapkan melaluipenjelasan petunjuk atau melalui aturan-aturan inferensi , mereka statisterikat variabel program dalam sistem tipe konvensional . sekarangpenting untuk diingat bahwa kelas keamanan variabel adalahmilik negara , dan karena itu bervariasi di berbagai titik atau hubungisitus dalam sebuah program . Misalnya, dalam Myers ' JIF bahasa [ 50 ] ,setiap variabel program dikaitkan dengan label keamanan tetap. Anilai mengasumsikan label dari variabel di mana ia disimpan . ketikanilai yang ditetapkan ke variabel , nilai kehilangan label aslinyadan mengasumsikan label dari variabel baru yang diberikan .Oleh karena itu , tugas menyebabkan re - label label keamanandari nilai yang diberikan . JIF menjamin keamanan dengan hanya mengijinkan lebihmembatasi re - label . Namun , untuk secara tepat menangkap informasialiran, nilai-nilai harus dikaitkan dengan label tetap, dan variabelharus mengasumsikan label nilai saat mereka menyimpan -in lainnyakata , tugas harus menghasilkan re - label variabeldaripada nilai . Dalam JIF dan sistem berbasis jenis yang sama , variabellabel menjadi semakin ketat selama perhitungan ,sehingga tingkat positif palsu yang tinggi . JIF membahas masalah ini denganmemberikan programmer kekuatan untuk mengumumkan variabel - yaitu, untukeksplisit bersantai label variabel .3.2 Analisis dataflowPositif palsu yang dihasilkan dari verifikasi statis amaninformasi arus terbagi dalam dua kategori . Kelas 1 positif palsutimbul dari pendekatan yang tidak tepat variabel sementaraproperti . Masalah yang dijelaskan dalam paragraf sebelumnya danDoh dan Shin [ 25 ] pemulihan maju dan mundur pemulihandefinisi dijadikan contoh. Bahkan , sebagian besar berbasis Denningsistem menderita kelas 1 kesalahan karena kelas keamananvariabel mereka tetap konstan sepanjang eksekusi program .Kelas 2 palsu positif hasil dari informasi runtimemanipulasi atau validasi . Sebagai contoh, data dapat dipercayadisterilkan sebelum digunakan , dengan label keamanan asli tidakberlaku lagi . Semacam ini positif palsu lebih seringterkait dengan verifikasi yang fokus pada integritas .Kelas 1 kesalahan dapat dikurangi dengan membuat lebih tepatperkiraan arus informasi run-time . Andrews danReitman [ 2 ] pertama kali didirikan sebuah pendekatan di mana dataflow adalahsemantik dicirikan dalam hal logika program . dengan menerapkanaksioma aliran , satu dapat memperoleh bukti aliran yang menentukan programefek pada informasi negara . Hal ini memungkinkan kelas keamananvariabel berubah selama eksekusi . Banatre et al . [ 6 ] memilikimenawarkan pendekatan yang sebanding ditambah metode bukti memeriksa bahwamenyerupai teknik analisis dataflow terkait dengan mengoptimalkancompiler . Joshi dan Leino [ 42 ] diperiksa berbagai bentuk logisuntuk mewakili semantik arus informasi , yang mengarah kekarakterisasi yang mengandung tiga kali lipat Hoare . Darvas et al . [ 18 ] pergilangkah lebih lanjut dalam menawarkan penokohan dalam logika dinamis,yang memungkinkan penggunaan tujuan umum alat verifikasi (yaitu ,Teorema Prover ) untuk menganalisis arus informasi aman dalamprogram deterministik .Pendekatan serupa yang melibatkan teknik analisis aliran - sensitifdigunakan dengan mengoptimalkan compiler telah telah secara ekstensifditeliti mulai dari karya-karya awal Allen dan Cocke [ 1 ]dan diikuti oleh karya-karya Hecht dan Ullman [ 34 ] , dan GrahamWegman [ 31 ] , Barth [ 8 ] , dan lain-lain . Metode ini menghasilkan lebih43
 prediksi negara runtime akurat daripada metode laindisebutkan di atas . Namun , aliran - sensitivitas datang pada harga -setiap cabang di aliran kontrol program menggandakan verifier iniruang pencarian dan karena itu batas skalabilitas . ESP , verifikasiAlat baru yang dikembangkan oleh Das et al . [ 19 ] , merupakan perwakilan dari iniPendekatan , kontribusi yang khas karena ESP memungkinkan untukverifikasi aliran - sensitif yang skala untuk program besar . sekarangdidasarkan pada asumsi bahwa sebagian besar cabang Program tidak mempengaruhiproperti arus informasi yang sedang diperiksa . Tidak seperti ESP ,Guyer et al . ' S [ 32 ] pendekatan memiliki fokus keamanan tertentu . dulualiran - sensitif , konteks-sensitif , interprocedural aliran dataKerangka analisis yang disediakan oleh mereka Broadway mengoptimalkancompiler untuk memeriksa format string kerentanan nyata Cprogram .3.3 Aliran - Sensitif Analisis Jenis - BasedPendekatan ketiga menekankan jenis yang lebih akurat atau ekspresif dalamJenis sistem . Dalam analisis kepercayaan mereka program C , Shankar et al .[ 65 ] memperkenalkan konsep jenis polimorfisme jenis merekakualifikasi kerangka kerja , dan menunjukkan bagaimana dapat membantu mengurangi palsupositif . Lain telah mempertimbangkan memperluas jenis dengan keadaanpenjelasan . Yang paling terkenal pendekatan semacam ini adalah Stromdan Yemini yang typestate [ 68 ] , yang merupakan penyempurnaan dari tipe .Menurut definisi mereka , jenis obyek menentukan seperangkatoperasi yang diijinkan , sedangkan typestate yang menentukan subsetdiijinkan pada konteks tertentu. Karena memungkinkan flowsensitivepelacakan negara variabel , ia berfungsi sebagai teknikberlaku untuk mengurangi jumlah kelas 1 kesalahan jenis berbasissistem arus informasi menderita. Terinspirasi oleh typestate , Delinedan Fahndrich [ 21 ] extended C jenis dalam pemrograman Vault merekabahasa dengan predikat ( nama jenis penjaga ) yang menggambarkan hukumkondisi pada penggunaan jenis. Dengan kata lain , jenis menentukanoperasi yang valid , sedangkan tipe penjaga menentukan operasi ini 'kali valid digunakan. Dalam sebuah proyek baru , Foster et al . [ 28 ] diperpanjangasli, aliran - sensitif sistem kualifikasi jenis mereka untuk C dengan- aliran sensitif kualifikasi jenis . Menggunakan alat CQual mereka, merekamenunjukkan efektivitas sistem mereka dengan menemukanjumlah penguncian yang sebelumnya tidak diketahui bug dalam kernel Linux .Menariknya , penulis ESP [ 19 ] , yang melacak informasialiran menggunakan analisis dataflow , menggambarkannya sebagai "hanya sebuah typestatechecker untuk program besar . " Tampaknya bahwa sebagai jenis sistem yangdisempurnakan dengan negara dan menggabungkan aliran - sensitif pemeriksaan ,Perbedaan sedikit akan ada di antara sistem jenis dan dataflowMetode analisis untuk memverifikasi arus informasi . Pendekatan kami untukmengurangi kelas 1 kesalahan didasarkan terutama pada typestate .3.4 Memeriksa StatisTujuan dari pemeriksaan statis hanya untuk menemukan bug perangkat lunak lebihselain untuk membuktikan bahwa tidak ada [ 3 ] . Dengan kata lain , damadalah tidak sehat . Sebuah karya perintis adalah bahwa Uskup dan Dilger[ 11 ] , yang diperiksa untuk " time-of - check- to -time -of -use "( TOCTTOU ) kondisi ras . Salah satu hasil yang menarik baru-baru ini adalah bahwaAshcraft dan Engler [ 3 ] , yang menggunakan metacompilation mereka [ 33 ]teknik untuk menemukan lebih dari 100 kerentanan di Linux dan OpenBSD ,lebih dari 50 dari yang mengakibatkan patch kernel . Teknik ini membuatpenggunaan aliran - sensitif , konteks-sensitif , data yang interproceduralaliran memeriksa kerangka kerja yang tidak memerlukan penjelasan tambahan .Sebaliknya , Flanagan dkk ' s . ESC / Java [ 26 ] ( yang dirancang untuk memeriksakebenaran program Java ) membutuhkan penjelasan tambahandari programmer .Kebanyakan upaya untuk mengembangkan catur telah mengakibatkan publikalat yang tersedia [ 16 ] , termasuk BOON oleh Wagner et al . [ 71 ] ,TIKUS oleh Secure Software [ 64 ] , FlawFinder oleh Wheeler [ 75 ] ,PScan oleh dekok [ 20 ] , belat oleh Larochelle dan Evans [ 44 ] , danITS4 oleh Viega et al . [ 69 ] . Semua ini tidak sehat dam mencaripola kesalahan tertentu . Belat adalah satu-satunya yang mengharuskan penggunapenjelasan . Dengan pengecualian dari ESC / Jawa , mereka semuadirancang untuk digunakan dengan program C .3.5 PerbandinganMetode verifikasi tipe statis berbasis Kebanyakan sebelumnya disediakansebagai ekstensi untuk bahasa yang ada ( misalnya , Pottier dan Simonet [ 56 ] ,Banerjee dan Naumann [ 7 ] , dan Myers [ 50 ] ) dan dirancang untukmendukung pengembangan program aman , sementara algoritmaupaya untuk memverifikasi kode yang ada dalam ketiadaan intervensi pengguna .Checkers ( misalnya , MC [ 3 ] , TIKUS [ 64 ] , dan ITS4 [ 69 ] ) juga melakukanAnalisis dataflow tanpa penjelasan tambahan, tetapi merekaanalisis dianggap tidak sehat . Perbedaan lain adalah bahwaWebSSARI menjamin keamanan dengan memasukkan penjaga runtime , sedangkanalat-alat lain yang terbatas untuk menyediakan verifikasi .Fokus Web Snd Anno Lang DesemberWebSSARI S. I.F. Ketik Ya Opsional PHP AutoCQual S. I.F. Ketik Ya Beberapa C manualJIF S. I.F. Ketik Ya Diperlukan Jawa manualVault Jenderal Jenis Ya Diperlukan C manualESP Jenderal D.A. Ya Tidak perlu C Tidak adaBroadway S. I. F. D.A. Ya Tidak perlu C Tidak adaMC S. I.F. D.A. Tidak Tidak perlu C AutoBOON S. D.A. Tidak ada perlu ada CESC / Jawa Jenderal D.A. Tidak Diperlukan Jawa manualBelat S. L.A. . Tidak Diperlukan C manualITS4 S. L.A. Tidak Tidak perlu C AutoMOPS S. MODL Ya Tidak perlu C Tidak adaApp- PendekatanUpaya Anno - AnotasiDukungan Desember - DeklasifikasiI.F. - Fokus pada arus informasiJenis - Jenis sistemAnalisis L.A. - leksikalSnd - Tingkat KesehatanBahasa Lang -DidukungS. - Fokus pada keamananVerifikasi Jenderal - JenderalAnalisis D.A. - dataflowModl - Model memeriksaGambar 7. Perbandingan dengan kerja terkait .WebSSARI , MC dan ITS4 adalah satu-satunya pendekatan yang mendukungdeklasifikasi otomatis , didefinisikan sebagai proses identifikasiperubahan di kelas keamanan variabel yang dihasilkan dari runtimesanitasi atau validasi . Deklasifikasi otomatis membantu mengurangijumlah kelas 2 positif palsu . MC dirancang untuk mendeteksibagian kode yang memvalidasi pengguna-diserahkan bilangan bulat . Jika kodemembuat kedua validasi terikat batas atas dan bawah padaNilai dipercaya, diasumsikan bahwa validasi telah dilakukan ;kelas keamanan dari nilai divalidasi kemudian berubah dariuntrusted terpercaya . Pendekatan ini didasarkan pada tidak sehat yangasumsi bahwa selama nilai dipercaya melewati jenis tertentuvalidasi , sebenarnya aman. Oleh karena itu, positif palsuberkurang pada biaya pengenalan negatif palsu bahwa kompromiverifikasi kesehatan . Dalam kasus ITS4 , upaya untuk mengurangiKelas 2 positif palsu ( sementara mendeteksi C format stringkerentanan ) melibatkan menggunakan analisis leksikal untuk mengidentifikasirutinitas sanitasi berdasarkan heuristik tidak sehat .Ketika memverifikasi arus informasi dalam aplikasi Web , salah satunyadengan string bukan integer , dan pemrograman yang paling Web44
 bahasa ( misalnya , PHP , ASP , dan Perl ) menyediakan standar stringfungsi sanitasi . Dengan menerima semua nilai string diproses olehfungsi-fungsi sebagai terpercaya , pertama kita mengurangi sejumlah besarkelas 2 positif palsu . Untuk kasus di mana sanitasi kustomdisediakan oleh programmer , kami mengusulkan kualifikasi jenis - sadar ,yang mengakibatkan kisi keamanan yang lebih ekspresif daripadakisi - tercemar murni sederhana yang digunakan oleh usaha-usaha lain (misalnya ,Ashcraft dan Engler [ 3 ] dan Shankar et al . [ 65 ] ) , dan mencapaipengurangan lebih lanjut dalam jumlah kelas 2 kesalahan .Untuk memberikan representasi yang jelas tentang bagaimana upaya kita dibandingkan denganorang lain , kita telah mendefinisikan enam kriteria untuk mengklasifikasikan statisanalisis : fokus ruang lingkup , pendekatan , kesehatan , tambahanUpaya penjelasan , bahasa yang didukung , dan deklasifikasimendukung . Perbandingan berdasarkan kriteria ini disajikan dalamGambar 7.3.6 Perlindungan RuntimeDalam banyak situasi , sulit untuk analisis statis untuk menawarkanProgram runtime memuaskan pendekatan negara, salah satu strategi adalahuntuk menunda bagian dari proses verifikasi sampai runtime . A goodcontoh dari praktek ini adalah " modus tercemar " Perl [ 72 ] , yangmenjamin integritas sistem dengan data pelacakan tercemar disampaikan olehpengguna pada saat runtime . Demikian pula , Myers [ 50 ] juga meninggalkan beberapa JIFlabel keamanan memeriksa operasi sampai runtime . dalam dinamismengetik bahasa seperti Lisp dan Scheme , pendekatan umum adalahuntuk melakukan runtime untuk memeriksa jenis benda yang jenis yangbelum ditentukan pada saat kompilasi . Ini jenis pemeriksaan dinamisyang sangat mahal , sehingga dalam penciptaan statis sepertiteknik optimasi sebagai mengetik dinamis [ 35 ] dan lembut mengetik[ 77 ] untuk mengurangi jumlah cek runtime .WebSSARI mengambil pendekatan serupa -yaitu , dengan menerapkan statisanalisis , maka titik-titik kode yang membutuhkan pemeriksaan runtime dan sisipancek . Sebuah proses serupa ditemukan dalam Necula et al . ' S CCured[ 52 ] . Meskipun tidak secara khusus fokus pada keamanan , skema inimenggabungkan pemeriksaan inferensi dan run-time untuk memastikan jenis jenis keselamatanuntuk program C yang ada . Perbedaan utama adalah bahwa kami dimasukkanpenjaga melakukan tugas sanitasi daripada jenis runtimememeriksa- dengan kata lain , kita memasukkan rutinitas sanitasi dibagian rentan kode yang menggunakan informasi terpercaya. ketikadisisipkan pada lokasi yang tepat , waktu eksekusi mereka tidak dapatdianggap overhead yang nyata karena tindakan adalah diperlukancek keamanan; WebSSARI akan hanya dimasukkan baris kodedihilangkan oleh ceroboh ( atau keamanan menyadari ) programmer .3.7 Ada Aplikasi Web SecuritymekanismeScott dan tajam [ 62 ] [ 63 ] menggunakan aplikasi proxy untuk abstrakPerlindungan aplikasi Web , proxy memvalidasi input pengguna , sehinggamencegah masukan dipercaya memasuki aplikasi Web .Produk komersial seperti AppShield [ 58 ] dan InterDo [ 43 ]menggunakan pendekatan yang sama . Namun, meskipun memberikanjaminan langsung dari keamanan aplikasi Web , memerlukanidentifikasi yang benar dan kebijakan validasi untuk setiap individuentry point untuk aplikasi Web . Sebagai Bobbitt catatan , ini adalahtugas keamanan yang sulit yang memerlukan konfigurasi hati-hati oleh" Sangat teknis , individu berpengalaman " [ 12 ] . lainketerbatasan adalah bahwa pendekatan ini melindungi aplikasi Web padafase penyebaran bukannya mencoba untuk menghilangkan bug selamatahap pengembangan .Mengingat kekurangan-kekurangan ini , Huang et al . mengusulkan pengkajiankerangka kerja untuk keamanan aplikasi Web yang mereka sebut GELOMBANG(Aplikasi Web Vulnerability Scanner dan Kesalahan ) [ 38 ] . merekakerangka pengujian menggunakan hitam - kotak untuk mengidentifikasi aplikasi Webkerentanan . Pendekatan serupa yang diadopsi oleh komersialproyek seperti AppScan [ 59 ] , WebInspect [ 66 ] , dan scando [ 43 ] .Meskipun pendekatan ini dapat digunakan untuk mengidentifikasi kesalahan di awalsiklus pengembangan , tidak menyediakan Web langsungaplikasi perlindungan yang ditawarkan oleh Scott dan solusi Sharp .Di sini kami telah mencoba untuk merancang pendekatan yang mempertahankankeuntungan dari kedua sementara juga menghilangkan kerugian mereka.4 . VERIFIKASI ALGORITMADalam PHP ( suatu keharusan , bahasa pemrograman deterministik ) , setfungsi mempengaruhi integritas sistem . Misalnya , exec ( )mengeksekusi perintah sistem , dan echo ( ) menghasilkan output . inifungsi harus dipanggil dengan argumen terpercaya. Kita lihat sepertiberfungsi sebagai fungsi sensitif , kerentanan hasil dari tercemar( dipercaya ) data yang digunakan sebagai argumen dalam panggilan fungsi sensitif.Kami intuitif berasal kebijakan trust ( dinyatakan sebagai prasyaratfungsi ) , yang menyatakan tingkat kepercayaan yang diperlukan untuk masing-masingargumen fungsi itu . Kami menganggap semua nilai disampaikan olehpengguna sebagai tercemar , dan diperiksa propagasi mereka terhadap satu setditetapkan kebijakan kepercayaan.4.1 Arus Informasi ModelUntuk mengkarakterisasi tingkat kepercayaan data, kami mengikuti Denning [ 22 ]Model dan membuat asumsi sebagai berikut :1 . Setiap variabel berhubungan dengan keamanan kelas ( tingkat kepercayaan).2 . T = { τ1 , τ2 , ... , τn } adalah himpunan berhingga kelas keamanan.3 . T sebagian diperintahkan oleh ≤ , yang refleksif , transitif , danantisimetrik . Untuk τ1 , τ 2 ∈ T ,τ1 = τ 2 IFF τ1 ≤ τ τ 2 dan 2 ≤ τ1 ,andτ1 < τ 2 IFF τ1 ≤ τ 2 dan τ1 ≠ τ 2 .4 . T membentuk kisi lengkap dengan batas bawah ⊥ sehingga∀ τ ∈ T , ⊥ ≤ τ , dan batas atas • sedemikian rupa sehingga∀ τ ∈ T , τ ≤ • .Asumsi ini menyiratkan bahwa terbesar Operator batas bawah danoperator paling batas atas ada di T. Untuk bagian Y ⊆ T , biarkanó Y menunjukkan • jika Y kosong dan batas bawah terbesar darijenis dalam Y sebaliknya; mari ò Y menunjukkan ⊥ jika Y kosong danSetidaknya batas atas jenis di Y sebaliknya.Untuk mengembangkan sistem arus informasi , kita perlu memberikanmetode untuk mengungkapkan tingkat kepercayaan variabel . Setelah Foster etal . [ 27 ] dan Shankar et al . [ 65 ] , kami memperpanjang PHP yang adabahasa dengan tipe ekstra kualifikasi -a penjelasan secara luas digunakanmekanisme untuk mengekspresikan jenis perbaikan . Ketika digunakan untukketerangan variabel , C tipe const kualifikasi mengungkapkankendala yang variabel dapat diinisialisasi tetapi tidak diperbarui [ 27 ] .Kami menggunakan jenis kualifikasi sebagai sarana untuk menghubungkan secara eksplisitkelas keamanan dengan variabel dan fungsi . Dalam WebSSARI kamiimplementasi, kita ditentukan prasyarat untuk semua PHP sensitiffungsi menggunakan kualifikasi jenis . Definisi ini disimpan dalamFile pendahuluan dan dimuat oleh WebSSARI pada startup . lainFile pendahuluan berisi postconditions untuk fungsi-fungsi yang melakukansanitasi untuk menghasilkan output terpercaya dari masukan tercemar . iniberfungsi sebagai mekanisme untuk declassifications otomatis . sepertiga45
 File pendahuluan meliputi penjelasan ( menggunakan kualifikasi jenis ) dari semuamungkin penyedia masukan tercemar ( misalnya , $ _GET , $ _POST ,$ _REQUEST ) . Kualifikasi jenis juga digunakan sebagai sarana untukpengembang untuk secara manual arsip- variabel . Pedomandukungan deklasifikasi penting karena memungkinkan untuk manualpenghapusan positif palsu , yang pada gilirannya mengurangi jumlahpenjaga runtime yang tidak perlu , sehingga mengurangi overhead.Namun, tidak seperti Shankar et al . [ 65 ] , kita tidak melakukan jenisinferensi ( kelas keamanan) dalam upaya kami untuk menghilangkan penggunaUpaya penjelasan . Dalam informasi aman jenis konvensional berbasissistem aliran ( misalnya , JIF [ 50 ] ) , tipe inferensi digunakan sebagai sarana untukmenyimpulkan keamanan kelas awal variabel , dan variabel adalahdiasumsikan terkait dengan kelas awal seluruhSeluruh pelaksanaan program . Sebagaimana dijelaskan dalam Bagian 3.1 , tetapkelas variabel menginduksi positif palsu . Untuk mengembangkan sistem jenisdi mana kelas variabel dapat mengubah dan sifat aliran - sensitifdapat dipertimbangkan , kami mempertahankan lingkungan tipe kami berdasarkanStrom dan Yemini itu [ 68 ] typestate .Sebuah jenis lingkungan Γ : X aT adalah fungsi pemetaan yang memetakanvariabel untuk kelas keamanan pada titik program tertentu . untukmasing-masing variabel x ∈ dom ( Γ ) , kami menunjukkan jenis unik dipetakanτ x dalam Γ sebagai Γ (x) . Untuk perkiraan runtime jenis lingkunganpada saat kompilasi , kelas keamanan variabel dipandang sebagai statiskelas yang paling membatasi variabel pada setiap titik dalam programteks. Artinya, jika variabel x dipetakan ke Γ (x) pada tertentutitik program , maka data-data waktu eksekusi yang sesuai keberatanakan memiliki kelas yang paling seketat Γ (x) , terlepasyang jalur diambil untuk mencapai titik itu . Secara formal , untuk satu setjenis lingkungan G , kami menunjukkan Γ = ⊕ G sebagai yang palingjenis lingkungan terbatas , sehingga ( ) ( ) ' ' G xx Γ ∈ Γ = ò Γ . ketikamemverifikasi program pada titik program tertentu r , Γ = ⊕ Gr ,mana Gr merupakan himpunan semua kemungkinan lingkungan jenis,masing-masing sesuai dengan eksekusi - waktu jalur yang unik yang bisatelah diambil untuk mencapai r .Untuk menggambarkan konsep ini , kita akan menggunakan secara luas diadopsi tainteduntainted( TU ) kisi kelas keamanan (misalnya, dengan BOON [ 71 ] ,Ashcraft dan Engler [ 3 ] , dan Shankar et al . [ 65 ] ) ditunjukkan pada Gambar8 . TU kisi hanya dua elemen - murni sebagai lebih rendahterikat dan tercemar sebagai batas atas nya . Asumsikan bahwa variabel t1tercemar dan bahwa variabel u1 dan u2 yang ternoda . Sejak exec ( )membutuhkan sebuah argumen murni , untuk jalur 2 dari Angka 10 dan 11 sampaitypecheck mengharuskan kita tahu kelas yang paling ketat statisx . Dengan kata lain , kita perlu mengetahui kelas Γ keamanan (x) yangyang paling ketat dari semua kelas runtime kemungkinan x pada baris 2 ,terlepas dari jalur eksekusi yang diambil untuk sampai ke sana . Sejalan 2 dariGambar 10 , karena x dapat berupa tercemar atau ternoda ,Γ (x) = tercemar ò murni , jalur 2 sehingga memicu pelanggaran .Di sisi lain , jalur 2 dari Gambar 11 typechecks .tercemar|murniString Tainted|Integer Tainted|String murni|Integer murniGambar 8 . Kisi primitif. Gambar 9 . Kisi Jenis - sadar .1 : if ( C ) x = t1 , lain x = u1 ;2 : exec ( x);1 : if ( C ) x = u1 , lain x = u1 ;2 : exec ( x);Gambar 10 . Contoh A. Gambar 11 . Contoh B.Untuk melestarikan kelas yang paling ketat statis, peraturan harus disepakatiuntuk menyelesaikan typestate nama variabel . Demikesederhanaan , kami mengadopsi algoritma asli yang diajukan oleh Stromdan Yemini [ 68 ] . Pertama , kita melakukan pelacakan aliran - sensitiftypestate . Kemudian pada pelaksanaan jalur merge poin ( misalnya , awaldari sebuah loop atau akhir dari pernyataan kondisional ) , kita mendefinisikantypestate masing-masing variabel sebagai yang paling batas atastypestates dari variabel yang sama pada semua jalur penggabungan . dalam kamikisi didefinisikan ( Gambar 9 ) , setidaknya Operator batas atas pada himpunanmemilih kelas yang paling ketat dari set. Perhatikan bahwa sementaraStrom dan Yemini awalnya digunakan typestate untuk mewakili statisvariabel properti -lain, yang mengharuskan menerapkan terbesarmenurunkan Operator terikat , untuk tujuan kita typestate digunakan untukmerupakan kelas yang paling ketat statis, jadi kita perlu menerapkanOperator terikat paling atas sebagai gantinya.4.2 Jenis - Kelas Sadar KeamananVersi pertama dari WebSSARI dilaksanakan verifikasialgoritma yang disebutkan di atas dan menggunakan kisi TU . sebuahtest drive awal menunjukkan jenis umum positif palsu .Jenis Ternyata , banyak pengembang yang digunakan gips untuk sanitasitujuan , contoh dari Obelus Helpdesk disajikan dalamGambar 12 . Dalam contoh itu , karena $ _POST [ 'index' ] tercemar ,$ i tercemar setelah baris 1 , dan $ s tercemar setelah baris 2 . jalur 3Oleh karena itu tidak typecheck , karena echo ( ) membutuhkan ternodanilai untuk argumen .1 : $ i = ( int ) $ _POST [ 'index' ] ;2 : $ s = (string ) $ i ;3 : echo "Nama <hidden = mid value='$s'> "Gambar 12 . Contoh positif palsu yang dihasilkan dari tipe cast .Enam dari pengembang menanggapi 38 yang juga termasuk salinanpatch mereka ditujukan untuk review kami mengandalkan jenis iniProses sanitasi . Karena semua variabel HTTP disimpan sebagai string( terlepas dari jenis mereka yang sebenarnya ) , menggunakan cor tunggal untuk membersihkanvariabel-variabel tertentu tampaknya menjadi praktek umum . Namun,positif palsu berfungsi sebagai bukti yang mendukung gagasan bahwa keamananKelas harus tipe - sadar . Sebagai contoh , echo ( ) dapat menerimabilangan bulat tercemar tanpa mengorbankan integritas sistem ( yaitu ,tanpa rentan terhadap XSS ) . Gambar 9 mengilustrasikan typeaware yangkisi yang kami tergabung dalam versi kedua kamiWebSSARI . Sampai sekarang, telah umumnya percaya bahwapenjelasan dalam sistem keamanan berbasis jenis harus disediakanekstensi untuk diperiksa secara terpisah dari sistem tipe yang asli .[ 27 ] [ 28 ] [ 65 ] [ 26 ] . Dalam tulisan ini kami mengusulkan penggunaanModel kisi Jenis -aware dan memperkenalkan gagasan dari jenis -awarekualifikasi . Meskipun masih diperiksa secara terpisah , jenis perbaikan ( misalnya ,kelas keamanan) adalah tipe - sadar .4.3 Abstraksi Program dan Jenis PenghakimanKetika memverifikasi program PHP , pertama kita menggunakan filter untuk mendekonstruksiprogram ke dalam abstraksi berikut :1 2 1 21 2( ) :: ; | : | | Jika dibandingkan yang lain( ) :: | | ~ | ( ) ,perintah c c c x e e e c cEkspresi e x n e e f x===46
 di mana x adalah variabel , n merupakan nilai konstan , mewakili ~operator biner ( misalnya , + ) , f (x ) merupakan fungsi panggilan .Perintah yang tidak mempengaruhi arus tidak aman yang disebut sebagaiperintah yang valid . Untuk melacak perubahan dalam kelas keamananvariabel dan untuk memeriksa validitas program kita mendefinisikan tipepenilaian dan penghakiman aturan . Dinotasikan sebagai Γ ? C → Γ ' , tipepenghakiman menentukan jenis lingkungan Γ di mana eksekusiperintah C berlaku , dan menjadi Γ ' sebagai hasil darieksekusi. Sebagaimana dinyatakan dalam Pasal 4.1 , prasyarat yang sensitiffungsi dan postconditions dari kecacatan dan sanitasi fungsididefinisikan dalam file pembuka . Di lokasi panggilan untuk fungsi sensitif ,PUAS ( Γ , f , x ) memeriksa apakah Γ (x) memenuhi fungsi f yangprasyarat . Ketika memverifikasi , kita memperoleh jenis penilaianmenurut urutan komando dan meningkatkan kesalahan saatPUAS ( Γ , f , x ) gagal . Artinya , mengingat program P dan awaljenis lingkungan Γ0 (biasanya memetakan semua variabel untuk ternoda ) ,maka validitas P tergantung pada apakah kita dapat memperolehpenghakiman Γ0 ? P → Γ dengan mengikuti aturan penghakiman di bawah ini.1.Updating Aturan :( Kecacatan ) ( Sanitasi )( ) [ ] ( ) [ ]T Sf ff x x x x tercemar f murni∈ ∈Γ ? → Γ Γ a ? → Γ a( Penugasan ) ( Restriction )Γ x : ? = E → Γ   x a Γ ( e )  1 1 2 2jika kemudian 1 lagi 2 1 2C Ce C CΓ → Γ Γ → ΓΓ → Γ ⊕ Γ? ??2 . Memeriksa Rule : 3 . Rangkaian Aturan :( Prasyarat ) ( konkatenasi )C , PUAS ( , , )( )f f xf x∈ ΓΓ ? → Γ" " ' '; ' 'C CC CΓ → Γ Γ → ΓΓ → Γ? ??4 . Aturan Pemetaan :Γ ( n ) = murni Γ ( e ~ e ' ) = Γ ( e ) ò Γ ( e ' )4.4 Tingkat KesehatanPada setiap titik program , karena kita selalu memperoleh statis yang palingjenis lingkungan terbatas , semua variabel yang dipetakan ke merekajenis yang paling ketat di antara semua jalur eksekusi untuk mencapaititik . Ini adalah properti penting yang menjamin keandalanalgoritma . Namun, seperti banyak bahasa populer lainnya yang digunakanuntuk pengembangan Web , PHP adalah bahasa scripting yang mendukungevaluasi yang dinamis fitur unik untuk bahasa ditafsirkanyang memungkinkan untuk akses program ke penerjemah . untukMisalnya , seseorang dapat menulis " $ $ a " untuk mewakili " variabel dinamis, "yang namanya variabel dapat ditentukan hanya pada saat runtime . untuk mempertahankankesehatan , semua variabel dinamis dianggap sebagai tercemar . ketikajenis lain evaluasi dinamis yang ada dalam kode target (misalnya ,PHP eval ( ) ) , WebSSARI degradasi dirinya untuk pemeriksa - masihcek untuk kerentanan potensial , tetapi output peringatanpesan yang menunjukkan bahwa hal itu tidak dapat menjamin kesehatan . Kami lakukan,Namun , dukungan pointer aliasing dengan menerapkan asliSolusi yang diusulkan oleh Strom dan Yemini [ 68 ] . Kami mempertahankan duapemetaan - lingkungan dan toko . Peta-peta lingkungannama-nama variabel yang terlibat dalam pointer aliasing untuk mayalokasi, dan lokasi toko peta untuk kelas keamanan.Karena itu, ketika dua pointer menunjuk ke penyimpanan yang sama , kamimengakui dereferences mereka sebagai nilai tunggal memiliki satukelas keamanan. Perubahan tingkat kepercayaan yang dalam satu menghormati pointertercermin dalam lainnya .5 . IMPLEMENTASI SISTEMUntuk menguji pendekatan kami , kami mengembangkan alat yang disebut WebSSARI bahwameluas bahasa script yang ada dengan tipe yang diusulkan kamisistem kualifikasi . Sebuah ilustrasi sistem WebSSARI iniArsitektur disajikan pada Gambar 13 . Sebuah kode walker terdiri darilexer , parser , AST ( pohon sintaks abstrak ) pembuat , danProgram abstractor . Program abstractor meminta pembuat ASTuntuk menghasilkan representasi penuh AST sebuah program PHP . ituPembuat AST menggunakan lexer dan parser untuk melakukan tugas ini ,penanganan inklusi file eksternal sepanjang jalan . Dengan melintasiAST , yang abstractor Program menghasilkan grafik kontrol aliran ( CFG )dan tabel simbol ( ST ) . Berdasarkan file pembuka , yangmesin verifikasi bergerak melalui CFG dan referensi STuntuk menghasilkan kualifikasi a) tipe untuk variabel dan b ) prasyaratdan postconditions untuk fungsi . Rutin ini diulang sampai tidak adainformasi baru yang dihasilkan . Mesin verifikasi kemudian bergerakmelalui grafik aliran kontrol sekali lagi, kali ini tampiltypestate pelacakan untuk menentukan arus informasi tidak aman . ituoutput laporan tidak aman ( dengan nomor baris dan tidak validargumen ) . Untuk setiap variabel yang terlibat dalam sebuah pernyataan tidak aman,menyisipkan pernyataan yang menahan variabel dengan memperlakukannya dengansanitasi rutin. Penyisipan ini dibuat tepat setelah pernyataanyang menyebabkan variabel menjadi tercemar . rutinitas sanitasidisimpan dalam sebuah awal , dan pengguna dapat menyediakan awal dengan merekarutinitas sendiri.Gambar 13 . Arsitektur sistem WebSSARI .Dukungan untuk bahasa yang berbeda dicapai dengan memberikan merekakode yang sesuai walker implementasi . Karena lexers danparser dapat dihasilkan oleh generator compiler tersedia untuk publik,menyediakan kode walker untuk bahasa rusak untuk: a )memilih generator compiler , dan memberikan itu dengantata bahasa itu , b ) menyediakan pembuat AST , dan c )menyediakan abstractor Program . Untuk langkah , tata bahasa untuk widelyusedbahasa ( misalnya , C , C + + , C # , dan Java ) sudah tersediauntuk banyak digunakan generator compiler seperti yacc dan SableCC ;untuk langkah b , pembuat AST untuk bahasa yang berbeda hanya harus berbedadalam mendukung preprocessing ( misalnya , termasuk penanganan file) . Namun ,karena kita mengharapkan perbedaan yang cukup besar untuk eksis di AST dariberbagai bahasa , fokus utama pada penyediaan kode walkerlexer ParserASTgeneratorprogramAbstractorASTflow controlgrafiksimboltabelverifier MesinSableCCLALR ( 1 )tatabahasaperintahaliraninformasialirankode WalkertatabahasagenerasiPrelude Prelude Prelude47implementasi untuk bahasa adalah pada pelaksanaan programabstractor .Untuk mendukung percobaan verifikasi menggunakan puluhan ribuFile PHP , kami mengembangkan GUI terpisah menampilkan betsverifikasi , analisis hasil , error logging , dan pembuatan laporan .Statistik dapat dikumpulkan berdasarkan file source tunggal, filedari satu proyek , atau file dari kelompok proyek . file rentandiatur menurut keparahan , dengan script injeksi umumyang paling parah , kedua SQL injection , XSS dan ketiga. untuk membantupengguna menyelidiki kerentanan yang dilaporkan , kami menambahkan Watts 'PHPXREF [ 74 ] untuk menghasilkan dokumentasi lintas dirujuk dariSumber file PHP . Sebuah screenshot dari GUI ini disajikan pada Gambar14 .Dalam proyek ini , kami memberikan kode walker untuk PHP . Kami menggunakanGagnon dan Hendren yang SableCC [ 29 ] , kompiler berorientasi objekkerangka untuk Java . Mirip dengan yacc dan generator compiler lainnya ,SableCC menerima LALR ( 1 ) [ 23 ] tata bahasa . Tidak ditulis secara formalspesifikasi tata bahasa untuk bahasa PHP ada, dan tidak ada penelitiantelah dilakukan pada apakah tata bahasa PHP dapat sepenuhnyadinyatakan dalam LALR ( 1 ) . Kami menggunakan Mandre itu [ 45 ] LALR ( 1 ) PHPtata bahasa untuk SableCC , yang belum pernah diuji secara menyeluruh .Kombinasi tata bahasa SableCC dan Mandre memungkinkan kamiuntuk mengembangkan kode walker untuk PHP , namun , sebuah test drive awalmenggunakan sekitar 5.000 file PHP mengungkapkan kekurangan yangdisebabkan WebSSARI menolak hampir 25 persen dari semua file diverifikasisebagai tata bahasa tidak benar . Dengan bantuan dari Mandre , kami mampuuntuk mengurangi bahwa tingkat penolakan hingga 8 persen dalam tes berikutmelibatkan 10.000 file PHP .Gambar 14 . Sebuah screenshot dari WebSSARI GUI bawah Windows .6 . HASIL EKSPERIMENSourceForge.net [ 4 ] , pengembangan open source terbesar di duniawebsite, host lebih dari 70.000 proyek open source selama lebih dari700.000 pengembang terdaftar . PHP , saat ini dengan 7792proyek yang terdaftar , jelas outnumbers semua pemrograman lainbahasa ( misalnya , Perl , Python , dan ASP ) untuk aplikasi Webpembangunan. SourceForge.net mengklasifikasikan proyek sesuai denganbahasa, tujuan, popularitas, dan pengembangan Status ( jatuh tempo ) .Kami menciptakan sampel dari 230 proyek yang mencerminkan luasvariasi dalam hal bahasa , tujuan, popularitas, dan kematangan .Kami download sumber mereka , menguji mereka dengan WebSSARI , dandiperiksa setiap laporan pelanggaran keamanan secara manual . dimanakerentanan yang benar diidentifikasi , kami mengirimkan email pemberitahuan untukpara pengembang . Selama periode pengujian lima hari , kami mengidentifikasi 69proyek yang mengandung kerentanan nyata, sampai saat ini, 38 pengembangtelah mengakui temuan kami dan menyatakan bahwa mereka akanmenyediakan patch ( Gambar 15 ) .Untuk setiap proyek itu host , SourceForge.net memberikan sebuah "pembangunanStatus " ( perencanaan , pre - alpha , alpha , beta , stabil, dewasa , danaktif ) dan " tingkat aktivitas " ( menunjukkan kedua pengembanganaktivitas dan popularitas . Kita terbatas pilihan kami untuk beta , stabil ,dan produk dewasa . Gambar 16 menyajikan status pengembangandan tingkat aktivitas 69 proyek rentan , dan Gambar 17menyajikan informasi distribusi untuk 38 proyek yangpengembang menanggapi notifikasi email kami . Kami berasumsi bahwaproyek beta akan lebih rentan , namun data mencerminkanberlawanan -yaitu , proyek tahap stabil sedikit lebihrentan daripada proyek tahap beta . Persentase ini masingbahkan lebih tinggi untuk 38 proyek yang pengembangmengakui pemberitahuan kami .Proyek A D PO1 2 3 Proyek A D P O 1 2 3GBook MX 60 11YY Y Y SquirrelMail 99 21 1 Y N N YAthenaRMS 0 31YY NN PHPMyList 69 1 1 Y Y Y YPHPCodeCabinet71 12YY NY egroupware 99 17 1 YNYYBolinOS 94 71YY NN PHPFriendlyAdmin 87 1 1 YYNNPHP Surveyor 99 61YY YY PHP Helpdesk 87 3 1 YYYYBooby 90 11NY N Y Media Mate 0 2 2 Y Y Y YByteHoard 98 31YY NY Obelus Helpdesk 22 2 2 NYNYPHPRecipeBook 99 11YY NY eDreamers 80 5 1 NYNNphpLDAPadmin 97 31YY NN Mad.Thought 66 1 3 YYYNSegue CMS 77 41YY Y N PHPLetter 79 1 1 Y Y Y YMoregroupware 99 11 1 YY YN Webarchive 2 3 1 YYNYiNuke 0 11YY Y N Nalanda 58 1 1 Y Y N NInfoCentral 82 91YY YN Site @ Sekolah 94 2 1 YYYYWebMovieDB 24 31YY NN PHPList 0 1 1 Y Y Y NTESTLINK 88 41YY Y Y phpPgAdmin 98 6 1 Y Y N NCrafty Syntax 0 11NY NN Anonim Mailer 73 1 1 NNYYILIAS terbukaSumber 20 24YY Y Y Dukungan PHPTiket 0 1 1 N Y Y NPHP BeberapaNewsletter 68 11NY Y N Norfolk Rumah TanggaFinan . Manajer 0 1 1 N Y Y Yinternasionalmencurigaikewaspadaan Nexus0 11NN Y N Tiki CMSGroupware 991352 N N Y YKegiatan / Jumlah620701.20280330220180A : Proyek aktivitas D : Jumlah PengembangP : Kerentanan Kedalaman O : Terabaikan / menyadari1 : Cross-site scripting 2 : SQL injection3 : script injeksi UmumGambar 15 . The 38 proyek rentan yang telah merespon kamipemberitahuan .Motivasi pengembang dan perilaku berada di luar lingkup inikertas, tapi kami mencatat bahwa di 33 dari mereka 38 proyek,kerentanan itu hanya telah diabaikan , meskipunrutinitas sanitasi telah diadopsi di sebagian besar kasus .Kami juga menemukan ( dari tanggapan para pengembang ' ) bahwa beberapaproyek ini memiliki kerentanan yang sudah diidentifikasidan diungkapkan sebelum proyek ini . Misalnya ,ByteHoard memiliki satu laporan pengungkapan Bugtaq , dan SquirrelMailmemiliki 13 CVE catatan ( Kerentanan Paparan Umum ) . lebih lanjutpemeriksaan kode mereka mengungkapkan bahwa pengembang telah tetap semuasebelumnya diterbitkan kerentanan , tetapi gagal untuk mengidentifikasi sejenispermasalahan yang tersembunyi di seluruh kode. ini48

Previous
« Prev Post

No comments:

Post a Comment

sssst!!jgn brisiiik!!BOSS lg pipis..