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