Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Snoopy — Snoopy: A distributed tracking and data interception framework | Kitploit
Outils/GitHubGitHub/sensepost/snoopy
OSINT (Open Source Intelligence)ReconnaissanceWi-Fi AuditingNetwork MappingPhishingMalware AnalysisSocial EngineeringRed Teaming
GitHubsensepost/snoopy

Snoopy

Snoopy: A distributed tracking and data interception framework

Voir le dépôt
6131492il y a 13 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

root@kitploit:~
|       ||  |  | ||       ||       ||       ||  | |  |
|  _____||   |_| ||   _   ||   _   ||    _  ||  |_|  |
| |_____ |       ||  | |  ||  | |  ||   |_| ||       |
|_____  ||  _    ||  |_|  ||  |_|  ||    ___||_     _|
 _____| || | |   ||       ||       ||   |      |   |  
|_______||_|  |__||_______||_______||___|      |___|
                                               V0.1  
« Amy, la technologie n’est pas intrinsèquement bonne ou mauvaise. C’est l’usage qu’on en fait. Comme le Rayon de la Mort. »
- Professeur Farnsworth

Bienvenue dans Snoopy ; un framework de pistage et de profilage distribué. Snoopy est un travail en cours, alors n’hésitez pas à soumettre des suggestions et/ou corrections. Ce document décrit l’utilisation de base. Pour mieux comprendre le contexte, jetez un œil aux éléments suivants :

  • Snoopy : un framework de pistage et de profilage distribué
  • ZaCon4 - Glenn Wilkinson - Terrorisme, pistage, vie privée et interactions humaines
  1. INTRODUCTION ET VUE D’ENSEMBLE ============================= Snoopy se compose de quatre composants :
  • Logiciel client (alias logiciel Snoopy Drone)
  • Logiciel serveur
  • Interface web
  • Transformations Maltego

a. Drones Snoopy

Le logiciel côté client s’exécute sur ce que nous appelons des « Drones ». Un Drone peut être n’importe quel appareil sous Linux doté d’une interface WiFi (avec des pilotes d’injection) et d’une connectivité Internet sortante. Snoopy a été testé sur un Nokia N900 et un ordinateur portable exécutant BackTrack. Les Drones effectuent les deux opérations suivantes :

  1. Collecter les SSID de sondage à partir des appareils sans fil à proximité
  2. Proposer un Point d’Accès Rogue auquel les appareils sans fil à proximité peuvent se connecter

Les requêtes de sondage collectées (par exemple, l’iPhone de Bob cherchant BTHomeHub-4123) sont téléchargées vers le serveur Snoopy à intervalles réguliers. Tous les appareils qui s’associent au point d’accès Rogue voient leur Internet servi via le serveur Snoopy.

b. Logiciel serveur

Le serveur peuple toutes les requêtes de sondage dans une base de données, utilise Wigle pour déterminer les coordonnées GPS, et Google Maps pour déterminer les adresses postales (et les photos Street View). Cela signifie que si vous sondez votre réseau domestique, je pourrais obtenir une photo de votre maison.

Chaque Drone se connecte au serveur via OpenVPN et possède son propre sous-réseau. Les clients associés reçoivent une adresse IP du Drone et acheminent le trafic via celui-ci. Cela signifie que sur le serveur, nous pouvons faire correspondre les adresses IP des clients (et donc leurs adresses MAC) à leur activité Internet.

Sur le serveur, les actions suivantes ont lieu :

  • Le trafic Internet est proxyfié de manière transparente via Squid, qui enregistre toutes les requêtes dans MySQL
  • SSLStrip tente de réécrire les pages web sans HTTPS
  • mitmproxy.py permet une injection arbitraire dans les pages web
  • Divers scripts sont exécutés pour extraire les données des médias sociaux (par exemple, récupération de profils Facebook)

Le schéma réseau est le suivant :

root@kitploit:~
     Client1                        Drone1                                  Snoopy Server
    +----------+            +-----------------------+               +-----------------------+
    |    wlan0-|<---WiFi--->|-at0                   |               |                   eth0|<-squid-sslstrip-mitmproxy->Internet
    |          |    |       | 10.2.0.1              |               |            11.22.33.44|    |
    | dhclient |    |       |                       |               |                       |    Traffic inspection
    |          |    |       |                  tap0-|<-openvpn----->|-tap0                  |    Social media analysis
    +----------+    |       |          192.168.42.2 |           +--/| 192.168.42.1          |
    10.2.0.2        |       +-----------------------+           |   +-----------------------+
                    |                                           |
                    |                                           | route 10.2.0.0 via 192.168.42.2
                    |                                           | route 10.3.0.0 via 192.168.42.3
      Client2       |                                           |
    +----------+    |                                           |
    |    wlan0-|<---+                                           |
    |          |                                                |
    | dhclient |                                                |
    |          |                                                |
    +----------+                                                |
    10.2.0.3                                                    |
                                                                |
                                                                |
                                                                |
      Client3                       Drone2                      |      
    +----------+            +-----------------------+           |
    |    wlan0-|<---WiFi--->|-at0                   |           |
    |          |    |       | 10.3.0.1              |           |
    | dhclient |    |       |                       |           |
    |          |    |       |                  tap0-|<-openvpn--+
    +----------+    |       |          192.168.42.3 |       
    10.3.0.2        |       +-----------------------+       
                    |
                    |       
                    |
      Client4       |                                       
    +----------+    |                                       
    |    wlan0-|<---+                                       
    |          |                                            
    | dhclient |                                            
    |          |                                            
    +----------+
    10.3.0.3

c. L’interface web

Walter a écrit une interface web pour Snoopy. Elle est accessible depuis http://votre-serveur-snoopy.com:5000/

d. Transformations Maltego

Plusieurs transformations Maltego existent pour explorer graphiquement les données collectées (voir ci-dessous pour plus d’informations).

  1. INSTALLATION ================ L’installation du serveur devrait être simple. Elle n’a été testée que sur une installation standard d’Ubuntu 12.04 LTS 32 bits. Des modifications sont apportées à plusieurs composants du serveur, il est donc fortement recommandé d’exécuter le script d’installation sur une installation de base, et de ne pas faire grand chose d’autre sur cette machine (si possible). En cas de doute, parcourez le fichier install.sh et effectuez les modifications manuellement. Sinon, exécutez simplement l’installateur (./install.sh).

  2. UTILISATION ======== Une fois l’installation terminée, vous devriez pouvoir taper 'snoopy' pour charger le menu du serveur. Sinon (ou en cas de doute), allez dans le répertoire personnel de l’utilisateur créé lors de l’installation. Dans le répertoire 'snoopy/server/', il y a un fichier 'snoopy.sh' que vous pouvez exécuter. Voici le menu :

    root@kitploit:~
     +---------------------------------------------------------------+
     |                    Bienvenue dans Snoopy V0.1                     |
     |                        CÔTÉ SERVEUR                            |
     |                                                               |
     |              SensePost Security de l’information                   |
     |         [email protected] / www.sensepost.com            |
     +---------------------------------------------------------------+
     Date: Thu Nov  1 16:37:08 CET 2012
     Statut du serveur Snoopy : Arrêté
     Drones connectés : 0
     Utilisateur Wigle : setYourWigleAccount
    
     Que souhaitez-vous faire :
     [1] (Re)Démarrer les composants du serveur Snoopy
     [2] Arrêter les composants du serveur Snoopy
     [3] Gérer les packs de configuration des drones
     [4] Configurer les options du serveur
     [5] Définir la chaîne d’injection du trafic web
     [6] Observer les journaux
     [X] Quitter
    
     [?] Aide
    
  3. Création de packs drones L’option [3] du menu vous permettra de créer des « packs » côté client pour vos appareils Drone. Chaque Drone reçoit ses propres clés OpenVPN et SSH, ses plages DHCP et ses tables de routage. Une URL de téléchargement vous sera fournie pour chaque appareil Drone. Assurez-vous que votre serveur et votre drone ont l’heure correctement réglée, sinon la connexion VPN ne s’établira pas.

Chaque entité Snoopy peut avoir différentes transformations qui lui sont appliquées. Faites glisser l’entité « Snoopy » sur votre graphe pour commencer. Si vous ne spécifiez pas de date de début ou de fin dans les propriétés des entités, les résultats seront récupérés pour les 5 dernières minutes par défaut (cette valeur peut être modifiée dans le menu de configuration du serveur).

Les machines Snoopy vous permettent d’automatiser les séquences de transformations et de filtrer/supprimer des nœuds en fonction de critères. Les sources/commentaires devraient suffisamment expliquer leur fonctionnement.

  1. CONSIDÉRATIONS LÉGALES ======================= Tout ou partie des composants de Snoopy peuvent être illégaux dans votre pays. Renseignez-vous avant d’utiliser le logiciel. Au Royaume-Uni, le composant de collecte de sondages est légal en raison de la nature diffusée du trafic. Cependant, le composant du point d’accès rogue est très probablement illégal dans la plupart des régions. SensePost décline toute responsabilité quant aux problèmes que vous pourriez rencontrer en utilisant cet outil.

  2. CONSIDÉRATIONS DE SÉCURITÉ ========================== Chaque « pack Drone » contient des clés OpenVPN et SSH. Si un Drone est compromis (par vol ou autre), cela peut présenter un risque de sécurité pour votre serveur. Il est fortement recommandé que votre serveur Snoopy soit dédié à cette seule fonction. L’utilisateur créé sur le serveur a les éléments suivants automatiquement ajoutés au fichier .ssh/authorized_hosts, pour un peu plus de sécurité :

    "no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="/usr/bin/rsync ${SSH_ORIGINAL_COMMAND#* }""

  3. TRAVAUX FUTURS =============== Il reste encore beaucoup de choses à faire / ajouter. Cette version est plutôt une preuve de concept.

  • Intégrer le support de ToR
  • Ajouter des filtres pour ajouter facilement d’autres captures de trafic (par exemple, mDNS)
  • Intégrer le piratage aGPS (puisque nous contrôlons déjà le DNS des victimes)
  • Evilgrade
  • Pistage Bluetooth/GSM
  • Brouillage WiFi / 3G
  • Caméra avec reconnaissance faciale
  • Chargeur de plugins Firefox pour cookies volés
  • Remplacer le processus de téléchargement des données (actuellement, tous les drones se synchronisent avec le même utilisateur).
  1. PROBLÈMES / BOGUES CONNUS ======================
  • Les SSID avec des caractères inhabituels peuvent causer des problèmes
  • Actuellement, toutes les requêtes de sondage sont capturées et insérées dans une base de données. La base de données devient rapidement volumineuse, surtout dans les zones fréquentées. La base de données devrait être normalisée, et une décision devrait être prise quant à la conservation ou non de tous les sondages.
  • À l’origine, la capture des sondages était effectuée avec Scapy, mais elle a été remplacée par une commande tshark (en raison de l’incapacité de Scapy à lire le paramètre de puissance du signal 802.11). Une limitation découverte avec l’ancienne version de tshark disponible sur le N900 est qu’elle ne supporte pas l’affichage du temps en epoch, seulement l’heure locale. Cela pose de sérieux problèmes avec les fuseaux horaires. Si vous pouviez compiler une nouvelle version de tshark pour le N900, ce serait génial (je pense à vous, PwnieExpress). En attendant, assurez-vous que votre serveur et vos drones sont tous dans le même fuseau horaire.
  1. CONTACT ============== Le code a été écrit par Glenn (à l’exception de l’interface web de Walter). Vous pouvez lui envoyer un email à [email protected] ou le suivre sur Twitter : @glennzw. Glenn n’est pas un développeur, et s’excuse pour son code de qualité médiocre. C’est un hacker, et cet outil lui permet de vous hacker.

Remerciements

Merci pour l’aide, les conseils et les contributions de :

  • L’équipe SensePost (un endroit cool pour travailler).
  • DocScrutinizer, et le reste du gang #maemo sur Freenode pour l’aide avec le N900.

ANNEXE A1. SCÉNARIOS D’ATTAQUE (non approuvés ni encouragés)

Attraper l’espion

Q. Nous savons qu’un espion étranger arrive à Heathrow le 11 novembre, mais nous ne savons pas quand ni sur quel vol. Nos renseignements suggèrent qu’il séjournera au Hilton après son arrivée et prendra un vol depuis l’aéroport de Luton le 14 (là encore, nous ne connaissons ni l’heure ni la destination). C’est un maître du déguisement. Comment pouvons-nous l’identifier ?

R. Déployez des drones Snoopy à Heathrow, au Hilton et à Luton. La transformation Maltego « CommonLocation » notera l’intersection de tous les appareils présents à ces trois endroits. Espérons qu’un seul résultat – notre cible humaine. Une fois découvert, nous pouvons examiner les cartes Google et les photos Street View des lieux où notre espion s’est rendu. Son identité pourrait être révélée si ses appareils sont amenés à se connecter au point d’accès rogue de Snoopy (par exemple, son Facebook, Twitter ou email).

Identifier les indésirables

Demandez à Snoopy de noter toutes les personnes qui se sont connectées à un point WiFi dans certains pays sablonneux^W indésirables.

Suivi des clients

Déployez Snoopy dans vos 10 magasins. Notez le trafic humain, les clients réguliers, les types de clients.

Distribution de logiciels malveillants

Injectez du code malveillant pour prendre le contrôle des appareils clients et installer des logiciels malveillants. Les exploits peuvent être déclenchés directement depuis le serveur vers les victimes connectées, grâce aux tables de routage.

Le métro londonien

TFL pourrait déployer un drone Snoopy dans chaque station du métro londonien. Ils pourraient surveiller le trafic humain, noter les heures et jours de pointe et de creux, et attribuer/réduire le personnel en conséquence.

Pistage à grande échelle des humains

Déployez 500 drones Snoopy dans tout Londres. Surveillez les déplacements des personnes lorsqu’elles passent près d’un drone. Des schémas de mouvement humain intéressants se manifesteront sûrement si cela est appliqué sur plusieurs semaines/mois.


ANNEXE A2. NOTES SUR LE MATÉRIEL

Pour un ordinateur de bureau/portable sous Linux, la carte Alfa AWUS036H donne des résultats moyens. Une carte plus fiable est la Ubiquity SR-71. Tout retour sur ce qui fonctionne/ne fonctionne pas pour vous en termes de support des pilotes d’injection serait apprécié.

Pour le N900, vous remarquerez que le chargement des pilotes d’injection réduit considérablement l’autonomie de la batterie. Le pack de batteries TecNet 6600mAh a donné environ 6 à 8 heures lors des tests. Vous aurez cependant besoin d’un adaptateur pour brancher le N900 à un pack de batteries. Réduire (ou désactiver) la fréquence d’interrogation GPS améliorera également l’autonomie.

Des conseils pour connecter votre N900 à votre ordinateur portable via USB (dans le but d’utiliser SSH) sont disponibles ici

Je teste actuellement sur le RaspberryPi, l’Alfa R36 mini AP et le SheevaPlug. Résultats à suivre.


ANNEXE A3. SCRIPTING MALTEGO DE SNOOPY

Vous pouvez créer vos propres transformations Maltego pour explorer les données collectées. Celles fournies sont principalement destinées à démontrer ce qui peut être fait. Consultez le code source et lisez :

  • http://www.paterva.com/web6/documentation/developer.php
  • http://www.paterva.com/web6/documentation/developer-tds.php

Contactez [email protected] si vous avez des questions (ou demandez aux géniaux gars de Maltego).


ANNEXE A4. SCRIPTING DE L’INTERFACE WEB DE SNOOPY

Introduction

Le code de l’interface web est accessible via ~user/snoopy/server/bin/snoopy/src/snoopy/

Prérequis (déjà installés)

Paquets Python

  • Beaker
  • cryptacular
  • Flask
  • MySQLdb
  • SQLAlchemy

Plug-ins

Les plug-ins se composent de deux parties :

  • Partie arrière (fournissant les données), écrite en Python
  • Partie avant (affichage), écrite en JavaScript (optionnelle)

Partie arrière

Un plug-in est un appelable qui est chargé dynamiquement par l’application Snoopy. Commençons par un exemple :

root@kitploit:~
from snoopy import db, pluginregistry

@pluginregistry.add('client-data', 'ssidlist', 'SSID List', js='/static/js/ssidlist.js')
def ssid_list(mac):
    with db.SessionCtx() as session:
        query = session.query(
            distinct(db.Probe.probe_ssid) # SELECT DISTINCT probe_ssid FROM probes
        ).filter_by(
            device_mac=mac                # WHERE device_mac=$mac
        ).order_by(
            db.Probe.probe_ssid           # ORDER BY probe_ssid
        )
        return query.all()

Passons maintenant à l’explication détaillée…

root@kitploit:~
from snoopy import db, pluginregistry

Nous avons besoin de db pour accéder à la base de données Snoopy et de pluginregistry pour enregistrer notre plug-in.

root@kitploit:~
@pluginregistry.add('client-data', 'ssidlist', 'SSID List', js='/static/js/ssidlist.js')

C’est ainsi que nous enregistrons notre plug-in (qui peut être n’importe quel appelable). Le premier argument spécifie le nom du groupe auquel ce plug-in appartient. Nous avons spécifié client-data, car ce plug-in accepte une adresse MAC et renvoie des données à afficher dans une fenêtre de données client. En plus de client-data, il existe également le groupe de plug-ins session-data qui opère sur les sessions de proximité. Le deuxième paramètre est le nom du plug-in. Ce nom est à usage interne uniquement et doit être compatible JSON. Le troisième paramètre est le titre du plug-in. Essentiellement, c’est la même chose que le nom, mais le titre est affiché dans l’interface graphique. Plus précisément, c’est le titre de la section de données dans la fenêtre des données client.

Tous les arguments nommés après le titre sont sauvegardés comme options. Bien que le système de plug-ins n’exige aucune option, Snoopy supporte l’option js. Cette option spécifie l’URL (du côté du navigateur, pas du côté de Snoopy/du serveur) du composant JavaScript de ce plug-in.

root@kitploit:~
def ssid_list(mac):

Ce plug-in est une simple fonction. Elle accepte une chaîne d’adresse MAC, comme défini pour les plug-ins client-data. Le nom de l’appelable n’est pas utilisé.Le corps de cet exemple de plug-in effectue simplement une requête SQLAlchemy qui fait essentiellement SELECT DISTINCT probe_ssid FROM probes WHERE device_mac=$mac et retourne les résultats sous forme de liste. Les valeurs de retour des plug-ins sont généralement ajoutées dans le cadre d'une réponse JSON. Par conséquent, les résultats ont la limitation de devoir être compatibles avec JSON (comme supporté par la fonction jsonify() de Flask).

Aussi simple que cela !

Front-end

Les plug-ins front-end pour les données client sont appelés gestionnaires de données client. Ils sont enregistrés via la fonction Snoopy.registerPlugin(sectionName, dataHandler). sectionName est le nom de la section de données que le gestionnaire de données souhaite traiter. Ce nom est le même que le nom du plug-in back-end qui a généré les données. dataHandler doit être une fonction avec la signature suivante : function($section, clientData) {...}. $section est un objet jQuery de l'élément div où le gestionnaire de données peut afficher des données ou appliquer des modifications. Les données client (générées par le plug-in back-end) sont fournies dans le paramètre clientData.

Étant donné que la seule sortie autorisée du gestionnaire de données est les modifications apportées au div donné ($section), aucune valeur de retour n'est nécessaire.

Télécharger l’outil
  • Installation et exécution de Snoopy sur le Drone Vous pouvez avoir jusqu’à 100 drones (si vous en voulez plus, consultez le code source ou envoyez-moi un email, il n’y a pas de limitation réelle). L’installation consiste à télécharger le pack de configuration depuis l’étape précédente et à exécuter le script de configuration correspondant. Pour le Nokia N900, une icône sera placée sur votre bureau. Exemple :

    root@kitploit:~
     haxor@drone001# wget http://snoopy-server.com/secretdir/drone001.tar.gz
     haxor@drone001# tar xzvf drone001.tar.gz
     haxor@drone001# cd snoopy && ./setup_n900.sh
    
  • Recherche des emplacements des SSID Créez un compte sur www.wigle.net et définissez vos identifiants via « Configurer les options du serveur »

  • Interface web Vous pouvez accéder à l’interface web via http://votre-serveur-snoopy:5000/. Vous pouvez écrire vos propres plugins pour parcourir et afficher les données. Walter a facilité les choses pour vous (consultez l’annexe de ce document).

  • Exploration des données avec Maltego Dans le menu du serveur Snoopy, allez dans « Configurer les options du serveur » > « Maltego ». Vous y trouverez des URL pour télécharger les entités, machines et transformations de Snoopy. Pour utiliser les transformations Maltego, vous devrez :

    • Ajouter les entités Snoopy à Maltego
    • Créer un compte sur http://cetas.paterva.com/TDS/
    • Vous connecter à cetas.paterva.com/TDS/
    • Créer une seed sur cetas.paterva.com/TDS/
    • Ajouter les URL de transformation à la seed créée
    • Ajouter la seed dans Maltego (Gérer > Découvrir les transformations (Avancé))
    • Saisir le nom « Snoopy » et l’URL de votre seed
    • Ajouter les machines Snoopy dans la section machines