Enquête Forensique des Journaux Windows

Enquête Forensique des Journaux Windows

Table of Contents

Vue d’Ensemble

Un projet pratique d’analyste SOC pour enquêter sur les événements de sécurité Windows et détecter les intrusions potentielles à l’aide des journaux système.

Objectifs d’Apprentissage

  • Analyser les journaux d’événements Windows pour les incidents de sécurité
  • Identifier les modèles d’activité malveillante
  • Corréler les événements à partir de différentes sources de journaux
  • Construire une chronologie des événements de sécurité
  • Documenter les conclusions forensiques

Structure du Projet

windows-log-forensics/
├── sample-logs/
│   ├── security.evtx
│   ├── system.evtx
│   ├── application.evtx
│   └── powershell.evtx
├── analysis-scripts/
│   ├── event-parser.py
│   ├── timeline-builder.py
│   └── anomaly-detector.py
├── tools/
│   ├── evtx-dump.py
│   └── log-parser.py
├── documentation/
│   ├── windows-event-id-reference.md
│   └── investigation-checklist.md
├── reports/
│   └── forensic-analysis-template.md
└── README.md

Outils Requis

  • Observateur d’Événements Windows
  • Python 3.8+ avec la bibliothèque evtx
  • Velociraptor ou Hayabusa pour l’analyse des journaux
  • Outils d’analyse de chronologie
  • Pile Splunk/ELK (Optionnel)

Scénarios d’Enquête

Scénario 1: Activité de Connexion Suspideuse

  • Analyser les tentatives de connexion échouées (ID d’événement 4625)
  • Identifier les attaques par force brute potentielles
  • Détecter le mouvement latéral (ID d’événement 4624, Type de connexion 3)
  • Suivre les modèles d’authentification inhabituels

Scénario 2: Exécution Malveillante de Processus

  • Enquêter sur la création suspecte de processus (ID d’événement 4688)
  • Analyser les blocs de scripts PowerShell (ID d’événement 4104)
  • Détecter les techniques Living-off-the-land potentielles
  • Identifier les tentatives d’injection de processus

Scénario 3: Tentatives d’Escalade de Privilèges

  • Surveiller les changements de privilèges inhabituels (ID d’événement 4670)
  • Analyser la création/modification de services (ID d’événement 7045)
  • Détecter la création de tâches planifiées (ID d’événement 4698)
  • Enquêter sur les modifications du registre

Principaux ID d’Événements à Surveiller

Événements d’Authentification

  • 4624: Connexion au compte réussie
  • 4625: Connexion au compte échouée
  • 4634: Déconnexion du compte
  • 4648: Identifiants explicites utilisés
  • 4768/4769: Authentification Kerberos

Événements de Processus

  • 4688: Nouveau processus créé
  • 4689: Processus terminé
  • 4656/4663: Accès aux objets
  • 4103/4104: Journalisation des blocs de scripts PowerShell

Événements Système

  • 7045: Nouveau service installé
  • 4698: Tâche planifiée créée
  • 4670: Permissions modifiées sur un objet

Exemples de Scripts d’Analyse

Analyseur de Journaux d’Événements

import evtx
import xml.etree.ElementTree as ET
from datetime import datetime

def parse_security_events(evtx_file, event_ids=None):
    """
    Analyser le journal de sécurité Windows
    """
    events = []
    
    with evtx.Evtx(evtx_file) as log:
        for record in log.records():
            xml = record.xml()
            root = ET.fromstring(xml)
            
            event_id = root.find('.//EventID').text
            if event_ids and event_id not in event_ids:
                continue
            
            timestamp = root.find('.//System/TimeCreated').get('SystemTime')
            timestamp = datetime.fromisoformat(timestamp.replace('Z', '+00:00'))
            
            event_data = {}
            for data in root.findall('.//EventData/Data'):
                name = data.get('Name')
                event_data[name] = data.text
            
            events.append({
                'timestamp': timestamp,
                'event_id': event_id,
                'data': event_data
            })
    
    return events

def detect_brute_force(events, threshold=10, time_window=300):
    """
    Détecter les attaques par force brute potentielles
    """
    failed_logins = [e for e in events if e['event_id'] == '4625']
    
    attacks = []
    for i, event in enumerate(failed_logins):
        window_events = []
        for later_event in failed_logins[i:]:
            time_diff = (later_event['timestamp'] - event['timestamp']).total_seconds()
            if time_diff <= time_window:
                window_events.append(later_event)
            else:
                break
        
        if len(window_events) >= threshold:
            attacks.append({
                'start_time': event['timestamp'],
                'count': len(window_events),
                'target_account': event['data'].get('TargetUserName'),
                'source_ip': event['data'].get('IpAddress')
            })
    
    return attacks

Constructeur de Chronologie

import pandas as pd
from datetime import datetime, timedelta

def build_incident_timeline(events, start_time, end_time):
    """
    Construire une chronologie des événements de sécurité
    """
    timeline = []
    
    for event in events:
        event_time = event['timestamp']
        if start_time <= event_time <= end_time:
            timeline.append({
                'timestamp': event_time,
                'event_id': event['event_id'],
                'description': get_event_description(event),
                'severity': get_event_severity(event['event_id']),
                'details': event['data']
            })
    
    return sorted(timeline, key=lambda x: x['timestamp'])

def get_event_description(event):
    """Générer une description lisible de l'événement"""
    event_id = event['event_id']
    data = event['data']
    
    descriptions = {
        '4625': f"Échec de connexion pour {data.get('TargetUserName')} depuis {data.get('IpAddress')}",
        '4624': f"Connexion réussie pour {data.get('TargetUserName')} depuis {data.get('IpAddress')}",
        '4688': f"Processus créé: {data.get('NewProcessName')} par {data.get('SubjectUserName')}",
        '4104': f"Script PowerShell exécuté par {data.get('UserId')}"
    }
    
    return descriptions.get(event_id, f"Événement {event_id} s'est produit")

Étapes d’Enquête

1. Évaluation Initiale

  • Collecter les fichiers journaux pertinents
  • Déterminer la fenêtre temporelle de l’enquête
  • Identifier les systèmes et utilisateurs critiques
  • Établir l’activité de référence

2. Corrélation des Événements

  • Corréler les événements d’authentification avec la création de processus
  • Lier les connexions réseau aux événements d’application
  • Identifier les séquences d’activités suspectes
  • Construire la chronologie de la chaîne d’attaque

3. Détection d’Anomalies

  • Identifier les heures/lieux de connexion inhabituels
  • Détecter les tentatives d’escalade de privilèges
  • Trouver les exécutions de processus suspectes
  • Signaler les modifications système non autorisées

4. Évaluation de l’Impact

  • Déterminer les comptes et systèmes affectés
  • Évaluer les risques d’accès et d’exfiltration de données
  • Identifier les mécanismes de persistance
  • Évaluer l’impact sur l’entreprise

5. Documentation

  • Créer une chronologie détaillée des événements
  • Documenter toutes les conclusions et preuves
  • Fournir des recommandations de correction
  • Mettre à jour les règles de détection

Exemples de Conclusions d’Enquête

Détection d’Attaque par Force Brute

Chronologie:
2026-02-12 08:00:15 - Tentative de connexion échouée pour admin (192.168.1.100)
2026-02-12 08:00:16 - Tentative de connexion échouée pour admin (192.168.1.100)
[... 15 tentatives échouées supplémentaires ...]
2026-02-12 08:05:22 - Connexion réussie pour admin (192.168.1.100)

Conclusions:
- 16 tentatives échouées suivies d'une connexion réussie
- IP source: 192.168.1.100
- Cible: Compte Administrateur
- Indique une compromission potentielle des identifiants

Activité Malveillante PowerShell

Événements Détectés:
2026-02-12 09:15:30 - Bloc de script PowerShell exécuté (EncodedCommand)
2026-02-12 09:15:31 - Processus créé: powershell.exe (Payload encodé en Base64)
2026-02-12 09:15:32 - Connexion réseau vers 185.14.28.45:443

Analyse:
- Commandes PowerShell encodées détectées
- Activité réseau suspecte après l'exécution
- Téléchargement/exécution de malware potentiel

Résultats Attendus

  1. Rapport d’analyse forensique complet
  2. Chronologie des événements avec annotations
  3. Liste des IOC来源于 l’analyse des journaux
  4. Recommandations de règles de détection
  5. Article de blog documentant le processus d’enquête

Idées d’Extension

  • Pipeline d’analyse automatisé des journaux
  • Intégration avec SIEM pour la détection en temps réel
  • Modèle d’apprentissage automatique pour la détection d’anomalies
  • Tableau de bord personnalisé pour la surveillance de la sécurité

Ressources

Notes de Sécurité

  • Travailler avec des données de journaux assainies pour la formation
  • Suivre les procédures de chaîne de custody pour les incidents réels
  • Documenter toutes les étapes d’analyse
  • Valider les conclusions avec plusieurs sources
Share :
comments powered by Disqus

Related Posts

Projets Analyste SOC

Projets Analyste SOC

Bienvenue dans une collection complète de projets pratiques d’analyste SOC conçus pour développer des compétences pratiques en cybersécurité.

Read More
Création et Test de Règles SIEM

Création et Test de Règles SIEM

Vue d’Ensemble Développer et tester des règles de détection SIEM pour améliorer les capacités de surveillance du SOC et la détection des menaces sur plusieurs vecteurs d’attaque.

Read More
Laboratoire d'Analyse d'E-mails de Phishing

Laboratoire d'Analyse d'E-mails de Phishing

Vue d’Ensemble Un projet complet d’analyste SOC pour analyser les e-mails de phishing et développer les compétences de réponse aux incidents.

Read More