КГС, часть 1. Как узнать имя человека по номеру телефона с помощью федеральной системы голосования
Спойлер для тех, кому лень читать целиком или нет технического понимания вопроса. Для реализации указанного в заголовке нужно просто направить на сайт федерального проекта запрос с указанием номера телефона. Сайт вернёт данные о голосовавшем: фамилия, имя, отчество (если было указано) и почту (если человек её указал). И странен здесь даже не факт такого разглашения сведений со стороны федеральной системы, а сама необоснованность указания этих данных в ответе не запрос: для работы голосования не требуется передавать голосующему эти сведения. Техническая часть приводится с некоторыми упрощениями, не влияющими на суть описываемого.
Федеральная система голосования по программе комфортной городской среды была запущена в конце апреля 2021го года. Это первый год, когда выбор территорий для благоустройства за счёт федерального бюджета происходил полностью через интернет на формально независимой от местных администраций платформе. В целом о проекте можно прочитать, например, здесь: https://38.gorodsreda.ru/about/ , моя же задача рассказать о качестве исполнения голосования в части информационных технологий. Информация приводится не для того, чтобы читатель мог использовать её в каких-либо негативных целях, а исключительно в качестве ознакомления. В любом случае, все из описанных в этой и следующей частях манипуляций используют только открыто предоставляемые данные. Действия не нарушают логику работы системы, не производят её взлом и проникновение во внутренние структуры, а значит, являются допустимыми с точки зрения разработчиков и заказчика. Да-да, во второй части речь пойдёт о стойкости к накруткам голосов (спойлер: её нет).
Теперь к технике. Логично было бы вести голосование через госуслуги: непосредственно на платформе, либо с авторизацией через неё. На практике от госуслуг по каким-то причинам отказались и ограничились вводом телефонного номера, ФИО и кода подтверждения. Итак, посмотрим, как это работает изнутри. Заходим на сайт https://38.gorodsreda.ru (я захожу на сайт своей области, ваш адрес будет аналогичен, но с номером Вашего региона), открываем панель разработчика. Эта панель встроена в большинство браузеров, я буду использовать Яндекс-браузер. В панели перехожу в раздел анализа работы с сетью, включаю фильтрацию «только XHR» (асинхронный обмен данным с сервером), отключаем кэш (рисунок 1). Теперь видно только «подгружаемые» вёб-страничкой с сервера данные.
При загрузке этой страницы были 3 запроса, пока тут и далее в рамках материала они не интересны. Жмём «голосовать», получаем список территорий, выбираем, например, «Иркутск». Асинхронный запрос возвращает список территорий, нажимаем на любую территорию, запрос возвращает её описание, жмём «голосовать за объект». Пользователя просят ввести ФИО, почту и телефон, дать согласие на обработку персональных данных. Вводим только имя («Имя»), фамилию («Фамилия»), почту («3@q.qq»), телефон (ввожу свой), ставлю галку согласия на обработку персональных данных, жму «продолжить регистрацию» (рис. 3). Сайт отвечает: «данный пользователь уже голосовал» (рис.4). Но самое интересное в панели анализа сети: в полученном с сервера ответе указано моё реальное имя (рис.5)! Вместо отчества и почты стоит null — при голосовании я их не вводил. Пробую ввести телефоны знакомых, указывая также случайные имена в форме. Результат тот же: сайт возвращает мне те имена, под которыми они голосовали.
Любопытно, нужно изучить вопрос подробнее. Запускаю специализированную программу Postman: она умеет посылать запросы к серверам как вёб-браузер. Никаких чудес, типовое отладочное ПО для интернет-систем. Делаю POST-запрос по адресу https://api.za.gorodsreda.ru/v1/person, передавая те же обязательные поля запроса, что и браузер, симуляцию входа на сайт не делаю. И, вуаля, получаю все сведения о себе без лишних кликов по сайту (рис. 6).
Аналогично можно получить сведения о ком угодно, зная телефон. А если сделать запрос в цикле, перебирая все возможные номера телефонов, начинающихся с +79, то перебрав весь миллиард комбинаций, любопытствующий получит сведения обо всех проголосовавших. Число комбинаций внушительное, но для достаточно мощной системы перебрать их — вопрос нескольких часов. Голосовали в программе комфортной городской среды? Переданные вами сведения не защищены от интересующихся ими. Уровень технических навыков для реализации такого перебора — старшие классы профильной школы или младшие курсы профильного ВУЗа.
Теперь о простейших мерах защиты, которые должны были быть применены, но не были использованы. Сервер вообще не должен возвращать сведения, раннее введённые при голосовании по номеру телефона. В ответ на запрос с указанием номера должно возвращаться только «хорошо, можно голосовать, номер указан впервые», либо «номер уже использовался, введите другой». На уровне общения машин это должно выглядеть просто как код «true» или «false». Произошедшее сейчас говорит об отсутствии понимания целей разработки и качественного тестирования продукта. Увы. Будьте аккуратнее, вводя сведения о себе на федеральных площадках, либо используйте недостоверные данные везде, где это возможно.
-------
Данный материал направлялся ответственным за проект, а также кураторам по части ит, я пытался отозвать своё согласие на передачу персональных данных. Реакции пока не последовало.






Информационная безопасность IT
1.5K поста25.6K подписчиков
Правила сообщества
Обязательно к прочтению для авторов:
1. Если вы добавляете пост, утверждающий об утечке данных или наличии дыр в системе, предоставьте ссылку на источники или технически подкованное расследование. Посты из разряда "Какой-то банк слил данные, потому что мне звонили мошенники" будут выноситься в общую ленту.
2. Все вопросы "Как обезопасить сервер\приложение\устройство" - в лигу "Компьютер это просто".
Обязательно к прочтению для всех:
Добавление ссылки разрешено если она не содержит описание коммерческих (платных) продуктов и/или идентификаторов для отслеживания перехода и для доступа не нужен пароль или оплата в т.ч. интернет-ресурсы, каналы (от 3-х тематических видео), блоги, группы, сообщества, СМИ и т.д.
Запрещены политические holy wars.
По решению модератора или администратора сообщества пользователь будет забанен за:
1. Флуд и оскорбление пользователя, в т.ч. провокация спора, флуда, холивара (высказывание без аргументации о конкретной применимости конкретного решения в конкретной ситуации), требование уже данного ответа, распространение сведений порочащих честь и репутацию, принижающих квалификацию оппонента, переходы на личности.
2. Публикацию поста/комментария не соответствующего тематике сообщества, в том числе обсуждение администраторов и модераторов сообщества, для этого есть специальное сообщество.
3. За обвинение в киберпреступной деятельности.
4. За нарушение прочих Правил Пикабу.