Latar Belakang
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.Tujuan
Tujuan dari Buffer OverFlow adalah Mengambil ahli akun root Menggunakan Metode Buffer OverFlow.Arsitektur Serangan
Cara dan Teknik Melakukan Serangan
Dalam program yang menggunakan bahasa C, buffer dialokasikan dengan array atau pointer. C atau C++ tidak mempunyai pengecekan otomatis (automatic bounds checking) batasan suatu buffer, sehingga pengguna dapat menulis kode untuk memberikan data melebihi ukuran buffer [8]. Sebagai contoh: int main () { int buffer[10]; buffer[20] = 10; } Program di atas adalah program yang valid dan compiler dapat meng-compile tanpa error. Tetapi program tersebut berusaha untuk memberikan data melebihi alokasi memory untuk buffer. Hal ini dapat mengakibatkan kejadian yang tidak diinginkan. Konsep ini digunakan para hacker untuk mengacau industri komputer. Program yang dapat dieksekusi berisi sekumpulan instruksi biner yang harus dieksekusi oleh processor. Instruksi ini dapat berupa read-only data, (seperti print format strings), data global dan data statis yang tetap ada selama proses eksekusi, dan break pointer yang selalu mengikuti malloced memory. Function local variable adalah variabel otomatis yang ada di stack selama suatu fungsi bekerja dan dibuang setelah fungsi selesai bekerja. Gambar 1 memperlihatkan memory layout dari suatu proses Linux. Proses dimulai dengan kode program dan data. Kode dan data berisi instruksi program serta data global dan data static yang terinisialisasi maupun tak terinisialisasi. Setelah itu adalah run-time heap (dibuat dengan malloc/calloc), dan di paling atas adalah users stack. Stack digunakan jika ada function calTools Yang Digunakan
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 http://www.test.com ini?) dan akan disediakan jawaban yang tentu saja salah.
Efek Serangan
Pencegahan dari buffer overflowAda beberapa cara mencegah buffer overflow, berikut ini ringkasan beberapa pendekatan tersebut:· Menulis ulang program dalam bahasa lain. Kadang ini tidak mungkin dilakukan, terutama jika programnya low level.· Memakai library khusus untuk mencegah kesalahan umum (library semacam ini tidak selalu tersedia)
· Melakukan code review (tapi kadang ada bug yang terlewat)
· Memakai tools yang dapat melakukan pemeriksaan statik (kadang bug ditemukan, kadang tidak)
Untuk aplikasi jaringan, ada pendekatan lain: paket jaringan yang masuk bisa diperiksa, dan jika mengandung shellcode yang dikenal, atau mengandung banyak NOP, maka paket akan dicegah masuk. Tapi cara ini sangat tidak efektif, karena ada kemungkinan mencegah paket valid, dan ada banyak variasi shellcode yang tidak dikenal.
Antisipasi Serangan Buffer Overflow
Ada beberapa cara Antisipasi serangan buffer overflow, berikut ini ringkasan beberapa pendekatan tersebut:- Menulis ulang program dalam bahasa lain. Kadang ini tidak mungkin dilakukan, terutama jika programnya low level.
- Memakai library khusus untuk mencegah kesalahan umum (library semacam ini tidak selalu tersedia)
- Melakukan code review (tapi kadang ada bug yang terlewat)
- Memakai tools yang dapat melakukan pemeriksaan statik (kadang bug ditemukan, kadang tidak)
shellcode
yang dikenal, atau mengandung banyak NOP, maka paket akan dicegah
masuk. Tapi cara ini sangat tidak efektif, karena ada kemungkinan
mencegah paket valid, dan ada banyak variasi shellcode
yang tidak dikenal.Beberapa masalah dengan pendekatan pencegahan adalah:
- Membutuhkan waktu jika harus dilakukan pada semua program (entah itu mengubah program agar memakai library lain, melakukan code review, dsb)
- Tidak 100% efektif dan tidak selalu bisa dilakukan (misalnya untuk OS tertentu, tidak ada tools yang bisa memeriksa kode dengan baik)
Kesimpulan
Berdasarkan pembahasan terhadap buffer overflow tadi maka dapat diambil beberapa kesimpulan sebagai berikut:
1. Masalah buffer overflow merupakan
masalah yang masih sering terjadi saat ini dan sampai saat ini masih
dilakukan penelitian tentang cara yang efektif untuk menangani masalah
ini
2. Buffer overflow
dapat menyebabkan aplikasi atau program yang kita buat berkelakuan
tidak semestinya. Hal ini sering dimanfaatkan oleh beberapa orang untuk
menyerang sistem sehingga sistem dapat berkelakuan sesuai keinginan
penyerang.
3. Bahasa pemrograman C dan turunannya merupakan bahasa pemrograman yang paling rentan terhadap ancaman buffer overflow terutama bila berkaitan dengan masalah operasi string
4. Terdapat beberapa pendekatan yang bisa digunakan untuk mengatasi masalah buffer overflow baik itu dari aplikasi itu sendiri, kompiler, library yang digunakan ataupun sistem operasi.
5. Meskipun
demikian pendekatan-pendekatan yang digunakan tidak menjamin sistem
aman 100 persen. Masih ada celah-celah lain yang mungkin belum
tereksploitasi atau belum ditemukan solusi untuk mencegahnya.
Saran
- Didalam mendisain dan membangu program aplikasi perlu memperhatikan penggunaan fungsi dan variabel data yang rentan terhadap sistem keamanan.
- Pemilihan bahasa pemrograman wajib menjadi pemikiran sebelum mendisain sistem terutama untuk sistem – sistem yang rentan terjadi serangan buffer overflow .
- Jikapun terpaksa menggunakan bahasa pemrograman C atau bahasa yang lebih dekat dengan bahasa mesin, tindakan terhadap pencegahan dan atau penanggulangan terhadap buffer overflow dapat memperhatikan pembahasan yang telah dijabarkan.