nwb/cyber-sec-module (0.0.6)
Installation
{
"repositories": [{
"type": "composer",
"url": " "
}
]
}
composer require nwb/cyber-sec-module:0.0.6
About this package
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
- Paramètres du constructeur (priorité maximale)
- Variables d'environnement
- 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 :
HTTP_CF_CONNECTING_IP
(Cloudflare)HTTP_CLIENT_IP
HTTP_X_FORWARDED_FOR
HTTP_X_FORWARDED
HTTP_FORWARDED_FOR
HTTP_FORWARDED
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 baseCyberSecConfigurationException
: Erreurs de configuration (cURL manquant, fichier de patterns invalide)CyberSecNetworkException
: Erreurs réseau/HTTPCyberSecFileException
: 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 | * |