Panduan: Rekayasa Balik Kebingungan Kode

Diterbitkan: 2021-11-17

Angka kebingungan kode adalah salah satu pendekatan keamanan aplikasi paling populer untuk mencegah peretasan aplikasi. Ini adalah salah satu upaya AppSec yang paling sering disarankan oleh spesialis keamanan di seluruh dunia, dan sering menangani persyaratan keamanan aplikasi Anda yang sangat minim. Strategi ini sering digunakan sebagai mekanisme pertahanan utama terhadap upaya peretasan dan melindungi dari ancaman umum seperti injeksi kode, rekayasa balik, dan perusakan informasi pribadi pelanggan dan pengguna aplikasi.

Kebingungan kode?

Praktek mengaburkan executable seperti itu tidak lagi dipahami, dimengerti, atau praktis dikenal sebagai kode obfuscation. Kode sumber telah dikaburkan sedemikian rupa sehingga tidak dapat dipahami dan sulit dipahami oleh pihak ketiga, apalagi dijalankan. UI pengguna akhir atau keluaran kode yang dimaksudkan tidak terpengaruh oleh ketidakjelasan. Ini hanyalah langkah pencegahan untuk membuat kode tidak berguna bagi peretas potensial yang memiliki akses ke kode perangkat lunak yang dapat dieksekusi.

Mengapa perlu mengaburkan kode?

Kebingungan kode sangat penting untuk perangkat lunak sumber terbuka, yang memiliki kelemahan signifikan dalam hal kemampuan untuk diretas untuk keuntungan pribadi. Pengembang menjamin bahwa kekayaan intelektual produk mereka dilindungi dari risiko keamanan, akses ilegal, dan penemuan kelemahan aplikasi dengan membuat program sulit untuk direkayasa balik.

Terlepas dari jenis teknik pengaburan yang digunakan, pendekatan ini membatasi kode sumber berbahaya dan memastikan berbagai tingkat keamanan program. Alasan waktu, biaya, dan sumber daya semuanya mendukung pengabaian kode Anda ketika kode tersebut dikaburkan karena kode yang didekompilasi menjadi tidak terbaca.

Teknik untuk Kebingungan Kode

Kebingungan bekerja pada berbagai tingkatan: itu dapat diimplementasikan pada tingkat struktur kode semantik/leksikal atau pada tingkat aliran struktur/kontrol data. Strategi kebingungan juga berbeda tergantung pada tindakan pada kode. Intinya, tim keamanan menentukan jenis kebingungan yang akan digunakan pada kode bekerja sama dengan tim pengembangan.

Kebingungan harus diganti namanya.

Pendekatan ini memerlukan penamaan variabel yang membingungkan sehingga tujuan sebenarnya dari penggunaannya disembunyikan dengan cerdik. Dekompiler mengalami kesulitan memahami aliran kontrol karena metode dan variabel diganti namanya dengan berbagai notasi dan angka. Metode obfuscation ini biasa digunakan untuk menyamarkan kode aplikasi platform Java, .NET, dan Android. Ini diklasifikasikan sebagai kebingungan tata letak karena menargetkan kode sumber secara langsung untuk memberikan lapisan perlindungan bagi aplikasi.

Kebingungan data

Metode ini berfokus pada struktur data yang digunakan dalam kode, sehingga tidak mungkin bagi peretas untuk mengakses tujuan program yang sebenarnya. Ini mungkin memerlukan perubahan cara data disimpan dalam memori oleh perangkat lunak dan bagaimana data itu diproses untuk menghasilkan hasil akhir. Prosedur ini dapat dilakukan dengan berbagai cara:

1. Kebingungan Agregasi
Cara data disimpan dalam perangkat lunak berubah sebagai akibat dari ini. Array, misalnya, dapat dibagi menjadi beberapa sub-array yang kemudian dapat direferensikan ke seluruh program.

2. Kebingungan penyimpanan data
Hal ini berdampak pada cara data disimpan dalam memori. Pengembang dapat, misalnya, mengacak antara penyimpanan variabel lokal dan global untuk mengaburkan sifat sebenarnya dari perilaku variabel.

3. Mendapatkan kebingungan sesuai permintaan
Pendekatan ini mengubah urutan data tanpa mengubah fungsionalitas cuplikan program/kode. Pengembang mencapai ini dengan membuat modul berbeda yang dipanggil untuk setiap instance dari referensi variabel.

4. Mengenkripsi string
Teknik ini mengenkripsi semua string yang dapat dibaca, menghasilkan kode yang tidak terbaca. Ketika perangkat lunak dijalankan, mereka harus didekripsi pada saat runtime.

5. Kebingungan Kontrol/Alur Kode
Cara di mana kontrol ditransmisikan dari satu bagian basis kode ke bagian lain sangat penting dalam menetapkan tujuan program. Mengaburkan aliran ini sering kali merupakan cara yang paling menguntungkan untuk memutarbalikkan aliran permainan. Strategi obfuscation ini mencegah peretas dengan mempersulit mereka untuk mencari tahu bagaimana dan mengapa kode tersebut mengikuti jalur tertentu.

Dimasukkannya pernyataan acak dan tak terduga, serta pernyataan case-switch yang tidak perlu (kode mati) yang tidak akan pernah dieksekusi, adalah salah satu cara paling umum untuk mencapai strategi kebingungan ini. Pernyataan ini tidak memiliki fungsi lain kecuali untuk membingungkan peretas yang ditargetkan. Dalam hal orientasi program bersyarat, perubahan urutan pernyataan eksekusi program ini sangat berguna.

Kebingungan sedang di-debug.

Informasi debug sering berguna dalam menentukan informasi penting tentang aliran program dan cacat dengan mendekompilasi dan mengkompilasi ulang kode sumber. Sangat penting untuk menyembunyikan data pengidentifikasi tersebut dengan mengubah identitas, nomor baris, atau mematikan akses ke data debug sepenuhnya.

Kebingungan harus diatasi.

Kesalahan pemrograman memori telah meluas dalam serangan, terutama dalam bahasa non-memori yang aman seperti C dan C++. Kelemahan keamanan sering disebabkan oleh kesalahan seperti akses array yang tidak terkontrol. Pendekatan pengaburan alamat membuat rekayasa balik menjadi sulit karena alamat virtual kode dan data program diacak setiap kali kode yang dikonversi dilakukan. Akibatnya, sebagian besar serangan kesalahan memori bersifat non-deterministik, dengan kemungkinan keberhasilan yang sangat rendah.

Pengodean yang Dipersonalisasi

Pengembang menggunakan pendekatan ini untuk mengenkripsi string dengan algoritme khusus dan kemudian menyediakan fungsi dekoder untuk memulihkan kode asli.

Argumen Lulus saat Runtime

Dimungkinkan untuk memodifikasi program sedemikian rupa sehingga mengharapkan parameter saat runtime. Untuk mendekode variabel, pengguna harus memiliki kode dan kunci dekripsi.

Untuk mengembangkan metode pertahanan berlapis untuk melindungi aplikasi dari ancaman keamanan yang beragam, tim keamanan dapat memilih untuk menerapkan lebih dari satu teknik pada saat yang bersamaan.

Kesimpulan

Singkatnya, penyesatan saja tidak efektif dalam memerangi masalah keamanan tingkat lanjut. Lebih sulit untuk mengaburkan kode karena ketersediaan perangkat lunak ai dan keterampilan peretas, tetapi itu bukan tidak mungkin. Akibatnya, kriptografi bukanlah obat mujarab untuk semua masalah keamanan perangkat lunak.
Tim pengembangan mungkin menggunakan berbagai pendekatan kebingungan kode untuk mengamankan kode mereka di lingkungan yang tidak tepercaya, bergantung pada kebutuhan keamanan, sifat program, dan tolok ukur kinerja. Ini harus dilakukan dengan mempertimbangkan keuntungan dan kerugian dari setiap pendekatan. Inisiatif AppSec lainnya, seperti enkripsi, RASP, regulasi penyimpanan data, dan sebagainya, harus didukung oleh strategi ini. Ketika dikombinasikan dengan solusi RASP seperti AppSealing, ini menjadi penangkal ampuh untuk masalah keamanan saat ini.