Кибератаки, воровство и вандализм — сервисы аренды самокатов — кикшеринги кажутся довольно уязвимыми, но так ли это? В одном из недавних проектов команда Бастион проверяла защиту Юрент — это отличный повод узнать подробности из первых уст.
Мы попросили директора по IT Юрент Андрея Калинина рассказать о том, почему пенсионеры угоняют самокаты, сталкиваются ли в компании с киберугрозами и как устроена система безопасности шеринговых сервисов.
Взлом не оправдывает цель
Как и многие другие публичные сервисы, мы регулярно фиксируем парсинг открытых портов, кто-то прощупывает наш периметр, случаются DDoS-атаки. Некоторые пользователи ищут уязвимости в приложениях. Обычно, чтобы бесплатно покататься, но это редкие случаи.
Другой возможный вектор атак направлен на соединение между нами и самокатом. В теории злоумышленник может попытаться встать в разрыв, «притвориться» сервером и перехватить контроль — отправлять запросы: включить-выключить. Но связь идет через сотовую сеть и тут, как с любой хакерской атакой, на первый план выходит целесообразность. Атаковать оператора сотовой связи, чтобы бесплатно покататься на самокате? Это примерно как купить машину, чтобы получить блокнотик в подарок.
Есть способы и попроще. Так, некоторые хитрецы пытаются абузить акции. Они заводят виртуальные номера, прокатывают бонусы, которые даются за регистрацию и ввод промокодов, бросают аккаунт, а на следующий день заводят новый. Заметив это, мы ввели лимиты на промокоды, чтобы их нельзя было вводить один за другим. Злоупотреблять ими стало сложнее и число мошенников уменьшилось. Оставшихся не так много, чтобы с ними нельзя было справиться вручную: мы блокируем доступ к сервису по IP или ограничиваем скорость, если мошенник уже успел взять самокат в аренду.
Наша основная проблема и головная боль — защита транспорта, ведь он всегда на виду и буквально разбросан по всей стране.
«Оно же тут бесхозное стоит»
Транспорт пытаются своровать постоянно, с первого дня работы. Мы начинали с велосипедов, поставили их на Розе Хутор в 2018 году — не прошло и дня, как их унесла группа товарищей без гражданства. Когда пропажу нашли, оказалось, что украли просто так, можно сказать, из любопытства: «Оно же тут бесхозное стоит».
Сейчас, в общем-то, ничего не изменилось. Никакой системы у преступников не прослеживается. Группировок, ворующих самокаты ради батареек, я, если честно, не видел. Из них вытаскивают «мозги» — трекер для удаленного управления самокатом, превращают транспорт в «гражданский» и перепродают. Чтобы самокаты было сложнее продать, мы отказались от наклеек на стойку и стали их красить.
Впрочем, бывают и другие мотивы. Помню, запустили прокат в одном региональном городе с красивой набережной. Начиналось все хорошо, а потом самокаты с набережной стали загадочно перемещаться в кусты и подворотни.
Оказалось, что пара пенсионеров пошла войной на «этих буржуев», которые своими самокатами обдирают людей как липку. Они прятали самокаты в полной уверенности, что спасают честных граждан от жадных капиталистов. Ни дать ни взять, Робин Гуды.
Воровство неизбежно. В кикшеринге это фактически часть бизнес-модели, — мы закладываем на кражи отдельный бюджет. Но это не значит, что мы ничего не делаем, чтобы обезопасить наши активы.
От скрининга пользователей к наблюдению за самокатами
Когда мы только начинали работать, идея кикшеринга многим казалась авантюрой. Просто поставить самокаты на улице и без охраны? В России?!
Мы и сами беспокоились на этот счет и сперва тестировали разные схемы: брали предоплату, верифицировали клиентов — запрашивали фото паспорта и в полуавтоматическом режиме искали данные о пользователе в стоп-списках вроде базы приставов. Но быстро поняли, что это тормозит развитие: предоплата сужает воронку продаж, а верификация блокирует работу поддержки.
Тогда решили рискнуть: убрали сложную регистрацию, перестали снимать деньги заранее. Теперь клиентский путь устроен так: скачать приложение, авторизоваться и привязать банковскую карту. Чтобы арендовать самокат, нужно отсканировать QR-код на руле. Затем сервис зарезервирует на счете сумму, которая пойдет на оплату поездки. Завершить аренду можно в любой зоне парковки, отмеченной на карте в приложении. Через него же выключается сам самокат. Сервис списывает сумму, равную стоимости поездки, и возвращает остаток на счет.
Мы больше не собираем персональные данные. Со стороны клиента все устроено максимально просто: приложение запрашивает только номер телефона и согласие с пользовательским соглашением, в котором прописаны правила использования сервиса. Вместо того, чтобы пытаться подстраховаться за счет клиентов, мы полагаемся на систему мониторинга состояния и контроля местоположения самокатов.
Высоконагруженный мониторинг
Управление арендой реализовано через классические веб-запросы, которые поступают из приложения на сервер. Сервер, в свою очередь, обращается к трекеру, установленному на самокате.
Трекер — то, что отличает шеринговый самокат от обычного. Это блок, который управляет самокатом и передает телеметрию: положение самоката в пространстве (стоит или лежит), температурные показатели, уровень заряда и мощность сигнала сотовой сети. Некоторые трекеры позволяют удаленно обновлять и перепрошивать ПО, другие — открывать деку, в которой находится батарея. Именно трекер позволяет регулировать скорость электросамоката, например, замедлять его в зонах с повышенной концентрацией пешеходов.
Внутри каждого трекера — GPS и GSM-модуль с внешней SIM-картой. Такой блок можно купить отдельно и установить самостоятельно. Адрес сервера зашивается в прошивку.
Когда-то мы именно так и делали: брали обычные самокаты и перепрошивали буквально на коленке.
Сейчас чаще покупаем самокаты с уже предустановленными трекерами, но интеграций по-прежнему много. Их внедряет научно-инженерный отдел. Это необходимость: у нас большой разнообразный парк, а трекеры не всегда идеально подходят ко всем моделям самокатов.
Для каждого типа трекеров мы пишем отдельную группу микросервисов — драйверы. Они нужны для того, чтобы разобрать проприетарный протокол конкретного вендора, преобразовать и направить в шину на базе RabbitMQ. Драйвер передает данные по AMQP в бэкенд на базе .Net.
Когда с самокатом что-то происходит, например, меняется его местоположение, трекер посылает запрос наверх. Примерно 75 тыс. самокатов отправляют сообщения на сервер в среднем раз в минуту. Во время движения частота обращений составляет один раз в 1–5 секунд. Нашу платформу вполне можно назвать высоконагруженной.
Раньше у нас была большая красивая карта, на которой цветными метками отображались самокаты, но по мере роста парка, данных стало так много, что UI перестал справляться. Да и разобраться во всех этих точках было совершенно невозможно.
Сейчас операторы следят за таблицами, где отображаются только те самокаты, с которыми происходит что-то подозрительное. Нам пришлось разработать систему фильтров и подобрать константы, чтобы в эти списки не попадали самокаты, которые на полсекунды потеряли связь с сервером или сдвинулись на полметра. Кстати, эта же система позволяет следить за зарядом, поломками и координировать работу техподдержки.
Если выключенный транспорт перемещается за пределы парковочной зоны или перестает посылать статусы, поднимается тревога. Тогда в дело вступает служба безопасности, которая занимается угонами. У них прямая связь с правоохранительными органами и бывшие оперативники в штате. Отработана процедура доступа к городским камерам.
В результате безопасность самокатов напрямую зависит от того, насколько хорошо мы обрабатываем телеметрию. Одно время с этим были проблемы.
Самое узкое место в этой системе — драйвера, у которых есть физическое соединение с самокатом. Если микросервис драйвера умирает, мы можем одномоментно потерять все TCP-соединения. Или, если не хватит мощности, появится второй pod, который не сможет принять нужные коннекты, и ребалансировка не произойдет. Так или иначе, мы потеряем массу информации о том, что происходит с нашим парком. Чтобы решить эту проблему, в прошлом году мы перевели самокаты на MQTT-протокол и теперь кладем в него весь TCP-трафик. Если один из драйверов «умирает», MQTT как обычный брокер копит очередь, пока не поднимется новый сервис, готовый принять эти сообщения. Три драйвера могут обслуживать примерно 10 тыс. самокатов, потому что, в отличие от четких TCP-соединений, балансировка идет равномерно.
Безопасность, как процесс
Мне кажется, у нас получился отлаженный рабочий механизм и статистика это подтверждает. Большинство украденных самокатов все равно к нам возвращается. У нас воруют — мы находим, процент примерно одинаковый. Однако, безопасность, в том числе и информационная, — это не состояние, а процесс и мы продолжаем его совершенствовать.
Мы работаем над автоматизацией инструментов для работы с угрозами. Например, сейчас некоторые вещи делаются вручную: есть системы мониторинга, алерты, которые подсвечивают инциденты, но решения по ним принимают люди. Планируем создать систему, которая автоматизирует реагирование: например, автоматически включит ограничение скорости и заблокирует самокат после того, как пользователь остановится.
Мы серьезно занялись внутренней безопасностью. У нас распределенные команды, и удаленка была заложена в фундамент компании еще до того, как это стало мейнстримом. Основные сервисы — внутренние базы данных, тестовые хранилища, 1С — закрыты VPN, но на текущем этапе необходимо решать вопрос с разграничением моделей доступа. Дело в том, что по мере роста все сложнее контролировать потенциальные утечки, особенно в сезон, когда много сотрудников работают «в полях».
В этом году усилим команду, отвечающую за кибербезопасность: планируем проводить регулярные пентесты, анализировать результаты и собирать бэклог для команды поддержки. Сейчас это одна из ключевых задач: компания перешла из категории стартапа в зрелый проект, мы становимся более заметными с точки зрения рынка. В таком взрывном росте есть как плюсы, так и минусы: всегда найдется кто-то, кто захочет проверить тебя на прочность.