Process Injection
Process Injection adalah teknik yang digunakan malware untuk meng-inject code ke dalam process lain. teknik ini tidak meninggalkan jejak di disk dan memungkinkan terciptanya fileless malware yang bisa mempertahankan persistensi dalam sistem target.
warning: Hacking without permission is ilegal
First step: Mendapatkan Daftar Process yang Berjalan
Sebelum meng-inject code, malware tentu perlu mengetahui proses mana yang ingin disusupi. Ini dilakukan dengan cara:
- Snapshot Proses:
- Malware membuat snapshot semua proses yang sedang berjalan menggunakan API CreateToolhelp32Snapshot.
- Snapshot ini berisi nama proses, Process ID (PID), dan informasi penting lainnya.
- Gunakan flag TH32CS_SNAPPROCESS agar snapshot hanya mencakup proses (bukan thread atau library).
- Mendapatkan Proses Pertama:
- Gunakan API Process32First untuk mengambil proses pertama dari snapshot.
- Melakukan Iterasi Proses:
- Gunakan Process32Next untuk melanjutkan iterasi, mendapatkan proses satu per satu lengkap dengan nama dan PID-nya.
#include <windows.h>
#include <tlhelp32.h>
#include <tchar.h>
#include <iostream>
int main() {
HANDLE hSnapshot;
PROCESSENTRY32 pe32;
// Membuat snapshot dari semua proses yang sedang berjalan
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE) {
std::cerr << "Gagal membuat snapshot proses." << std::endl;
return 1;
}
// Inisialisasi struktur PROCESSENTRY32
pe32.dwSize = sizeof(PROCESSENTRY32);
// Mengambil proses pertama dari snapshot
if (!Process32First(hSnapshot, &pe32)) {
std::cerr << "Gagal mengambil proses pertama." << std::endl;
CloseHandle(hSnapshot);
return 1;
}
// Iterasi semua proses
do {
// Menampilkan nama proses dan Process ID (PID)
std::wcout << L"Process: " << pe32.szExeFile << L" | PID: " << pe32.th32ProcessID << std::endl;
} while (Process32Next(hSnapshot, &pe32));
CloseHandle(hSnapshot);
return 0;
}
Code Injection
Teknik ini mirip dengan DLL Injection, tapi perbedaanya adalah jenis code yang dieksekusi. Alih-alih meng-inject DLL, malware
akan menyuntikkan code assembly dalam bentuk array of bytes (shellcode). Teknik ini dilakukan menggunakan function CreateRemoteThread.
Tetapi code ini harus position-independent dan PE-independent yang aartinya:
- Bisa load sendiri import table nya
- Bisa mengakses datanya sendiri
- Bisa mengeksekusi tugas-tugas jahat langsung di dalam proses target
Langkah-langkahnya:
- Cari proses target dengan
CreateToolhelp32Snapshot,Process32First, danProcess32Next - Dapatkan handle proses dengan
OpenProcess - Alokasikan memori di proses target menggunakan
VirtualAllocEx(atauCreateSectionEx) sebesar ukuran kode assembly. - Salin kode ke proses target menggunakan
WriteProcessMemory - Eksekusi kode dengan
CreateRemoteThread
Kadang, malware juga memberikan nama atau PID proses malware itu sendiri ke dalam kode yang disuntikkan agar bisa:
- Membunuh proses malware utama, dan
- Menghapus file dan jejak-jejaknya untuk menyembunyikan eksistensinya sepenuhnya.
Reflective DLL Injection
Teknik ini adalah pengembangan dari code injection. Teknik ini menggunakan shellcode yang lebih kompleks untuk memuat DLL jahat langsung dari memory tanpa menyimpannya di disk. Artinya tidak ada DLL yang bisa dideteksi dari disk dan memungkinkan tidak tercatat di PEB (process environtment block). Akibatnya tools forensic yang hanya memeriksa PEB tidak bisa mendeteksi DLL ini.
Langkahnya:
- Payload dalam bentuk file PE (Portable Executable) + custom PE loader (bisa berupa shellcode) disuntikkan ke proses target.
- PE loader akan bertugas meload DLL secara manual:
- Alokasikan memori sebesar ImageBase.
- Lakukan proses loading PE manual:
- Fix import table.
- Lakukan relokasi berdasarkan relocation table
- Lakukan proses loading PE manual:
- Alokasikan memori sebesar ImageBase.