Aller au contenu

Profileur de système

Le System Profiler collecte les empreintes digitales du navigateur et du système des visiteurs des pages de reconnaissance hébergées par le relais. Lorsqu'une cible visite une page de profilage (généralement déguisée en page de destination de phishing ou en application Web inoffensive), JavaScript exécuté dans son navigateur collecte des informations système détaillées et les envoie au relais, qui les transmet au backend de Stentor pour stockage et analyse.


Architecture

Le profileur est un outil de reconnaissance passive. Le relais héberge un serveur HTTP léger sur un port configurable (PROFILER_PORT) qui dessert une page de prise d'empreintes digitales. Lorsqu'un visiteur charge la page, JavaScript côté client collecte les attributs du système et les envoie au relais, qui transmet les données à l'API backend.

sequenceDiagram
    participant Target as Target Browser
    participant Relay as Relay<br/>(Profiler HTTP)
    participant API as Stentor API
    participant DB as PostgreSQL

    Target->>Relay: GET /profiler (loads page)
    Relay-->>Target: HTML + JavaScript
    Target->>Target: Collect fingerprint data
    Target->>Relay: POST fingerprint JSON
    Relay->>API: POST /api/v1/profiler/visits
    API->>DB: INSERT profiler_visits
    API-->>Relay: 201 Created

Données collectées

Chaque visite du profileur capture un ensemble complet d'attributs du navigateur et du système :

Champ Type Description
id UUID Identifiant unique de la visite
visitor_ip chaîne Adresse IP externe du visiteur
user_agent chaîne Chaîne d'agent utilisateur du navigateur complet
platform chaîne Plateforme du système d'exploitation (par exemple, Win32, Linux x86_64)
language chaîne Langue principale du navigateur (par exemple, en-US)
languages chaîne Toutes les langues acceptées
timezone chaîne Fuseau horaire IANA (par exemple, America/New_York)
timezone_offset int Décalage UTC en minutes
screen_width int Largeur de l'écran en pixels
screen_height int Hauteur de l'écran en pixels
color_depth int Afficher la profondeur de couleur en bits
plugins chaîne Tableau JSON de plugins de navigateur installés
webgl_vendor chaîne Chaîne du fournisseur de GPU de WebGL
webgl_renderer chaîne Chaîne de rendu GPU de WebGL
internal_ip chaîne Adresse IP interne/privée (via une fuite WebRTC)
cookies_enabled bool Si les cookies sont activés
do_not_track chaîne Valeur de l'en-tête Ne pas suivre
hardware_concurrency int Nombre de cœurs de processeur logiques
device_memory float RAM de l'appareil en gigaoctets
relay_id UUID Relais qui a collecté l'empreinte digitale (facultatif)
created_at horodatage Quand la visite a été enregistrée

IP interne via WebRTC

Le champ internal_ip capture l'adresse réseau privée du visiteur à l'aide d'une fuite candidate WebRTC ICE. Cela révèle l'adresse IP LAN de la cible même lorsqu'elle se trouve derrière le NAT, ce qui est précieux pour la cartographie du réseau et la planification des mouvements latéraux.


Statistiques de visite

Le point de terminaison des statistiques regroupe les données de visite dans une vue récapitulative affichant le nombre total de visites, les adresses IP uniques des visiteurs et une répartition de la plateforme.

curl -s https://stentor.app/api/v1/profiler/stats \
  -H "Authorization: Bearer $TOKEN" | jq
{
  "total_visits": 47,
  "unique_ips": 12,
  "platforms": {
    "Win32": 28,
    "Linux x86_64": 11,
    "MacIntel": 8
  }
}

Champs de réponse :

Champ Type Description
total_visits int Nombre total de visites de profileurs enregistrées
unique_ips int Nombre d'adresses IP de visiteurs distincts
platforms objet Carte des chaînes de plateforme pour compter les visites

Visites d'annonces

Récupérez les empreintes digitales collectées, classées par les plus récentes.

curl -s "https://stentor.app/api/v1/profiler/visits?limit=50" \
  -H "Authorization: Bearer $TOKEN" | jq
[
  {
    "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "visitor_ip": "203.0.113.42",
    "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)...",
    "platform": "Win32",
    "language": "en-US",
    "languages": "en-US,en",
    "timezone": "America/New_York",
    "timezone_offset": 300,
    "screen_width": 1920,
    "screen_height": 1080,
    "color_depth": 24,
    "plugins": "[]",
    "webgl_vendor": "Google Inc. (NVIDIA)",
    "webgl_renderer": "ANGLE (NVIDIA, NVIDIA GeForce RTX 3070...)",
    "internal_ip": "192.168.1.105",
    "cookies_enabled": true,
    "do_not_track": "1",
    "hardware_concurrency": 16,
    "device_memory": 32,
    "relay_id": null,
    "created_at": "2026-02-21T14:30:00Z"
  }
]

Paramètres de requête :

Paramètre Type Par défaut Description
limit int 100 Nombre maximum de visites à revenir

Créer des visites

Le relais soumet les données d'empreintes digitales via ce point de terminaison. Les opérateurs n'appellent généralement pas cela directement : le relais le gère automatiquement lorsqu'une cible visite la page du profileur.

curl -s -X POST https://stentor.app/api/v1/profiler/visits \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "visitor_ip": "203.0.113.42",
    "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)...",
    "platform": "Win32",
    "language": "en-US",
    "timezone": "America/New_York",
    "timezone_offset": 300,
    "screen_width": 1920,
    "screen_height": 1080,
    "color_depth": 24,
    "webgl_vendor": "Google Inc. (NVIDIA)",
    "webgl_renderer": "ANGLE (NVIDIA, NVIDIA GeForce RTX 3070...)",
    "internal_ip": "192.168.1.105",
    "cookies_enabled": true,
    "hardware_concurrency": 16,
    "device_memory": 32
  }' | jq
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "visitor_ip": "203.0.113.42",
  "created_at": "2026-02-21T14:30:00Z"
}

Détection IP automatique

Si visitor_ip est omis dans le corps de la requête, le serveur utilise automatiquement l'adresse IP du client de la requête HTTP. Ceci est utile lorsque le relais transmet les données d'empreinte digitale sans les modifier.


Effacement des données

Supprimez toutes les visites du profileur. Il s’agit d’une opération destructrice qui ne peut être annulée.

curl -s -X DELETE https://stentor.app/api/v1/profiler/visits \
  -H "Authorization: Bearer $TOKEN" | jq
{
  "status": "cleared"
}

Irréversible

La suppression des données du profileur supprime définitivement toutes les empreintes digitales collectées. Pensez d'abord à exporter les données si vous en avez besoin pour la création de rapports.


Fonctionnalités de l'interface utilisateur

La page Profiler de l'interface utilisateur de Stentor (/profiler) fournit :

  • Cartes de statistiques montrant le nombre total de visites, les adresses IP uniques et la répartition de la plateforme
  • Tableau d'empreintes digitales avec colonnes triables pour l'heure, l'adresse IP du visiteur, l'adresse IP interne, la plateforme, la résolution d'écran et le GPU
  • Lignes extensibles : cliquez sur n'importe quelle ligne pour afficher tous les détails de l'empreinte digitale, notamment l'agent utilisateur, la langue, le fuseau horaire, les spécifications matérielles, les informations WebGL, l'état des cookies et les plugins.
  • Bouton Actualiser pour recharger manuellement les données d'empreintes digitales
  • Bouton Effacer tout avec une boîte de dialogue de confirmation pour éviter toute suppression accidentelle

Configuration du relais

Activez le profileur système sur un relais en définissant la variable d'environnement PROFILER_PORT dans le fichier .env du relais :

# Enable profiler on port 8080
PROFILER_PORT=8080

Définissez PROFILER_PORT=0 (par défaut) pour désactiver le profileur.

Voir Gestion des relais pour plus de détails sur la configuration du relais.


Cas d'utilisation

Reconnaissance préalable à l'engagement

Déployez une page de profilage avant le début de l’exploitation active. Envoyez le lien par e-mail de phishing ou intégrez-le dans un site de point d'eau. Les données collectées révèlent :

  • Versions cibles du système d'exploitation et du navigateur : aide à sélectionner les payloads et les exploits appropriés.
  • Informations GPU -- utiles pour identifier les machines virtuelles (détection sandbox)
  • Adresses IP internes : mappe la topologie du réseau interne de la cible via les fuites WebRTC
  • Spécifications matérielles – Les cœurs de processeur et la RAM permettent de distinguer les serveurs des postes de travail
  • Fuseau horaire et langue : confirme la géographie et les paramètres régionaux cibles pour l'ingénierie sociale

Intégration de campagnes de phishing

Combinez le profileur avec des campagnes de phishing. Lorsqu'une cible clique sur un lien de phishing, la page du profileur collecte des données d'empreintes digitales avant de les rediriger vers le contenu de phishing réel. Cela fournit des renseignements même si la cible ne tombe pas dans le piège du phishing.

Détection du bac à sable

Analysez les visites des profileurs pour identifier les environnements d'analyse automatisés :

  • Une faible concurrence matérielle (1 à 2 cœurs) et une RAM limitée suggèrent un bac à sable
  • Les moteurs de rendu GPU génériques ou virtualisés (par exemple, "SVGA3D" ou "llvmpipe") indiquent une machine virtuelle
  • Des combinaisons inhabituelles de fuseau horaire et de langue peuvent indiquer un chercheur plutôt qu'une véritable cible

Résumé de l'API

Méthode Point de terminaison Description
GET /api/v1/profiler/visits Liste des empreintes digitales collectées
POST /api/v1/profiler/visits Créer un nouvel enregistrement de visite
GET /api/v1/profiler/stats Obtenez des statistiques de visites
DELETE /api/v1/profiler/visits Effacer toutes les données de visite