Skip to content Skip to sidebar Skip to footer

Mengenal Buffer Overflow: Dasar-dasar


Salah satu kerentanan keamanan yang paling umum dan tertua dalam perangkat lunak adalah kerentanan buffer overflow. Kerentanan buffer overflow terjadi di semua jenis perangkat lunak dari sistem operasi ke aplikasi klien / server dan perangkat lunak desktop. Ini sering terjadi karena pemrograman yang buruk dan kurangnya atau validasi masukan yang buruk di sisi aplikasi. Dalam artikel ini kita akan melihat apa sebenarnya buffer overflow, bagaimana mereka bekerja dan bagaimana mereka dapat menjadi kerentanan keamanan yang serius. Kami juga akan melihat apa yang terjadi ketika buffer overrun terjadi dan teknik mitigasi untuk meminimalkan efek berbahaya mereka.

Apa itu buffer overflow?


Buffer overflow adalah situasi di mana program yang sedang berjalan mencoba untuk menulis data di luar buffer memori yang tidak dimaksudkan untuk menyimpan data ini. Ketika ini terjadi kita berbicara tentang situasi buffer overflow atau buffer overrun. Suatu penyangga memori adalah suatu area dalam memori komputer (RAM) yang dimaksudkan untuk menyimpan data sementara. Buffer semacam ini dapat ditemukan di semua program dan digunakan untuk menyimpan data untuk input, output dan pemrosesan.

Baca Juga :

Contoh data yang disimpan dalam buffer adalah kredensial login atau nama host untuk server FTP. Juga data lain yang disimpan sementara sebelum diproses dapat disimpan dalam buffer. Ini benar-benar bisa apa saja dari bidang input pengguna seperti nama pengguna dan bidang kata sandi untuk memasukkan file yang digunakan untuk mengimpor file konfigurasi tertentu. Ketika jumlah data yang ditulis ke buffer melebihi jumlah data yang diharapkan, buffer memori dibanjiri. Ini terjadi misalnya ketika nama pengguna dengan maksimal 8 byte diharapkan dan nama pengguna 10 byte diberikan dan ditulis ke buffer. Dalam hal ini buffer terlampaui oleh 2 byte dan overflow akan terjadi ketika itu tidak dicegah terjadi. Ini sering terjadi karena pemrograman yang buruk dan kurangnya sanitasi input.

Apa yang terjadi ketika terjadi buffer overflow?


Ketika terjadi limpahan buffer memori dan data ditulis di luar buffer, program yang sedang berjalan dapat menjadi tidak stabil, crash atau mengembalikan informasi yang korup. Bagian memori yang ditimpa mungkin berisi data penting lainnya untuk aplikasi yang berjalan yang sekarang ditimpa dan tidak tersedia untuk program lagi. Buffer overflows bahkan dapat menjalankan program atau perintah (jahat) lainnya dan menghasilkan eksekusi kode arbitrer.

Eksekusi kode arbitrer dan eskalasi hak istimewa


Ketika kerentanan buffer overflow digunakan untuk menulis data jahat dalam memori dan penyerang dapat mengendalikan aliran eksekusi program, kita berhadapan dengan kerentanan keamanan yang serius. Buffer overflows kemudian bisa menjadi masalah keamanan yang serius. Masalah keamanan ini dapat dimanfaatkan oleh peretas untuk mengambil kendali (remote) dari host, melakukan eskalasi hak istimewa atau lebih banyak hal buruk sebagai akibat dari eksekusi kode arbitrer. Eksekusi kode arbitrer adalah proses penyuntikan kode dalam buffer dan mendapatkannya untuk dieksekusi.

Eskalasi privilege dilakukan melalui pemanfaatan kerentanan buffer overflow untuk mengeksekusi kode arbitrer dalam program yang berjalan dengan hak istimewa sistem. Kode yang dieksekusi dapat berupa shellcode yang memberikan penyerang OS shell dengan hak akses administratif misalnya, atau bahkan menambahkan pengguna (administrator) baru ke sistem. Juga dengan buffer overflows kode yang dieksekusi terjadi dalam konteks aplikasi yang sedang berjalan. Ini berarti bahwa ketika aplikasi yang dieksploitasi berjalan dengan hak akses administratif, kode berbahaya juga akan dieksekusi dengan hak akses administratif.

Denial of Service (DoS)


Tidak semua kerentanan buffer overflow dapat dieksploitasi untuk mendapatkan eksekusi kode arbitrer. Juga (jarak jauh) Serangan Denial of Service dapat dilakukan ketika mereka hanya menjalankan program yang macet. Karena buffer overflows vulnerabilities dapat terjadi dalam perangkat lunak, serangan DoS tidak hanya terbatas pada layanan dan komputer. Juga router, perangkat firewall IoT dan apa pun yang menjalankan OS dapat ditargetkan. Contoh dari situasi ini adalah Cisco ASA IKEv1 dan IKEv2 Buffer Overflow baru-baru ini mengeksploitasi akhir-akhir ini. Beberapa eksploit jarak jauh ini hanya crash dan memaksa reboot firewall yang mengakibatkan downtime beberapa menit.

Bagaimana cara mencegah terjadinya buffer overflows?


Buffer overflows dalam perangkat lunak dapat dicegah atau dikurangi dengan beberapa cara. Mitigasi adalah proses meminimalkan dampak ancaman sebelum atau sesudah ancaman terjadi. Inilah yang harus kita lakukan ketika datang ke buffer overflows. Mereka dapat dicegah terjadi sebelum terjadi (proaktif). Namun, karena limpahan buffer terus terjadi, meskipun tindakan yang diambil secara proaktif untuk menghindarinya, kami juga memerlukan mekanisme untuk meminimalkan dampak ketika terjadi (penanggulangan reaktif). Mari kita lihat bagaimana cara kerja pencegahan dan mitigasi buffer overflow.

Cara mencegah Buffer Overflow


Solusi terbaik dan paling efektif adalah mencegah kondisi buffer overflow terjadi di kode. Misalnya ketika maksimum 8 byte sebagai data input diharapkan, dari jumlah data yang dapat ditulis ke buffer akan dibatasi hingga 8 byte setiap saat. Selain itu, pemrogram harus menggunakan fungsi simpan, kode pengujian, dan perbaiki bug. Metode proaktif untuk pencegahan buffer overflow seperti ini harus digunakan kapan saja untuk membatasi kerentanan buffer overflow.

Cara menangani Buffer overflow


Cara lain untuk menjaga buffer overflows adalah dengan mendeteksi mereka saat terjadi dan meredakan situasi. Ini adalah pendekatan reaktif dan berfokus pada meminimalkan dampak berbahaya. Contoh mitigasi yang efektif adalah sistem operasi modern yang melindungi area memori tertentu agar tidak ditulis atau dieksekusi. Ini akan mencegah penyerang menulis kode arbitrer ke memori ketika terjadi buffer overflow. Implementasi seperti DEP, ASLR, SEHOP dan ruang yang dapat dieksekusi dan perlindungan penunjuk mencoba untuk meminimalkan dampak negatif dari buffer overflow. Ini tidak mencegah terjadinya buffer overflow, tetapi ini meminimalisir dampaknya.

Cara lain dari deteksi buffer overflow pasif menggunakan sistem deteksi intrusi (IDS) untuk menganalisis lalu lintas jaringan. IDS mampu mendeteksi tanda tangan dalam lalu lintas jaringan yang diketahui dapat mengeksploitasi kerentanan buffer overflow. IDS dapat mengurangi serangan dan mencegah payload dari mengeksekusi pada sistem yang ditargetkan.

Bagaimana cara kerja buffer overflow dan terlihat seperti di kode?


Mari kita lihat bagaimana buffer overflow bekerja dengan melihat kode program. Kami menjelaskan proses ini menggunakan fungsi yang sangat dikenal rentan terhadap buffer overflow adalah fungsi strcopy () di pustaka c. Fungsi ini menggunakan 2 pointer sebagai parameter, sumber yang menunjuk ke array sumber untuk menyalin dari dan pointer tujuan ke array karakter untuk ditulis. Ketika fungsi dijalankan, array sumber karakter akan disalin ke array tujuan dan tidak memiliki pemeriksaan batas ketika melakukannya. Ketika sumber buffer lebih besar dari buffer tujuan, dari buffer yang dikuasai.

Contoh kasus Buffer overflow dengan strcpy()



Dalam contoh ini buffer dibanjiri dengan 2 byte yang mengandung 1 dan 2 yang tidak berbahaya. Karena fungsi strcpy () tidak melakukan pemeriksaan batas, kita dapat menulis apa pun di luar ruang buffer. Juga kode berbahaya seperti shellcode. Dalam tutorial berikut tentang buffer overflows, kita akan belajar tentang overrunning buffer dengan shellcode, bukan 1's dan 2's. Kami juga akan belajar bagaimana mengontrol aliran eksekusi program dan mengeksekusi kode shell berbahaya di luar buffer.

Post a Comment for "Mengenal Buffer Overflow: Dasar-dasar"