nwb/cyber-sec-module (0.0.5)

Published 2025-06-18 07:48:25 +00:00 by drone_publisher

Installation

{
	"repositories": [{
			"type": "composer",
			"url": ""
		}
	]
}
composer require nwb/cyber-sec-module:0.0.5

About this package

Module de sécurité pour les applications web

CyberSecModule

Module PHP de remontée automatique des tentatives de piratage vers un endpoint centralisé.

📋 Description

Ce module détecte les requêtes malveillantes et les remonte automatiquement à un endpoint REST centralisé. Il collecte de manière sécurisée les données des superglobales PHP et inclut des mécanismes de résilience (retry, file d'attente locale).

🚀 Installation

Composer

Ajouter les modules communs dans composer.json :

{
    "repositories": [{
        "type": "composer",
        "url": "https://git.nwb.fr/api/packages/modules-communs-php/composer"
    }]
}

Lancer la commande :

composer require nwb/cyber-sec-module:0.0.*

⚙️ Configuration

Variables d'environnement

# URL de l'endpoint (optionnel, défaut: https://n8n.kub.nwb.fr/webhook/signalHackingAttempt)
export CYBERSECMODULE_URL="https://your-endpoint.com/webhook"

# Token d'authentification (requis)
export CYBERSECMODULE_TOKEN="your-bearer-token"

Configuration programmatique

$config = [
    'endpoint' => 'https://custom-endpoint.com/webhook',
    'auth_token' => 'custom-bearer-token',
    'timeout' => 2,
    'max_retries' => 3,
    'compression' => true,
    'queue_file' => '/tmp/cybersec_queue.json',
    'patterns_file' => '/path/to/custom_patterns.json', // Fichier externe YAML/JSON
    'post_size_threshold' => 2097152, // 2MB pour les données POST
    'headers_detection_enabled' => false // Désactiver la détection des en-têtes
];

$cyberSec = new CyberSecModule($config);

Configuration avancée

Fichiers de patterns externes

Le module supporte le chargement de patterns personnalisés depuis des fichiers JSON ou YAML :

// custom_patterns.json
{
  "uri": [
    "/custom-admin",
    "/secret-path"
  ],
  "post": [
    "CUSTOM_INJECTION_PATTERN"
  ],
  "headers": [
    "custom-malicious-bot"
  ]
}
# custom_patterns.yml
uri:
  - "/custom-admin"
  - "/secret-path"
post:
  - "CUSTOM_INJECTION_PATTERN"
headers:
  - "custom-malicious-bot"

Priorité de configuration

  1. Paramètres du constructeur (priorité maximale)
  2. Variables d'environnement
  3. Valeurs par défaut

🔧 Utilisation

Signalement manuel

use Nwb\CyberSecModule\CyberSecModule;

$cyberSec = new CyberSecModule();

// Signalement simple
$success = $cyberSec->signalHackingAttempt("Tentative d'accès WordPress détectée");

// Signalement avec données supplémentaires
$additionalData = [
    'source' => 'firewall',
    'severity' => 'high',
    'blocked' => true
];
$success = $cyberSec->signalHackingAttempt("Scan de vulnérabilités", $additionalData);

Détection automatique

$cyberSec = new CyberSecModule();

// Vérifie automatiquement les superglobales pour des motifs malveillants
if ($cyberSec->detectAndSignal()) {
    // Une menace a été détectée et signalée
    error_log("Menace détectée et signalée");
}

Traitement de la file d'attente

// À exécuter périodiquement (CRON toutes les 5 minutes)
$processed = $cyberSec->processQueue();
echo "Signalements traités: " . $processed;

🎯 Motifs de détection par défaut

URI malveillantes

WordPress :

  • /wp-login.php, /wp-admin, /wordpress, /wp-

Fichiers sensibles :

  • /.env, /.git, .php.bak

Fichiers malveillants spécifiques :

  • alf.php, file5.php, Jcrop.php, dropdown.php
  • css.php, autoload_classmap.php, lv.php

Répertoires sensibles :

  • /cgi-bin/, /plugins/, /elfinder/
  • /phpmyadmin, /admin

Fonctions dangereuses :

  • eval(, base64_decode

🆕 Injection SQL dans URI :

  • UNION SELECT, DROP TABLE, OR 1=1, AND 1=1
  • INSERT INTO, DELETE FROM, UPDATE SET
  • INFORMATION_SCHEMA, mysql.user, pg_user
  • Versions encodées URL : union%20select, or%201=1

🆕 XSS dans URI :

  • <script>, <iframe>, javascript:
  • onload=, onerror=, onclick=, onmouseover=
  • document.cookie, window.location, alert(
  • Versions encodées URL : %3Cscript%3E, javascript%3A

🆕 Path Traversal dans URI :

  • ../, ..\\, ....//
  • Versions encodées : ..%2F, ..%5C, %2e%2e%2f
  • Techniques d'évasion : ..%c0%af, ..%c1%9c

🆕 Inclusion de fichiers dans URI :

  • php://input, php://filter, file://
  • data:, expect://, http://, https://

Données POST malveillantes

  • UNION SELECT (injection SQL)
  • <script> (XSS)
  • javascript:, onload=, onerror=
  • eval(, base64_decode
  • ../, ..\\ (Path Traversal)

🆕 Paramètres GET malveillants

Le module analyse maintenant individuellement chaque paramètre GET :

  • Clés de paramètres : Vérification des noms de paramètres suspects
  • Valeurs de paramètres : Détection d'injections SQL, XSS, Path Traversal
  • Tableaux de paramètres : Analyse des paramètres multiples
  • Encodage URL : Détection des attaques encodées

User-Agent malveillants

  • sqlmap, nikto, nessus
  • evil-bot, openvas

📤 Format des données transmises

{
  "ip": "203.0.113.1",
  "timestamp": "2024-01-15T10:30:45+01:00",
  "pattern": "URI malveillante détectée: /wp-login.php",
  "data": {
    "get": {...},
    "post": {...},
    "server": {...},
    "cookie": {...},
    "additional": {...}
  }
}

🔒 Sécurité

Données sensibles hachées (SHA-256)

  • HTTP_AUTHORIZATION
  • HTTP_COOKIE
  • PHP_AUTH_PW, PHP_AUTH_USER
  • Cookies de session (PHPSESSID, SESS_*, etc.)
  • Clés contenant : session, token, auth, password

Transmission sécurisée

  • Authentification : Bearer token
  • Compression : GZIP optionnelle
  • SSL/TLS : Vérification des certificats
  • Timeout : 2 secondes par défaut

🔄 Mécanisme de résilience

Retry avec backoff exponentiel

  • 3 tentatives par défaut
  • Délais : 1s, 2s, 4s
  • Code de succès : 200 OK (conforme au cahier des charges)

File d'attente locale

  • Format : JSON
  • Localisation : /tmp/cybersec_queue.json
  • Limite : 100 éléments maximum
  • Traitement : À exécuter via CRON

🖥️ Détection d'IP

Ordre de priorité pour l'extraction de l'IP client :

  1. HTTP_CF_CONNECTING_IP (Cloudflare)
  2. HTTP_CLIENT_IP
  3. HTTP_X_FORWARDED_FOR
  4. HTTP_X_FORWARDED
  5. HTTP_FORWARDED_FOR
  6. HTTP_FORWARDED
  7. REMOTE_ADDR

🔧 Intégration avec les frameworks

Symfony

// Dans un EventListener ou Controller
use Nwb\CyberSecModule\CyberSecModule;

class SecurityListener
{
    private $cyberSec;
    
    public function __construct()
    {
        $this->cyberSec = new CyberSecModule();
    }
    
    public function onKernelException(ExceptionEvent $event)
    {
        $exception = $event->getThrowable();
        
        if ($exception instanceof NotFoundHttpException) {
            $this->cyberSec->detectAndSignal();
        }
    }
}

Laravel

// Dans un Middleware
use Nwb\CyberSecModule\CyberSecModule;

class CyberSecMiddleware
{
    public function handle($request, Closure $next)
    {
        $cyberSec = new CyberSecModule();
        $cyberSec->detectAndSignal();
        
        return $next($request);
    }
}

PHP Vanilla

// Dans votre gestionnaire d'erreurs 404
if (!file_exists($requestedFile)) {
    http_response_code(404);
    
    $cyberSec = new CyberSecModule();
    $cyberSec->signalHackingAttempt("Accès à un fichier inexistant: " . $_SERVER['REQUEST_URI']);
    
    include '404.php';
    exit;
}

📊 Exemple de CRON

# Traitement de la file d'attente toutes les 5 minutes
*/5 * * * * /usr/bin/php /path/to/process_queue.php
<?php
// process_queue.php
require_once 'vendor/autoload.php';

use Nwb\CyberSecModule\CyberSecModule;

$cyberSec = new CyberSecModule();
$processed = $cyberSec->processQueue();

if ($processed > 0) {
    error_log("CyberSecModule: $processed signalements traités");
}
?>

🧪 Tests

# Exécution des tests
composer test

# Ou directement avec PHPUnit
./vendor/bin/phpunit

📋 Prérequis

  • PHP : 7.0 ou supérieur
  • Extensions : cURL, JSON
  • Permissions : Écriture dans le répertoire de la file d'attente

🐛 Débogage

Le module utilise un système d'exceptions pour une gestion d'erreurs robuste :

Types d'exceptions

  • CyberSecException : Exception de base
  • CyberSecConfigurationException : Erreurs de configuration (cURL manquant, fichier de patterns invalide)
  • CyberSecNetworkException : Erreurs réseau/HTTP
  • CyberSecFileException : Erreurs de lecture/écriture de fichiers

Gestion des erreurs

try {
    $cyberSec = new CyberSecModule([
        'patterns_file' => '/path/to/patterns.json'
    ]);
    
    $cyberSec->signalHackingAttempt("Test");
} catch (CyberSecConfigurationException $e) {
    // Erreur de configuration
    error_log("Configuration error: " . $e->getMessage());
} catch (CyberSecFileException $e) {
    // Erreur de fichier
    error_log("File error: " . $e->getMessage());
} catch (CyberSecNetworkException $e) {
    // Erreur réseau (géré automatiquement avec retry)
    error_log("Network error: " . $e->getMessage());
}

Logs système

Certaines erreurs non critiques sont toujours loggées :

# Vérifier les logs système
tail -f /var/log/php_errors.log | grep CyberSecModule

👨‍💻 Mainteneur

Maël Donnart - mael.donnart@nowwweb.com

📄 Licence

Ce module est propriétaire à NWB (Nowwweb).

Dependencies

Dependencies

ID Version
php >=7.0

Development Dependencies

ID Version
phpunit/phpunit *
squizlabs/php_codesniffer *
Details
Composer
2025-06-18 07:48:25 +00:00
1
Mathieu
14 KiB
Assets (1)
Versions (8) View all
0.2.1 2025-06-23
0.2.0 2025-06-23
0.1.3 2025-06-20
0.0.6 2025-06-18
0.0.5 2025-06-18