Memahami Buffer Overflow
September 26th, 2008 | by admin |Table of contents for Buffer Overflow
- Memahami Buffer Overflow
- Jenis-Jenis Buffer Overflow : Stack-Based
Sebelum membaca artikel ini, ada baiknya kalau Anda mengetahui cara kerja dan segmen-segmen yang ada pada memori. Artikel sebelumnya mungkin cukup untuk memberikan pemahaman dasar mengenai hal ini.
Mungkin Anda pernah mendengar tentang buffer overflow. Tentang bagaimana para hacker memanipulasi buffer overflow ini untuk mendapatkan akses ke dalam komputer atau bahkan jaringan target. Dalam penjelasan yang singkat, buffer overflow adalah peristiwa di mana wilayah yang dialokasikan di dalam memori tidak cukup untuk menampung data yang ingin disimpan ke dalam wilayah tersebut. Jika kita mendeklarasikan satu buah array dengan 4 anggota (char buffer[4]), maka jika kita ingin menyimpan kata “buffer” yang terdiri dari 6 karakter, maka yang terjadi adalah buffer overflow.
Pembicaraan pada artikel ini mengasumsikan pemrograman dalam bahasa C. Dalam bahasa C, pembuat program bertanggung jawab penuh terhadap data dan variabel yang dimuat di dalam memori. Walaupun bahasa C merupakan bahasa pemrograman tingkat tinggi, akan tetapi C tidak bertanggung jawab atas integritas data seperti bahasa pemrograman tingkat tinggi lainnya. Hal ini lah yang membuat C menjadi sederhana dan hasil programnya terbukti efisien dan cepat. Tetapi jika pembuat program tidak hati-hati, buffer overflow akan mudah sekali muncul.
Mari kita coba lihat program yang menciptakan buffer overflow.
// program_name : overflow.c
void buffer_overflow (char *str) {
char buffer[20];
strcpy (buffer, str); // Fungsi ini mengkopi str -> buffer
}
int main () {
char mystring[128];
int i;
for (i=0; i<128; i++)
mystring[i]=’A';
buffer_overflow(mystring);
}
Yang perlu kita perhatikan adalah fungsi buffer_overflow(). Fungsi ini mengkopi apa pun parameternya ke variabel lokal, buffer. Variabel lokal hanya memili 20 byte, sedangkan buffer yang dikopi dari fungsi main memiliki 128 byte. Hal ini akan menyebabkan buffer overflow pada saat fungsi strcpy() dijalankan. 108 byte yang tidak tertampung di dalam variabel lokal akan menghapus memori apa pun yang berada setelah variabel buffer, tidak perduli apakah memori itu kosong atau tidak.
Jika program dijalankan, maka akan muncul hasil seperti di bawah ini:
$gcc -o overflow overflow.c $./overflow Segmentattion fault $
Program crash disebabkan oleh buffer overflow ini. Bagi programmer, program-program seperti ini sering dijumpai dan mudah untuk diperbaiki. Seringkali terjadi bahwa programmer berasumsi bahwa input dari user sepanjang yang telah ditentukan. Tapi mereka kadang lupa bahwa hacking selalu menggunakan pola pikir yang tidak biasa dan tidak seperti yang diduga-duga. Karenanya, seorang hacker yang pintar dapat mengakibatkan program berhenti bekerja (crash) dengan cara memasukkan input-input yang tidak diantisipasi sebelumnya.
Lantas bagaimana kah cara mendapatkan kontrol dari program dengan memanfaatkan buffer overflow ini? Kita akan menjawabnya di artikel berikut ini.
2 Responses to “Memahami Buffer Overflow”
By a3m on May 25, 2009 | Reply
mantep mas, numpang belajar yak
thank u for info
By admin on Aug 8, 2009 | Reply
Silahkan. Seneng juga nih kalau ada yang baca.