Медуза, паспорта и говнокод — почему номера паспортов всех участников интернет-голосования попали в Интернет / Хабр
После завершения интернет-голосования, которое закончилось удивительно хорошо, меня и многих людей долго не покидало чувство того, что в России просто не может что-то пройти так хорошо. Сейчас можно расслабиться — реальность не подкачала и мы увидели двойное безумие: как с точки зрения архитектуры решения, так с точки зрения криптографии.
Кстати, Минкомсвязь до сих пор исключает ЛЮБУЮ возможность утечки паспортных данных избирателей
Между тем распределение серий паспортов выглядит вот так:
Давайте воспроизведем события и попробуем понять как всего этого можно было избежать
Что произошло?
9 июля появляется материал Медузы Власти фактически выложили в открытый доступ персональные данные всех интернет-избирателей где они рассказали про архив degvoter. zip.
Как найти архив degvoter.zip?
Я нашел так. Внимательный поиск через Yandex привел меня к странице:
vudu7.vuduwiki.duckdns.org/mk.ru/https_check.ege.edu.ru.html
Там был найден текст «Https checkvoter.gosuslugi.ru degvoter.zip». Датировка на тот момент была 7.7.2020 (до публикации Медузы!), сейчас этот текст уже «переехал» на начало страницы и датировка изменилась.
Сам архив был убран с сайта госуслуги, но его копия сохранилась в web.archive.org, откуда его скачали все заинтересованные в исследовании лица в том числе и я. Чтобы понять почему так произошло рекомендую обратиться к первоисточнику — файлу robots.txt на сайте ГосУслуги.
Что внутри degvoter.exe?
Сама программа degvoter написана на C# и представляет из себя написанное «на коленке» WinForms приложение, которое работает с sqlite базой данных. Файлы в архиве датированы 2020-06-30 22:17 (30 июня 2020 года). Видно, что приложение писалось в кратчайшие сроки, ибо на Камчатке в этот момент уже было 1 июля 7:17, а тот факт, что участки открывались там в 8:00 говорит о том, что дедлайн был как никогда близок (хорошо что электронно голосовали только Москва и Нижний Новгород). 9 байт, т.е. 100Гбайт хватит чтобы записать все варианты. Вполне вероятно что их банально можно перебрать. Я измерил что в однопоточном режиме современный Intel Core i5 процессор перебирает все sha256 хеши для одной серии паспорта за 5 секунд (000000-999999). И это на стандартной реализации sha256 без каких либо дополнительных ухищрений. Т.е. полный перебор всего пространства на обычном компьютере займет меньше дня. Если же учесть, что перебор можно вести в несколько потоков, то средненький процессор справится с такой задачей за несколько часов. Это является демонстрацией факта непонимания разработчиком системы принципов использования хеш-функций. Но даже правильное применение хэш-функций при такой архитектуре не спасает паспортные данные от раскрытия, если противник имеет неограниченные ресурсы. Ведь человек получивший доступ к БД может за конечное время получить идентификаторы паспортов, т.к. проверка одного паспорта должна проходить конечное время. Весь вопрос только в ресурсах (хотя если бы здесь просто применили хэширование в пару миллионов раундов, даже такое спорное архитектурное решение, как распространение БД вместе с приложением, не привело бы к такому громкому эффекту, т. к. позволило бы защититься хотя бы от журналистов). Медуза всего лишь продемонстрировала некомпетентность людей, проектировавших эту часть системы.
Давайте попробуем придумать, как сделать с одной стороны сильно лучше, с другой стороны уложиться также в одну ночь разработки.
Архитектура на коленке
Предположим, что у нас вообще нет времени и надо написать решение в течении ночи.
Очевидным требованием является то, что БД с хешами паспортов должна находиться на сервере и это обязательно должно быть клиент-серверное приложение. Сразу же возникнет вопрос, а что делать если вдруг на участке сломается Интернет? Для этих целей нужно сделать Android-версию клиентского приложения, которую нужно также дать скачать членам УИК. В местах, где нет ни интернета, ни сотовой связи на этом голосовании люди не голосовали.
Хэш в базе не должен вычисляться непосредственно из идентификатора паспорта. Это делается для того, чтобы хэши в базе нельзя было подобрать, используя существующие таблицы для перебора. Во-первых, нужно использовать стойкую-хеш функцию. Главный вопрос в том, КАК её нужно использовать. Возможных реализаций тут много, но по сути всё сводится к применению алгоритма в котором будут три параметров: тип хеш-функции, количество итераций, а также значение(я) которое нужно использовать для подмешивания к хэшу (оно будет общее для всех хешей). Конечное требование – внутри каждой итерации должен быть использована стойкая хеш-функция, а скорость вычисления хэша должна быть несколько единиц в секунду. Даже завладев БД с сервера злоумышленнику в этом случае потребовалось бы значительное время на восстановление всех данных.
Каждое из клиентских приложений будет представлять из себя просто поле ввода + Http-клиент, которые отправляет запрос на сервер.
Сервер работает только по HTTPS и только во время голосования и имеет ограничение в 1 RPS с IP. В качестве ограничителя RPS используем Redis, куда пишем в качестве ключа IP-адрес и TTL в одну секунду. Есть значение – запрос с IP не разрешен, нет значения – запрос с IP разрешен. Это даст возможность избежать перебора извне.
Написанное таким образом наше, буквально из говна и палок, решение окажется на порядок более защищенным чем текущее degvoter. При этом разница во времени написания невелика и с сам процесс написания кода может быть распараллелен на 3 человек (сервер, win-client,android-client).
Разберем возможные сценарии утечек.
У нас есть следующие точки где можно получить информацию о системе
- Исходный код серверной части
- Скомпилированные файлы серверной части
- Серверная БД
- Клиентские приложения
Клиентские приложения в этом случае не несут никакой информации, при этом к ним имеет доступ максимальное число людей и именно здесь максимальная вероятность утечек (что и произошло).
Для того чтобы восстановить информацию потребуется получить доступ к информации из точек (1,2) или (1,3). Если есть только база, то без известного метода хеширования восстановить что-то будет невозможно.
Выводы
- Каждый раз, когда нужно в каком-то виде работать с персональными данными — привлекайте архитектора
- Каждый раз, когда нужно в каком-то виде работать с персональными данными — привлекайте разработчика с опытом/образованием в сфере криптографии или информационной безопасности
Эти два простых правила помогут избежать позора, который мы наблюдали на примере с приложением degvoter, (Помните, что обычный разработчик может и не разбираться в нюансах применения хэш-функций)
Утилита для демонстрации возможности восстановления персональных данных DegvoterDecoder находится в репозитории, посвященном анализу данных голосования. По-умолчанию она настроена на 8 потоков. В случае если вы уже скачали архив degvoter.zip и вы программируете на C# – вы без труда разберетесь в принципе её работы.
github.com/AlexeiScherbakov/Voting2020
Меняется ли серия и номер паспорта при замужестве?
Добрый день,я хочу вступить в брак и взять фамилию мужа, при замене паспорта изменятся ли его серия и номер?
, Дарья, г. Пятигорск
документы для замены паспорта
Юрий Салмин
Юрист, г. Нижний Новгород
Добрый вечер!
Да, в новом паспорте будут другие серия, номер, дата выдачи т.п.
Бланк паспорта имеет степени защиты, одной из которых является серия и номер.
Игорь Юрлов
Юрист, г. Москва
Здравствуйте, Дарья! Конечно, ведь это другой документ.
Похожие вопросы
Лишение водительских прав
Как мне подать жалобу и есть ли смысл и основание отменить постановление о лишении прав?
Здравствуйте, Остановил инспектор при нарушении пересечение сплошной на повороте скосила угол. Оказалось что нарушение повторное за год. По ст 12.15. Ч5 суд вынес мне постановление о лишении на год. Я протокол не подписывала что он там написал не читала, но есть видео. Как мне подать жалобу и есть ли смысл и основание отменить постановление о лишении прав?
, вопрос №3680867, Алла, г. Краснодар
486 ₽
Вопрос решен
Гражданское право
И номера законов можно узнать тогда, где читать это?
Здравствуйте у меня такой вопрос, скажите пожалуйста: нам в садике дали направление на живую вакцину полиомиелита пероральную, которая у нас шла по плану, мы её сделали. На следующий день, нам сообщили что мы должны перейти в другую группу детей старшего возраста (старше примерно на год) , у которых эта прививка есть и быть в этой группе 2 месяца.
Оказалось что в нашей группе из 40 числившихся у 6 человек нет вообще никакой прививки от полиомиелита и чтобы они не заразились нас перевели в другую группу. Насколько это действие правомерно? Почему перевели нас, а не изолировали этих детей на 60 дней? Есть ли такой приказ, что изолировать нужно именно непривитых детей, либо же просто разобщить привитых от непривитых любыми возможными способами? И номера законов можно узнать тогда, где читать это?
Мы составили заявление , чтобы нас вернули в нашу группу.
, вопрос №3680817, Мария, г. Москва
800 ₽
Исполнительное производство
Нарушает ли пристав и/или кредитор такими дествиями мои права и законодательство?
Добрый день. На текущий момент являюсь солидарным полжником по Исполнительному производству Сумма взыскания в пользу кредитора (коммунальные платежи УК) согласно Исполнительному листу составляет 175022,54 документ датирован 31.03.2020 г. Начиная с апреля 2020 года кредитор обращаеся в ФСПП за взысканием задолженности. Обращения были неоднократными поскольку всю сразу сумму задолженности ФСПП взыскать не может по ряду причин. За 2021 год ФСПП взыскало в пользу кредитора сумму в размере 1 186,99. При повторном обращении кредитора с заявлением о возбуждении ИП в 2022 и 2023 годах в заявлении кредитор указывает к взысканию сумму в размере 175 022,54 т.е. не высчитывает взысканные денежные средства ранее службой ФСПП и пристав возбуждает ИП именно на сумму 175 022,54 не смотря на то, что в Исполнительном листе (оригинал) приставы ФСПП сделали отметки о ранее взысканных суммах. Вопрос: 1. Имеет ли право пристав не смотря на то, что в оригинале Исполнительного листа есть отметки о взысканной сумме каждый раз возбуждая новое ИП по заявлению кредитора указываеть не реальную сумму задолженнности, а сумму указаннау в Исполнительном листе? 2. Имеет ли право кредтор каждый раз обращаясь в ФСПП с заявлением о возбуждении ИП указывать в заявлении не рельную сумму задолженности а сумму указанную в Исполнительном листе? 3. Нарушает ли пристав и/или кредитор такими дествиями мои права и законодательство? 4. На каком основании, после того как кредитор просудил сумму задолженности, может обратиться повторно в суд с целью установления сроков выплаты этой самой ранее просуженной заложеннности?
, вопрос №3680428, татьяна, г. Москва
700 ₽
Недвижимость
Обязательно ли оповещать и проводить акты восстановления с КГИОП?
Дом памятник (охрана КГИОП, СПб), 10+ лет назад вертикально увеличили окно (простой фасад на заднем дворе, высокое окно в комнате прислуги).
Комиссия осмотрела дом (планируется реставрация) и через суд требуют вернуть прежний размер.
Может ли суд утвердить текущие размеры?
Например, аргументом, что это приспособление объекта культурного наследия для современного использования.
Применима ли «балконная амнистия» до 2021 года?
Если восстанавливать, какова процедура.
Можно ли использовать, оригинальные размеры без согласований проекта?
Обязательно ли оповещать и проводить акты восстановления с КГИОП?
, вопрос №3674469, Алексей, г. Москва
1100 ₽
Трудовое право
Является ли магистратура и специалитет образованием одного уровня?
Добрый день! Необходимо разъяснение с правовой точки зрения. Является ли магистратура и специалитет образованием одного уровня ?? Считается ли что гражданин получает образование данного уровня впервые если подает документы на обучение по программе магистратуры, имея при этом диплом специалиста и диплом бакалавра?
, вопрос №3679946, Роман Игоревич Коробков, г.
Leave a Reply