Sabtu, 08 Juni 2013

Buffer Overflow


Buffer Overflow

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 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 pesansegmentation 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);

Kondisi blok memori stack saat ter-overflow setelah pemanggilan fungsi diatas dapat dilihat pada gambar 3.


Gambar 3. Keadaan blok memori stack saat ter-overflow

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.

Kondisi diatas menjadi prinsip apa yang disebut dengan eksploitasi buffer overflow, yaitu membuat buffer ter-overflow sehingga nilai dari RET termodifikasi untuk mengubah alur dari instruksi program sesuai dengan keinginan kita.

Tidak ada komentar: