THREATHUNTING.IT / Hardening Guide

Caccia alle intrusioni: come scavare nei log di sistema su Linux e Windows

Imparare a leggere i log di sistema non solo per vedere se c'è un errore, ma per smontare riga per riga i comandi di analisi, capendo esattamente cosa fanno i filtri, i campi e gli operatori utilizzati.

LivelloIntermediate Caccia alle intrusioni: come scavare nei log di sistema su Linux e Windows

Caccia alle intrusioni: come scavare nei log di sistema su Linux e Windows

Obiettivo: Imparare a leggere i log di sistema è una operazione essenziale per qualsiasi amministratore di sistema. Non solo per vedere se c'è un errore, ma per capire cosa sta effettivamente succedendo al nostro server in real-time.

  • Livello: Intermediate

  • Tempo di lettura: 8 min read

  • Categoria: Threat Hunting / Tutorials

  • Tag: Linux, Windows, Log Analysis, Sysadmin, Security

Perché capire la sintassi dei comandi è fondamentale

Quando si cerca un'intrusione, i log di sistema sono una marea di testo disordinato. Saper usare i comandi della shell (Linux) o di PowerShell (Windows) combinando filtri come grep, awk o oggetti filtrati permette di isolare l'informazione critica in pochi secondi. Vediamo i comandi chiave analizzandone ogni singolo pezzo.

1. Linux: Analisi avanzata di auth.log e Systemd Journal

Su Linux, i tentativi di accesso passano quasi sempre dal demone SSH. Vediamo come estrarre la classifica degli indirizzi IP malevoli e capiamo la logica dei comandi.

A. Trovare gli IP che fanno Brute-Force (e capire come funziona il comando)

Se vuoi estrarre la lista degli IP che hanno fallito l'accesso SSH ordinandoli dal più insistente, usi questo comando:

Bash

sudo journalctl -u ssh | grep "Failed" | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr

Scomponiamo il comando pezzo per pezzo:

  1. sudo journalctl -u ssh: Interroga il registro di sistema (journal) filtrando esclusivamente (-u) i log relativi al servizio SSH.

  2. | grep "Failed": Il pipe (|) prende l'output del comando precedente e lo passa a grep, che restituisce solo le righe contenenti la parola "Failed" (tentativi falliti).

  3. | awk '{print $(NF-3)}': awk è un linguaggio di elaborazione testi. Qui viene usato per estrarre una colonna specifica.

    • NF (Number of Fields) indica l'ultimo campo (la fine della riga).

    • $(NF-3) seleziona il campo che si trova a 4 posizioni dalla fine della riga, che nei log di autenticazione SSH corrisponde esattamente all'indirizzo IP dell'attaccante.

  4. | sort: Mette in ordine alfabetico/numerico gli IP estratti (passaggio obbligatorio per far funzionare il comando successivo).

  5. | uniq -c: Raggruppa le righe duplicate (gli stessi IP) e conta quante volte compaiono (-c sta per count).

  6. | sort -nr: Riordina numericamente (-n) in senso inverso (-r sta per reverse, dal più alto al più basso). Il risultato sarà una classifica pulita con a sinistra il numero di tentativi e a destra l'IP del bot.

B. Scoprire i nomi utente presi di mira dai bot

Spesso gli attaccanti provano combinazioni di utenti standard. Puoi analizzarli con:

Bash

sudo journalctl -u ssh | grep "Invalid user" | awk '{print $NF}' | sort | uniq -c | sort -nr
  • Cosa cambia: grep "Invalid user" cattura i tentativi fatti con account inesistenti sul sistema. awk '{print $NF}' prende l'ultimo campo della riga (NF), che in questo caso specifico corrisponde proprio al nome utente digitato dal bot (es. admin, test, oracle).

C. Controllare i comandi amministrativi eseguiti con sudo

Per verificare se un utente ha eseguito comandi privilegiati:

Bash

sudo journalctl _COMM=sudo | grep "COMMAND"


Spiegazione: _COMM=sudo filtra direttamente il registro chiedendo solo i log generati dal comando sudo. grep "COMMAND" isola la stringa che mostra l'azione esatta eseguita dall'utente.



Log Analysis

2. Windows: Interrogare il Registro Eventi con PowerShell

Su Windows, il registro eventi è un database strutturato. I comandi di PowerShell utilizzano oggetti ed estrazioni di proprietà numeriche.

A. Estrarre IP e utenti degli accessi falliti (Event ID 4625)

Quando un login fallisce, Windows genera l'evento 4625. Molti dati utili sono "nascosti" dentro un array di proprietà. Questo comando estrae l'ora, il nome utente e l'IP sorgente:

PowerShell

Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625} -MaxEvents 20 | 
Select-Object TimeCreated, @{Name='UserName';Expression={ $_.Properties[5].Value }}, @{Name='IPAddress';Expression={ $_.Properties[19].Value }}

Scomponiamo il comando pezzo per pezzo:

  1. Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625}: Interroga il registro eventi di Security filtrando in modo mirato solo gli eventi con ID 4625 (accesso fallito). È molto più efficiente che caricare l'intero visualizzatore eventi grafico.

  2. -MaxEvents 20: Limita l'analisi agli ultimi 20 eventi registrati (utile per non intasare lo schermo).

  3. Select-Object TimeCreated, ...: Seleziona quali informazioni mostrare in tabella.

  4. @{Name='UserName';Expression={ $_.Properties[5].Value }}: Questa è una proprietà calcolata. Nei log di Windows, i dettagli dell'evento non sono semplici parole ma si trovano dentro una lista numerata di proprietà (Properties). La proprietà all'indice 5 corrisponde al nome utente che ha tentato l'accesso.

  5. @{Name='IPAddress';Expression={ $_.Properties[19].Value }}: Analogamente, la proprietà all'indice 19 dell'evento 4625 contiene l'indirizzo IP remoto da cui è partita la chiamata (se si tratta di un accesso di rete o RDP).

B. Monitorare l'avvio di processi sospetti (Event ID 4688)

Se vuoi tracciare ogni eseguibile lanciato sul sistema (utile per scoprire script PowerShell nascosti):

PowerShell

Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4688} -MaxEvents 15 | 
Select-Object TimeCreated, @{Name='CommandLine';Expression={ $_.Properties[8].Value }}
  • Spiegazione: L'evento 4688 traccia la creazione di un processo. Estrarre la proprietà Properties[8] ci mostra la riga di comando completa (CommandLine), rivelando se è stato avviato un comando sospetto o uno script offuscato.

3. Tabella di riferimento rapido per il Sysadmin

Obiettivo dell'analisiSistemaComando principaleCosa fa in sintesi
Top IP attaccantiLinuxjournalctl -u ssh | grep "Failed" | awk ...Estrae e conta gli IP da cui arrivano i tentativi falliti.
Utenti mirati dai botLinuxjournalctl -u ssh | grep "Invalid user" | awk ...Mostra quali username inesistenti vengono provati più spesso.
Login falliti con IPWindowsGet-WinEvent -FilterHashtable ... Id=4625Estrae l'evento 4625 mappando l'indice dell'IP e dell'utente.
Processi avviatiWindowsGet-WinEvent -FilterHashtable ... Id=4688Legge la riga di comando dei programmi eseguiti sul sistema.

Consigli finali per un'analisi consapevole

  1. Non copiare senza capire: Prima di lanciare comandi complessi con awk o espressioni regolari su server di produzione, provali in modalità di sola lettura o estrai poche righe con -MaxEvents o head.

  2. Documenta i riscontri: Se trovi un IP persistente nei log, annotalo: ti servirà per configurare regole di blocco sul firewall (es. ufw su Linux o Windows Firewall).

Fonti e riferimenti utili

VALUTAZIONE DEI LETTORI

Questo articolo ti è stato utile?

Punteggio 0 · 0 positivi, 0 negativi

Vedi gli articoli più apprezzati →

AUTORE

Da piu' di 30 anni sono appassionato di computers e tecnologia. il mio primo programma lo sviluppai in Basic nel 1989, non era un gran che :).. ma quella voglia di scrivere codici non mi ha piu' lasciato …

REVISIONE TECNICA

Redazione ThreatHunting.it

Revisionato il .

Come lavoriamo →

COMMUNITY

Commenti 0

Non ci sono ancora commenti. Puoi iniziare tu la conversazione.

Scrivi un commento +
Non sarà pubblicata.
I commenti vengono pubblicati dopo la moderazione.

PRIVACY / LE TUE SCELTE

Cookie e statistiche

Usiamo cookie necessari per accesso, sicurezza e memorizzazione delle preferenze. Solo con il tuo consenso raccogliamo statistiche sulle pagine visitate, paese, dispositivo, browser e provenienza, con un identificatore pseudonimo giornaliero. Il consenso abilita anche Google Analytics 4, descritto nell’informativa. Nessuna pubblicità o profilazione commerciale.

Puoi rifiutare le statistiche e continuare a usare il sito. Leggi l’informativa privacy e cookie e modifica la scelta in qualsiasi momento.