
Simulateur de bus CAN pour véhicules, conçu pour s’entraîner aux attaques offensives en sécurité automobile. Il émule plusieurs ECU afin de permettre l’écoute (sniffing), l’injection et la manipulation de messages CAN dans un environnement de laboratoire contrôlé.
Bienvenue dans le dépôt du simulateur de voiture de l'atelier EvilDoggie ! Cet outil reproduit l'environnement CAN Bus utilisé lors de la session Black Hat Arsenal 2025. Développé par Faraday Security, le simulateur émule plusieurs unités de contrôle électronique (ECU) d'un véhicule, permettant aux chercheurs de s'entraîner aux attaques offensives sur le bus CAN avec EvilDoggie dans un environnement contrôlé.
Le simulateur prend en charge les interfaces série et SocketCAN, permettant une intégration transparente avec le matériel Doggie pour l'écoute, l'injection et la manipulation de messages CAN. Il est conçu à des fins éducatives dans le domaine de la sécurité automobile, en se concentrant sur des défis tels que l'usurpation du VIN, le déverrouillage des portes, la confusion du régulateur de vitesse, l'activation/désactivation des airbags, la déconnexion de l'ABS, et plus encore — comme détaillé dans les guides de l'atelier joints.
Ce simulateur open source est sous licence MIT et fait partie de l'écosystème plus large Doggie/EvilDoggie. Pour plus de détails sur le firmware et le matériel, visitez le dépôt principal.
Référez-vous à la documentation de l'atelier EvilDoggie pour un guide complet de l'atelier.

Pour exécuter le simulateur, vous avez besoin de 2 Doggies (un pour TX et un pour RX). 3 Doggies sont recommandés — un comme attaquant (EvilDoggie) et deux comme ECU simulés — pour garantir que les messages circulent sur un véritable bus physique.
Créez un environnement virtuel Python pour isoler les dépendances :
python3 -m venv doggie_venv
source doggie_venv/bin/activate
Installez les paquets requis depuis requirements.txt :
python3 -m pip install -r requirements.txt
Installez le paquet du simulateur localement :
python3 -m pip install -e .
Lancez le simulateur en utilisant les interfaces série ou SocketCAN. Pour une configuration à 2 Doggies, connectez deux Doggies à votre système (par exemple, via USB) et identifiez leurs ports (par exemple, /dev/ttyUSB0 et /dev/ttyUSB1). Utilisez l'option --serial pour les connexions série ou --socketcan pour les interfaces CAN virtuelles.
Exemple avec des interfaces série (ajustez les ports et les débits en bauds si nécessaire) :
python3 -m doggie_lab --serial /dev/ttyUSB0@921600 /dev/ttyUSB1@921600 --speed 500000
--serial TX_PORT RX_PORT : spécifiez les ports série et les débits en bauds (par exemple, /dev/ttyUSB0@115200 /dev/ttyUSB1@115200).--speed SPEED : définissez la vitesse du bus CAN en bits par seconde (défaut : 500000).Pour SocketCAN (interfaces virtuelles) :
python3 -m doggie_lab --socketcan can0 can1 --speed 500000
--socketcan TX_CAN RX_CAN : utilisez les interfaces SocketCAN (par exemple, can0 can1).Exécutez python3 -m doggie_lab --help pour toutes les options.
Pour des tests rapides sans matériel, vous pouvez simuler une seule interface CAN virtuelle sous Linux en utilisant SocketCAN. C'est idéal pour l'écoute de base ou l'injection, mais cela ne reproduira pas les comportements physiques du bus nécessaires aux défis avancés.
Configuration d'une interface CAN virtuelle :
sudo modprobe vcan.sudo ip link add dev vcan0 type vcan et sudo ip link set up vcan0.--socketcan vcan0 vcan0 (en utilisant la même interface pour la boucle TX/RX).Cependant, pour tous les défis de l'atelier, des Doggies physiques sont essentiels pour observer les interactions réelles sur le bus, telles que la propagation des erreurs et la contention. Utilisez au moins 3 Doggies : deux pour la simulation des ECU (TX/RX) et un comme attaquant EvilDoggie connecté au bus physique partagé.
requirements.txt (par exemple, python-can, tkinter pour l'interface utilisateur).Ce simulateur est uniquement destiné à la recherche et à la formation. Ne l'utilisez pas sur des véhicules réels. Les contributions sont les bienvenues — ouvrez des issues ou des PR pour des améliorations !
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.