nwb/cyber-sec-module (0.0.2)

Published 2025-06-17 12:42:09 +00:00 by drone_publisher

Installation

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

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'
];

$cyberSec = new CyberSecModule($config);

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

Données POST malveillantes

  • UNION SELECT (injection SQL)
  • <script> (XSS)
  • javascript:, onload=, onerror=
  • eval(, base64_decode

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
  • Codes de succès : 201 Created, 204 No Content

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

Les erreurs sont loggées via error_log() :

// 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-17 12:42:09 +00:00
0
Mathieu
9.2 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