 
La sicurezza di un’applicazione non dipende solo da password robuste e crittografia avanzata. Se un attacco avviene e non viene rilevato, può causare danni ingenti prima che qualcuno se ne accorga. Il logging e il monitoring sono essenziali per identificare e rispondere agli attacchi informatici.
1. Perché il logging e il monitoring sono fondamentali?
Senza un buon sistema di logging e monitoring, gli attacchi possono passare inosservati per settimane o mesi; alcuni casi in cui è imprescindibile loggare correttamente:
- Tentativi di accesso falliti ripetuti: brute force attack su account utente
- Anomalie nei privilegi: un utente ottiene accesso amministrativo in modo sospetto
- Accesso da IP insoliti: un utente con sede in Italia che si collega dalla Cina senza VPN
- Attacchi SQL Injection e XSS: attraverso pattern ricorrenti nei log di input utente
Un caso reale è quello di Equifax (2017), in cui un attacco non è stato rilevato per mesi a causa della mancanza di un sistema di logging e monitoring efficace.
2. Errori comuni nel logging e monitoring
2.1 Non loggare eventi critici
Un errore comune è non registrare eventi importanti, come login falliti ripetuti o modifiche di permessi.
Esempio di codice vulnerabile:
public void login(String username, String password) {
    User user = userService.authenticate(username, password);
    if (user == null) {
        // Nessun log sull'accesso fallito
        return;
    }
    // Login riuscito
}Code language: JavaScript (javascript)Soluzione corretta con logging adeguato:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class AuthService {
    private static final Logger logger = LoggerFactory.getLogger(AuthService.class);
    public void login(String username, String password) {
        User user = userService.authenticate(username, password);
        if (user == null) {
            logger.warn("Tentativo di accesso fallito per l'utente: {}", username);
            return;
        }
        logger.info("Accesso riuscito per l'utente: {}", username);
    }
}Code language: JavaScript (javascript)2.2 Loggare informazioni sensibili
Loggare con criterio significa registrare solo le informazioni necessarie per rilevare e diagnosticare anomalie di sicurezza senza compromettere la privacy degli utenti o esporre dati sensibili. Un logging eccessivo può portare a problemi di conformità (GDPR, PCI-DSS) e aumentare il rischio di violazioni dei dati, mentre un logging insufficiente può rendere difficile individuare attacchi o attività sospette. È fondamentale evitare di loggare informazioni come password, token di sessione, numeri di carte di credito o dati personali, limitandosi a identificatori non sensibili e dettagli utili per il debugging e l’audit della sicurezza.
Esempio di cattivo logging:
logger.info("Utente {} ha effettuato il login con password {}", username, password);Code language: CSS (css)Soluzione sicura:
logger.info("Utente {} ha effettuato il login", username);Code language: CSS (css)2.3 Log non protetti
I log non protetti possono essere un bersaglio per attaccanti che vogliono alterare o cancellare tracce di attività malevole. È essenziale archiviarli in percorsi sicuri, limitare gli accessi e utilizzare firme digitali o hashing per garantirne l’integrità, evitando così manipolazioni non autorizzate.
Best practices per la protezione dei log:
- Salvare i log in directory protette con permessi adeguati.
- Non archiviare i log localmente su macchine compromettibili, ma inviarli a un server centralizzato (ELK Stack, Splunk, Graylog).
- Usare firme digitali per prevenire la modifica dei log.
2.4 Assenza di monitoraggio e alerting
L’assenza totale di monitoraggio dei log rende impossibile rilevare e rispondere tempestivamente a incidenti di sicurezza. Senza tracce delle attività o non monitorando i log, le intrusioni possono passare inosservate per mesi, compromettendo dati e sistemi senza possibilità di analisi forense o mitigazione efficace.
Strumenti consigliati:
- SIEM (Security Information and Event Management) per analizzare i log in tempo reale.
- Prometheus + Grafana per monitorare l’attività anomala.
- Email/SMS Alerting per notificare i responsabili in caso di attività sospette.
3. Implementazione sicura del logging in java
Un’implementazione sicura del logging in Java richiede l’uso di framework affidabili come Logback o SLF4J, configurati per escludere dati sensibili e scrivere log in percorsi protetti. È consigliabile impostare livelli di log adeguati, utilizzare crittografia per dati sensibili quando necessario e applicare controlli di accesso per prevenire manipolazioni non autorizzate.
3.1 Configurare logback in modo sicuro
Nel file logback.xml evita di loggare dati sensibili e imposta livelli di severità adeguati:
<configuration>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/security.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/security-%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} - %level - %msg%n</pattern>
        </encoder>
    </appender>
    
    <logger name="com.myapp.security" level="WARN" additivity="false">
        <appender-ref ref="FILE" />
    </logger>
</configuration>Code language: HTML, XML (xml)3.2 Configurare alerting su eventi critici
Con Logback è possibile inviare notifiche email su eventi di sicurezza:
<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
    <SMTPHost>smtp.miodominio.com</SMTPHost>
    <To>security-team@miodominio.com</To>
    <From>no-reply@miodominio.com</From>
    <Subject>[ALERT] Evento di Sicurezza Rilevato</Subject>
    <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>%d{yyyy-MM-dd HH:mm:ss} - %level - %msg%n</pattern>
    </layout>
</appender>Code language: HTML, XML (xml)4. Conclusione
Un buon sistema di logging e monitoring in Java può prevenire attacchi informatici e minimizzare i danni in caso di violazione. Per garantire la sicurezza della tua applicazione:
- Logga gli eventi critici.
- Proteggi i log da accessi non autorizzati.
- Non registrare dati sensibili nei log.
- Implementa alert e strumenti di monitoring.
Seguendo queste best practices, sarai in grado di identificare e rispondere rapidamente a eventuali minacce, proteggendo i tuoi utenti e la tua infrastruttura.


