IT | AV Tampering (PT1)

Serie tecnica su AV Tampering: come funzionano gli antivirus moderni e come i malware cercano di eluderli o disattivarli.


⚠️ Disclaimer: Sono uno studente appassionato di cybersecurity e non un esperto del settore. Questo articolo è frutto dei miei studi personali: è molto probabile che contenga imprecisioni o errori tecnici. Vi prego di essere clementi e di considerare questo testo come un percorso di apprendimento condiviso. Ogni correzione o feedback costruttivo è ben accetto.

Indice

  1. Introduzione

  2. Cos'è l’AV Tampering

  3. Come funziona un antivirus moderno

  4. Conclusione e prossimi articoli


Introduzione

Nel campo della sicurezza informatica, il termine AV Tampering indica l’insieme di tecniche utilizzate da malware e virus per manipolare, aggirare o disabilitare i software antivirus.

L’obiettivo dell’attaccante è duplice:

  • Evadere il rilevamento, nascondendo la propria presenza
  • Impedire la neutralizzazione, disabilitando o indebolendo i meccanismi di difesa

Gli attori malevoli sanno bene che gli antivirus moderni (AV) e gli Endpoint Detection and Response (EDR) non si basano più solo su firme statiche, ma integrano:

  • Analisi comportamentale
  • Monitoraggio in tempo reale
  • Componenti kernel
  • Motori di scansione in memoria

Per questo motivo, le tecniche di attacco si sono evolute di pari passo.


Cos'è l’AV Tampering

In contesti avanzati come:

  • APT (Advanced Persistent Threat)
  • Ransomware moderni
  • Attacchi post-exploitation

l’AV tampering rappresenta una fase fondamentale della kill chain.

Nel framework MITRE ATT&CK, queste tecniche rientrano nella tattica:

Impair Defenses – T1562

Ovvero l’insieme di azioni mirate a offuscare, disabilitare o aggirare i controlli di sicurezza presenti sul sistema bersaglio.

In questo articolo analizziamo prima come funzionano gli antivirus, così da capire perché e come i malware riescono a ingannarli.


Come funziona un antivirus moderno

Per comprendere le tecniche di evasione è essenziale conoscere i meccanismi di rilevamento usati dagli AV/EDR attuali.

Di seguito una panoramica dei principali componenti.

Per avere una vista d'insieme, ecco un diagramma che sintetizza i principali blocchi e il flusso di analisi degli AV moderni.

Schema funzionamento antivirus

Firme e hash

Gli antivirus mantengono enormi database di firme di malware noti.

Una firma può essere:

  • Un hash crittografico (es. SHA-256)
  • Una porzione caratteristica del file

Flusso semplificato:

  1. Il file viene analizzato
  2. Viene calcolato l’hash
  3. L’hash viene confrontato con il database
  4. Se coincide → file bloccato

Limiti principali:

  • Basta modificare un solo byte per cambiare completamente l’hash
  • Inefficace contro malware nuovi o custom

Ecco un diagramma semplice del processo hash/firma (corretto per evitare errori di parsing):

Schema funzionamento hash/firme

Scansione statica e string matching

Oltre agli hash, gli AV effettuano analisi statica del file:

  • Ricerca di stringhe sospette
  • Pattern binari noti
  • Regole YARA

Esempio classico:

"mimikatz"

La presenza di stringhe note può attivare un alert.

Contromisura dei malware:

  • Offuscamento delle stringhe
  • Cifratura dei dati
  • Ricostruzione a runtime

Analisi euristica e comportamentale

Poiché le firme non bastano, gli AV moderni usano behavioural detection.

Approccio:

  • Esecuzione del file in sandbox
  • Emulazione del comportamento
  • Analisi delle chiamate API

Sequenze tipicamente sospette:

OpenProcess
VirtualAllocEx
WriteProcessMemory
CreateRemoteThread

Questa catena è fortemente associata alla process injection.

Diagramma della catena di injection tipica:

Schema funzionamento catena di injection

La sandbox e l'emulazione permettono di osservare queste sequenze e assegnare punteggi di rischio.


Hooking e monitoraggio delle API

Molti EDR installano hook in user-mode su API critiche.

Esempio:

  • Hook su NtOpenProcess in ntdll.dll
  • Il controllo passa prima dal codice EDR
  • Solo dopo viene invocata la syscall reale

Ecco un esempio reale: osservando i moduli caricati in memoria da un debugger, possiamo vedere le DLL dell'antivirus (in questo caso Bitdefender) iniettate forzatamente nel processo target:

Moduli Bitdefender iniettati nel processo

Questo consente:

  • Monitoraggio in tempo reale
  • Blocco immediato di comportamenti sospetti

Ma introduce anche superfici di attacco, sfruttabili per:

  • Unhooking
  • Syscall dirette
  • Bypass user-mode

Flusso semplificato di hooking / bypass:

Schema funzionamento hooking/bypass

Driver kernel e scansione on-access

A livello kernel, gli antivirus utilizzano:

  • File System Minifilter Driver
  • Callback su processi, thread e registry

Ogni operazione di I/O può essere intercettata:

  • Creazione file
  • Apertura
  • Modifica

Questo è il cuore della on-access scanning.

Molti EDR combinano:

  • Driver kernel
  • Servizi userland
  • Monitoraggio in RAM

AMSI – Antimalware Scan Interface

AMSI è un’interfaccia standard di Windows.

Viene usata da:

  • PowerShell
  • Office (macro)
  • Script engine vari

Funzionamento:

AmsiScanString()
AmsiScanBuffer()

Se l’AV restituisce:

AMSI_RESULT_DETECTED

l’esecuzione viene bloccata.

Di seguito uno sequence diagram che illustra il flusso tra applicazione, AMSI e provider (antivirus):

Schema funzionamento AMSI

Contromisure comunemente viste nei malware per bypassare AMSI includono patching di funzioni AMSI in memoria, hooking di driver o tecniche di offuscamento/runtime decryption per aggirare il controllo.


Ispezione della Import Address Table (IAT)

Durante l’analisi statica, gli AV controllano anche:

  • Le API importate dall’eseguibile

Import sospetti:

OpenProcess
VirtualAllocEx
WriteProcessMemory
CreateRemoteThread

La loro presenza nella IAT aumenta drasticamente il punteggio di rischio.

Tecnica di evasione comune:

  • Risoluzione dinamica delle API con:
LoadLibrary()
GetProcAddress()

In questo modo il PE Header appare più "pulito".

Diagramma che mostra la differenza tra import statico e risoluzione dinamica:

Schema funzionamento IAT

Per passare dalla teoria alla pratica, ho creato un piccolo repository di supporto dove potete vedere la differenza tra un import statico e uno dinamico.

Nel repo troverete due esempi in C:

  • 01_Basic_Payload: Un programma standard che chiama MessageBox (visibile nella IAT).

  • 02_IAT_Hiding: Lo stesso programma, ma riscritto usando LoadLibrary e GetProcAddress per nascondere l'importazione.


In questa prima parte abbiamo visto:

  • Come funzionano gli antivirus moderni
  • Quali meccanismi usano per rilevare malware
  • Dove nascono i punti deboli sfruttati dagli attaccanti

Nel prossimo articolo entreremo nel vivo dell’AV Tampering analizzando:

  • Offuscamento
  • Process injection
  • API unhooking
  • Bypass AMSI / ETW
  • Abuso di driver vulnerabili

Parte 2 in arrivo