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