
Добро пожаловать в репозиторий симулятора автомобиля для мастер-класса EvilDoggie! Этот инструмент воспроизводит среду CAN-шины автомобиля, использовавшуюся на сессии Black Hat Arsenal 2025. Разработанный компанией Faraday Security, симулятор эмулирует несколько электронных блоков управления (ЭБУ) в автомобиле, позволяя исследователям отрабатывать атаки на CAN-шину с помощью EvilDoggie в контролируемых условиях.
Симулятор поддерживает как последовательные (serial), так и SocketCAN интерфейсы, обеспечивая бесшовную интеграцию с аппаратурой Doggie для перехвата, инъекции и манипуляции CAN-сообщениями. Он предназначен для образовательных целей в области автомобильной безопасности и сосредоточен на таких задачах, как подмена VIN, разблокировка дверей, нарушение работы круиз-контроля, переключение подушек безопасности, отключение ABS и других — подробнее в прилагаемых руководствах к мастер-классу.
Этот симулятор с открытым исходным кодом распространяется под лицензией MIT и является частью более широкой экосистемы Doggie/EvilDoggie. Полные сведения о прошивке и аппаратуре см. в основном репозитории.
Полное руководство по мастер-классу см. в документации воркшопа evilDoggie.

Чтобы запустить симулятор, вам понадобятся 2 Doggies (один для TX и один для RX); рекомендуются 3 Doggies — один как атакующий (EvilDoggie) и два как эмулируемые ЭБУ, — чтобы сообщения распространялись по реальной физической шине.
Создайте виртуальное окружение Python для изоляции зависимостей:
python3 -m venv doggie_venv
source doggie_venv/bin/activate
Установите необходимые пакеты из requirements.txt:
python3 -m pip install -r requirements.txt
Установите пакет симулятора локально:
python3 -m pip install -e .
Запустите симулятор, используя последовательные или SocketCAN интерфейсы. Для настройки с 2 Doggies подключите два устройства Doggie к вашей системе (например, через USB) и определите их порты (например, /dev/ttyUSB0 и /dev/ttyUSB1). Используйте опцию --serial для последовательных подключений или --socketcan для виртуальных CAN-интерфейсов.
Пример с последовательными интерфейсами (при необходимости измените порты и скорости передачи):
python3 -m doggie_lab --serial /dev/ttyUSB0@921600 /dev/ttyUSB1@921600 --speed 500000
--serial TX_PORT RX_PORT: укажите последовательные порты и скорости передачи (например, /dev/ttyUSB0@115200 /dev/ttyUSB1@115200).--speed SPEED: задайте скорость CAN-шины в битах в секунду (по умолчанию: 500000).Для SocketCAN (виртуальные интерфейсы):
python3 -m doggie_lab --socketcan can0 can1 --speed 500000
--socketcan TX_CAN RX_CAN: используйте интерфейсы SocketCAN (например, can0 can1).Выполните python3 -m doggie_lab --help, чтобы увидеть все опции.
Для быстрого тестирования без аппаратуры вы можете смоделировать один виртуальный CAN-интерфейс в Linux с помощью SocketCAN. Это идеально подходит для базового перехвата или инъекции сообщений, но не воспроизводит физическое поведение шины, необходимое для продвинутых заданий.
Настройка виртуального CAN-интерфейса:
sudo modprobe vcan.sudo ip link add dev vcan0 type vcan и sudo ip link set up vcan0.--socketcan vcan0 vcan0 (используя один и тот же интерфейс для замыкания TX/RX).Однако для всех заданий мастер-класса необходимы физические устройства Doggie, чтобы наблюдать реальные взаимодействия на шине, такие как распространение ошибок и конкуренция за шину. Используйте минимум 3 Doggies: два для эмуляции ЭБУ (TX/RX) и один в качестве атакующего EvilDoggie, подключённого к общей физической шине.
requirements.txt (например, python-can, tkinter для пользовательского интерфейса).Этот симулятор предназначен только для исследований и обучения. Не используйте его на реальных автомобилях. Приветствуются любые вклады — открывайте issue или PR для улучшений!
Этот проект распространяется под лицензией MIT. Подробности см. в файле LICENSE.