Buffer Overflow merupakan
salah satu penyebab yang paling banyak menimbulkan masalah pada keamanan
komputer baik yang bersifat lokal maupun jaringan. Menurut laporan CERT/CC,
buffer overflow merupkan penyebab dari
50% semua bug keamanan yang dilaporkan dan dijadikan advisori oleh CERT/CC.
Riset yang dilakukan oleh Crispin Cowan dan teamnya menganggap buffer overflow
sebagai Vulnerbility of Decade.
Dengan
tersedianya program-program eksploitasi di Internet, baik dalam bentuk source
code maupun binary seringkali menjadi menjadi alat untuk membuka celah keamanan
sehingga membuat orang tertarik untuk melakukan eksperimen yang sporadis tanpa
memperdulikan akibat yang dapat ditimbulkannya. Banyak orang yang mengklaim dirinya
sebagai seorang cracker jika sudah berhasil mengekspoitasi komputer orang lain,
tanpa memahami cara kerja eksploitasi tersebut sesungguhnya.
Buffer overflow memiliki arti suatu keadaan di mana data yang diisikan ke suatu
buffer mempunyai ukuran yang lebih besar dibandingkan ukuran buffer itu
sendiri. Untuk lebih memahami buffer overflow, dapat dianalogikan dengan
kehidupan sehari-hari, yaitu saat kita mengisi bak mandi melebihi daya
tampungnya, maka air yang kita isikan akan meluap (overflow).
Berikut ini
contoh sebuah program dalam bahasa C yang mengandung buffer overflow.
# Coba2.c
#include
void fungsi(char* txt)
{
char
buffer[4];
strcpy(buffer,
txt);
}
int main()
{
char
buffer[17];
int i;
for (I=0;
i<16 span="">16>
buffer[i]=0x19;
fungsi(buffer);
return 0;
}
Setelah
sukses dikompilasi maka ketika program diatas dieksekusi akan ada pesan segmentation
violation. Mengapa demikian ? Karena di fungsi fungsi(), variable array
buffer didefinisikan hanya berukuran 4 byte, sedangkan data yang disalinkan
kepadanya berukuran sebesar 17 byte. Sebagai catatan, fungsi stcpy() akan
menyalinkan data yang direferensi oleh pointer txt ke buffer sampai karakter
null ditemukan di txt.
Berikut ini
adalah sintaks fungsi strcpy :
Char *strcpy(char *dest, const
char *src);