Как стать автором
Обновить

Обсуждение системы голосования, разработанной ДИТ Москвы

Время на прочтение3 мин
Количество просмотров18K

Открытые исходники


Недавно в открытый доступ были выложены исходники системы голосования, которая по всей видимости, и будет применяться на электронном голосовании по Конституции в Москве и Нижнем Новгороде.


Данным посланием хабражителям я хотел бы открыть обсуждение того, что получилось у разработчиков, и как нам теперь с этим жить.


Введение и просьба о помощи


Эта разработка Департамента информационных технологий (ДИТ) г.Москвы, предыдущая версия которой вероятно, уже знакома некоторым из читателей: как я понимаю, именно она применялась на выборах муниципальных депутатов в прошлом году.


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


Мои заметки


Что мне удалось понять к данному моменту из этих исходников, а также из других источников.


Платформа


Lumen PHP-Framework — веб-оболочка
Exonum — разновидность блокчейна


Как работает


Вот как я понимаю работу системы.


Веб-оболочка выполняет все интерфейсные функции, вплоть до формирования бюллетеня — отдельной страницы с кодом, обращающимся прямо из браузера к серверной части подсистемы блокчейна через специального легкого клиента (входит в состав exonium).


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


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


Ключ шифрования формируется перед началом голосования, делится на части и раздается лицам из числа наблюдателей.


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


Возможные уязвимости


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


Уязвимость 51%


Эта уязвимость давно и хорошо известна всем, кто даже не очень хорошо знаком с блокчейн-системами. Она заключается в том, что когда в одних руках сосредоточено управление более чем 50% узлов формирования блоков, система становится зависимой от честности владельца этих узлов. Нет никаких признаков, что у развернутой для голосования системы узлы формирования блоков распределены между независимыми вычислительными центрами. Это с высокой вероятностью означает, что развернутая система подвержена данной уязвимости.


Регистрация голосующих


Судя по коду, та часть системы, которая имеет дело с блокчейном, не осведомлена о первичных регистрационных данных голосующих. Таким образом, данные о голосующих избирателях поступает в эту часть системы извне. Имея доступ к этому API, систему по всей видимости, можно будет заполонить несуществующими избирателями.


Подтверждение личности на сайте mos.ru


Данная уязвимость имеет более обширный контекст, нежели рассматриваемая система голосования.


Сайт mos.ru, используемый в качестве источника аутентификации московского избирателя, позволяет три степени подтверждения личности: отсутствие, сверка личных данных, личный визит клиента в центр авторизации. При этом, согласно сообщениям в социальных сетях и проговорке разработчика на рабочей группе, для предстоящего голосования достаточно второй степени подтверждения личности: сверки личных данных, которая должна была быть совершена до 5го июня. Таким образом, располагая до этого момента базой личных данных, фрагмент которой обнаружил корреспондент т/к Дождь, сайт mos.ru можно было скомпрометировать.


Заключение


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


UPD


Подкаст с разработчиками (один из них — автор коммитов в репозитории)


UPD2


Разбор ранней версии, оттуда можно кое-что почерпнуть, доступно только через прокси/VPN

Теги:
Хабы:
Всего голосов 45: ↑43 и ↓2+41
Комментарии80

Публикации

Истории

Работа

Ближайшие события

Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург