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:
sudo journalctl -u ssh | grep "Failed" | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr
Scomponiamo il comando pezzo per pezzo:
sudo journalctl -u ssh: Interroga il registro di sistema (journal) filtrando esclusivamente (-u) i log relativi al servizio SSH.| grep "Failed": Il pipe (|) prende l'output del comando precedente e lo passa agrep, che restituisce solo le righe contenenti la parola "Failed" (tentativi falliti).| 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.
| sort: Mette in ordine alfabetico/numerico gli IP estratti (passaggio obbligatorio per far funzionare il comando successivo).| uniq -c: Raggruppa le righe duplicate (gli stessi IP) e conta quante volte compaiono (-csta per count).| sort -nr: Riordina numericamente (-n) in senso inverso (-rsta 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:
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:
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.
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:
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:
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625}: Interroga il registro eventi di Security filtrando in modo mirato solo gli eventi con ID4625(accesso fallito). È molto più efficiente che caricare l'intero visualizzatore eventi grafico.-MaxEvents 20: Limita l'analisi agli ultimi 20 eventi registrati (utile per non intasare lo schermo).Select-Object TimeCreated, ...: Seleziona quali informazioni mostrare in tabella.@{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'indice5corrisponde al nome utente che ha tentato l'accesso.@{Name='IPAddress';Expression={ $_.Properties[19].Value }}: Analogamente, la proprietà all'indice19dell'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):
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4688} -MaxEvents 15 |
Select-Object TimeCreated, @{Name='CommandLine';Expression={ $_.Properties[8].Value }}
Spiegazione: L'evento
4688traccia 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'analisi | Sistema | Comando principale | Cosa fa in sintesi |
| Top IP attaccanti | Linux | journalctl -u ssh | grep "Failed" | awk ... | Estrae e conta gli IP da cui arrivano i tentativi falliti. |
| Utenti mirati dai bot | Linux | journalctl -u ssh | grep "Invalid user" | awk ... | Mostra quali username inesistenti vengono provati più spesso. |
| Login falliti con IP | Windows | Get-WinEvent -FilterHashtable ... Id=4625 | Estrae l'evento 4625 mappando l'indice dell'IP e dell'utente. |
| Processi avviati | Windows | Get-WinEvent -FilterHashtable ... Id=4688 | Legge la riga di comando dei programmi eseguiti sul sistema. |
Consigli finali per un'analisi consapevole
Non copiare senza capire: Prima di lanciare comandi complessi con
awko espressioni regolari su server di produzione, provali in modalità di sola lettura o estrai poche righe con-MaxEventsohead.Documenta i riscontri: Se trovi un IP persistente nei log, annotalo: ti servirà per configurare regole di blocco sul firewall (es.
ufwsu Linux o Windows Firewall).
Fonti e riferimenti utili
AUTORE
Redazione ThreatHunting.it
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 …
COMMUNITY

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