Leggere in inglese

Condividi tramite


Sysmon v15.15

Di Mark Russinovich e Thomas Garnier

Data di pubblicazione: 23 luglio 2024

ScaricaScaricare Sysmon (4,6 MB)

Scaricare Sysmon per Linux (GitHub)

Introduzione

System Monitor (Sysmon) è un servizio di sistema Windows e un driver di dispositivo che, una volta installato in un sistema, rimane residente durante i riavvii del sistema per monitorare e registrare l'attività di sistema nel registro eventi di Windows. Questo servizio fornisce informazioni dettagliate sulle attività di creazione dei processi, le connessioni di rete e le modifiche all'ora di creazione dei file. Raccogliendo gli eventi generati usando la Raccolta eventi di Windows o gli agenti SIEM e successivamente analizzandoli, è possibile identificare attività dannose o anomale e comprendere il funzionamento di intrusi e malware sulla rete. Il servizio viene eseguito come processo protetto, consentendo così un'ampia gamma di interazioni in modalità utente.

Si noti che Sysmon non fornisce l'analisi degli eventi generati, né tenta di nascondersi dagli utenti malintenzionati.

Panoramica delle funzionalità di Sysmon

Sysmon include le funzionalità seguenti:

  • Registra la creazione di un processo con la riga di comando completa sia per i processi correnti che per i processi padre.
  • Registra l'hash dei file di immagine del processo usando SHA1 (impostazione predefinita), MD5, SHA256 o IMPHASH.
  • È possibile usare più hash contemporaneamente.
  • Include un GUID di processo negli eventi di creazione dei processi per consentire la correlazione degli eventi anche quando Windows riutilizza gli ID processo.
  • Include un GUID di sessione in ogni evento per consentire la correlazione di eventi nella stessa sessione di accesso.
  • Registra il caricamento di driver o DLL con le firme e gli hash.
  • Registra le aperture per l'accesso in lettura non elaborato di dischi e volumi.
  • Facoltativamente, registra le connessioni di rete, inclusi il processo di origine, gli indirizzi IP, i numeri di porta, i nomi host e i nomi delle porte di ogni connessione.
  • Rileva le modifiche dell'ora di creazione dei file per capire quando un file è stato realmente creato. La modifica dei timestamp di creazione dei file è una tecnica comunemente usata dal malware per coprire le proprie tracce.
  • Ricarica automaticamente la configurazione se viene modificata nel Registro di sistema.
  • Filtro delle regole per includere o escludere determinati eventi in modo dinamico.
  • Genera eventi fin dalle prime fasi del processo di avvio per acquisire attività effettuate anche da malware sofisticati in modalità kernel.

Screenshot

EventViewer

Utilizzo

Utilizzo comune con semplici opzioni della riga di comando per installare e disinstallare Sysmon, nonché per controllarne e modificarne la configurazione:

Installazione: sysmon64 -i [<configfile>]
Aggiornamento della configurazione: sysmon64 -c [<configfile>]
Installazione del manifesto degli eventi: sysmon64 -m
Stampa dello schema: sysmon64 -s
Disinstallazione: sysmon64 -u [force]

Parametro Descrizione
-i Installa il servizio e il driver. Facoltativamente, accetta un file di configurazione.
-c Aggiorna la configurazione di un driver Sysmon installato o esegue il dump della configurazione corrente se non viene fornito alcun altro argomento. Facoltativamente, accetta un file di configurazione.
-m Installa il manifesto degli eventi (eseguito in modo implicito anche nell'installazione del servizio).
-s Stampa la definizione dello schema di configurazione.
-u Disinstalla il servizio e il driver. L'uso di -u force fa sì che la disinstallazione proceda anche quando alcuni componenti non sono installati.

Il servizio registra immediatamente gli eventi e il driver viene installato come driver di esecuzione avvio per acquisire l'attività fin dall'inizio dell'avvio che il servizio scriverà nel registro eventi all'avvio.

In Vista e versioni successive gli eventi vengono archiviati in Applications and Services Logs/Microsoft/Windows/Sysmon/Operational. Nei sistemi meno recenti gli eventi vengono scritti nel registro eventi System.

Se sono necessarie altre informazioni sui file di configurazione, usare il comando -? config.

Specificare -accepteula per accettare automaticamente il contratto di licenza durante l'installazione. In caso contrario, verrà richiesto in modo interattivo di accettarlo.

Né l'installazione né la disinstallazione richiedono un riavvio.

Esempi

Eseguire l'installazione con le impostazioni predefinite (elaborazione delle immagini sottoposte ad hashing con SHA1 e nessun monitoraggio della rete)

sysmon -accepteula -i

Installare Sysmon con un file di configurazione (come descritto di seguito)

sysmon -accepteula -i c:\windows\config.xml

Disinstalla

sysmon -u

Eseguire il dump della configurazione corrente

sysmon -c

Riconfigurare un Sysmon attivo con un file di configurazione (come descritto di seguito)

sysmon -c c:\windows\config.xml

Modificare la configurazione ripristinando le impostazioni predefinite

sysmon -c --

Mostrare lo schema di configurazione

sysmon -s

Eventi

In Vista e versioni successive, gli eventi vengono archiviati in Applications and Services Logs/Microsoft/Windows/Sysmon/Operational mentre nei sistemi meno recenti gli eventi vengono scritti nel registro eventi System. I timestamp degli eventi sono nell'ora standard UTC.

Di seguito sono riportati esempi di ogni tipo di evento generato da Sysmon.

ID evento 1: Creazione del processo

L'evento di creazione del processo fornisce informazioni estese su un processo appena creato. La riga di comando completa fornisce il contesto dell'esecuzione del processo. Il campo ProcessGUID è un valore univoco per questo processo in un dominio per semplificare la correlazione degli eventi. L'hash è un hash completo del file con gli algoritmi nel campo HashType.

ID evento 2: Un processo ha modificato l'ora di creazione di un file

L'evento di modifica dell'ora di creazione di un file viene registrato quando l'ora di creazione di un file viene modificata in modo esplicito da un processo. Questo evento consente di tenere traccia dell'ora di creazione reale di un file. Gli utenti malintenzionati possono modificare l'ora di creazione del file di una backdoor per far credere che sia stata installata con il sistema operativo. Si noti che molti processi modificano legittimamente l'ora di creazione di un file; ciò non indica necessariamente un'attività dannosa.

ID evento 3: Connessione di rete

L'evento di connessione di rete registra le connessioni TCP/UDP nel computer. Questo protocollo è disabilitato per impostazione predefinita. Ogni connessione è collegata a un processo tramite i campi ProcessId e ProcessGuid. L'evento contiene anche gli indirizzi IP dei nomi host di origine e di destinazione, i numeri di porta e lo stato IPv6.

ID evento 4: Stato del servizio Sysmon modificato

L'evento di modifica dello stato del servizio segnala lo stato del servizio Sysmon (avviato o arrestato).

ID evento 5: Processo terminato

L'evento di terminazione del processo segnala quando un processo termina. Fornisce i valori UtcTime, ProcessGuid e ProcessId del processo.

ID evento 6: Driver caricato

Gli eventi di caricamento dal driver forniscono informazioni su un driver caricato nel sistema. Vengono forniti gli hash configurati e le informazioni sulla firma. La firma viene creata in modo asincrono per motivi di prestazioni e indica se il file è stato rimosso dopo il caricamento.

ID evento 7: Immagine caricata

L'evento di caricamento dell'immagine viene registrato quando un modulo viene caricato in un processo specifico. Questo evento è disabilitato per impostazione predefinita e deve essere configurato con l'opzione "–l". Indica il processo in cui viene caricato il modulo, gli hash e le informazioni sulla firma. La firma viene creata in modo asincrono per motivi di prestazioni e indica se il file è stato rimosso dopo il caricamento. Questo evento deve essere configurato attentamente, perché il monitoraggio di tutti gli eventi di caricamento delle immagini genererà una quantità significativa di registrazioni.

ID evento 8: CreateRemoteThread

L'evento CreateRemoteThread rileva quando un processo crea un thread in un altro processo. Questa tecnica viene usata dal malware per inserire codice e nascondersi in altri processi. L'evento indica il processo di origine e di destinazione. Fornisce informazioni sul codice che verrà eseguito nel nuovo thread: StartAddress, StartModule e StartFunction. Si noti che i campi StartModule e StartFunction vengono dedotti, potrebbero essere vuoti se l'indirizzo iniziale è esterno ai moduli caricati o alle funzioni esportate note.

ID evento 9: RawAccessRead

L'evento RawAccessRead rileva quando un processo esegue operazioni di lettura dall'unità usando la denotazione \\.\. Questa tecnica viene spesso usata dal malware per l'esfiltrazione di dati da file bloccati per la lettura, nonché per evitare gli strumenti di controllo dell'accesso ai file. L'evento indica il processo di origine e il dispositivo di destinazione.

ID evento 10: ProcessAccess

L'evento di accesso al processo segnala quando un processo apre un altro processo, un'operazione spesso seguita da query di informazioni o da lettura e scrittura dello spazio degli indirizzi del processo di destinazione. In questo modo è possibile rilevare gli strumenti di hacking che leggono il contenuto della memoria dei processi come Autorità di protezione locale (Lsas.exe) per rubare le credenziali da usare negli attacchi Pass-the-Hash. L'abilitazione di questa funzione può generare una quantità significativa di registrazioni se sono attive utilità diagnostiche che aprono ripetutamente i processi per eseguire query sul relativo stato, quindi in genere deve essere eseguita solo con filtri che rimuovono gli accessi previsti.

ID evento 11: FileCreate

Le operazioni di creazione di file vengono registrate quando un file viene creato o sovrascritto. Questo evento è utile per il monitoraggio delle posizioni di avvio automatico, come la cartella di esecuzione automatica, nonché le directory temporanee e di download, che sono posizioni comuni in cui il malware viene rilasciato durante l'infezione iniziale.

ID evento 12: RegistryEvent (creazione ed eliminazione di oggetti)

Le operazioni di creazione ed eliminazione di chiavi e valori del Registro di sistema vengono associate a questo tipo di evento, che può essere utile per monitorare le modifiche alle posizioni di avvio automatico del Registro di sistema o le modifiche specifiche apportate dal malware al Registro di sistema.

Sysmon usa versioni abbreviate dei nomi delle chiavi radice del Registro di sistema, con i mapping seguenti:

Nome chiave Abbreviazione
HKEY_LOCAL_MACHINE HKLM
HKEY_USERS HKU
HKEY_LOCAL_MACHINE\System\ControlSet00x HKLM\System\CurrentControlSet
HKEY_LOCAL_MACHINE\Classes HKCR

ID evento 13: RegistryEvent (set di valori)

Questo tipo di evento del Registro di sistema identifica le modifiche ai valori del Registro di sistema. L'evento registra il valore scritto per i valori del Registro di sistema di tipo DWORD e QWORD.

ID evento 14: RegistryEvent (ridenominazione di chiavi e valori)

Le operazioni di ridenominazione di chiavi e valori del Registro di sistema vengono associate a questo tipo di evento, registrando il nuovo nome della chiave o del valore rinominato.

ID evento 15: FileCreateStreamHash

Questo evento registra quando viene creato un flusso di file denominato e genera eventi che registrano l'hash del contenuto del file a cui viene assegnato il flusso (flusso senza nome), nonché il contenuto del flusso denominato. Esistono varianti di malware che rilasciano i propri file eseguibili o le proprie impostazioni di configurazione tramite i download del browser e questo evento ha lo scopo di acquisire tali elementi in base al fatto che il browser collega un flusso Zone.Identifier di "contrassegno del Web".

ID evento 16: ServiceConfigurationChange

Questo evento registra le modifiche nella configurazione di Sysmon, ad esempio quando vengono aggiornate le regole di filtro.

ID evento 17: PipeEvent (pipe creata)

Questo evento viene generato quando viene creata una named pipe. Il malware usa spesso le named pipe per la comunicazione tra processi.

ID evento 18: PipeEvent (pipe connessa)

Questo evento registra quando viene stabilita una connessione named pipe tra un client e un server.

ID evento 19: WmiEvent (attività WmiEventFilter rilevata)

Quando viene registrato un filtro eventi WMI, che è un metodo usato dal malware per l'esecuzione, questo evento registra lo spazio dei nomi WMI, il nome del filtro e l'espressione del filtro.

ID evento 20: WmiEvent (attività WmiEventConsumer rilevata)

Questo evento registra la registrazione dei consumer WMI, registrando il nome del consumer, il log e la destinazione.

ID evento 21: WmiEvent (attività WmiEventConsumerToFilter rilevata)

Quando un consumer viene associato a un filtro, questo evento registra il nome del consumer e il percorso del filtro.

ID evento 22: DNSEvent (query DNS)

Questo evento viene generato quando un processo esegue una query DNS, indipendentemente dal fatto che il risultato abbia esito positivo o negativo, memorizzato nella cache o meno. I dati di telemetria per questo evento sono stati aggiunti per Windows 8.1, quindi non sono disponibili in Windows 7 e versioni precedenti.

ID evento 23: FileDelete (eliminazione file archiviata)

Un file è stato eliminato. Oltre a registrare l'evento, il file eliminato viene anche salvato in ArchiveDirectory (che per impostazione predefinita è C:\Sysmon). In condizioni operative normali, questa directory potrebbe aumentare fino a raggiungere dimensioni irragionevoli. Vedere l'ID evento 26: FileDeleteDetected per un comportamento simile, ma senza salvare i file eliminati.

ID evento 24: ClipboardChange (nuovo contenuto negli Appunti)

Questo evento viene generato quando il contenuto degli Appunti di sistema cambia.

ID evento 25: ProcessTampering (modifica dell'immagine del processo)

Questo evento viene generato quando vengono rilevate tecniche per nascondere i processi come "hollow" o "herpaderp".

ID evento 26: FileDeleteDetected (eliminazione file registrata)

Un file è stato eliminato.

ID evento 27: FileBlockExecutable

Questo evento viene generato quando Sysmon rileva e blocca la creazione di file eseguibili (formato PE).

ID evento 28: FileBlockShredding

Questo evento viene generato quando Sysmon rileva e blocca la suddivisione di file da parte di strumenti come SDelete.

ID evento 29: FileExecutableDetected

Questo evento viene generato quando Sysmon rileva la creazione di un nuovo file eseguibile (formato PE).

ID evento 255: Errore

Questo evento viene generato quando si verifica un errore in Sysmon. Un errore può verificarsi se il sistema è sottoposto a un carico elevato e alcune attività non possono essere eseguite oppure esiste un bug esiste nel servizio Sysmon o ancora se determinate condizioni di sicurezza e integrità non vengono soddisfatte. È possibile segnalare eventuali bug nel forum di Sysinternals o su Twitter (@markrussinovich).

File di configurazione

I file di configurazione possono essere specificati dopo le opzioni di configurazione -i (installazione) o -c (installazione). Semplificano la distribuzione di una configurazione predefinita e il filtro degli eventi acquisiti.

Un file XML di configurazione semplice è simile al seguente:

<Sysmon schemaversion="4.82">
  <!-- Capture all hashes -->
  <HashAlgorithms>*</HashAlgorithms>
  <EventFiltering>
    <!-- Log all drivers except if the signature -->
    <!-- contains Microsoft or Windows -->
    <DriverLoad onmatch="exclude">
      <Signature condition="contains">microsoft</Signature>
      <Signature condition="contains">windows</Signature>
    </DriverLoad>
    <!-- Do not log process termination -->
    <ProcessTerminate onmatch="include" />
    <!-- Log network connection if the destination port equal 443 -->
    <!-- or 80, and process isn't InternetExplorer -->
    <NetworkConnect onmatch="include">
      <DestinationPort>443</DestinationPort>
      <DestinationPort>80</DestinationPort>
    </NetworkConnect>
    <NetworkConnect onmatch="exclude">
      <Image condition="end with">iexplore.exe</Image>
    </NetworkConnect>
  </EventFiltering>
</Sysmon>

Il file di configurazione contiene un attributo schemaversion nel tag Sysmon. Questa versione è indipendente dalla versione binaria di Sysmon e consente l'analisi dei file di configurazione meno recenti. È possibile ottenere la versione corrente dello schema usando la riga di comando "-? config". Le voci di configurazione si trovano direttamente sotto il tag Sysmon e i filtri sono sotto il tag EventFiltering.

Voci di configurazione

Le voci di configurazione sono simili alle opzioni della riga di comando e includono quanto segue.

Le voci di configurazione includono quanto segue:

Movimento Valore Descrizione
ArchiveDirectory Stringa Nome delle directory nelle radici dei volumi in cui vengono spostati i file conservati in caso di eliminazione. La directory è protetta con un elenco di controllo di accesso (ACL) di sistema (è possibile usare PsExec da Sysinternals per accedere alla directory usando psexec -sid cmd). Impostazione predefinita: Sysmon
CheckRevocation Boolean Controlla i controlli di revoca della firma. Impostazione predefinita: True
CopyOnDeletePE Boolean Conserva i file di immagine eseguibili eliminati. Impostazione predefinita: False
CopyOnDeleteSIDs Stringhe Elenco separato da virgole di SID di account per i quali saranno conservate le eliminazioni di file.
CopyOnDeleteExtensions Stringhe Estensioni per i file conservati in caso di eliminazione.
CopyOnDeleteProcesses Stringhe Nomi dei processi per i quali verranno conservate le eliminazioni di file.
DnsLookup Boolean Controlla la ricerca DNS inversa. Impostazione predefinita: True
DriverName Stringa Usa il nome specificato per le immagini dei driver e dei servizi.
HashAlgorithms Stringhe Algoritmi hash da applicare per l'hashing. Gli algoritmi supportati includono MD5, SHA1, SHA256, IMPHASH e * (tutti). Impostazione predefinita: None

Le opzioni della riga di comando hanno la voce di configurazione descritta nell'output di utilizzo di Sysmon. I parametri sono facoltativi in base al tag. Se un'opzione della riga di comando abilita anche un evento, questo deve essere configurato tramite il relativo tag di filtro. È possibile specificare l'opzione -s per fare in modo che Sysmon stampi lo schema di configurazione completo, inclusi i tag evento, nonché i nomi dei campi e i tipi per ogni evento. Ad esempio, di seguito è riportato lo schema per il tipo di evento RawAccessRead:

<event name="SYSMON_RAWACCESS_READ" value="9" level="Informational "template="RawAccessRead detected" rulename="RawAccessRead" version="2">  
  <data name="UtcTime" inType="win:UnicodeString" outType="xs:string"/>  
  <data name="ProcessGuid" inType="win:GUID"/>  
  <data name="ProcessId" inType="win:UInt32" outType="win:PID"/>  
  <data name="Image" inType="win:UnicodeString" outType="xs:string"/>  
  <data name="Device" inType="win:UnicodeString" outType="xs:string"/>  
</event>  

Voci di filtro degli eventi

Il filtro degli eventi consente di filtrare gli eventi generati. In molti casi gli eventi possono essere non necessari e non è possibile raccogliere tutto. Ad esempio, si potrebbe essere interessati alle connessioni di rete solo per un determinato processo, ma non per tutti. È possibile filtrare l'output nell'host riducendo i dati da raccogliere.

Ogni evento ha un proprio tag di filtro sotto il nodo EventFiltering in un file di configurazione:

ID Tag Event
1 ProcessCreate Creazione del processo
2 FileCreateTime Ora di creazione del file
3 NetworkConnect Connessione di rete rilevata
4 n/d Modifica dello stato del servizio Sysmon (non può essere filtrata)
5 ProcessTerminate Processo terminato
6 DriverLoad Driver caricato
7 ImageLoad Immagine caricata
8 CreateRemoteThread CreateRemoteThread rilevato
9 RawAccessRead RawAccessRead rilevato
10 ProcessAccess Accesso al processo
11 FileCreate File creato
12 RegistryEvent Oggetto del Registro di sistema aggiunto o eliminato
13 RegistryEvent Valore del Registro di sistema impostato
14 RegistryEvent Oggetto del Registro di sistema rinominato
15 FileCreateStreamHash Flusso di file creato
16 n/d Modifica della configurazione di Sysmon (non può essere filtrata)
17 PipeEvent Named pipe creata
18 PipeEvent Named pipe connessa
19 WmiEvent Filtro WMI
20 WmiEvent Consumer WMI
21 WmiEvent Filtro consumer WMI
22 DNSQuery Query DNS
23 FileDelete Eliminazione file archiviata
24 ClipboardChange Nuovo contenuto negli Appunti
25 ProcessTampering Modifica dell'immagine del processo
26 FileDeleteDetected Eliminazione file registrata
27 FileBlockExecutable Blocco di file eseguibile
28 FileBlockShredding Suddivisione di un blocco di file
29 FileExecutableDetected File eseguibile rilevato

È anche possibile trovare questi tag nel Visualizzatore eventi sul nome dell'attività.

Il filtro onmatch viene applicato se gli eventi corrispondono. Può essere modificato con l'attributo onmatch per il tag di filtro. Se il valore è "include", significa che vengono inclusi solo gli eventi corrispondenti. Se è impostato su "exclude", l'evento verrà incluso tranne nel caso di una corrispondenza di una regola. È possibile specificare sia un set di filtri di inclusione che un set di filtri di esclusione per ogni ID evento, in cui le corrispondenze di esclusione hanno la precedenza.

Ogni filtro può includere zero o più regole. Ogni tag sotto il tag di filtro è un nome di campo dell'evento. Le regole che specificano una condizione per lo stesso nome di campo si comportano come condizioni OR e quelle che specificano un nome di campo diverso si comportano come condizioni AND. Le regole dei campi possono anche usare condizioni per trovare la corrispondenza con un valore. Le condizioni sono le seguenti (non fanno distinzione tra maiuscole e minuscole):

Condizione Descrizione
is Valore predefinito, i valori sono uguali
is any Il campo è uno dei valori delimitati da ;
is not I valori sono diversi
contains Il campo contiene questo valore
contains any Il campo contiene uno dei valori delimitati da ;
contains all Il campo contiene tutti i valori delimitati da ;
excludes Il campo non contiene questo valore
excludes any Il campo non contiene uno o più valori delimitati da ;
excludes all Il campo non contiene nessuno dei valori delimitati da ;
begin with Il campo inizia con questo valore
end with Il campo termina con questo valore
not begin with Il campo non inizia con questo valore
not end with Il campo non termina con questo valore
less than Il confronto lessicografico è minore di zero
more than Il confronto lessicografico è maggiore di zero
Immagine Trova la corrispondenza con il percorso di un'immagine (percorso completo o solo nome dell'immagine). Ad esempio: lsass.exe corrisponderà a c:\windows\system32\lsass.exe

È possibile usare una condizione diversa specificandola come attributo. Ciò esclude l'attività di rete dai processi con iexplore.exe nel percorso:

<NetworkConnect onmatch="exclude">
  <Image condition="contains">iexplore.exe</Image>
</NetworkConnect>

Per fare in modo che Sysmon segnali quale corrispondenza di regole ha portato alla registrazione di un evento, aggiungere i nomi alle regole:

<NetworkConnect onmatch="exclude">
  <Image name="network iexplore" condition="contains">iexplore.exe</Image>
</NetworkConnect>

È possibile usare sia regole di inclusione che di esclusione per lo stesso tag, in cui le regole di esclusione sostituiscono le regole di inclusione. All'interno di una regola, le condizioni di filtro hanno un comportamento OR.

Nella configurazione di esempio illustrata in precedenza, il filtro di rete usa sia una regola di inclusione che una di esclusione per acquisire l'attività sulla porta 80 e 443 da parte di tutti i processi, ad eccezione di quelli che hanno iexplore.exe nel nome.

È anche possibile eseguire l'override del modo in cui le regole vengono combinate usando un gruppo di regole che consente di impostare esplicitamente il tipo di combinazione di regole per uno o più eventi su AND o OR.

Nell'esempio seguente viene illustrata questa sintassi. Nel primo gruppo di regole verrà generato un evento di creazione del processo quando timeout.exe viene eseguito solo con un argomento della riga di comando di 100, ma verrà generato un evento di terminazione del processo per la terminazione di ping.exe e timeout.exe.

  <EventFiltering>
    <RuleGroup name="group 1" groupRelation="and">
      <ProcessCreate onmatch="include">
        <Image condition="contains">timeout.exe</Image>
        <CommandLine condition="contains">100</CommandLine>
      </ProcessCreate>
    </RuleGroup>
    <RuleGroup groupRelation="or">
      <ProcessTerminate onmatch="include">
        <Image condition="contains">timeout.exe</Image>
        <Image condition="contains">ping.exe</Image>
      </ProcessTerminate>        
    </RuleGroup>
    <ImageLoad onmatch="include"/>
  </EventFiltering>

ScaricaScaricare Sysmon (4,6 MB)

In esecuzione su:

  • Client: Windows 10 e versioni successive.
  • Server: Windows Server 2016 e versioni successive.