Buffer Overflow

Posted: November 7, 2011 in Sistem Keamanan Komputer

 

  1. Deskripsi Buffer Overflow

      Untuk mengetahui apakah sebenarnya buffer overflow dan bagaimana cara kerja untuk mengekploitasinya, maka diperlukan pemahaman tentang cara kerja sistem processor di level bawah, seperti pemrograman assembly, manajemen memory text, stack, data dan sebagainya. Selain itu bagi pengguna sistem operasi Linux, pengalaman program debug gdb akan sangat membantu.

            Berikut ini istilah-istilah dasar untuk memahami penjelasan berikut mengenai buffer overflow.

·         Text, memuat instruksi kode program. Bagian ini biasanya hanya bisa dibaca dan setiap usaha untuk menuliskan data ke bagian ini akan menyebabkan kesalahan segmentation violation.

·         Data,  memuat data, baik yang telah diinisialisasikan maupun yang belum. Selain dapat dibaca, biasanya bagian ini juga dimanipulasi suatu instruksi untuk melakukan penulisan padanya.

·         Stack, yang dapat dialokasikansecara dinamis, biasanya dimanfaatkan untuk menyimpan variabel lokal maupun untuk melewatkan parameter fungsi. Pengaksesan data kebagian ini menggunakan metode yang disebut LIFO (Last In First Out) seperti yang nanti akan diterangkan secara lebih rinci. Jenis data yang juga patut diketahui adalah sebagai buffer yang pada bahasa C diimplementasikan sebagai array. Array dapat dibedakan ke dalam dua jenis berdasarkan metode pengalokasiannya, yaitu array statis dan array dinamis.  Array statis dialokasikan dibagian data saat program dimuat ke memory, sedangkan array dinamis dialokasikan di dalam stacj saat run time.

Gambar di bawah memperlihatkan diagram dari sebuah stack pada prosessor Intel.

Stack Pada Memori

Stack Pada Memori

 

 

 

 

 

 

 

 

 

 

Blok memori dari stack ini biasanya dibagi lagi menjadi apa yang disebut dengan register stack frame. Setiap register stack frame  berisi data yang berhubungan dengan pemanggilan suatu fungsi. Biasanya posisi awal dari frame ini ditunjukkan oleh frame pointer (FT).

Contoh Eksploitasi Buffer Overflow

Berikut ini adalah contoh program yang ditulis dengan bahasa C yang mengandung buffer overflow.

contoh program yang mengandung buffer overflow.

contoh program yang mengandung buffer overflow.

 

 

 

 

 

 

 

 

 

 

 

 

Program di atas apabila dikompilasi dan dijalankan pada sistem operasi Linux akan didapatkan pesan segmentation violation. Hal ini disebabkan pada fungsi fungsi() bariabel array buffer didefinisikan hanya berukuran 4 byte, sedangkan data yang disalinkan kepadanya berukuran 17 byte.

Contoh lain dapat dilihat pada program dibawah ini :

contoh lain program yang mengandung buffer overflow

contoh lain program yang mengandung buffer overflow

  Program di samping merupakan program kecil untuk memodifikasi nilai RET (return address) sehingga instruksi yang seharusnya dikerjakan setelah pemanggilan suatu fungsi akan dilompati. Seharusnya karena nilai a terakhir di isi dengan nilai 2, tapi pada program di atas instruksi a=2 yang seharusnya dikerjakan setelah kembali dari fungsi akan dilompati. Sehingga nilai dari a yang dikeluarkan pada layar adalah 1.

Sumber:

http://budi.insan.co.id/courses/el7010/dikmenjur/banjar-report.doc


Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s