- PVSM.RU - https://www.pvsm.ru -

Реверс-инжиниринг трафика на шине CAN

Реверс-инжиниринг трафика на шине CAN - 1


Необработанный сигнал шины CAN

Шина CAN (Controller Area Network) стала стандартом в автомобилестроении: все новые автомобили обязаны поддерживать CAN (с 2001 в Европе и с 2008 в США). Кроме автомобилей, CAN применяется и в широком ряде других устройств. Производители диагностического оборудования для CAN рекламируют [1] его применение, кроме разнообразной автомобильной техники, в мотоциклах, автопогрузчиках, судах, шахтных поездах, батискафах, беспилотных самолетах и пр. Давайте разберемся, что из себя представляет CAN.

В автомобилях используется несколько CAN; например, в Ford Focus таких шин четыре — три высокоскоростных (500 kbps) для управления мотором, тормозами, приборной панелью и т.п., и одна низкоскоростная (125 kbps) для управления дверьми, фарами, подушками безопасности, аудиосистемой, кондиционером и всем прочим. Подключившись к CAN, можно имитировать сигналы от любых устройств в автомобиле — например, управлять кондиционером с приложения на телефоне [2] или накручивать одометр без движения автомобиля. Подключив к шине Arduino и реле, можно управлять с приборной панели дополнительной парковочной камерой [3]. Даже стартапы, работающие над беспилотными автомобилями, такие как Voyage [4], начинают создание прототипа с того, что в обычном серийном автомобиле подключаются к CAN и учатся имитировать сигналы от педалей и руля.

Для подключения к CAN в автомобиле обычно возле руля имеется разъем OBD-II (On-Board Diagnostics). https://commons.wikimedia.org/wiki/File:OBD_002.jpg [5] Адаптеры OBD2-USB для подключения компьютера к CAN стоят от $5 [6], и позволяют отслеживать весь трафик внутри автомобиля. Иногда разъем OBD-II защищен «аппаратным фаерволом», позволяющим принимать пакеты от устройств, подключенных к CAN, но не позволяющим передавать пакеты обратно на шину. В этом случае достаточно вывинтить разъем, и подключиться к проводам CAN вместо него.

Реверс-инжиниринг трафика на шине CAN - 2

Каждый пакет, передаваемый по шине CAN, состоит из ID передающего устройства (11 либо 29 бит), и до 8 байт передаваемых данных. Трафик, проходящий по шине при включении зажигания, может выглядеть как-то так:

Реверс-инжиниринг трафика на шине CAN - 3

Для анализа трафика CAN существует большое число инструментов — как коммерческих, так и OpenSource. Пакет can-utils [7] для Linux включает утилиту cansniffer, которая отображает для каждого CAN ID только последний отправленный пакет, и тем самым позволяет отслеживать изменения показаний каждого датчика на шине:

Реверс-инжиниринг трафика на шине CAN - 4

Для реверс-инжиниринга трафика CAN сингапурские исследователи, из доклада которых [8] я взял этот трейс, записали на видео приборную доску подопытного автомобиля, и затем соотнесли изменения на приборной доске с одновременными изменениями в трафике. Определив таким образом CAN ID датчика скорости и формат передаваемых им данных, они научились «подделывать» его пакеты, передавая на спидометр и на тахометр показания, не соответствующие действительности.

Надо понимать, что параллельно с передачей «поддельных» пакетов по шине продолжают передаваться и настоящие сигналы от датчика скорости. Чтобы тахометр показывал сфабрикованные показания, надо отслеживать передачу по шине настоящих показаний, и каким-либо образом их подавлять — например, сразу после обнаружения передачи CAN ID датчика скорости физически «глушить» шину, закорачивая линии данных. Более простой, чисто программный метод подавления настоящих показаний — сразу же после их передачи, пока тахометр еще не успел отреагировать, передавать «поддельные» пакеты. Например, следующий простой шелл-скрипт отслеживает передачу с CAN ID=0x0C9, и сразу же после нее передает сфабрикованный пакет при помощи утилиты cansend из состава все тех же can-utils:

candump can0 | grep " 0C9 " | while read line; do cansend can0 0C9#8021C0071B101000; done [9]

Даже хотя все устройства в автомобиле подключены к CAN, далеко не все их функции управляются через CAN. Например, на CAN в Ford Escape передаются сигналы о степени нажатия педалей газа и тормоза — но используются эти сигналы только блоком ABS, тогда как приводы дроссельной заслонки и тормозов соединены с педалями напрямую, минуя CAN.

C точки зрения безопасности ни о какой уязвимости в докладе сингапурцев речи не идет, потому что для передачи «поддельных» CAN-пакетов нужен физический доступ к шине. Кроме того, пакеты могут быть защищены контрольной суммой — например, в автомобилях Toyota последний байт каждого пакета должен [10] равняться сумме всех предыдущих (по модулю 256). Кроме этого, в Toyota для защиты от нежелательных пакетов используется фильтрация получателем — например, игнорируются повороты руля более чем на 5% от текущего значения.

Тем не менее исследователям безопасности удавалось получить к CAN и удаленный доступ: вначале [11] на небольшом расстоянии — через уязвимости в Bluetooth-модуле, подключенном к той же самой шине; а затем [12] через сотовую сеть Sprint, через которую внедорожники нескольких американских производителей получали данные о пробках на дорогах. Исследователи, продемонстрировавшие перехват управления Jeep Cherokee с расстояния в несколько миль, получили от Управления перспективных исследовательских проектов Министерства обороны США (DARPA) вознаграждение в 80 тысяч долларов. С тех пор многие автопроизводители объявили о собственных bounty-программах, обещающих выплаты от $1500 за каждую обнаруженную уязвимость. Таким образом, реверс-инжиниринг трафика на шине CAN может не только добавить вашему автомобилю новые возможности, но и существенно пополнить ваш кошелек.

Автор: oldadmin

Источник [13]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/proshivka/356191

Ссылки в тексте:

[1] рекламируют: https://www.csselectronics.com/screen/page/can-logger-use-case-study-examples

[2] управлять кондиционером с приложения на телефоне: https://news.voyage.auto/an-introduction-to-the-can-bus-how-to-programmatically-control-a-car-f1b18be4f377

[3] дополнительной парковочной камерой: https://hackaday.com/2019/05/09/sniffing-can-to-add-new-features-to-a-modern-car/

[4] Voyage: https://voyage.auto/

[5] https://commons.wikimedia.org/wiki/File:OBD_002.jpg: https://commons.wikimedia.org/wiki/File:OBD_002.jpg

[6] стоят от $5: https://aliexpress.ru/w/wholesale-obd2-usb-cable.html

[7] can-utils: https://github.com/linux-can/can-utils

[8] доклада которых: https://www.youtube.com/watch?v=sbqyLhveJco

[9] candump can0 | grep " 0C9 " | while read line; do cansend can0 0C9#8021C0071B101000; done: https://www.freecodecamp.org/news/hacking-cars-a-guide-tutorial-on-how-to-hack-a-car-5eafcfbbb7ec/#replay

[10] должен: http://illmatics.com/car_hacking.pdf

[11] вначале: https://www.usenix.org/legacy/events/sec11/tech/full_papers/Checkoway.pdf

[12] затем: https://www.kaspersky.com/blog/blackhat-jeep-cherokee-hack-explained/9493/

[13] Источник: https://habr.com/ru/post/515822/?utm_source=habrahabr&utm_medium=rss&utm_campaign=515822