Ada ruang untuk menyuntikkan kode antara aplikasi dan pustaka eksternalnya. Melakukan hal itu pada dasarnya tidak buruk, tetapi itu cara yang bagus untuk menyakiti.

Ketika pengembang perlu memperluas fungsionalitas program yang kode sumbernya tidak mereka miliki, mereka sering beralih ke pengait DLL. Ini adalah cara yang tidak ortodoks untuk membuat program melakukan sesuatu yang tidak dimaksudkan untuk dilakukan.

Masalahnya, peretas juga menggunakan teknik ini untuk semua alasan yang salah, seperti mempersenjatai aplikasi yang tidak berbahaya atau meretas perangkat lunak. Jadi apa itu pengait DLL, dan bagaimana cara kerjanya?

Apa itu DLL?

Setiap aplikasi bergantung pada beberapa file di luar kode dasarnya untuk dijalankan. File eksternal ini berisi kode dan data yang dibutuhkan program agar berfungsi dengan baik. Ketika salah satu dari file eksternal ini hilang, program mungkin mengalami masalah stabilitas atau langsung menolak untuk dijalankan.

Di sistem operasi Windows, file eksternal ini disebut DLL atau pustaka tautan dinamis. Pustaka tautan dinamis adalah komponen penting dari sistem operasi Windows, menyediakan kode dan sumber daya yang dapat digunakan kembali yang dapat dibagikan ke beberapa aplikasi.

File eksternal pada Windows dikenal sebagai perpustakaan. Ada dua jenis perpustakaan: dinamis dan statis. Pustaka dinamis dimuat saat run-time dan pustaka statis dimuat pada waktu kompilasi. DLL adalah perpustakaan yang dinamis.

Apa itu Pengait DLL?

DLL hooking adalah teknik yang mencakup mencegat dan mengubah panggilan fungsi program atau proses membuat ke DLL. Intinya pengaturan Man-in-The-Middle didirikan di mana kait berada di antara program dan DLL yang dipanggilnya. Semua atau panggilan fungsi yang ditargetkan kemudian dilacak dan diubah.

Berikut adalah contoh alur kerja DLL hooking attack:

  1. Penyerang menganalisis panggilan fungsi yang dibuat oleh program dan file DLL yang menjadi sandarannya.
  2. Penyerang membuat hook menggunakan salah satu dari banyak teknik implementasi seperti IAT hooking, inline hooking, COM hooking, dll.
  3. Eksekusi kode sewenang-wenang terjadi.
  4. Eksekusi panggilan fungsi asli mungkin atau mungkin tidak terjadi.
  5. Penyerang menutupi jejak mereka dengan menghapus pengait dan mengembalikan semua perubahan yang dilakukan.

DLL hooking adalah teknik canggih yang dapat digunakan untuk kebaikan (seperti memperluas fungsionalitas program, debugging, dan logging) atau buruk (seperti melewati langkah-langkah keamanan, mencuri data sensitif, mengeksekusi kode arbitrer, dan menulis video game peretasan).

Bagaimana Cara Kerja Pengait DLL?

Sebelum terjun ke implementasi DLL hooking, penting untuk membersihkan dasar-dasarnya. Mari mundur selangkah dan pahami apa yang terjadi saat pemanggilan fungsi dilakukan ke DLL oleh sebuah program.

Ketika sebuah program memanggil fungsi dalam DLL, sistem operasi pertama-tama mencari nama fungsi tersebut Tabel Alamat Impor program dan mendapatkan alamat fungsi dari Alamat Ekspor DLL Meja.

Setelah alamat fungsi diselesaikan, program dapat melompat ke alamat fungsi untuk mengakses dan menjalankannya. Pengait DLL berputar di sekitar mencegat proses ini dan mengarahkan panggilan fungsi ke fungsi yang berbeda. Ada beberapa cara untuk mengimplementasikan DLL hooking. Mari kita lihat teknik yang paling umum digunakan untuk mengimplementasikannya.

Ini bisa menjadi sangat teknis, jadi mungkin membantu jika Anda adalah pengguna daya Windows atau memiliki pemahaman yang kuat tentang internal Windows.

Mengaitkan IAT

Pengait IAT adalah teknik efektif yang banyak digunakan oleh pembuat malware untuk menghindari langkah-langkah keamanan dan menghindari deteksi. Tabel Alamat Impor (IAT) adalah struktur data yang dimuat ke memori setiap kali proses baru dibuat. IAT berisi nama semua panggilan fungsi yang diimpor dan alamat memorinya.

Saat program memanggil fungsi di DLL, nama fungsi tersebut pertama kali dicari di IAT dan jika alamat memori dari fungsi tersebut tidak ditemukan di IAT maka dibuat dari Alamat Ekspor DLL Meja.

Ini adalah struktur data tempat semua fungsi yang diekspor oleh DLL dipetakan ke alamat memorinya. Dalam IAT hooking, musuh dapat memodifikasi IAT dari suatu proses dan mengganti pemetaan fungsi yang sah dengan yang jahat sehingga mengganggu operasi yang dimaksud dan membuat program dijalankan secara sewenang-wenang kode.

Seperti inilah alur serangan umum dalam IAT hooking:

  1. Suatu program membuat pemanggilan fungsi.
  2. Alamat fungsi terletak di IAT.
  3. Sejak IAT terpikat; alamat fungsi telah diubah, dan lokasi memori dari fungsi jahat dimuat.
  4. Program melompat ke lokasi fungsi jahat dan kode arbitrer dijalankan.
  5. Akhirnya, pemanggilan fungsi asli dijalankan.

Pengait Inline

Pengait sebaris adalah teknik pengait DLL yang melibatkan pengubahan kode sumber fungsi target untuk mengarahkan eksekusinya ke fungsi khusus. Inline Hooking, berbeda dengan IAT hooking, mengubah kode fungsi target secara langsung, memberikan penyerang kontrol yang lebih tepat atas perilaku fungsi target.

Pada diagram di atas, amati bagaimana fungsi yang sah telah dirusak untuk mengarah ke fungsi berbahaya. Setelah semua instruksi dalam fungsi jahat dijalankan, instruksi lompat dibuat untuk kembali ke fungsi yang sah untuk menyelesaikan eksekusi.

Musuh menggunakan inline hooking untuk membuat perubahan yang bertahan lama pada suatu program seperti mengubah parameter atau nilai pengembalian suatu fungsi.

Microsoft memutar

Microsoft Research telah mengembangkan paket pengait DLL internal, Jalan memutar. Ini memungkinkan pemrogram untuk melacak dan mengubah panggilan fungsi yang dibuat oleh suatu program. Jalan memutar dapat digunakan untuk berbagai tugas, termasuk namun tidak terbatas pada: instrumentasi, pengujian, dan perbaikan bug.

Musuh menggunakan Detours untuk melakukan injeksi DLL dan serangan pengait, dan pengembang sering menggunakannya untuk memperluas fungsionalitas aplikasi mereka. Anda dapat mempelajari lebih lanjut tentang paket Detours di repositori GitHub resmi.

Sekarang Anda Tahu Cara Kerja DLL Hooking

DLL hooking adalah teknik canggih yang, bila digunakan untuk alasan yang tepat, dapat meningkatkan kemampuan aplikasi Anda atau membantu Anda men-debug dan mengoptimalkan perangkat lunak. Sayangnya, hooking lebih sering terlihat digunakan sebagai teknik permusuhan daripada pengembangan. Jadi, penting bagi Anda untuk mengadopsi dan mematuhi praktik keamanan terbaik untuk memastikan aplikasi Anda aman dan bebas dari serangan seperti hooking dan injeksi.