Conformite NIS2

Le mode chaine cryptographique de hash d'AuditChain (HasAuditTrail) fournit une journalisation inviolable, une verification automatisee de la chaine et des alertes en temps reel — des capacites qui repondent directement aux exigences d'audit en matiere de cybersecurite. Ces fonctionnalites s'alignent avec la directive NIS2 (UE 2022/2555), qui exige des entites essentielles et importantes qu'elles mettent en oeuvre des mesures d'analyse des risques, de gestion des incidents et de securite de la chaine d'approvisionnement au titre de l'article 21.

Exigences de l'article 21 et AuditChain

Gestion des incidents (Article 21(2)(b))

NIS2 exige des organisations qu'elles detectent, traitent et signalent les incidents de securite. AuditChain aide en fournissant :

  • Journal d'audit immuable — Chaque modification de vos models Eloquent est enregistree dans un journal inviolable. En cas de violation, vous disposez d'un registre fiable de ce qui a ete consulte ou modifie et quand.
  • Suivi personal_data_accessed — Chaque entree du journal d'audit enregistre quels champs de donnees personnelles etaient concernes, ce qui facilite l'evaluation de l'etendue d'une violation comme l'exige l'article 33 du RGPD (auquel NIS2 fait reference).
  • Capture des evenements de lecture — Activez log_reads pour suivre qui a consulte les enregistrements sensibles, et pas seulement qui les a modifies.
// config/audit-chain.php
'events' => [
    'log_reads' => true,
],

Analyse des risques et politiques de securite (Article 21(2)(a))

La verification de la chaine fournit une assurance continue que vos donnees d'audit n'ont pas ete falsifiees :

# Verify the entire chain
php artisan audit:verify

# Verify a specific model type
php artisan audit:verify --type="App\Models\User"

# Verify a specific record
php artisan audit:verify --type="App\Models\User" --id=42

Surveillance automatisee

Planifiez des verifications regulieres de la chaine et configurez les notifications pour que votre equipe soit alertee immediatement si une falsification est detectee :

// routes/console.php
Schedule::command('audit:verify --notify')->hourly();

Lorsque le flag --notify est utilise et que la verification echoue, AuditChain envoie des alertes via les canaux configures :

// config/audit-chain.php
'notifications' => [
    'channels' => ['mail', 'webhook'],
    'mail_to' => [env('AUDIT_ALERT_EMAIL', 'security@example.com')],
    'webhooks' => [
        env('AUDIT_ALERT_WEBHOOK_1'), // Slack, Teams, Discord, or custom
    ],
],

Les payloads webhook incluent les cles text et content pour la compatibilite multi-plateforme avec Slack, Microsoft Teams, Discord et les endpoints personnalises.

Securite de la chaine d'approvisionnement (Article 21(2)(d))

AuditChain prend en charge une connexion base de donnees separee pour les journaux d'audit, les isolant de la base de donnees principale de l'application. Cela limite le rayon d'impact si la base de donnees de l'application est compromise :

// config/audit-chain.php
'connection' => 'audit', // dedicated DB connection

Pour une immutabilite maximale, utilisez un utilisateur base de donnees avec des droits INSERT et SELECT uniquement sur la table d'audit. Les gardes Eloquent empechent la modification au niveau applicatif, mais les restrictions au niveau base de donnees garantissent l'immutabilite meme si l'application elle-meme est compromise.

Detection de falsification

La chaine de hash SHA-256 est la defense principale d'AuditChain contre la falsification. Chaque entree du journal d'audit contient :

  • Un hash calcule a partir des donnees d'audit (evenement, valeurs, utilisateur, IP, horodatage et le hash precedent)
  • Un prev_hash le reliant a l'entree precedente dans la chaine

Modifier, inserer ou supprimer une entree dans la chaine rompt le lien et est detecte lors de la verification. Cela fournit le type de preuve d'integrite que l'article 21 de NIS2 attend des systemes de journalisation de cybersecurite.

Vous pouvez egalement verifier la chaine par programmation :

use GrayMatter\AuditChain\Services\AuditChainService;

$result = app(AuditChainService::class)->verifyChain();
// ['valid' => true, 'checked' => 1500, 'errors' => []]

if (! $result['valid']) {
    // Handle chain compromise -- alert security team, lock down system
}

Configuration NIS2 recommandee

Pour les organisations soumises a NIS2, nous recommandons la configuration suivante :

// config/audit-chain.php
return [
    // Isolate audit data on a separate connection
    'connection' => 'audit',

    // Use queue to avoid blocking request lifecycle
    'queue' => [
        'enabled' => true,
        'connection' => null,
        'queue' => 'audit',
    ],

    // Enable read tracking for sensitive models
    'events' => [
        'log_reads' => true,
    ],

    // Retain logs for regulatory minimum (adjust per your jurisdiction)
    'retention' => [
        'days' => 365,
    ],

    // Alert on chain compromise
    'notifications' => [
        'channels' => ['mail', 'webhook'],
        'mail_to' => ['security@example.com', 'dpo@example.com'],
        'webhooks' => [
            env('AUDIT_ALERT_WEBHOOK_1'),
        ],
    ],
];

Et dans votre planificateur :

// routes/console.php
Schedule::command('audit:verify --notify')->hourly();
Schedule::command('audit:prune --days=365')->daily();

Important : Definissez AUDIT_CHAIN_SEED avec une valeur aleatoire et secrete dans votre fichier .env. Le seed de la chaine est utilise pour calculer le hash de genese. Un seed previsible affaiblit les garanties d'inviolabilite dont depend la conformite NIS2.