<< Blog >> << Nu'man >>

Jumat, 15 Maret 2019

memanipulasi sistem teknik hooking

Assalamualaikum wr.wb
pada kesempatan ini saya akan membahas tentang Memanipulasi sistem komputer teknik hooking.sebelumnya apakah kalian tahu apa teknik hoking itu ?

Hasil gambar untuk cara memanipulasi data teknik hooking


 Apa Itu Hooking?
Hooking adalah suatu teknik untuk memanipulasi cara kerja program hingga sistem operasi dengan mencegat atau mengubah fungsi ataupun pesan yang berinteraksi dalam program dan atau sistem operasi. 



Tujuan Hooking
Sebenarnya ada banyak kegunaan / manfaat / tujuan dari hooking namun disini saya akan menuliskan tentang dua manfaat dari hooking yaitu:

1. Debugging
Dalam melakukan pengembangan ataupun pembuatan Software, hooking dapat digunakan untuk memonitor alur kerja, mencari letak mencari letak kesalahan pada program hingga deteksi ada tidaknya memori leak.

2.Non Debugging
Tujuan hooking sangat luas, mulai implementasi ke antivirus untuk mencegat virus aktif di memori hingga memanipulasi alur kerja sistem operasi.

Cara Kerja Hooking
1.Code Patching

adalah teknik yang diterapkan dengan mengganti instruksi pada program dengan intstruksi lain. Berikut teorinya:
  • Dapatkan alamat dari fungsi API yang akan di-Hook pada memori.
  • Simpan beberapa bytes pertama dari fungsi tersebut
  • Ganti beberapa alamat bytes tersebut dengan instrukdi JUMP ke alamat pada fungsi baru(telah dimodifikasi)
  • Ketika fungsi yang di-Hook terpanggil, instruksi pada fungsi barulah yang akan terpanggil.
  • Kembalikan bytes yang diganti dengan bytes asli.
  • Lanjutkan proses normal dari program.
 2. IAT Patching
Berbeda dengan yang diatas, IAT Patching langsung mengganti alamat fungsi API yang dipanggil.Normalnya, fungsi-fungsi API yang dipanggil dalam suatu program tersimpan dalam IAT(Import Addres Table).IAT itulah lokasi gungsi yang akan diubah.

Fungsi baru dapat berupa pointer di memori, namun, karena lamat memori bukanlah alamat yang statis, lebih mudah jika menyimpan fungsi baru dalam bentuk file DLL. Ada beberapa cara yang dapat digunakan untuk membuat skenario agar kode pada DLL dipanggil oleh prigram yang di-Hook. Caranya:


1). Menggunakan Registry.



Pada HKEY_LOCAL_MACHINE\FOTWARE\Microsoft\Windows NT\CurentVersion\Windows, buat regisrty dengan tipe data string dengan nama "AppInit_DLLs" yang berisi lokasi file DLL. Lalu, buat registri dengan tipe data DWORD yang berisi nilai 1. Setiap program yang menggunakan file user32.dll akan memanggil file DLL yang berlokasi di AppInit_DLLs.



2). Menggunakan SetWindowsHookEx


Merupakan fungsi yang disediakan Windows untuk meng-install hook atau untuk melakukan hooking. Bagaimana menggunakan SetWindowsHookEx?..??????????????
Pertama, siapkan variable yang berupa pointer untuk menerima pesan yang diterima dari hasil hook. lalu, buat fungsi sebagai call back function untuk menerima pesan yang diterima program.

3).Menggunakan CreateRemoteThread

Dalam konsep penggunaan CreateRemoteThread, setiap program dapat memanggil file DLL secara run-time dengan fungsi API LoadLibrary(). untuk mengakses DLL, kode dalam DLL pun terpanggil. Untuk memanggil kode dalam DLL, fungsi CreateRemoteThread dapat dipakai untuk membuat thread terpisah sebagai media pemanggil LoadLibrary().


Pointer Hooking
Hasil gambar untuk 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);


itu saja yang dapat saya sampaikan tentang cara memanipulasi sistem dengan teknik hooking semoga bermanfaat 

-Enjooy

1 komentar: