Luapan penyangga
Dalam keamanan informasi dan pemrograman, luapan penyangga atau luapan dapar (bahasa Inggris: buffer overflow) adalah sebuah anomali ketika sebuah program, saat menulis data ke dalam penyangga hingga melampaui batas dan menimpa lokasi memori yang berdekatan.
Penyangga adalah wilayah memori yang disisihkan untuk menampung data, sering sambil bergerak dari satu bagian program ke program lain, atau antarprogram. luapan penyangga sering dipicu oleh cacat masukan; jika menganggap semua masukan menjadi lebih kecil dari ukuran tertentu dan penyangga ini diciptakan sebagai ukuran, maka anomali transaksi yang menghasilkan lebih banyak data dapat menyebabkan penulisan data hingga melewati batas akhir penyangga tersebut. Jika hal ini menimpa data yang berdekatan atau kode yang dapat dijalankan, hal ini dapat mengakibatkan ketidakmenentuan perilaku sebuah program, termasuk kesalahan akses memori, hasil yang salah, dan galat aplikasi.
Deskripsi teknis
suntingLuapan penyangga terjadi ketika data ditulis ke dalam penyangga juga merusak nilai-nilai data pada alamat memori yang berdekatan dengan penyangga tujuan karena kurangnya batas memeriksa. Hal ini dapat terjadi ketika menyalin data dari satu penyangga ke dalam penyangga yang lain tanpa memeriksa terlebih dahulu bahwa data apakah sesuai dalam penyangga tujuan.
Contoh
suntingDalam contoh berikut yang ditulis dalam C, program ini memiliki dua variabel yang berdekatan dalam memori: penyangga 8 bita, A, dan dua bita integer big-endian, B. Awalnya, A tidak berisi apa-apa kecuali nol bita, dan B berisi angka 1979.
nama variabel | A | B | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
nilai | [string null] | 1979
| ||||||||
nilai hex | 00
|
00
|
00
|
00
|
00
|
00
|
00
|
00
|
07
|
BB
|
Sekarang, program ini mencoba untuk menyimpan string berakhir dengan nol "excessive"
dengan ASCII yang dienkode dalam penyangga A. "excessive"
adalah 9 karakter dan mengenkode 10 bita termasuk terminator null, tetapi hanya dapat mengambil 8 bita. Karena gagal memeriksa panjang dari string, ia juga akan menimpa nilai B:
nama variabel | A | B | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
nilai | 'e'
|
'x'
|
'c'
|
'e'
|
's'
|
's'
|
'i'
|
'v'
|
25856
| |
hex | 65
|
78
|
63
|
65
|
73
|
73
|
69
|
76
|
65
|
00
|
Nilai B kini telah secara tidak sengaja diganti dengan nomor yang dibentuk dari bagian dari karakter string. Dalam contoh ini "e" diikuti dengan byte nol akan menjadi 25856.
Menulis data setelah alokasi akhir dalam memori kadang-kadang dideteksi oleh sistem operasi dan menghasilkan segmentasi kesalahan yang mengakhiri proses tersebut.
Pranala luar
sunting- "Discovering and exploiting a remote buffer overflow vulnerability in an FTP server" by Raykoid666
- "Smashing the Stack for Fun and Profit" by Aleph One
- An Overview and Example of the Buffer-Overflow Exploit. pps. 16-21. Diarsipkan 2006-09-27 di Wayback Machine.
- CERT Secure Coding Standards
- CERT Secure Coding Initiative
- Secure Coding in C and C++
- SANS: inside the buffer overflow attack
- "Advances in adjacent memory overflows" by Nomenumbra
- A Comparison of Buffer Overflow Prevention Implementations and Weaknesses
- More Security Whitepapers about Buffer Overflows
- Chapter 12: Writing Exploits III from Sockets, Shellcode, Porting & Coding: Reverse Engineering Exploits and Tool Coding for Security Professionals by James C. Foster (ISBN 1-59749-005-9). Detailed explanation of how to use Metasploit to develop a buffer overflow exploit from scratch.
- Computer Security Technology Planning Study, James P. Anderson, ESD-TR-73-51, ESD/AFSC, Hanscom AFB, Bedford, MA 01731 (October 1972) [NTIS AD-758 206]
- "Buffer Overflows: Anatomy of an Exploit" Diarsipkan 2017-09-05 di Wayback Machine. by Nevermore
- Secure Programming with GCC and GLibc Diarsipkan 2008-11-21 di Wayback Machine. (2008), by Marcel Holtmann