Швейцарский нож для тестирования безопасности CAN-шины автомобилей. Модули: обнаружение ECU, fuzzing CAN-фреймов, сканирование UDS-сервисов, запись/воспроизведение сообщений, XCP-протокол, диагностика OBD-II. Работает с SocketCAN (Linux) и PEAK CAN-адаптерами.
pip install caringcaribou # Требует CAN-адаптер и SocketCAN sudo ip link set can0 up type can bitrate 500000 caringcaribou uds discovery -i can0
Дружелюбный инструмент для исследований безопасности автомобильных систем.
Эта работа была начата в рамках исследовательского проекта 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 включает следующие модули:
Выводит входящий трафик в stdout (терминал) или файл.
Подробности здесь: модуль dump
Модуль для отправки необработанных сообщений, используется для ручной отправки сообщений из командной строки или воспроизведения файлов дампов.
Подробности здесь: модуль send
Выводит все различные ID арбитража, используемые на шине CAN.
Подробности здесь: модуль listener
Подробности здесь: модуль fuzzer
Обнаруживает и использует различные сервисы ISO 14229-1. - discovery - Сканирует ЭБУ, поддерживающие диагностические сервисы - services - Сканирует диагностические сервисы, поддерживаемые ЭБУ - subservices - Перечисление подсервисов поддерживаемых диагностических сервисов ЭБУ - ecu_reset - Сброс ЭБУ - testerpresent - Принудительное поддержание активной elevated-сессии для ЭБУ - security_seed - Автоматический сбор сидов для определенного уровня доступа безопасности в определенной диагностической сессии - dump_dids - Вывод значений Динамических Идентификаторов Данных (DID) - read_mem - Чтение памяти ЭБУ - auto - Полностью автоматизированное диагностическое сканирование с использованием уже существующих подмодулей UDS
Подробности здесь: модуль uds
Модуль фаззинга для оценки случайности сидов безопасности UDS и тестирования. - seed_randomness_fuzzer - Фаззинг метода ECUReset для оценки случайности сидов - delay_fuzzer - Фаззинг задержки для целей со слабой реализацией случайности, для сопоставления полученной пары сид/ключ с задержкой, через которую можно запросить сид
Подробности здесь: модуль uds_fuzz
Обнаруживает и использует различные сервисы ISO 13400-2. - discovery - Сканирует ЭБУ, поддерживающие диагностические сервисы - services - Сканирует диагностические сервисы, поддерживаемые ЭБУ - ecu_reset - Сброс ЭБУ - security_seed - Запрос сидов безопасности у ЭБУ - testerpresent - Принудительное поддержание активной elevated-сессии для ЭБУ - dump_dids - Вывод значений Динамических Идентификаторов Данных (DID) - seed_randomness_fuzzer - Фаззинг метода ECUReset для оценки случайности сидов
Подробности здесь: модуль doip
Подробности здесь: модуль xcp
Примечание: Этот модуль заменен модулем UDS. Он по-прежнему поддерживается CC по причинам совместимости с предыдущими версиями.
Подробности здесь: модуль dcm
Запускает автоматизированные тестовые наборы Caring Caribou
Папка caringcaribou/utils содержит следующее:
Предоставляет абстракцию для доступа к шине CAN, механизмы перебора и т.д.
Содержит различные общие функции, преобразователи типов и т.д.
Определения констант
Реализация стандарта ISO-14229-1 для Универсальных Диагностических Сервисов (UDS).
Реализация стандарта ISO-15765-2 (ISO-TP). Это транспортный протокол, который позволяет отправлять сообщения длиннее 8 байт по CAN, разбивая их на несколько кадров данных.
Любое устройство для подключения к шине CAN (http://elinux.org/CAN_Bus#CAN_Support_in_Linux)
caringcaribou/modules/module_template.pymodule_main(args) (или скопируйте шаблон) в директории caringcaribou/modules.setup.py добавьте запись в раздел caringcaribou.modules, ссылаясь на ваш новый модуль следующим образом: my_module = caringcaribou.modules.my_modulepython setup.py installcaringcaribou -hЕсли ваш новый модуль находится в caringcaribou/modules/foo.py, вы запустите его командой caringcaribou foo.
Дополнительные аргументы (если есть) передаются в качестве аргументов функции module_main.
Целевой ЭБУ, использованный для разработки, — это разработка на базе STM32F107 от ArcCore под названием Arctic EVK-M3, но инструмент можно использовать для работы с любым ЭБУ, который общается по шине CAN.