Monday 16 October 2017

Mengenal Teknik Hooking Malware Pada Sistem

Jika berbicara tentang virus dan antivirus, Anda mungkin teringat dengan pepatah kuno yang berbunyi  virus selangkah lebih maju dari anti virus”. Entahlah, pada zaman pasca milenium ini ketika Anda membuat program yang bermain-main dengan sistem internal maka antivirus sering mendeteksi program tersebut sebagai virus.  Bukankah ini berarti antivirus selangkah lebih maju dari virus? Lah, baru dicompile saja program sudah diteriaki atau bahkan dilahap oleh antivirus. Meskipun program yang dibuat belum tentu program virus, hal ini dapat disimpulkan bahwa antivirus berusaha membuat terobosan baru dalam pendeteksian virus-virus dengan jam terbang yang rendah.

Mengenal Teknik Hooking Malware Pada Sistem
Sumber:pixabay.com
Bagaimana antivirus mendeteksi virus? Secara umum antivirus menggunakan signature atau kode tertentu yang dicocokan saat mengecek suatu program. Jika signature tersebut ada di struktur PE program maka program tersebut adalah virus. Signature ini diambil dari sample virus yang telah diteliti oleh pihak antivirus ataupun virus dapat terdeteksi karena mempunyai signature yang umum digunakan oleh malware.

Rutinitas virus dan antivirus yaitu bermain petak umpet, misalnya ketika virus melakukan teknik polymorphic untuk mengelabui signature virus dan antivirus melakukan teknik emulasi sebagai amunisi dalam mendeteksi virus polymorphic. Namun teknik spekulasi alias heuristik pada antivirus bisa dibilang lebih canggih untuk mendeteksi virus-virus baru yang berjenis klasik.

Hooking
Ketika Anda mengaktifkan firewall pada Windows dan Anda menjalankan suatu program misalnya game online, firewall akan menampilkan pesan bahwa game tersebut berusaha mengakses Internet. Selanjutnya Anda memutuskan  game tersebut diizinkan untuk mengakses Internet atau tidak. Saat sebelum memilih keputusan, game tersebut “digantung” untuk menunggu keputusan Anda. Teknik yang digunakan firewall ini dapat disebut hooking.

Hooking merupakan teknik untuk memodifikasi alur eksekusi normal dari program atau sistem dengan suatu rutin tertentu. Saat Anda menjalankan malware kemudian  antivirus memberi peringatan tentang malware tersebut, maka hal yang terjadi adalah antivirus melakukan hooking terhadap CreateProcess dari malware. Jika CreateProcess dicegat oleh antivirus maka artinya malware belum aktif dan Anda menentukan rutin apa yang dilakukan pada malware.

Sama dengan antivirus, malware juga menggunakan teknik hooking dalam aksinya. Sebagai contoh,  malware sering melakukan hooking terhadap fungsi ExitProcess dan TerminateProcess untuk menghindari dirinya dapat dimatikan alias immortal process. Namun hal ini juga dilakukan oleh beberapa antivirus agar prosesnya tidak dapat dimatikan. 

Contoh lain dalam penggunaan hooking misalnya saat program keylogger ingin mengirim log ke server. Jika ada firewall yang memblok program yang berusaha mengakses Internet, maka keylogger dapat menggunakan program yang telah diizinkan firewall seperti Internet Explorer untuk mengirim data tersebut. Yaitu ketika Internet Explorer melakukan request data menggunakan fungsi Send, maka keylogger dapat meng-hook fungsi Send pada winsock untuk mengirim log, setelah itu operasi  request data oleh Internet Explorer dilanjutkan kembali. Oleh karena itu Anda harus curiga jika ada program non sistem seperti Internet Explorer , Adobe Reader dsb yang aktif di memory padahal Anda tidak merasa menjalankan program tersebut. Bisa saja proses program tersebut ditumpangi oleh malware.

Pointer Hooking
Saat menjalankan suatu program maka akan terjadi lalu lintas fungsi API untuk memanggil rutin tertentu. Jika malware mengubah alamat dari pointer fungsi API maka fungsi tersebut dapat dibelokan menuju kode lain. Hal ini akan legal karena yang memanggil kode Anda merupakan fungsi yang sah di mata Windows. Contoh dari pointer hooking yaitu IAT hook dan SSDT hook.

IAT hook sering dipakai oleh malware untuk menginfeksi file. IAT merupakan singkatan dari Imports Address Table atau alamat dari Imports Table. Imports Table merupakan bagian dari PE file di .idata section. Ketika program menggunakan kode atau fungsi (API) dari DLL, maka data tersebut akan tersimpan di dalam program yaitu di Imports Table. Malware akan mencari alamat fungsi API yang terdapat di Imports Table dan mengganti tujuan alamat tersebut ke kode malware. Namun IAT hook tidak akan berjalan jika program memanggil fungsi API secara dynamic yaitu dengan memakai fungsi LoadLibrary dan GetProcAddress. 

Malware juga menyukai memanggil API secara dynamic. Seperti yang telah dijelaskan, daftar fungsi API yang dipakai program tersimpan di Imports Address. Salah satu cabang ilmu heuristic antivirus dalam mendeteksi malware yaitu dengan mengintip fungsi API apa saja yang digunakan oleh suatu program di Imports Table dan mengemulasinya. Oleh karena itu malware menghindari pemanggilan fungsi API melalui Imports Table dan lebih memilih pemanggilan secara dynamic yaitu langsung ke DLL yang mempunyai fungsi yang dipanggil.

System Call Table Hooking
System call table hooking merupakan teknik hooking yang memodifikasi fungsi API yang biasa dipakai menjadi fungsi native API. Native API dipanggil di kernel mode. Jika Anda ingin mendapatkan isi dari folder menggunakan FindNextFile, maka Windows akan memanggil NtQueryDirectoryFile secara diam-diam di kernel mode untuk menjalankan tugas dari FindNextFile. Bagaimana jika ada pembuat malware yang melakukan hook pada NtQueryDirectoryFile? Ya, malware tidak terdaftar sebagai file di Windows. Begitu juga dengan hooking NtQuerySystemInformation untuk menyembunyikan proses dari suatu program dan NtEnumerateKey untuk menyembunyikan registry di Windows.

Hampir semua produk sekuriti juga meng-hook system call. Oleh karena itu ketika mengunistall program jenis antirootkit maka Windows diwajibkan untuk di-restart. Hal ini dikarenakan saat ada program memanggil fungsi yang di-hook dan driver program antirootkit sudah tidak aktif, maka page atau alokasi memori pada fungsi distop. Jika Anda masih memanggil fungsi tersebut maka akan terjadi BSOD pada Windows.

Detour
Detour merupakan teknik hooking yang langsung tembak, artinya DLL yang dijadikan target akan ditimpa secara keseluruhan atau di-patch.  Saat DLL digunakan maka hanya sekali saja DLL tersebut di-load ke physical memory. Hanya saja setiap proses yang memakai DLL tersebut akan menganggap ia mempunyai DLL tersendiri, padahal DLL yang dimaksud merupakan hasil mapping ke virtual address. Oleh karena hanya satu DLL yang terdapat di physical memory maka jika Anda melakukan detour pada suatu DLL, semua proses yang menggunakan DLL tersebut  akan menggunakan DLL  palsu. DLL palsu ini pun bisa menjalankan rutin dari DLL asli jika diinginkan. Penggunaan detour aslinya dipakai Windows saat proses update menggunakan hotfix.

Direct Kernel Object Manipulation
Setelah mengenal hooking pada fungsi API, ada cara yang biasa digunakan malware dalam melakukan teknik stealth, yaitu dengan langsung mengubah data pada kernel. Pada kernel terdapat berbagai jenis data yang di-query oleh semua fungsi API pada Windows. Jika data pada kernel ini dihapus maka fungsi yang dipanggil tidak dapat melakukan tugasnya. Hal ini sangat efektif dipakai malware dalam menyembunyikan keberadaan prosesnya.

Struktur yang terdapat di dalam kernel berupa EPROCESS. Pada EPROCESS terdapat informasi dari  semua proses yang berjalan berikut informasi PID, threads dan lainnya. Informasi ini dikelompokan dan disusun sebagai link list yang saling berkaitan.

Link List Pada EPROCESS
Link List Pada EPROCESS
Dengan memutuskan data proses malware dari link list EPROCESS maka semua fungsi API pada Windows yang berguna melihat proses yang berjalan pun menjadi tidak berguna. Setiap program yang dijalankan akan menghasilkan proses. Proses tidak bisa mengeksekusi kode, namun  proses akan membuat thread utama. Thread utama berfungsi untuk mengeksekusi kode. Nah, tujuan dari proses masih tetap berjalan karena EPROCESS tidak berhubungan dengan eksekusi dari thread.

Memodifikasi Link List Pada EPROCESS
Memodifikasi Link List Pada EPROCESS

Physical Memory
Semua proses di Windows masing-masing memiliki virtual memory sebagai jatah RAM untuk menjalankan program. Virtual memory ini merupakan aliran dari physical memory. Jika malware dapat memanipulasi physical memory menggunakan fungsi API ZwOpenSection, maka malware dapat menyembunyikan prosesnya sendiri seperti prinsip pada DKOM. Pada Windows XP, mengakses physical memory melalui \Device\PhysicalMemory masih dapat dilakukan dari user mode. Bermain dengan physical memory semula dipopulerkan oleh rootkit pada Linux yang bernama SucKIT. Salah satu worm Windows yang terkenal yaitu W32/Fanbot. Worm ini menggunakan DKOM dan \Device\PhysicalMemory untuk menyembunyikan prosesnya.

CreateRemoteThread
CreateRemoteThread fungsi API yang berfungsi untuk membuat thread yang berjalan di virtual address dari proses program lain. Cara ini sering dipakai untuk membuat malware tidak terdeteksi oleh antivirus. Banyak program crypter beredar untuk mempermudah proses pemakaian CreateRemoteThread. 

HANDLE WINAPI CreateRemoteThread(
  __in   HANDLE hProcess,
  __in   LPSECURITY_ATTRIBUTES lpThreadAttributes,
  __in   SIZE_T dwStackSize,
  __in   LPTHREAD_START_ROUTINE lpStartAddress,
  __in   LPVOID lpParameter,
  __in   DWORD dwCreationFlags,
  __out  LPDWORD lpThreadId
);

Cara umum dalam pemakaian dalam API ini yaitu, kode malwareyang ingin dieksekusi terenkripsi agar tidak terdeteksi oleh antivirus. Kode ini pun di-load dan didekripsi di memory kemudian di-inject di proses program lain.

AntiRootkit
Salah satu program gratis yang dapat diandalkan untuk mendeteksi malware yang memodifikasi sistem internal yaitu Radix. Dengan Radix, Anda dapat mengecek hidden files, Alternate Data Streams, Hidden Registry, IAT hooks dan masih banyak objek lainnya.

Tampilan Radix
Tampilan Radix

Implementasi
Berikut contoh sederhana program dalam melakukan Hooking pada API.

procedure hook(hModule, newfunc:pointer);

var

  jmpto:dword;

begin

  jmpto:=dword(newfunc)-dword(hModule)-5;

  VirtualProtect(hModule, 5, PAGE_EXECUTE_READWRITE, nil);

  pbyte(hModule)^:=;

  pdword(dword(hModule)+1)^:=jmpto;

end;



procedure MySleep(time:dword);

begin

MessageBox(0, 'OMG! you called Sleep!', 'ROFLMAO!', MB_OK);

end;

hook(GetProcAddress(GetModuleHandle('kernel32.dll'), 'Sleep'), @MySleep);

Penutup
Perkembangan teknologi malware semakin canggih dan berbahaya. Payload dari malware pun bervariasi, misalnya sebagai keylogger untuk merekam aktifitas keyboard agar mencuri data pribadi seperti akun email, internet banking, kartu kredit ataupun game online. Log dari rekaman tersebut pun dapat dengan mudah dikirim ke pembuat malware meskipun Anda menginstall antivirus atau firewall di komputer. Teknologi yang dipakai malware dalam melawan program sekuriti dengan memanipulasi sistem ini disebut rootkit.
Pencegahan atau cara untuk melawan malware dengan teknologi rootkit ini dapat dimulai dengan menginstal antivirus dan selalu mengupdate sistem operasi.  Pada Windows 7, kemampuan malware dalam memanipulasi sistem akan lebih sulit karena Windows 7 menerapkan beberapa lapisan layer untuk mengakses kernel dengan teknologi PatchGuard, terutama pada versi 64 bit.

Ditulis untuk PC Media edisi 4 2010

No comments:

Post a Comment