Peretas dapat mengendalikan sistem dengan memaksimalkan kapasitas penyimpanan layanan. Jadi bagaimana peretas melakukan serangan buffer overflow seperti itu?
Bagaimana peretas menyerang sistem menggunakan virus dan malware? Terkadang, itu bisa berupa ransomware; terkadang, itu bisa menjadi serangan yang menghabiskan persyaratan sistem Anda. Buffer overflow adalah salah satu metode serangan ini — tetapi apa sebenarnya itu? Bagaimana cara kerja serangan ini?
Apa itu Buffer Overflow?
Jadi apa sebenarnya buffer dan stack itu? Buffer adalah bidang di mana beberapa informasi input yang Anda berikan ke komputer Anda menunggu sebelum mencapai memori. Memanggil kembali data dari memori adalah operasi yang melelahkan sistem. Jadi ketika ada cukup ruang di buffer area, Anda memanggil data langsung dari sini. Ini berarti peningkatan kinerja untuk perangkat Anda. Tentu saja, ketika ruang yang tersedia untuk buffer sudah penuh, perlu untuk menuliskannya ke dalam memori.
Stack pada dasarnya adalah struktur data tempat operasi push (add) dan pop (hapus) data berlangsung. Konsep buffer dan stack sangat mirip; namun, buffer berfungsi seperti tumpukan yang menyimpan sementara data yang masuk.
Buffer overflow bisa menjadi topik yang menantang, tetapi seperti namanya, buffer terjadi ketika ada kelebihan data. Misalnya, Anda ingin masuk ke sistem. Pengembang dapat mengalokasikan 250 byte ruang untuk nama pengguna. Jika Anda memasukkan 300 byte data, buffer meluap. Overflow ini dapat memengaruhi data lain di memori, menyebabkan kerusakan.
Ini bagus untuk peretas. Penjahat dunia maya dapat menggabungkan kekacauan ini dengan vektor serangan yang berbeda, misalnya untuk meretas sistem dan masuk sebagai administrator.
Untuk memahami buffer overflow, topik utama yang perlu Anda kenali adalah arsitektur internal CPU, register memori, dan bagaimana memori memproses data. Berikut adalah beberapa istilah tentang CPU yang perlu Anda ketahui.
Kode Majelis |
Bahasa pemrograman tingkat rendah, yaitu dekat dengan bahasa mesin. |
Penyangga |
Ukuran tetap ruang memori yang dialokasikan. |
Kode Byte |
Bentuk kode bahasa perantara yang dapat dikompilasi yang ditulis dalam bahasa tingkat tinggi. |
Penyusun |
Sebuah program yang mengubah bahasa pemrograman menjadi kode mesin. |
Tumpukan |
Dinamis, ruang memori variabel. |
Dasar-dasar Teori Memori
Tanpa memahami teori memori, akan sulit untuk mengatasi masalah buffer overflow dalam praktiknya. Anda dapat menganggapnya seperti mencoba membangun rumah tanpa mengetahui cara membuat tembok.
Bayangkan Anda ingin menjalankan buffer overflow dari sudut pandang peretas. Untuk itu, Anda harus memanipulasi memori dan meminta CPU mengeksekusi kode Anda. Jika Anda adalah seseorang dengan niat jahat, tujuan Anda di sini adalah membebani memori dan juga memanipulasi area memori yang berdekatan.
Namun pertama-tama, Anda harus fokus pada konsep tumpukan, tumpukan, dan segmen teks.
Saat tumpukan sedang dibuat, memori menggunakan alamat memori yang tinggi. Alamat memori tinggi berarti area memori yang diperluas. Kemudian nilai alamat mulai menurun. Tumpukan memori menggunakan metode yang disebut LIFO (Last In, First Out) selama penggunaan memori. Variabel dalam memori tumpukan hanya valid dalam lingkup di mana mereka didefinisikan. Jika berada di luar cakupan ini, kesalahan akan terjadi.
Tumpukan memori, di sisi lain, bekerja secara dinamis dan tidak harus dimulai dari alamat yang tinggi. Tidak ada batasan yang ditetapkan pada tumpukan memori; semua batasan ditentukan oleh sistem operasi. Dimungkinkan untuk mengubah memori heap secara dinamis dan batasan ini dapat berubah sesuai dengan kebutuhan pengguna selama penggunaan heap. Batas memori heap bergantung pada faktor yang ditentukan oleh sistem operasi dan perangkat keras. Dengan kata lain, ia menawarkan penggunaan dinamis dalam batas-batas ini.
Segmen teks berisi kode program dan segmen data berisi data global. Berbagi alamat tinggi menumpuk dan menumpuk memori di antara mereka sendiri. Sistem mengalokasikan kedua memori saat runtime.
Untuk lebih memahami buffer overflow, Anda harus memeriksa register data tujuan umum yang digunakan arsitektur komputer Anda untuk menyimpan data. Alih-alih menganalisis setiap catatan satu per satu, fokuslah pada hal-hal yang penting.
- ESP (Penunjuk Tumpukan Diperpanjang): Register ini memegang alamat di bagian atas tumpukan.
- EBP (Penunjuk Basis Diperpanjang): Ini memegang pointer dasar.
- EIP (Penunjuk Instruksi Diperpanjang): Dan register ini menyimpan alamat dari instruksi selanjutnya yang akan dieksekusi.
Istilah teknis ini mungkin terdengar agak membingungkan, tetapi bayangkan semuanya sebagai partisi kecil di memori.
Bagaimana Cara Kerja Serangan Buffer Overflow?
Saat Anda menambahkan data baru ke tumpukan apa pun, data ini akan ditempatkan di bagian atas. Semua data baru kemudian dipindahkan ke bawah. ESP ada di bagian atas tumpukan. Jadi dalam hal ini ESP pergi ke alamat memori yang lebih rendah. Bayangkan data yang ditambahkan di atas menekan ESP ke bawah.
Saat program mulai berjalan, sistem membuat bingkai tumpukan dengan variabel lokal. Tujuan utama dari serangan buffer overflow adalah untuk mendapatkan akses ke EIP atau alamat pengirim. Seorang peretas dengan akses ke alamat ini dapat memerintahkannya untuk menunjuk ke kode jahat apa pun yang mereka inginkan, yang kemudian akan memengaruhi sistem yang lebih luas.
Dengan setiap bit data baru, tumpukan tumbuh ke arah EBP. Pertanyaan sebenarnya di sini adalah, jika kita memasukkan terlalu banyak data, dapatkah kita mendorong EBP menuju EIP? Dengan begitu, data atau kode yang Anda inginkan ada di EIP dan Anda bisa melihat hasil yang Anda inginkan. Yang tersisa hanyalah menjalankannya. Saat Anda menjalankan program, program tersebut menunjuk ke kode EIP Anda dan memulai eksekusi. Akibatnya, jika Anda adalah seorang peretas, Anda akan melakukan serangan buffer overflow pertama Anda.
Untuk mengambil contoh dari sudut yang berbeda, Anda dapat mempertimbangkan cairan dengan kepadatan berbeda, yang disebut ESP, EBP, dan EIP, dalam sebuah wadah. Bayangkan ESP terletak di bagian atas wadah karena kerapatannya lebih rendah. Sama seperti minyak zaitun dan air, keduanya tidak boleh bercampur. Jadi, kode berbahaya adalah cairan lain—saat Anda menambahkannya ke wadah, kode tersebut mengacaukan keseimbangan ini, memindahkan sebagian cairan, dan bercampur dengan EIP. Ini akan menunjukkan buffer overflow.
Bagaimana Melindungi Terhadap Serangan Buffer Overflow
Jadi bagaimana Anda menghentikan hal ini terjadi?
Pertama, penting untuk menerapkan praktik pengkodean yang baik selama proses pengembangan perangkat lunak untuk meminimalkan kerentanan keamanan. Kode yang ditulis dengan hati-hati dapat mengurangi kemungkinan buffer overflows.
Langkah lain adalah menggunakan mekanisme pertahanan untuk memungkinkan pemantauan wilayah memori, memeriksa batas buffer, dan mendeteksi serangan. Terakhir, Anda perlu memperbarui sistem secara teratur dan menerapkan tambalan. Pembaruan yang memperbaiki kerentanan mempersulit penyerang untuk mengeksploitasi kerentanan yang diketahui. Selain itu, menggunakan alat pertahanan seperti perangkat lunak dan firewall memberikan lapisan keamanan tambahan.
Ambil Tindakan Terhadap Buffer Overflow
Serangan buffer overflow menimbulkan ancaman yang signifikan terhadap keamanan siber Anda dan mengambil tindakan pencegahan terhadapnya sangatlah penting. Untungnya, adalah mungkin untuk memblokir serangan ini dan memperkuat mekanisme pertahanan. Banyak praktik keamanan yang baik, seperti memperbarui perangkat lunak untuk memperbaiki tambalan, membantu melindungi dari serangan semacam itu, serta kerentanan lainnya.