Selasa, 22 Desember 2020

Pengertian Buffer Overflow ~ Jaringan Komputer

 

Assalamualaikum Wr. Wb.

 Halo kembali lagi dengan saya ...

sekarang,saya akan membahas tentang Pengertian Buffer Overflow pada  mata kuliah Jaringan Komputer. semoga bermanfaat yaa.....

 



Pengertian Buffer

Buffer adalah area memori yang menyimpan data ketika mereka sedang dipindahkan antara dua device atau antara device dan aplikasi.

Buffer dilakukan untuk 3 hal :

1.    Untuk men-cope dengan kesalahan yang terjadi karena perbedaan kecepatan antara produsen dengan konsumen dari sebuah stream data.

2.    Untuk menyesuaikan device-device yang mempunyai perbedaan dalam ukuran transfer data, dimana buffer dipakai untuk fragmentasi dan pengaturan kembali pesan yang diterima.

3.    Untuk mendukung copy semantics untuk aplikasi I/O

Pengertian Overflow

Over adalah beban yang berlebih atau suatu data yang melebihi kapasitas yang akan ditempatinya.

Flow adalah aliran.

Jadi, Overflow adalah aliran yang berlebihan / aliran data yang melebihi kapasitas tempat yang akan dijadikan tempat data tersebut.

Jadi, kesimpulannya Buffer Overflow adalah area memori pemindahan data antara device yang berbeda dan data yang dialirkan melebihi kapasitas memori pemindahannya.

KONSEP BUFFER OVERFLOW

Jika kita mengakses suatu situs web, kemudian saat kita memberikan input yang tidak semestinya pada field browser ataupun pada field UserID dan Password, maka buffer overflow mungkin akan terjadi pada web yang vulnerability(mudah diserang).

Apakah yang dimaksud dengan buffer overflow? Buffer adalah tempat penampungan, overflow artinya kelebihan muatan. Jadi buffer overflow adalah suatu kondisi dimana elemen-elemen yang ada tidak dapat lagi menempati tempat penampungan yang ada.

Contohnya :

char rumah[20]; // rumah yang dapat berisi 20 orang saja,

char kamar[10]; // kamar yang dapat berisi 10 orang saja.

Jika semua yang ada di rumah (20 orang) masuk ke dalam kamar (yang hanya dapat berisi 10 orang saja), kamar itu tidak akan dapat menampung 10 orang lainnya.

Hal inilah yang dapat kita katakan buffer overflow, dimana kamar itu diibaratkan sebagai buffer, dan karena kapasitas kamar lebih kecil dari kapasitas yang akan masuk, maka dapat dikatakan overflow.

Dengan kata lain, pemahaman buffer overflow sendiri adalah keadaan dimana buffer (variabel yang digunakan suatu aplikasi untuk menyimpan datanya di memori) terisi dengan data yang ukurannya melebihi kapasitasnya sendiri. Akibatnya, kelebihan data itu akan mengisi alamat memori lain yang bukan milik variabel tersebut atau dalam hal ini disebut dengan overwrite.

Buffer Overflow menurut NeoTekno, merupakan salah satu metode yang dipakai oleh hacker untuk mengeksploitasi sebuah sistem komputer yang memiliki kelemahan pada salah satu aplikasi yang digunakan oleh sistem tersebut.

Eksploitasi ini dikenal dengan input validation attack yang dapat mengakibatkan suatu sistem crash (buffer overflow) yaitu variabel yang tersedia pada aplikasi tidak dapat menampung input yang sengaja dibuat berlebihan. Teknik ini banyak digunakan pada man in the middle attack maupun untuk mendapatkan shell console.

Sebuah aplikasi dapat di-buffer-overflow, mungkin karena aplikasi tersebut tidak memiliki kontrol data yang baik dan biasanya ini tidak disadari oleh si pembuat program tersebut. Lalu bagaimana seorang hacker dapat memperoleh hak akses terhadap sistem hanya dengan memanfaatkan kelemahan dari suatu aplikasi yang ada di sistem komputer target? Tentu hal ini berkaitan erat dengan otoritas (baca: akses) yang di miliki oleh aplikasi tersebut.

CONTOH BUFFER OVERFLOW

Contohnya, program memiliki dua item data yang berdekatan dalam memori : sebuah string buffer 8-byte-panjang, A, dan integer big-endian byte dua, B.

 

Sekarang, program mencoba untuk menyimpan string diakhiri null-“excessive” dengan encoding ASCII dalam buffer A.

  

Nilai B kini digantikan oleh sejumlah “form number” yang terbentuk dari bagian karakter string. Dalam contoh ini “e” diikuti dengan byte nol akan menjadi 25.856. Menulis data melewati ujung memori yang dialokasikan kadang-kadang dapat dideteksi oleh sistem operasi untuk menghasilkan kesalahan kesalahan segmentasi yang mengakhiri proses.

 

SERANGAN DENGAN TEKNIK BUFFER OVERFLOW

Beberapa serangan yang dilakukan dengan teknik Buffer Overflow, antara lain :

1.    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.

2.    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.

3.    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.

4.    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.

 

OVERWRITING FUNCTION’S RETURN ADDRESSE

Sekarang, sangat mudah untuk melakukan overwriting function’s return addresses, Attacker menggunakan teknik buffer overflow untuk mendapatkan akses root. Attacker mencoba mengeksekusi buffer overflowwing area, menimpa nilai dari return address yang mengisi nilai ke buffer dan mengeksekusi kode jahatnya. Seperti kode yang bisa dimasukkan ke dalam program menggunakan environment variables atau program input parameters.

 

TINDAKAN UNTUK MENCEGAH BUFFER OVERFLOW.

Metode yang dijelaskan di bawah yang tidak benar-benar bisa mencegah kemungkinan serangan. Tetapi metode di bawah ini, dapat meminimalisir dari kegiatan buffer overflows yang mengakibatkan kerusakan stack.

1.    Menulis kode yang ama

Buffer overflow adalah hasil dari input yang berlebihan ke dalam buffer. C library seperti strcpy(), strcat(), sprintf() dan vsprintf() beroperasi pada null terminated strings dan tidak mengecek batasan input. gets() juga fungsi  lainnya yang memasukkan input ke dalam buffer dari stdin. Pada scanf() juga bisa mengakibatkan buffer overflows.

2.    Stack execute invalidation

Karena koding jahat (contoh, instruksi assembly untuk mengambil alih root shell) merupakan input argument ke dalam program, ini tersimpan ke dalam stack dan bukan dalam code segment. Oleh karena itu, solusi mudahnya adalah tidak mempebolehkan stack mengeksekusi instruksi apapun. Kode apapun yang dieksekusi dengan kode lainnya di dalam stack dapat mengakibatkan segmentation violation.

3.    Compiler tools

Beberapa tahun terakhir, compiler mempunyai kemampuan lebih. Beberapa compiler dilengkapi peringatan dalam penggunakan konstruk yang tidak aman seperti gets(), strcpy() dan sejenisnya, sebagai contoh :

 

EKSPLOIT

Eksploit dalam konteks harfiah yaitu pemanfaatan. Eksploit-eksploit ‘hacking’ dalam arti yang lebih spesifik, adalah sebagai pemanfaatan kelemahan dari sebuah sistem untuk tujuan-tujuan yang di luar dari penggunaan normal. Kelemahan-kelemahan (vulnerability) ini dapat berupa kesalahan pemrograman, sesuatu yang tidak direncanakan oleh pemrogram asli dan lain-lain.

Umumnya, yang jelas paling menarik perhatian kita, adalah eksploit yang akan memberikan kita akses tidak terbatas ke seluruh aspek dari sebuah sistem. Dalam Linux, sering kita dengar istilah mengeksploit program tertentu untuk mendapat privilese root. Tentu saja mendapatkan ‘root’ bukanlah satu-satunya tujuan pengeksploitan sistem. Seperti yang mungkin sering dialami, kadang sebuah cacat dalam program seperti maild atau ftpd dapat dimanfaatkan untuk tujuan seperti header forging, ip spoofing, denial of service attack, dan mail bombing.

 

SHELLCODE

Dalam keamanan komputer, shellcode berarti menulis kode yang akan mengembalikan remote shell ketika dieksekusi. Bila hacker dapat membuat program mengeksekusi kode apapun yang dia mau, maka kode pilihan terbaik adalah kode yang memberikan dia shell sehingga dia dapat memberi perintah lain yang dia mau dengan leluasa. Oleh karena itu code itu disebut shell-code.

Walaupun umumnya shellcode memberikan shell, shellcode tidak selalu memberikan shell. Attacker bebas menentukan code apa yang akan dieksekusi di komputer korban. Shellcode dimasukkan ke dalam kode eksploit dengan tujuan membypass fungsi suatu software, sehingga software tersebut tidak berjalan secara semestinya, melainkan menjalankan fungsi pada shellcode. Oleh karenanya arti dari shellcode pun telah berkembang, sekarang merupakan code byte yang digunakan dengan payload untuk mengeksploitasi komputer target sesuai yang diinginkan.

 

Biasanya shellcode dibuat untuk dapat mengontrol komputer, ataupun mendapatkan hak akses komputer target, atau yang lainnya seperti mulai dari menghapus file, memformat hardisk, mengirimkan data, menginstall program baru dan sebagainya terserah keinginan attacker.

Kode dalam shellcode adalah dalam bentuk bahasa mesin atau opcode. Opcode ini bersifat independen yang tidak memiliki instruksi yang terdiri dari byte NULL atau mengandung operan byte NULL, hal ini disebabkan situasi yang unik ketika pemanfaatan buffer overflow, attacker cenderung mengirimkan instruksi pointer dengan pointer ke shellcode sewenang-wenang.

Dengan demikian, pengendalian eksekusi mengalir melalui shellcode/opcode independen tersebut. Biasanya opcode ini tidak dituliskan dalam nilai binary karena akan menjadi sangat panjang, melainkan memakai nilai hexa yang lebih kompak.

 

HUBUNGAN EKSPLOIT, BUFFER OVERFLOW DAN SHELLCODE

Eksploit, buffer overflow dan shellcode adalah tiga saudara kandung. Semua berawal dari keteledoran sang programmer sehingga programnya mengandung vulnerability yang dapat dieksploit untuk membuat program tersebut menjalankan code apapun yang diinginkan hacker (arbitrary code execution), code ini disebut dengan shellcode.

Shellcode adalah kunci keberhasilan eksploitasi buffer overflow (hole/lubang keamanan yang paling rentan) dan lubang keamanan lainnya yang berorientasi memori.

Dihubungkan dengan pembahasan di bab pendahuluan, shellcode merupakan program yang akan mengambil alih suatu sistem sesaat setelah eksploit memanfaatkan buffer overflow lalu membuat sistem tersebut ‘crash’. Shellcode dapat diibaratkan seperti telur yang dibungkus oleh eksploit, saat eksploit berhasil meng-buffer-overflow-kan suatu sistem maka telur yang ada di dalamnya akan segera mengambil alih sistem tersebut.

Penerapan dalam prinsip dasar cara kerja komputer, prosesor hanya akan melakukan satu buah instruksi dalam satu waktu. Yang memberikan instruksi tersebut adalah program (contoh program: winamp, notepad, dan sebagainya). Saat program akan dieksekusi (misal : kita klik icon winamp), maka program winamp yang semula ada di hardisk akan diload ke suatu lokasi di memori komputer, dan kemudian prosesor akan mengeksekusi kode-kode program winamp tersebut. Ini artinya saat eksploit berhasil merusak program winamp tersebut, eksploit akan menempatkan shellcode di lokasi memori pada mesin target, selanjutnya eksploit akan membuat prosesor menuju lokasi memori tempat shellcode telah ditanam dan kemudian akan mengeksekusinya yaitu mengacaukan program winamp sesuai yang diinginkanya.

Kesimpulannya, mekanisme ini berhubungan langsung dengan prosesor dan memori, itu sebabnya shellcode dibuat agar dapat langsung ditanam pada memori sehingga bentuknya cukup aneh

Sebuah buffer overflow terjadi ketika data ditulis ke buffer,  lalu merusak nilai-nilai data dalam alamat memori (Memory Address) yang berdekatan dengan buffer tujuannya. Hal ini dapat terjadi saat menyalin data dari satu buffer yang lain tanpa memeriksa terlebih dahulu bahwa data tersebut cocok kedalam buffer tujuannya.

 

Kelemahan Buffer overflow

Kelemahan Buffer overflow adalah salah satu dari banyak kelemahan dari keamanan komputer.Kelemahan jenis ini dapat digunakan pada remote access atau local access, karena ini dapat memberikan si Attacker kesempatan untuk melanjarkan jurus-jurus dengan koding dikomputer target.

 

Demikian pembahasan tentang Pengertian Buffer Overflow,semoga bermanfaat.

ketemu di materi selanjutnya ya...

Tidak ada komentar:

Posting Komentar