April 4, 2023

Как сломать MyVisit?

Что такое MyVisit?


MyVisit — приложение для заказа (бронирования) очередей на получение государственных и около-государственных услуг, которые оказывают различные министерства Израиля и прочие государственные организации.

MyVisit разрабатываеся израильской фирмой Qnomy. Эта фирма занимается разработкой решений для организации записей на посещение, и продает свои решения разным бизнесам и правительственным организациям. Например, если верить поиску, среди их клиентов правительство Австралии и армия США.

Приложение начало работать в 2013-м году, и поначалу являлось способом прийти в назначенное время в назначенное место, и получить нужную услугу без очереди (в противовес ожиданию в “живой” очереди). Однако, на волне карантина в 2020-м году, когда количество человек в одном помещении стало строго регулироваться, произошел полный переход на запись через myVisit.

Наиболее востребованные госуслуги для граждан — выпуск биометрических документов: теудат зеут (ТЗ, удостоверение личности) и даркон (загранпаспорт). При этом, эти же услуги являются кульминацией процесса алии: абсолютно всем новым репатриантам необходимо получить ТЗ, и подавляющему большенству также нужен даркон.

В момент, когда произошел окончательный переход на myVisit, система рухнула.

В чем проблема?

Практически сразу после полного перехода на myVisit стало очевидно, что система не справляется с поставленными задачами: пользователи, которые хотели заказать очередь на получение госуслуги с биометрией, видели доступные слоты на запись примерно через 6 месяцев с момента поиска.

В это же время, начали появляться десятки нелегальных организаций, которые предлагали за деньги организовать очередь за короткий срок, который исчисляется днями. Все эти организации объединяют одни и те же признаки: они нелегальны, у них черная касса, они не дают никаких гарантий, рекламируются в Telegram, и самое главное — все они паразитируют на myVisit.

Я попытаюсь объяснить, почему такое возможно, и как это можно было бы исправить.

Изъяны myVisit

У Qnomy есть их центральная часть их системы — бекенд для их продуктов, который называется Q-Flow. При этом, продукты вроде myVisit являются клиентами для Q-Flow, и используют его API.

Основные претензии вызывает непосредственно механизм общения myVisit (клиент) и Q-Flow (сервер). Вот основные проблемы, на кторые стоит обратить пристальное внимание:

  • Нет валидации номера ТЗ (теудат зеут). При оформлении заявки на запись, ТЗ —обязательное поле. Вот только myVisit валидирует только то, что введённый пользовательский ввод соответствует формальным правилам, по которым генерируются все ТЗ. Эти алгоритмы не представляют из себя тайны — например, по ссылке можно найти подробное объяснение алгоритма проверки вадидности с примером на JavaScript. Таким образом, можно отправлять любой номер ТЗ — myVisit будет проверять его валидность, но не подлинность.
  • На один и тот же номер телефона можно регистрировать любое количество посещений. Благодаря этому, мошенникам достаточно регистрировать все доступные слоты на себя, а потом уже передавать слоты покупателям (это можно сделать несколькими разными способами, самый простой — отменить запись и сразу же ее перезаписать с “правильными” данными)
  • В мобильном приложении можно проверять и бронировать доступные записи без регистрации.Единственное, что пользователь должен ввести — номер телефона (с него потом можно будет изменить детали встречи) и ответ на капчу, которая примитивна и решается с помощью стандартных фреймворков computer vision в два счета.
  • Нету никаких ограничений rate limits — это значит, что запрос на получение доступных слотов можно выполнять постоянно, каждую секунду, получая таким образом самым первым информацию о доступных слотах для записи.
  • Код мобильного приложения доступен любому желающему. Поскольку приложение написано на JavaScript (Angular-приложение, обёрнутое в Ionic), достаточно открыть приложение для Android в любой программе для разработки, и получить полное понимание процессов, которые обеспечивают работоспособность приложения. Да, часть кода обфусцирована, но имена переменных и функций помогают понять логику происходящего.
  • Бэкенд (Q-nomy API) защищен слабой капчей (как описано выше) и API-токеном, который одинаковый для любой версии приложения и сайта, и доступен любому желающему, потому что лежит в открытом виде в исходниках приложения, либо отслеживается в браузере

Все вышеперечисленное позволяет любому желающему, хоть немного владеющему азами программирования и автоматизации написать программу, которая будет автоматически пользоваться сервисами myVisit.

На данный момент мы имеем целую россыпь нелегальных организаций, которые автоматическим образом непрерывно сканируют доступные слоты, и при появлении таковых мгновенно их бронируют, тем самым создавая искуственный дефицит слотов для записи.

И именно из-за того, что myVisit так легко позволяет злоупотреблять своими функциями, обычный израильтянин, который хочет, например, обновить себе паспорт, вынужден действовать одним из нескольких способов:

  • Бронировать слот в супер-удаленных отделениях МВД, типа Эйлата или Афулы
  • Бронировать слот через пол-года
  • Проводить часы и дни в непрерывных попытках урвать очередь, соревнуясь в этом с кучей автоматизированных приложений
  • Платить деньги мошенникам, которые продают бесплатные государственные услуги

Общественные попытки повлиять на ситуацию

Персональные проекты

На GitHub можно найти множество заброшенных репозиториев, описания к которых сводится к следующему: “мне нужно было заказать новый паспорт для дочки, myVisit не позволял это сделать, поэтому я написал этот скрипт”. Это еще раз свидетельствует о том, что любой программист может решить для себя эту проблему.

Вот только большинство людей не являются программистами.

Публичные бесплатные боты с открытым исходным кодом

Судя по тому, что удалось найти на GitHub, неравнодушные люди уже пытались сделать альтернативы мошенническим организациям — бесплатных ботов с открытым исходным кодом, которыми могли бы пользоваться все желающие. Однако как только такие проекты становились популярными, myVisit довольно быстро их банил, тем самым уничтожая единственную относительно простую возможность получить госуслуги в разумный срок. В это же время платные боты мошенников продолжают работать.

Самый известный подобный проект — https://gamkenbot.com. Сегодня его странице можно найти только небольшое сообщение, рассказывающее о том, что их забанили примерно спустя неделю после того, как они стали популярными.

Подробнее: https://www.akamai.com/blog/security-research/bots-scalping-israeli-government-services

Публичные полу-бесплатные проекты с закрытым исходным кодом.

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

Так, сайт https://picktimebot.com позволяет встать в очередь на автоматическое получение очереди. Правда, при этом неизвестные авторы сайта получают кучу персональных данных, а за “небольшое пожертвование в 100-200₪” пользователя могут продвинуть в очереди поближе. На момент написания этой статьи нам не удалось найти человека, успешно воспользовавшимся этим сервисом.

А некоторые организации в Telegram, такие как QuickSlot, бесплатно публикуют оповещения о новых доступных слотах, при этом ненавязчиво предлагая услуги “ассистентов”, которые помогут успеть выхватить запись.

Какие угрозы и ущерб несет в себе ситуация с myVisit?

Государственная безопасность. Хотелось бы отметить, что в условиях чрезвычайного положения, введеного в стране 19 мая 1948-го города и особенностях нашего геополитического положения, вопрос государственной безопасности стоит очень остро. Однако, получается так, что единственный сервис, который напрямую связан с получением государственных услуг, взламывается любым человеком, обладающим минимальным набором технических навыков.

Теневая экономика. На фоне того, что граждане не могут бесплатно получить необходимую им государственные услуги, появился большой сектор теневой экономики, который “решает проблемы за небольшое вознаграждение в $100-500”. Образовались целые компании, которые оказывают услуги “полного бюрократического консалтинга” как для коренных израильтян, так и для новых репатринатов.

Ухудшается интеграция репатриантов. Репатриация к себе на родину так или и иначе сложный процесс, через который прошли либо многие из нас, либо наши родители и прародители. К сожалению, сегодня многие репатрианты вынуждены пребывать в подвешенном состоянии, находясь в бесконечных очередях в попытках получить свои документы, что не только не дает им полноценно влиться в наше общество, но и не позволяет сводить концы с концами и закончить оформление базовых документов и легализацию своего статуса.

Общественное недовольство. Граждане страны не могут получить доступ к государственным сервисам, права на которые они имеют.

Итоги

Все вышенаписанное свидетельтствует, что ситуация вокруг myVisit близка к катастрофической: единственное приложение, через которое можно получить наиболее востребованные госуслуги, не работает нормально, зато позволяет работать и зарабатывать деньги огромному количеству мошенников, получающих незаконным путём деньги и персональные данные израильтян.

Помимо этого я списался с CEO Qnomy с просьбой дать комментарии касаемо проблемы с очередями и мошенниками.

Его ответ можно резюмировать следующей фразов: “Касаемо мошенников идите в полицию, касаемо МВД - идите в МВД”. Однако, я получил информацию, что они работают над новым продуктом, решив не чинить старый. Не знаю насколько это правда.

При этом, хочется отметить, что ситуацию можно в значительной мере исправить, доработав myVisit. Безусловно понимая сложность разработки такого продукта и не претендуя на роль советчика, хочу, тем не менее, перечислить ряд мер, которые, на мой взгляд, могли бы сделать нерелевантным 90% этой статьи:

  • Ввести rate limits, чтобы не позволять бесконечно сканировать доступные слоты с одного устройства.
  • Запретить делать больше одного бронирования одной и той же услуги на один и тот же номер телефона
  • Запретить моментральное перебронирование той же услуги с того же номера телефона сразу же после отмены бронирования (чтобы нельзя было так просто “передавать” запись другому человеку)
  • Запретить делать бронь без подтверждения номера телефона
  • Сделать более сильную капчу (например, recaptcha), прохождение которой было бы значительно сложнее
  • Добавить верификацию вводимого ТЗ
  • Добавить аутенфикацию через gov.co.il или gov.id

Написано:

Беньямином Гинзбургом и Леонид Голденбергом
Подписаться на канал: https://t.me/goldenberg_g

https://t.me/bginzburg