Pengertian
Buffer overflow adalah sebuah kelemahan yang mudah untuk
ditemukan dan dimanfaatkan oleh hacker dalam sebuah sistem. Aplikasi dan
Operating System (OS) menyimpan untuk sementara perintah yang mereka dapat di
memori tertentu yang biasa disebut buffer memory. Kalau OS atau program tidak
bisa dikode secara sempurna maka hacker bisa membuat komputer korban jadi
terganggu dengan mengirimkan perintah yang dibuat khusus yang membuat gangguan
jadi berlangsung lebih lama. Windows 95 paling rentan kalau sudah berhadapan
dengan serangan seperti buffer overflow yang banyak dilancarkan lewat internet
ini.Saat ini serangan serupa sudah jarang dilancarkan pada sebuah komputer.
Namun terkadang hacker masih sering melakukannya untuk memperlambat kinerja sebuah
situs.
Beberapa serangan umum dari Buffer Overflow
Beberapa serangan yang biasa dilakukan dengan teknik Buffer
Overflow antara lain :
a. Buffer overruns pada kebanyakan Web server
Webserver Apache dan IIS memiliki celah keamanan. Worm
seperti Code Red (untuk IIS) dan Linux. Slapper (untuk Apache) menjadikan celah
keamanan yang lebar.
b. DNS overflow
Beberapa server DNS (BIND) sebelumnya tergolong rentan
terhadap overflow. Suatu serangan yang akan memberikan nama DNS sangat panjang.
Nama DNS dibatasi hingga 64-byte per subkomponen dan 256 byte secara
keseluruhan.
c. Serangan DNS
Server DNS biasanya dijalankan pada mode ‘Trust’ oleh
service dan user – maksudnya bahwa server DNS dapat dikompromikan agar
melancarkan serangan lebih jauh pada user dan service lainnya. Hal ini
menjadikan server DNS merupakan target utama serangan para hacker.
d. Mengelabui cache DNS
Serangan yang umum terhadap server DNS. Sederhananya,
bekerja dengan mengirimkan suatu pertanyaan untuk meminta domain yang
sesungguhnya (“siapakah www.test.com ini?) dan akan disediakan jawaban yang
tentu saja salah
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 o:p="">
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);
Seperti terlihat pada gambar, data yang
mempunyai nilai karakter 0x19 sebesar 17 byte disalinkan ke memori stack mulai
dari alamat buffer[0] ke arah stack bawah sampai memori stack yang mempunyai
pointer *txt. Akibat yang fatal adalah termodifikasinya memori stack yang
menyimpan alamat fungsi kembali RET. Dalam hal ini nilai RET berubah menjadi
0x19191919 yang merupakan alamat memori yang instruksinya akan dipanggil
setelah fungsi fungsi() selesai dikerjakan. Tentu hal ini akan menyebabkan
kesalahan karena instruksi yang terdapat pada alamat memori tersebut bukanlah
instruksi yang valid.
Komentar
Posting Komentar