Explorer
KNOW-PAT-059

Détection d'applications honeypot et services de débridage

Domaine
cybersecu
Type
pattern
Priorité
P2

Parent : [[INDEX-CYBERSECU]]

Détection d'applications honeypot et services de débridage

Problème

L'archive Ygg contient une application honeypot (02h_honey_app) et un service de débridage (02g_debrideur). Comment détecter ces services pour comprendre l'infrastructure adverse ou protéger son propre système contre des usages similaires ?

Contexte archive Ygg

  • Dossier : 02_SERVEUR_PRE_PROD/projets_dev/debrideur/ (61 fichiers)
  • Dossier : 02_SERVEUR_PRE_PROD/honey_app/ (fichiers honeypot)
  • Stack : Node.js, Express, EJS, Tailwind CSS, Alpine.js
  • Base de données : MariaDB avec schéma spécifique (users, torrents, files, downloads)

Signatures de détection

1. Signatures réseau

# detect_debrid_network.py — Détection réseau
import re
from scapy.all import sniff

class DebridNetworkDetector:
    # Ports caractéristiques
    DEBRID_PORTS = {
        3000,  # Express par défaut
        8080,  # qBittorrent WebUI
        6881,  # BitTorrent peer port
        3306,  # MariaDB
        6379,  # Redis
    }
    
    # Patterns de trafic
    PATTERNS = {
        'magnet_submission': re.compile(r'GET /torrents/add\?magnet='),
        'sse_progress': re.compile(r'GET /sse/'),
        'qbittorrent_api': re.compile(r'GET /api/v2/'),
        'download_token': re.compile(r'GET /downloads/[a-zA-Z0-9_-]{20,40}'),
    }
    
    def analyze_traffic(self, packet):
        if packet.haslayer('TCP'):
            src_port = packet['TCP'].sport
            dst_port = packet['TCP'].dport
            
            if dst_port in self.DEBRID_PORTS or src_port in self.DEBRID_PORTS:
                payload = str(packet.payload)
                
                for name, pattern in self.PATTERNS.items():
                    if pattern.search(payload):
                        print(f"[ALERT] {name} detected on port {dst_port}")
                        return True
        
        return False

2. Signatures applicatives

// detect_debrid_app.js — Détection applicative
function detectDebridApp() {
  const indicators = {
    // Formulaires magnet
    magnetForm: () => document.querySelector('input[name="magnet"]') !== null,
    
    // Progress bars SSE
    sseProgress: () => document.querySelector('[data-sse-url]') !== null,
    
    // Liens de téléchargement avec tokens courts
    downloadTokens: () => {
      const links = document.querySelectorAll('a[href*="/downloads/"]');
      return links.length > 0 && links[0].href.match(/\/downloads\/[a-zA-Z0-9_-]{20,40}/);
    },
    
    // UI Alpine.js avec torrents
    alpineTorrents: () => {
      const scripts = document.querySelectorAll('script');
      return Array.from(scripts).some(s => 
        s.src.includes('alpine') && 
        document.querySelector('[x-data*="torrent"]') !== null
      );
    },
    
    // Endpoints API suspects
    apiEndpoints: async () => {
      try {
        const response = await fetch('/api/realtime/stats');
        return response.ok;
      } catch {
        return false;
      }
    }
  };
  
  const detected = Object.entries(indicators)
    .filter(([name, check]) => {
      try {
        return typeof check === 'function' ? check() : false;
      } catch {
        return false;
      }
    })
    .map(([name]) => name);
  
  return detected.length >= 2; // Au moins 2 indicateurs
}

3. Signatures de base de données

-- detect_debrid_schema.sql — Schéma MariaDB caractéristique
-- Un service de débridage a typiquement ces tables :

SELECT table_name 
FROM information_schema.tables 
WHERE table_name IN ('users', 'torrents', 'files', 'downloads')
  AND table_schema = 'debrid';

-- Colonnes caractéristiques
SELECT column_name 
FROM information_schema.columns 
WHERE column_name IN ('info_hash', 'magnet_uri', 'token', 'expires_at')
  AND table_schema = 'debrid';

4. Signatures Docker

# detect_debrid_docker.sh — Conteneurs Docker caractéristiques
docker ps --format "table {{.Names}}\t{{.Ports}}\t{{.Image}}" | grep -E "(qbittorrent|redis|mariadb|node|express)"

# Images caractéristiques
docker images | grep -E "(qbittorrent|redis|mariadb|node)"

Détection d'un honeypot

Signaux d'un honeypot

# detect_honeypot.py — Détection de honeypot
class HoneypotDetector:
    def analyze(self, response, behavior_log):
        signals = []
        
        # 1. Temps de réponse trop rapide pour une vraie opération
        if response.elapsed.total_seconds() < 0.1:
            signals.append("Response too fast for real operation")
        
        # 2. Réponses toujours positives
        if behavior_log['success_rate'] > 0.99:
            signals.append("Suspiciously high success rate")
        
        # 3. Données de réponse trop parfaites
        if response.json() and all(v is not None for v in response.json().values()):
            signals.append("No null values in response (suspicious)")
        
        # 4. Headers de sécurité manquants sur une app "sérieuse"
        security_headers = ['X-Frame-Options', 'X-Content-Type-Options', 'CSP']
        missing = [h for h in security_headers if h not in response.headers]
        if len(missing) == len(security_headers):
            signals.append("No security headers (honeypot indicator)")
        
        # 5. Strings caractéristiques dans le HTML
        honeypot_strings = ['honeypot', 'trap', 'decoy', 'sandbox']
        html = response.text.lower()
        for s in honeypot_strings:
            if s in html:
                signals.append(f"Honeypot string found: {s}")
        
        return signals

Checklist de validation

  • Ports caractéristiques ouverts (3000, 8080, 6881, 3306, 6379)
  • Endpoints /torrents/add, /downloads/, /sse/
  • Formulaire de soumission magnet
  • Progress bars avec SSE
  • Schéma MariaDB avec tables torrents, files, downloads
  • Conteneurs Docker qBittorrent + Redis + MariaDB
  • Headers de sécurité absents (indicateur honeypot)
  • Temps de réponse anormalement rapide
  • Taux de succès de 100%

Comment se prot[ée]ger

  • Monitoring des patterns d'usage anormaux (burst, parallel)
  • Rate limiting adaptatif
  • D[ée]tection des honey accounts (honeypot detection)
  • Audit logs des acc[è]s et t[ée]l[ée]chargements

Références

  • Archive Ygg : 02_SERVEUR_PRE_PROD/projets_dev/debrideur/, 02h_honey_app/
  • Honeynet Project : https://www.honeynet.org
  • OWASP : Honeypot Detection