Anda di halaman 1dari 7

Laporan Praktikum

Buffer Overflow and Assembly Programming

Disusun Oleh:

Vicktor Lambok Desrony 11319028


Henny Flora Panjaitan 11319040
Romauli Sianipar 11319044

DIII TEKNOLOGI INFORMASI


INSTITUT TEKNOLOGI DEL
2021/2022
A. Menjawab Pertanyaan
1. Apa perbedaan antara stack overflow dan heap overflow berdasarkan percobaan yang telah anda
lakukan?
Jawab :
Stack Overflow merupakan wilayah khusus dari memori proses yang digunakan untuk menyimpan
variabel lokal yang digunakan di dalam fungsi, parameter yang melewati suatu fungsi dan alamat
pengirimnya. Setiap kali variabel lokal baru dideklarasikan, ia didorong ke tumpukan. Semua variabel
yang terkait dengan fungsi dihapus dan memori yang digunakan dibebaskan, setelah fungsi selesai
berjalan. Pengguna tidak perlu mengosongkan ruang tumpukan secara manual. Stack merupakan
metode struktur data Last-In-First-Out. Di memori komputer kita, ukuran tumpukan terbatas. Jika
sebuah program menggunakan lebih banyak ruang memori daripada ukuran tumpukan, maka stack
overflow akan terjadi dan dapat mengakibatkan program crash.Data yang dibuat pada stack dapat
digunakan tanpa petunjuk. Kita akan menggunakan stack jika kita tahu persis berapa banyak data yang
kita butuhkan untuk mengalokasikan sebelum menyusun waktu dan itu tidak terlalu besar. Biasanya
memiliki ukuran maksimum yang telah ditentukan pada saat program dimulai.
Heap overflow merupakan wilayah memori proses yang digunakan untuk menyimpan variabel
dinamis. Variabel-variabel ini dialokasikan menggunakan fungsi malloc() dan calloc() dan mengubah
ukurannya menggunakan fungsi realloc(), yang merupakan fungsi bawaan dari bahasa C. Variabel ini
dapat diakses secara global dan setelah kita mengalokasikan memori pada heap, kita bertanggung jawab
untuk mengosongkan ruang memori tersebut setelah penggunaan. Kita akan menggunakan heap jika
kita tidak tahu persis berapa banyak data yang kita butuhkan pada waktu berjalan atau jika kita perlu
untuk mengalokasikan banyak data.
2. Jelaskan mengapa stack dan heap overflow dapat terjadi?
Jawab :
Heap overflow terjadi ketika memori pada timbunan dialokasikan secara dinamis pada waktu proses
dan biasanya berisi data program. Eksploitasi dilakukan dengan merusak data ini dengan cara tertentu
untuk menyebabkan aplikasi menimpa struktur internal seperti penunjuk daftar tertaut. Teknik luapan
timbunan kanonis menimpa keterkaitan alokasi memori dinamis (seperti metadata malloc) dan
menggunakan pertukaran penunjuk yang dihasilkan untuk menimpa penunjuk fungsi program.
Stack overflow terjadi jika penunjuk tumpukan panggilan melebihi tumpukan terikat. Tumpukan
panggilan dapat terdiri dari jumlah ruang alamat yang terbatas, sering ditentukan pada awal program.
Ukuran tumpukan panggilan tergantung pada banyak faktor, termasuk bahasa pemrograman, arsitektur
mesin, multi-threading, dan jumlah memori yang tersedia. Ketika program mencoba menggunakan
lebih banyak ruang daripada yang tersedia pada tumpukan panggilan (yaitu, ketika mencoba untuk
mengakses memori di luar batas tumpukan panggilan, yang pada dasarnya adalah buffer overflow),
tumpukan dikatakan meluap, biasanya mengakibatkan crash program.
3. Pada program overflow_example.c dan auth_overflow.c Jelaskan hasil eksekusi program saat di-
compile dan dilakukan overflow terhadap-nya (print screen hasil dan masalah apa yang terjadi).
// Overflow Example

// buffer_one[8] , buffer_two[8]
Sebelumnya kita mengassign size sebesar sizeof(char) * 8 ke masing masing buffer_one dan
buffer_two.
Pada hasil exsekusi program seperti gambar diatas , pertama saya eksekusi dengan passing array
of char yang lebih kecil dari memory yang di assign pada buffer_two (argv 1 yang akan di copy
ke buffer_two).Oke kita melakukan copy sebanyak 1*len(argv1) ke buffer_two , karean memory
masih lebih kecil dari ukuran yang kita assign , maka program masih berjalan normal.
Selanjutnya pada eksekusi kedua , saya melakukan passing ke argv 1 dengan ukuran array of
char yang lebih besar dari buffer_two , maka disinilah kita dapat melihat buffer overflow ,
dimana ukuran memory array of char yang saya copy ke variable memenuhi kapasitas yang di
assign , sehingga ukuran maksimal akan di tamping ke buffer_two (8 bytes) , selebih nya ke
buffer_one dan sisanya di tamping di value.

//auth_overflow
• Dengan Inputan wajar

Dari hasil eksekusi file program auth_overflow (Stack base buffer overflow) diatas , kita
mendapatkan output masih sesuai dengan ekspektasi kita.ketika argv 1 yang di passing ada
diantar briiling atau outgrade maka output “Access Granted” dan selain itu “Access Denied”

Nah lain jika kita passing argv yang melebih memory , maka kita akan mendapatai output
“Access Granted” tentu ini akan menjadi exploitasi untuk attacker
Nah untuk overflow sselanjutnya , yaitu stack based heap overflow , kita dapat melihat diatas
kalua di jalankan dengan normal maka haislnya sesuai dengan ekspektasi kita , namun
bagaimana jika yang di passing melebihi buffer variable yang di assign ?

Maka exploitasi stack based heap overflow akan menjadi kerentanan program kita

Jawab :
4. Bagaimanacara anda menerapkan solusi dari masing-masing program (overflow_example.c,
auth_overflow.c, dan heap_overflow.c)?
Jawab :
Untuk masing masing kerentanan exlploitasi overflow , stack based buffer overflow , stack based
heap overflow pertama melakukan Analisa variable , algoritma mana yang menyebabkan
kerentanan.misal pada overflow_example kita hanya mengatasi peng-assign an memory pada variable
buffer_one dan buffer_two agar menyesuaikan array of char yang di passing ke argv1 jadi tidak aka
nada kerentanan disini , dan untuk kasus stack based buffer overflow (auth_overflow) , kita
melakukan pengecekan pada string hanya antara (brilling dan outgrade) bila dalam test case normal
ini tidak ada masalah , permasalahan jiga argv1 di passing dengan array of char melebihi memory
buffer , dari sini saya meninjau ukuran argv 1 yang di passing , jika lebih kecil dari ukuran buffer
dan berada diantara (brilling atau outgrade) maka return true , lain dari itu return false , damn
berhasil.
Last , Analisa sama dengan case yang lain , disini kita memesan memory secara dynamis (lebih
diuntungkan) , maka memory yang di pesan kita sesuaikan dengan argument 1 yang di passing dan
damn , berhasil.

B. Modifikasi program overflow_example.c, auth_overflow.c, dan heap_overflow.c agar tidak


rentan terhadap Buffer Overflow.
a) overflow_example.c
b) auth_overflow.c
c) heap_overflow.c

Anda mungkin juga menyukai