SkillAgentSearch skills...

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/LogTrace

README

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.

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)

  1. Aprire VirtualBoxFileHost Network Manager

  2. Cliccare su Crea per aggiungere un nuovo adattatore

  3. Configurazione:

    • IP: 192.168.56.1
    • Subnet Mask: 255.255.255.0
    • DHCP: disabilitato
  4. Assegnare l’adattatore come Adattatore 2 alle VM:

    • Modalità: Host-Only
    • Nome: ad esempio vboxnet0

Configurazione IP Statici (Windows Server)

  1. Aprire Centro connessioni di rete > Modificare Impostazioni scheda

  2. Scegliere l’interfaccia collegata a vboxnet0 (“Ethernet 2”)

  3. Cliccare su Proprietà > TCP/IPv4 e impostare:

    • IP: 192.168.56.2
    • Subnet mask: 255.255.255.0
    • Gateway: lascia vuoto
  4. 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
View on GitHub
GitHub Stars18
CategoryData
Updated9d ago
Forks0

Languages

JavaScript

Security Score

80/100

Audited on Mar 25, 2026

No findings