280 000 человек уже проголосовали онлайн, прежде чем кто-то заметил проблему
Во время живых выборов, когда 280 000 голосов уже были поданы, два исследователя обнаружили уязвимость, которую пропустила официальная проверка безопасности — и система проверки, которая должна была её выявить, тоже была неисправна.
Март 2015 года, где-то в Новом Южном Уэльсе. Избиратель открывает браузер, переходит по ссылке и голосует на выборах в парламент штата. Весь процесс занимает несколько минут. Никаких очередей. Никаких избирательных участков. Просто форма, клик и подтверждение.
Избиратель не знает — и никто вне небольшой группы исследователей не знает — что код, работающий под его браузером, загружается через соединение с известной уязвимостью безопасности. Что злоумышленник, находящийся между избирателем и сервером, мог в принципе изменить этот код перед загрузкой страницы. Что отдельный телефонный сервис проверки, который система предлагала как гарантию целостности, мог быть скомпрометирован. Что предыдущая проверка безопасности не выявила ничего из этого.
К моменту, когда исследователи Дж. Алекс Халдерман и Ванесса Тиг обнародовали свои находки, примерно 280 000 голосов уже были поданы.
Система, которая сама себя очистила
Система iVote не была случайным экспериментом или поспешным решением. Новый Южный Уэльс намеренно в неё инвестировал, предлагая её избирателям, которые были слепы, имели трудности с чтением печатного текста, проживали в удалённых местностях или просто предпочитали удобство онлайн-голосования. Она прошла официальную предвыборную проверку безопасности. Власти знали о рисках интернет-голосования — они проверили систему на них. Они пришли к выводу, что она готова.
Закрытая проверка, которая одобрила систему, — это не то же самое, что эта система является безопасной.
Вот что официальная проверка не выявила, согласно рецензируемой статье Халдермана и Тиг, опубликованной на E-Vote-ID 2015: iVote загружала внешний JavaScript — код, который выполняется в браузере избирателя — с сервера аналитики через соединение, уязвимое к атакам FREAK и Logjam. Это были известные, задокументированные уязвимости TLS, которые были публично раскрыты. Злоумышленник, находящийся в нужной позиции в сети и использующий эту уязвимость, мог внедрить вредоносный код на страницу iVote ещё до её загрузки избирателю, потенциально изменив способ записи голоса без знания избирателя. Злоумышленнику не нужно было взламывать собственные серверы избирательной комиссии. Ему нужно было только находиться в правильной позиции в сети.
Исследователи также проанализировали телефонный сервис проверки iVote — функцию, которую система предлагала как способ для избирателей подтвердить, что их голос был правильно записан. Они обнаружили, что этот сервис сам был уязвим для манипуляций таким образом, что поддельный голос мог выглядеть подтверждённым. Проверка проверяла источник, который мог быть изменён.
Это не подстраховка. Это иллюзия подстраховки.
Что на самом деле означает «прошло проверку перед выборами»
Давайте точно разберёмся в последовательности событий, потому что последовательность — это вся история.
Проверка безопасности была проведена до выборов. Проверка не выявила уязвимостей, которые нашли Халдерман и Тиг. Выборы начались. Голоса накапливались — в итоге достигнув примерно 280 000. Затем два независимых исследователя, работавшие вне избирательной комиссии и вне её нанятых рецензентов, проанализировали работающую систему и обнаружили серьёзные недостатки. Они раскрыли проблемы. Исправление было развёрнуто, пока голосование ещё было в процессе.
Другими словами: официальная, предвыборная проверка дала одобрение. Два посторонних, не заинтересованные в ответе, нашли то, что пропустила официальная проверка. Проблемы были обнаружены не потому, что процесс работал, а потому что независимые исследователи решили посмотреть — по собственной инициативе, во время живых выборов.
«Прошло проверку безопасности» — это утверждение о снимке. Это не утверждение о системе, которая работает в день выборов.
Это проблема снимка сертификации. Проверка проводится в определённый момент времени, на коде и конфигурации, которые существуют в этот момент, используя тестовый план и модель угроз, которые принесли рецензенты. Если модель угроз пропустила известный класс атак TLS, эти уязвимости не появляются в отчёте. Система немного меняется — библиотека аналитики третьей стороны обновляется, параметр конфигурации сдвигается — и проверка больше не охватывает то, что на самом деле работает.
Немецкий Конституционный суд столкнулся с версией этой проблемы в 2009 году, когда постановил, что электронное голосование конституционно легитимно только когда обычные граждане могут проверить каждый существенный шаг без специальных знаний. Избиратели, проверяющие экран после нажатия «Отправить» и получения подтверждения, не могут этого сделать. Как оказалось, не может и команда предвыборной безопасности, которая не решила посмотреть на конкретную внешнюю зависимость, загружаемую через TLS.
Механизм проверки, который ничего не проверил
Деталь, которая заслуживает вашего внимания, — это телефонная проверка.
iVote дала избирателям способ позвонить и проверить, что их голос был записан правильно. Это правильный инстинкт. Сквозная проверяемость — способность избирателя подтвердить, что его бюллетень был правильно записан — это настоящее требование безопасности, а не маркетинговая функция. Норвегия, Эстония и Швейцария серьёзно занимались этим. Система Swiss Post 2019 года использовала криптографические доказательства для предложения того, что она называла универсальной проверяемостью, пока независимые исследователи не обнаружили люк в миксе, который мог создать убедительно выглядящее доказательство, скрывая изменённые голоса.
Импульс дать избирателям способ проверить систему — это именно правильный подход. Проблема возникает, когда эта проверка работает на той же инфраструктуре, что и проверяемая система — или когда она может быть манипулирована тем же злоумышленником, который может манипулировать самим голосом.
Это не гипотетический риск. Халдерман и Тиг задокументировали, что телефонная проверка iVote была уязвима для манипуляций, которые могли произвести ложное подтверждение. Избиратель, позвонивший для проверки своего бюллетеня, услышал бы, что всё в порядке. Избиратель, чей бюллетень был изменён сетевым злоумышленником, также услышал бы, что всё в порядке. Сервис проверки и уязвимость жили в одной экосистеме.
Механизм проверки, который может быть обманут той же атакой, что и основная система, ничего не проверяет. Он обеспечивает уверенность, но уверенность — это не свойство безопасности.
Почему «независимый» делает всю работу
Вот неудобная правда о случае NSW: никто в официальной цепи это не выявил.
Ни поставщик. Ни собственная команда избирательной комиссии. Ни нанятые рецензенты безопасности. Это выявили двое академиков, которых никто не просил, не платил и не дал специального доступа в тестовую среду. Они проанализировали производственную систему — ту, которая обрабатывала реальные голоса реальных избирателей — и нашли то, чего официальный процесс упустил.
Вашингтон, округ Колумбия, в 2010 году — это наиболее полезное сравнение. Перед развёртыванием системы интернет-голосования для заграничных избирателей Вашингтон провёл открытое публичное испытание и явно пригласил публику атаковать её. Команда Университета Мичигана под руководством Халдермана получила почти полный контроль над пилотным сервером примерно за 48 часов, изменила уже поданные голоса и оставила боевой клич в качестве доказательства своего доступа. Вашингтон отказался от системы. Реальные голоса не пострадали. Уязвимости были выявлены, потому что испытание было явно открыто — любой мог попытаться, и команда, которая это сделала, нашла то, чего закрытое внутреннее тестирование не выявило.
Случай NSW — зеркальное отражение Вашингтона. Нет открытого публичного испытания. Закрытая проверка, которая одобрила систему. Уязвимости выявлены всё равно независимыми исследователями, после того как реальные голоса уже были в системе.
Разница между катастрофой и выявленным дефектом часто заключается только в том, решился ли нужный посторонний человек посмотреть.
Это неудобное предложение, потому что оно означает, что безопасность выборов может зависеть от инициативы исследователей, которые не являются частью официального процесса и которые легко могли бы не посмотреть. Это также означает, что когда они посмотрят и найдут что-то, официальный ответ должен быть «спасибо и вот что мы изменили» — а не «наша проверка уже одобрила систему».
Проверка, одобрившая систему, — это точка данных, которая должна вас беспокоить, а не успокаивать. Она говорит вам, что закрытая проверка не выявила то, что позже выявила открытая. Надлежащий ответ — спросить, что ещё закрытая проверка могла не выявить.
Проблема снимка идёт глубже
Каждая сертифицированная в мире система голосования была сертифицирована в момент, который теперь в прошлом.
Комиссия США по помощи в выборах сертифицирует системы голосования в соответствии с добровольными руководящими принципами систем голосования. Доклад GAO от 2005 года выявил, что даже базовая инфраструктура для этой программы сертификации была неполной, спустя годы после того как Закон об оказании помощи в выборах это потребовал. Стандарты разработаны. Системы протестированы против них. Выдана сертификация.
Затем проходит время. Открываются новые классы атак. Зависимости обновляются. Конфигурации меняются. И сертификация, которая была снимком системы против стандарта в момент времени, остаётся на стене как фотография здания, которое с тех пор было отремонтировано.
Более глубокая проблема состоит в том, что ни один процесс сертификации не может учитывать классы атак, которые не были в модели угроз при проведении проверки. FREAK и Logjam были публично известными уязвимостями, когда iVote работала. Они были в научной литературе. У них были имена. И они, похоже, не входили в тестовый план, который одобрил систему.
Это не аргумент против сертификации — это аргумент, что сертификация необходима, но недостаточна, и её достаточность со временем деградирует. Честная версия «эта система сертифицирована» звучит так: «эта система прошла проверку против конкретного стандарта, проведённую конкретной командой, используя конкретную модель угроз, в конкретный момент времени. Ни одно из этих условий не гарантировано оставаться актуальным».
Решение — не лучший снимок. Решение — непрерывная, открытая, независимая проверяемость — чтобы вопрос был не "прошла ли она проверку?", а "вы можете показать мне математику?"
Что на самом деле требует «независимо проверяемость»
История NSW iVote заканчивается исправлением, развёрнутым во время выборов, и системой, которая продолжила работу. Выборы не были остановлены. 280 000 уже поданных голосов не были переголосованы. Не было механизма для ретроспективного подтверждения того, были ли какие-либо из этих голосов изменены до исправления.
Это сложная часть истории, которая не разрешается аккуратно.
Эстонская система i-voting, которую анализировали Спрингол, Финкбейнер и команда Халдермана в 2014 году, по крайней мере предлагала частичный исходный код для независимого изучения. Исследователи выявили серьёзные проблемы операционной безопасности и пришли к выводу, что хорошо обеспеченный злоумышленник мог бы изменить голоса незаметно. Эстония оспорила выводы. Система продолжила работу. Спор и продолжение — это не то же самое, что разрешение.
Система Swiss Post 2019 пошла ещё дальше — она опубликовала полный исходный код для публичного изучения перед развёртыванием на обязательных выборах. Независимые исследователи обнаружили люк в доказательстве перемешивания. Швейцарские власти приостановили систему. Это то, что ближе всего к истории успеха в этом пространстве: код опубликован, ошибка выявлена, система остановлена перед влиянием на реальные голоса.
Прогрессия от NSW к Эстонии к Швейцарии — это прогрессия к открытости. NSW: закрытая проверка, ошибки выявлены во время живых выборов, нет механизма для ретроспективной проверки избирателями. Эстония: частичная открытость, независимый анализ, оспариваемые выводы. Швейцария: полная публикация, криптографическая ошибка выявлена перед использованием на обязательных выборах, система приостановлена.
Направление имеет значение. Но заметьте, что Швейцария требовала для работы: не просто публикацию, но криптографов с инструментами и знаниями, чтобы обнаружить тонкий люк в доказательстве перемешивания. Ванесса Тиг — которая работала как над анализом NSW, так и над анализом Swiss Post — является одним из небольшого количества людей в мире, которые могут прочитать доказательство перемешивания и заметить, что в нём что-то не так.
«Независимо проверяемость» — это не то же самое, что «технически возможно для любого гражданина проверить». Для криптографического интернет-голосования, подлинная независимая проверяемость требует активного, открытого взаимодействия с квалифицированными посторонними — и процесс, который его активно требует, а не процесс, который его только терпит после того, как исследователи сами решат посмотреть.
Избирательный суд Бразилии проводит официальную программу публичной проверки безопасности каждый избирательный цикл, приглашая любого квалифицированного гражданина попытаться сломать систему и исправляя то, что они найдут. Это не идеальная модель — она тестирует конкретные системы в конкретных конфигурациях в конкретные моменты времени, и проблемы, которые не появились при тестировании, могут всё равно существовать в производственной системе. Но она структурно лучше закрытой проверки, потому что она открыта, противодействующая и институционализирована, а не случайна и случайна.
Что всё ещё не проверяемо
Вот что ни официальный послевыборный обзор NSW, ни независимая исследовательская работа вам не могут сказать: были ли изменены какие-либо из 280 000 голосов, поданных до развёртывания исправления.
Не из-за недобросовестности. Не потому что кто-то что-то скрывает. А потому что система не была разработана, чтобы позволить ответить на этот вопрос постфактум. Нет проверяемого избирателем записи, которая была зафиксирована перед отправкой голоса и которая может быть сравнена позже. Нет криптографического следа аудита, который избиратель может изучить, чтобы подтвердить, что его бюллетень был посчитан, как поданный. Сервис телефонной проверки, который мог бы служить этой функции, сам мог быть скомпрометирован.
Это брешь, которую никакое официальное заявление не может закрыть. Власти могут сказать — и сказали — что они не знают о каких-либо изменённых голосах. Это искреннее заявление. Это также неопровержимое. «Не знаем о» и «не произошло» разделены всей шириной вопроса.
Стандарт Немецкого Конституционного суда стоит повторить здесь, потому что он применяется в полной мере: выборы легитимны только когда существенные шаги от бюллетеня к результату могут быть проверены гражданами без специальных знаний. Для онлайн-голоса, который загружает код через уязвимое соединение, избиратель не может проверить, что полученный им код был тем кодом, который отправил сервер. Для сервиса проверки, который сам может быть манипулирован, избиратель не может подтвердить, что подтверждение реально. Для системы без ретроспективного следа аудита официалы, которые её запускали, не могут подтвердить, что голоса не были изменены.
Правильный вопрос — это не "нашли ли мы какие-либо доказательства манипуляции?". Правильный вопрос: "мог бы кто-либо найти это, если бы манипуляция произошла?"
Если ответ на второй вопрос — нет, первый вопрос не даёт никакой гарантии.
Посмотрите, как эта брешь появляется в системах по всему миру →
Прочитайте двухминутную версию →
Посмотрите полный паттерн на задокументированных случаях →
Источники
- Halderman, Teague — The New South Wales iVote System: Security Failures and Verification Flaws in a Live Online Election, E-Vote-ID 2015 (arXiv:1504.05646)
- Wolchok, Wustrow, Halderman, Prasad — Attacking the Washington, D.C. Internet Voting System, Financial Cryptography 2012
- Springall, Finkbeiner, Durumeric, Kitcat, Hursti, MacAlpine, Halderman — Security Analysis of the Estonian Internet Voting System, ACM CCS 2014
- Lewis, Pereira, Teague — Ceci n'est pas une preuve (trapdoor commitments in the Scytl-SwissPost Internet voting system), 2019
- Bundesverfassungsgericht, Judgment of 3 March 2009, 2 BvC 3/07 and 2 BvC 4/07 (English translation)
- GAO-05-956, 'Elections: Federal Efforts to Improve Security and Reliability of Electronic Voting Systems Are Under Way, but Key Activities Need to Be Completed' (Sept. 21, 2005)