LogTrace
Automated forensic logging system for Windows Audit Logs. Features a decoupled pipeline using Logstash for routing, Redis for buffering, and a custom Python consumer for asynchronous ingestion into immudb. Provides immutable data persistence and real-time ELK analytics to ensure ISO/IEC 27001 (Control 8.15) compliance.
Install / Use
/learn @Capsoide/LogTraceREADME
LogTrace: Sistema di monitoraggio Audit Logs Windows
Introduzione
Questo sistema si occupa dell'acquisizione automatica dei log di audit relativi agli accessi amministrativi ai sistemi Windows. I log vengono archiviati in un database immutabile per garantirne l’integrità e resi consultabili tramite una dashboard interattiva, pensata per facilitare l’analisi e il monitoraggio delle attività.
Il processo viene realizzato attraverso una pipeline composta dai seguenti componenti:
Winlogbeat, installato su un'istanza Windows Server, è il servizio responsabile del recupero e dell'invio degli eventi log di audit raccolti da Event Viewer.Logstash, in esecuzione su un sistema Debian, riceve i log da Winlogbeat processandoli e duplicandoli in due differenti code Redis.Redis, in esecuzione su un sistema Debian, funge da sistema di gestione delle code, permettendo la separazione dei flussi di log:- La coda 0 (
redis-queue-elastic) invia i log a Elasticsearch per l'indicizzazione e la visualizzazione tramite interfaccia front-end. - La coda 1 (
redis-queue-immudb) è dedicata alla persistenza dei log in un database immutabile (immudb), progettato per garantire integrità, non ripudiabilità e conservazione a lungo termine. In questo contesto, è configurata una retention time pari a 24 ore.
- La coda 0 (
Questa architettura garantisce la duplicazione dei dati per scopi distinti come analisi e conservazione forense in modo tale da garantirne l'integrità e l'inalterabilità nel tempo. I singoli componenti svolgono i seguenti ruoli:
Winlogbeat: acquisizione dei log da Event Viewer.Logstash: duplicazione dei flussi di log e invio alle rispettive code Redis.Redis: gestione dei buffer dei dati.Immudb: archiviazione sicura e immutabile dei log.Elasticsearch: indicizzazione e conservazione dei log. Fornisce il backend per l’analisi interattiva dei dati.Kibana: GUI per la ricerca, visualizzazione e monitoraggio dei log indicizzati.
L'intero sistema è progettato per soddisfare i requisiti normativi previsti dalle direttive ACN, ISO/IEC 27001 e NIS2, che impongono il tracciamento, la conservazione e l’integrità dei log di sicurezza:
- ACN (Agenzia per la Cybersicurezza Nazionale) stabilisce standard per la sicurezza delle infrastrutture critiche italiane.
- ISO/IEC 27001 è uno standard internazionale per la gestione della sicurezza delle informazioni (ISMS), che richiede la registrazione e l’analisi degli eventi di accesso.
- NIS2 è la direttiva europea sulla sicurezza delle reti e dei sistemi informativi, che impone obblighi di logging, conservazione e risposta agli incidenti per gli operatori di servizi essenziali.
Schema infrastruttura
<div align="center" style="border:1px solid #ccc; padding:10px; display: inline-block;"> <img src="https://github.com/user-attachments/assets/35074374-ca95-4a12-97eb-0501cb1db141" alt="image" /> </div>Mappa Servizi e Interfacce di Rete LogTrace
| Modulo | IP | Porta/e | Protocollo | Note | |---------------------------------|------------------|-----------------------------------|---------------------|--------------------------------------------------------------------------| | Winlogbeat | 192.168.56.2 | 5044 | TCP | Invia log a Logstash tramite il modulo Beats | | Logstash | 192.168.56.10 | 5044 (input), 6379 (output) | TCP, Beats | Riceve i log da Winlogbeat e li duplica in due code Redis distinte | | Redis (coda per Elasticsearch) | 192.168.56.10 | 6379 | TCP, RESP | Coda letta da Logstash per inviare i log a Elasticsearch | | Redis (coda per immudb) | 192.168.56.10 | 6379 | TCP, RESP | Coda duplicata per immudb (chiave o DB separato) | | Elasticsearch | 192.168.56.10 | 9200 (REST API), 9300 (transport) | HTTPS/TCP/TLS | Espone l’API REST e comunica tra nodi tramite protocollo interno | | Kibana | 192.168.56.10 | 5601 | HTTPS/TCP/TLS | Interfaccia grafica per interrogare Elasticsearch | | immudb | 192.168.56.10 | 3322 (default), 9497 (gRPC API) | TCP/gRPC | Legge i log dalla coda Redis per la storicizzazione immutabile |
Comunicazione Windows Server → Debian
In questa sezione viene illustrata la configurazione di una rete Host-Only in VirtualBox, utilizzata per stabilire la comunicazione diretta tra le due macchine virtuali: Windows Server (mittente dei log) e Debian (ricevente e processore dei log).
Configurazione adattatore Host-Only (Virtualbox)
-
Aprire VirtualBox →
File→Host Network Manager -
Cliccare su Crea per aggiungere un nuovo adattatore
-
Configurazione:
- IP:
192.168.56.1 - Subnet Mask:
255.255.255.0 - DHCP: disabilitato
- IP:
-
Assegnare l’adattatore come
Adattatore 2alle VM:- Modalità:
Host-Only - Nome: ad esempio
vboxnet0
- Modalità:
Configurazione IP Statici (Windows Server)
-
Aprire
Centro connessioni di rete> ModificareImpostazioni scheda -
Scegliere l’interfaccia collegata a
vboxnet0(“Ethernet 2”) -
Cliccare su
Proprietà>TCP/IPv4e impostare:- IP:
192.168.56.2 - Subnet mask:
255.255.255.0 - Gateway: lascia vuoto
- IP:
-
Verificare con
ipconfig
C:\Users\vboxuser> ipconfig
Windows IP Configuration
Ethernet adapter Ethernet:
Connection-specific DNS Suffix . : xyz.lan
IPv6 Address. . . . . . . . . . . : fd00::be82:30db:2cc8:18ab
Link-local IPv6 Address . . . . . : fe80::b789:33f2:febd:1d7%14
IPv4 Address. . . . . . . . . . . : 10.0.2.15
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : fe80::2%14
10.0.2.2
Ethernet adapter Ethernet 2:
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::6894:81ba:3678:5341%13
IPv4 Address. . . . . . . . . . . : 192.168.56.2 <---
Subnet Mask . . . . . . . . . . . : 255.255.255.0 <---
Default Gateway . . . . . . . . . :
Configurazione interfacce di rete (Debian)
Configurare le interfacce di rete modificando direttamente il file interfaces posizionato in /etc/network/.
# Include configurazioni aggiuntive (se presenti)
source /etc/network/interfaces.d/*
# Interfaccia loopback
auto lo
iface lo inet loopback
# Interfaccia NAT (internet)
auto enp0s3
iface enp0s3 inet dhcp
# Interfaccia Host-Only (rete interna con VirtualBox)
auto enp0s8
iface enp0s8 inet static
address 192.168.56.10 <---
netmask 255.255.255.0 <---
Regola firewall: permettere il ping da Debian a Windows Server
E' necessario creare una regola per Windows Server poichè il firewall (di Windows) blocca di default i pacchetti ICMP Echo Request (ping) in ingresso.
Passaggi step-by-step
1. Aprire Windows Defender Firewall con sicurezza avanzata
Premere il tasto Windows, digitare "Windows Defender Firewall with Advanced Security", successivamente aprire l’app.
2. Selezionare “Regole in ingresso” (Inbound Rules)
Nel pannello a sinistra, cliccare su Inbound Rules.
3. Creare una nuova regola
Nel pannello a destra, cliccare su New Rule... (Nuova regola).
4. Scegliere il tipo di regola
Selezionare Custom (Personalizzata), poi cliccare su Avanti.
5. Selezionare il protocollo
Alla voce “Protocol and Ports” (Protocollo e porte), scegliere ICMPv4 dal menu a tendina “Protocol type”.
6. Specificare il tipo di pacchetto ICMP
Cliccare sul pulsante Customize accanto a ICMP Settings.
Selezionare Echo Request (il tipo usato dal ping).
Confermare con OK.
7. Indirizzi IP
Nella schermata “Scope” lasciare l’opzione “Any IP address” (qualsiasi indirizzo) sia per origine sia per destinazione (, o limita all’IP del Debian se si vuole maggiore sicurezza).
8. Azione della regola
Selezionare Allow the connection (Consenti la connessione).
9. Quando applicare la regola
Spuntare tutte le caselle: Domain, Private, Public.
10. Dare un nome alla regola
Scrivere un nome tipo "Consenti ping ICMP Echo Request" e confermare.
Verifica
vboxuser@vbox:~$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:e0:87:cc brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 <---
link/ether 08:00:27:9d:3a:10 brd ff:ff:ff:ff:ff:ff
#Applicazione delle modifiche
vboxuser@vbox:~$ sudo systemctl restart networking
#Se necessario utilizzare il seguente comando (o inalternativa riaviare la vm)
vboxuser@vbox:~$ sudo ifdown enp0s8 && sudo ifup enp0s8
#Verifica che l'indirizzo sia stato applicato correttamente
vboxuser@vbox:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue s
