caringcaribou

Hardware & Industrial v0.6 · 28.03.2024 не обновлялся >2 лет

Швейцарский нож для тестирования безопасности CAN-шины автомобилей. Модули: обнаружение ECU, fuzzing CAN-фреймов, сканирование UDS-сервисов, запись/воспроизведение сообщений, XCP-протокол, диагностика OBD-II. Работает с SocketCAN (Linux) и PEAK CAN-адаптерами.

v0.6
28.03.2024 current
Добавлен 13.07.2026 · Обновлён 13.07.2026 · Hardware & Industrial
Установка
pip install caringcaribou
# Требует CAN-адаптер и SocketCAN
sudo ip link set can0 up type can bitrate 500000
caringcaribou uds discovery -i can0
переведено ИИ

Caring Caribou

Дружелюбный инструмент для исследований безопасности автомобильных систем.

Предпосылки

Эта работа была начата в рамках исследовательского проекта HEAVENS (HEAling Vulnerabilities to ENhance Software Security and Safety), но продолжает существовать как самостоятельный проект. Нам не хватало инструмента для тестирования безопасности автомобильных систем; инструмента с нулевым уровнем знания, который можно подключить к любой сети CAN и собрать информацию о том, какие сервисы и уязвимости в ней существуют. Этот проект — первый шаг.

Документация

Начало работы

Установите инструмент:

python setup.py install

Лучший способ понять, как использовать Caring Caribou — посмотреть на экран справки:

caringcaribou --help

Это выведет список всех доступных модулей внизу экрана. Справка для конкретных модулей работает аналогично. Например, экран справки для модуля send выводится командой

caringcaribou send --help

Справка по модулю всегда включает примеры использования. Если у модуля несколько подфункций, их справочные экраны похожи:

caringcaribou send message -h
caringcaribou send file -h

Более подробная информация по использованию доступна в документации.

Возможности и архитектура

Caring Caribou построен на основе главной точки входа в caringcaribou.py, которая управляет всем процессом. Это обеспечивает простую архитектуру для добавления новых модулей, которые располагаются в папке caringcaribou/modules.

Папка caringcaribou/utils содержит различные высокоуровневые реализации протокола CAN и общие функции, предназначенные для использования модулями.

Папка caringcaribou/tests содержит автоматизированные тестовые наборы, а /documentation — файлы документации (модули также здесь документируются).

Список модулей

Чистая установка Caring Caribou включает следующие модули:

dump - Дамп трафика CAN

Выводит входящий трафик в stdout (терминал) или файл.

Подробности здесь: модуль dump

send - Отправка пакетов CAN

Модуль для отправки необработанных сообщений, используется для ручной отправки сообщений из командной строки или воспроизведения файлов дампов.

Подробности здесь: модуль send

listener - Слушатель

Выводит все различные ID арбитража, используемые на шине CAN.

Подробности здесь: модуль listener

fuzzer - Фаззер CAN

  • random - отправляет случайные сообщения CAN
  • brute - перебирает все возможные сообщения, соответствующие заданной битовой маске
  • mutate - мутирует выбранные нибблы заданного сообщения
  • replay - воспроизводит файл журнала с предыдущей сессии фаззинга
  • identify - воспроизводит файл журнала и идентифицирует сообщение, вызывающее определенное событие

Подробности здесь: модуль fuzzer

uds - Универсальные диагностические сервисы

Обнаруживает и использует различные сервисы ISO 14229-1. - discovery - Сканирует ЭБУ, поддерживающие диагностические сервисы - services - Сканирует диагностические сервисы, поддерживаемые ЭБУ - subservices - Перечисление подсервисов поддерживаемых диагностических сервисов ЭБУ - ecu_reset - Сброс ЭБУ - testerpresent - Принудительное поддержание активной elevated-сессии для ЭБУ - security_seed - Автоматический сбор сидов для определенного уровня доступа безопасности в определенной диагностической сессии - dump_dids - Вывод значений Динамических Идентификаторов Данных (DID) - read_mem - Чтение памяти ЭБУ - auto - Полностью автоматизированное диагностическое сканирование с использованием уже существующих подмодулей UDS

Подробности здесь: модуль uds

uds_fuzz - Фаззер универсальных диагностических сервисов

Модуль фаззинга для оценки случайности сидов безопасности UDS и тестирования. - seed_randomness_fuzzer - Фаззинг метода ECUReset для оценки случайности сидов - delay_fuzzer - Фаззинг задержки для целей со слабой реализацией случайности, для сопоставления полученной пары сид/ключ с задержкой, через которую можно запросить сид

Подробности здесь: модуль uds_fuzz

doip - Диагностическая связь по протоколу Интернет

Обнаруживает и использует различные сервисы ISO 13400-2. - discovery - Сканирует ЭБУ, поддерживающие диагностические сервисы - services - Сканирует диагностические сервисы, поддерживаемые ЭБУ - ecu_reset - Сброс ЭБУ - security_seed - Запрос сидов безопасности у ЭБУ - testerpresent - Принудительное поддержание активной elevated-сессии для ЭБУ - dump_dids - Вывод значений Динамических Идентификаторов Данных (DID) - seed_randomness_fuzzer - Фаззинг метода ECUReset для оценки случайности сидов

Подробности здесь: модуль doip

xcp - Универсальный протокол измерения и калибровки (XCP)

  • discovery - Сканирует ЭБУ, поддерживающие XCP
  • info - XCP Get Basic Information. Получает информацию о возможностях XCP для ЭБУ
  • dump - XCP Upload. Используется для дампа памяти ЭБУ (например, SRAM, flash и загрузчик) в файл

Подробности здесь: модуль xcp

dcm - [устаревший] Диагностический модуль управления

Примечание: Этот модуль заменен модулем UDS. Он по-прежнему поддерживается CC по причинам совместимости с предыдущими версиями.

Подробности здесь: модуль dcm

test - Запуск тестовых наборов

Запускает автоматизированные тестовые наборы Caring Caribou

Список библиотек/утилит

Папка caringcaribou/utils содержит следующее:

can_actions.py

Предоставляет абстракцию для доступа к шине CAN, механизмы перебора и т.д.

common.py

Содержит различные общие функции, преобразователи типов и т.д.

constants.py

Определения констант

iso14229_1.py

Реализация стандарта ISO-14229-1 для Универсальных Диагностических Сервисов (UDS).

iso15765_2.py

Реализация стандарта ISO-15765-2 (ISO-TP). Это транспортный протокол, который позволяет отправлять сообщения длиннее 8 байт по CAN, разбивая их на несколько кадров данных.

Требования к оборудованию

Любое устройство для подключения к шине CAN (http://elinux.org/CAN_Bus#CAN_Support_in_Linux)

Требования к программному обеспечению

  • Python 3.7 или выше
  • python-can
  • достаточно современное ядро Linux

Расширение проекта новыми модулями

  • Шаблон для новых модулей доступен в caringcaribou/modules/module_template.py
  • Создайте файл Python с функцией module_main(args) (или скопируйте шаблон) в директории caringcaribou/modules.
  • В setup.py добавьте запись в раздел caringcaribou.modules, ссылаясь на ваш новый модуль следующим образом: my_module = caringcaribou.modules.my_module
  • Запустите python setup.py install
  • Проверьте, что модуль доступен, он должен быть указан в выводе команды caringcaribou -h

Если ваш новый модуль находится в caringcaribou/modules/foo.py, вы запустите его командой caringcaribou foo. Дополнительные аргументы (если есть) передаются в качестве аргументов функции module_main.

Цель разработки

Целевой ЭБУ, использованный для разработки, — это разработка на базе STM32F107 от ArcCore под названием Arctic EVK-M3, но инструмент можно использовать для работы с любым ЭБУ, который общается по шине CAN.

Участники

  • Проект HEAVENS, финансируемый VINNOVA
  • Christian Sandberg
  • Kasper Karlsson
  • Tobias Lans
  • Mattias Jidhage
  • Johannes Weschke
  • Filip Hesslund
  • Craig Smith (OpenGarages.org)
  • internot
  • Roos Hubrechtsen
  • Lear Corporation
  • sigttou
  • FearfulSpoon
  • Alex DeTrano
  • Thomas Sermpinis
  • Alexander Alasjö
  • Vincent de Chefdebien
Комментарии
Войдите, чтобы оставить комментарий