Title
Dynamic Test Input Generation for Web Applications
Authors
Gary Wassermann, Dachuan Yu, Ajay Chander, DinakarDhurjati, Hiroshi Inamura, and Zhendong Su.
Abstract
Berbedadenganaplikasidesktopdenganbahasa C atau Java, dimanakeduabahasa program tersebutlebihmenekankanpadanilainumericdanpointerstruktur data.Sedangkanpadabahasa PHP, lebihmenekankanpadastring, objekdanarray.Untukitu, diperlukansuatuteknik yang tepatuntukmengujiinputanpadaaplikasiwebdenganbahasa PHP, yang berbedadenganbahasa program lainnya.
Introduction
Algoritma yang diterapkanuntukmengetesbahasa C dan Java (algoritmaconcolic) [1][2], tidakbisaditerapkanpadabahasa PHP, dikarenakan PHP adalahbahasaskripbukanbahasauntukmengkompile.Selainitu, dibutuhkansuatupengetesanOracle yang berbedadengan C dan Java, sebab di C dan Java, Oracleakanmengetespadabagianmemori, akantetapi, pada program PHP, sepenuhnyabebasdarierrormemori. Olehsebabitu, diperlukansuatupengetesOracle yang berbedadari yang telahadasebelumnya.
Untukitudiperlukansuatupengetesanconcolicuntukaplikasiweb, denganmemodelkanoperasistringmenggunakantransducer finite statedanalgoritmapembatasanresolusiuntukmengurainilaistring.Kemudiandenganmenerapkanalgoritmapengecekannilaistringgunamenghindariadanyapelanggaranmenggunakanmetodepenyerangan SQL injection[3]. Yang terakhir, dengancaramenggunakannilai-nilai yang telahdikumpulkanpadasaatruntimeuntukmembuatpotongan-potongansecaraterbalikdari query yang dibangundanmenyimpanpembatashanyadaripotongan-potongantersebut.
Methods and Materials
Penggambaranalgoritma-nyaterdiridariempatmacamlangkah, yaituconstraint generation, constraint resolution, pengetesanOracledan selective constraint generation.
Berikutadalahcontohnya :
Langkah-langkahnya :
- Constraint generation
Bertujuanuntukmendapatkanconstraint dari program.Padacontohtersebut, constraint disimpansaat program mengecekbaris 10 (adanyakondisiisset).
Constraint yang disimpanberupaGET[penggunaid] ∈∅
- Constraint resolution
Berbedadenganpengetesanconcolic, algoritmainimenampilkan variable input disisikiri di tiap-tiapbahasa yang didalamnyaterdapatconstraint.
- PengetesanOracle
Denganmenerapkan Grasp [4]interpreter PHP yang telahdimodifikasi yang mampumenjalankan character-level tainting [5]danmengizinkanadanyaaturanuntukpengamanan program terhadapserangan SQL injection.
- Selective constraint generation
Mengidentifikasipoin-poin yang kemungkinanbesarmengalamikegagalan.Lalumenambahkanfunctionuntukmenganalisanya.Kemudianmengeksekusi program danmengumpulkansemuaconstraint yang diperolehdarifunctiontersebut.
Results
Dari hasilpercobaan yang diterapkanpada Mantis 1.0.Orc2, Mambo 4.5.3 dan Utopia News Pro 1.3.0, algoritma yang digunakantidakmembuatpenaksiranapapunkarenahanyaadasatu variable yang muncul per instansiasiekspresi.
References
[1] K. Sen and G. Agha. Cute and jcute :Concolic unit testing and explicit path model-checking tools. In Computer Aided Verification, 18th International Conference (CAV 2006), pages 419–423, 2006. (Tool Paper).
[2] K. Sen, D. Marinov, and G. Agha. Cute: a concolic unit testing engine for c. In Proceedings of the 13th ACM SIGSOFT International Symposium on Foundations of Software Engineering (FSE 2005), 2005.
[3] Z. Su and G. Wassermann. The essence of command injection attacks in web applications. In Proceedings of the 33rd Annual Symposium on Principles of Programming Languages, pages 372–382, Charleston, SC, Jan. 2006. ACM Press New York, NY, USA.
[4] A. Futoransky, E. Gutesman, and A. Waissbein.A dynamic technique for enhancing the security and privacy of web applications.In Proc. Black Hat USA, 2007.
[5] A. Nguyen-Tuong, S. Guarnieri, D. Greene, J. Shirley, and D. Evans.Automatically hardening web applications using precise tainting.In Twentieth IFIP International Information Security Conference (SEC’05), 2005.