Короткая версия истории уже разошлась: логистическая компания с электромобильным автопарком заказала аудит перед расширением зарядной инфраструктуры, а в итоге получила предупреждение о том, что обычный зарядный пистолет — это полноценный сетевой интерфейс с правами администратора. Разбираем, как именно это устроено технически, почему такая уязвимость почти никогда не попадает в чек-листы безопасников и что с ней делать на уровне конфигурации, а не только организационных мер.
Почему зарядный разъём — это не «просто провод»
В зарядных станциях стандарта CCS (Combined Charging System) и в DC-станциях используется не только силовая линия, но и линия управления — Control Pilot (CP) и Proximity Pilot (PP). Именно через CP поверх модуляции сигнала передаётся цифровой канал связи между станцией (EVSE — Electric Vehicle Supply Equipment) и электромобилем. Для этого применяется технология PLC (Power Line Communication) на базе HomePlug Green PHY — того же семейства протоколов, что используется в некоторых домашних сетевых адаптерах, только адаптированного под автомобильную специфику (стандарты ISO 15118 и DIN 70121).
Проблема в том, что этот канал изначально проектировался для обмена служебными данными «станция — автомобиль»: параметры зарядки, идентификация, тарификация, старт/стоп сессии. Но в реализациях многих производителей эта же PLC-сеть логически не отделена от сети управления самой станцией — вплоть до того, что через неё можно получить IP-адрес в сегменте, откуда виден веб-интерфейс менеджмента, OCPP-соединение с центральной системой и иногда даже соседние устройства на площадке.
Как это эксплуатируется
Ниже — типовой сценарий атаки на такую инфраструктуру, собранный из практики пентестов подобных объектов. Оборудование минимальное: PLC-адаптер HomePlug Green PHY (используются как готовые EVSE-совместимые дongl'ы, так и модифицированные под автомобильный профиль устройства на базе Qualcomm/Atheros), ноутбук с Kali Linux и разъём-переходник для физического подключения к CP-линии кабеля — совокупно это укладывается в 10-15 тысяч рублей.
Шаг 1. Физическое подключение и получение сетевого линка
Адаптер подключается к CP/PP линиям зарядного кабеля (без разбора самого кабеля, только через диагностический разъём или переходник). После этого на интерфейсе появляется PLC-линк, аналогичный обычному Ethernet-соединению.
ifconfig eth1 up
sudo plctool -i eth1 -a
# вывод: обнаружены соседние PLC-устройства (SECC станции) в сети
Инструменты из семейства open-plc-utils (plctool, plcstat, chkpayload) изначально созданы для сервисной настройки HomePlug-устройств, но прекрасно работают и для разведки в PLC-сегменте зарядной станции.
Шаг 2. Обнаружение SECC и захват V2G-трафика
Станция (SECC — Supply Equipment Communication Controller) анонсирует себя через SECC Discovery Protocol (SDP) по IPv6 multicast. Это можно поймать даже без специализированных EV-инструментов — обычным сканером пакетов.
tcpdump -i eth1 -w evse_capture.pcap ip6 and udp port 15118
wireshark evse_capture.pcap -Y "v2gtp || homeplug_av"
В захвате видно SDP-запрос/ответ, далее — установление V2GTP-сессии (V2G Transfer Protocol, порт 15118 по умолчанию), в рамках которой станция обменивается с «автомобилем» служебными XML/EXI-сообщениями: идентификация, параметры сессии, иногда — данные аутентификации по протоколу Plug & Charge (ISO 15118-2/-20).
Шаг 3. Получение IP в управляющем сегменте
Если станция не изолирует PLC-интерфейс от внутренней сети управления (частая ошибка конфигурации при инсталляции), устройство пентестера получает IP-адрес по DHCP или через ND (Neighbor Discovery) в том же VLAN, где находится веб-панель станции и OCPP-клиент.
nmap -sV -p- 192.168.50.0/24
PORT STATE SERVICE VERSION
80/tcp open http nginx (EVSE management UI)
443/tcp open https nginx
8080/tcp open http-alt WebSocket (OCPP 1.6-J)
502/tcp open modbus Modbus TCP (счётчик энергии)
Открытый Modbus TCP на счётчике энергии — отдельная находка: через него можно как читать, так и в отдельных прошивках модифицировать показания учёта, то есть буквально исказить биллинг зарядной сессии.
Шаг 4. Атака на веб-интерфейс и OCPP
Панель управления станцией нередко работает с дефолтными или слабыми учётными данными — производители далеко не всегда меняют заводской пароль при инсталляции.
hydra -l admin -P /usr/share/wordlists/rockyou.txt -s 443 https-post-form \
"192.168.50.10/login:user=^USER^&pass=^PASS^:Invalid credentials"
[443][http-post-form] host: 192.168.50.10 login: admin password: admin123
Отдельный класс проблем — сама реализация Central System по протоколу OCPP. В открытых проектах централизованного управления зарядными станциями (в частности, известные CVE в open-source платформах для OCPP 1.6, включая SQL-инъекции класса CVE-2021-33372 и проблемы аутентификации CVE-2021-32858) неоднократно фиксировались уязвимости, позволяющие без авторизации получать доступ к сессиям зарядки, менять тарифы и отправлять команды Remote Start/Stop Transaction на все подключённые станции сразу.
sqlmap -u "https://192.168.50.10/api/chargepoints?id=1" --batch --dbs
sqlmap identified the following injection point(s):
Parameter: id (GET)
Type: boolean-based blind
available databases [3]:
[*] ocpp_core
[*] information_schema
[*] mysql
Дальше — сканер уязвимостей по готовым шаблонам для веб-панелей EVSE-оборудования:
nuclei -u https://192.168.50.10 -t exposures/ -t default-logins/
[default-login] [http] [medium] EVSE-Management-Panel default credentials
[exposed-panel] [http] [info] OCPP WebSocket endpoint exposed without auth
Что и почему сработало бы дальше
Получив доступ к управляющему сегменту станции, атакующий переходит от «интересной находки» к реальному ущербу в несколько предсказуемых шагов:
- Массовая остановка зарядки — команда Remote Stop Transaction через OCPP на все станции сразу, либо перевод их в состояние Faulted через подмену диагностических кодов CP-сигнала.
- Подмена учёта энергии — запись в Modbus-регистры счётчика или перехват MeterValues в OCPP-сообщениях, что напрямую бьёт по биллингу B2B-клиентов, если зарядка тарифицируется.
- Латеральное перемещение — если станции физически находятся в общей VLAN с остальной инфраструктурой склада, дальше в ход идут стандартные техники: ARP-спуфинг (
arpspoof), сканирование доступных SMB-шар (smbclient -L //192.168.50.0/), поиск учёток в открытых конфигах, попытки достучаться до сервера 1С или видеонаблюдения через уже скомпрометированный сегмент. - Закрепление — модификация прошивки станции или добавление скрытого пользователя в веб-панель управления, чтобы сохранить доступ после устранения очевидных следов.
Ключевая ошибка в таких инцидентах — не «слабый пароль», а архитектурная: диагностический/PLC-интерфейс, который физически доступен любому человеку с зарядным кабелем в руках, логически не отделён от критичной инфраструктуры предприятия.
Как закрыть
Устранение подобной уязвимости — это в первую очередь сетевая архитектура, а не патч на одном устройстве.
- Вынести все EVSE в отдельный VLAN/подсеть без маршрутизации в основную сеть предприятия. На уровне коммутатора — ACL, полностью блокирующий трафик от подсети станций к серверам, камерам и 1С:
access-list 110 deny ip 192.168.50.0 0.0.0.255 192.168.10.0 0.0.0.255 access-list 110 permit ip any any - Закрыть диагностический доступ физически — исключить возможность подключения стороннего адаптера к CP/PP линиям без вскрытия корпуса станции либо использования сервисного ключа производителя.
- Обновить прошивку станции и Central System до версий, где закрыты известные проблемы аутентификации OCPP, и перейти на OCPP 2.0.1 Security Profile 3 (TLS + mutual authentication) вместо небезопасного WebSocket без шифрования.
- Отключить Modbus TCP от внешнего доступа или ограничить его только локальным контроллером станции, без выхода в управляющую сеть.
- Сменить дефолтные учётные данные веб-панели управления и включить блокировку после нескольких неудачных попыток входа — это закрывает брутфорс через
hydra. - Настроить мониторинг аномалий: правило IDS/Suricata на нетипичные SDP-запросы или на появление нового устройства в PLC-сегменте, плюс уведомление ответственному лицу при любой нештатной попытке подключения к диагностическому порту.
- Регулярно тестировать зарядную инфраструктуру отдельно от остального ИТ-периметра — это тот класс оборудования, который обычные ИТ-аудиты просто не включают в область проверки.
В описанном кейсе весь комплекс мер занял два дня и обошёлся кратно дешевле одного дня простоя доставки. Но сама история показательна: чем «физичнее» устройство выглядит для пользователя — розетка, кабель, зарядный пистолет — тем реже про него вспоминают в контексте кибербезопасности, и тем охотнее там оседают архитектурные ошибки, которые в ИТ-периметре давно считаются неприемлемыми.
