company_banner

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


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

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

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

    Для подключения к CAN в автомобиле обычно возле руля имеется разъем OBD-II (On-Board Diagnostics).

    image

    Адаптеры OBD2-USB для подключения компьютера к CAN стоят от $5, и позволяют отслеживать весь трафик внутри автомобиля. Иногда разъем OBD-II защищен «аппаратным фаерволом», позволяющим принимать пакеты от устройств, подключенных к CAN, но не позволяющим передавать пакеты обратно на шину. В этом случае достаточно вывинтить разъем, и подключиться к проводам CAN вместо него.



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



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



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

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

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

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

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

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

    RUVDS.com
    VDS/VPS-хостинг. Скидка 10% по коду HABR

    Комментарии 16

      +1
      сразу после обнаружения передачи CAN ID датчика скорости физически «глушить» шину, закорачивая линии данных.

      Вряд ли получится, не получив подтверждения о передачи пакета, датчик скорости перепошлёт его.
        0
        Подтверждение в CAN шине — это всего один бит, который можно имитировать одновременно с порчей пакета.
          +1
          Передатчик при передаче использует контроль пассивных битов для обнаружения коллизий и с большой вероятностью заметит «порчу пакета» ещё до окончания передачи. С последующим повтором через таймаут коллизии (и этот повтор тоже нужно «испортить», что тоже будет обнаружено передатчиком). В результате через некоторое время у передающего сработает ограничение количества повторов передачи и он уйдёт в аварийный режим (тут уже как прошивка организована).
          «Испортить» же активный бит ещё нужно суметь — там нагрузочная способность очень приличная и речь, фактически, идёт о коротком замыкании, при котором результат приёма сообщения каждым конкретным абонентом может определяться сопротивлением проводки и контактов.
        0
        интересно, а в кан летит с хороей скоростью инфа о скорости каждого колеса? ABS блок её точно снимает, но можно ли легко эту информацию почитать на ходу?
          0
          Нужна ли эта информация какому то другому блоку (например приборной панели)? Если нет — ее не будет в CAN шине.
            0
            Скорее, приборная панель будет получать уже обработанное среднее значение скорости. Это минимум в четыре раза снизит нагрузку на шину. Поиск скорости колёс в шине стоит начинать с загадки «нужна ли какому-то из блоков в этой машине скорость всех четырех колес» — или просто покрутить все четыре колеса по отдельности под запись потока данных.
            +1

            Думаю летит, можете посмотреть репозиторий openpilot: 1, 2. Это ADAS который через CAN работает (как я понимаю собирает данные через CAN и инжектит свои пакеты для управления)

              0
              спс, буду смотреть
                0
                Спасибо за ссылку
                0
                зависит от машины. Минимальная скорость что я видел — 10мс.
                  0
                  Можно, есть неплохая программа CarScanner которая через OBD ELM327 на моей машине показывает скорость каждого колеса.
                    0
                    Один товарищ сделал GPS + Dead Reckoning на MEMS и скорости с колёс. Так вот он писал, что по CAN-шине данные с колёс вроде есть, но с жуткими задержками, для навигации неприемлемо. Учитывая что ABS и ESP это критически важные элементы безопасности, датчики Холла заведены в блок напрямую. Хотя, конечно, возможны варианты.

                    В результате он посчитал самым надёжным решением для установки своего комплекса — 4 магнитика на ободе и геркон.

                    Мне как-то меняли ступичный подшипник, я видел ту наклейку для датчиков ABS, такое резиновое кольцо с насечками из магнитного материала, по памяти диаметр около 7-8 см и насечки около 2 мм, итого около сотни импульсов на оборот колеса.
                    0
                    А где реверс? Прог для анализа CAN трафика полно. Реверсить его — вот это уже задача.
                    Нажал крутилку или кнопочку — ищи байт, который изменился.
                    Недавно реверсил CAN от Renault Twizi, который электросамокат, только с четырьмя колесами, вот была задачка =) Найти в нем токи привода, зарядки, обороты…
                    Правда закончилось все удачно — open source проектом от доброго немца, который уже все сделал.
                      +2
                      • НЛО прилетело и опубликовало эту надпись здесь
                          +1

                          Опять компания хостер пишет бесполезные статьи по не профильной теме.

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое