SpasiPiter.ru

 

ГЛАВНАЯ

ЗАКОНЫ

СУДЫ

Европейский суд

ПУБЛИКАЦИИ И ВЫСТУПЛЕНИЯ

ДОКУМЕНТЫ

ОБРАЩЕНИЯ К ВЛАСТЯМ

ИЗБИЕНИЯ | VIOLENCE

МИТИНГИ | CITY DEFENDING ACTIONS

ЛАХТА-ЦЕНТР

ВЫБОРЫ

НАШИ ПОБЕДЫ

Новости градозащиты

ЖКХ

Наведение порядка на Руси

ПОИСК

 

За эту красоту мы приняли бой

Free counters!

Спаси Питер! || Законы || Суды || ЕСПЧ || Публикации || Документы || Обращения к властям

Спасем Санкт-Петербург от варваров!

olga-andronova.livejournal.com
olga-andronova.blogspot.ru

"Наши мертвые нас не оставят в беде.
Наши павшие - как часовые"


ДОКУМЕНТЫ | Итоги жульничества и воровства: Выборы


Когда состоялись "первые честные выборы"?

http://davnym-davno.livejournal.com/313079.html

 

16 сент, 2013

 

Оказывается, проведение "первых честных выборов" у сентябрьской Москвы 2013 года может оспаривать июньская Самара того же года: "К нашему удивлению, никаких каруселей, вбросов, суеты председателей и гонений на наблюдателей не было. Таких идеальных выборов ни я – политтехнолог с десятками выборов за спиной - ни наши опытные наблюдатели никогда не видели."

 

Общим для Москвы с Самарой является фальсификация результатов выборов с помощью КОИБов. В Москве первоначально остастить КОИБами на выборах 8 сентября планировалось участки Центрального, Южного и Юго-Восточного административных округов. В последний момент к ним добавили Новую Москву. На этих территориях, за исключением Центрального округа, Собянин получил более 50 процентов. На территориях, где КОИБов не было средний результат Собянина не достиг 50 процентов.

 

Подборка материалов.

1. Официальная методичка (она есть не только на Камчатке)

http://www.kamchatka-krai.izbirkom.ru/WAY/B4C6BB8B-61FD-4E45-BA92-3E05AC880DC2.html

2. Март 2013 г. Оценка КОИБов перед выборами в подмосковном Жуковском

http://mitek-mitekych.livejournal.com/466584.html

3. "Самые честные выборы" в Самаре

http://znak.com/svrdl/articles/20-08-18-37/101094.html

4. Евгений Федин раскопал на сайте госзакупок программные коды КОИБ

http://habrahabr.ru/post/193414/

5. Константин Подшумок представил в удобном виде эти коды всем желающим

https://github.com/podshumok/KOIB/

и сделал очень важный вывод

https://gist.github.com/podshumok/6521904

6. Евгений Федин разработал инструкцию для наблюдателей на участках с КОИБами

http://orave.livejournal.com/103000.html

7. Александр Лурье о потрохах КОИБов

http://www.specletter.com/vybory/2013-09-16/elektronnye-potroha-koiba.html

 

комменты

Ответ на вопрос - какой вброс программировали - очевиден: была запущена программа "последнего шанса", помогавшая переползти через 50-процентный барьер. Если бы Собянин набирал 60 процентов, программу можно было и не запускать.

И еще - не нужно слепо доверять пресс-релизам с прогнозом 60 процентов. Тот же ФОМ опубликовал не только пресс-релиз, но и подробные таблицы с результами опроса, анализ которых давал совсем другие цифры. Мы не знаем, какие варианты прогнозов докладывались Путину и Володину.

По географии выборов. ЦАО я не рассматриваю по причинам, которые я изложу как-нибудь в другой раз, но если коротко - в этом округе возможности фальсификаций были ограничены рядом факторов, начиная с состава ТИК.

По картам - уже писал: сравниваются не участки и не районы, а округа по усредненным данным. Прежде всего потому, что КОИБы были распределены между округами, а не районами и участками.

Если в КОИБы встроены мини-модемы, то все может и помимо председателя произойти. Ререзагрузка КОИБа по поступающей извне команде на участке может пройти незамеченной. И 12-минутный интервал у Каганова будет более чем достаточен.

И еще онин нюанс. В конце 2010 года член ЦИК от КПРФ предложил передать партиям, участвующим в парламентских выборах программные коды КОИБов для изучения. Чуров торжественно пообещал, но этого до сих пор не было сделано. Так что собака зарыта все-таки тут.

Екатеринбурге местная власть вообще планировала итог фальсифицировать

(http://www.znak.com/svrdl/articles/10-09-19-51/101182.html

"Примерно в 00:30 Евгению Куйвашеву позвонили из администрации президента и попросили «не делать глупостей», рассказывает источник Znak.com. «Куйвашев стал говорить, что он ничем таким и не занимается. «Вот и не занимайтесь», - попросили в АП. В 00.45 «корректоры» получили «отбой» и были распущены по домам.")

 

 

Комплексы игры в выборы

http://yuriursu.livejournal.com/15423.html

Я не верил в то, что КОИБы можно запрограммировать на заранее заданные результаты, но вчера мы в Щербинке стали свидетелями именно такого события.

 

Давайте немного предыстории, ещё раз. В Щербинке в 2011 году был избран глава города - коммунист. На сегодняшние дни соц.опросы также показывают, что Щербинка красная, за КПРФ около 40%. Мы вели мощную избирательную кампанию - выпуски газет, буклеты, агитаторы, поквартирная работа, встречи плановые, встречи стихийные, билборды, плакаты и т.п. Наши кандидаты в основном местные и известные люди.

 

МГИК принимает решение оборудовать КОИБами Центральный, Южный и Юго-Восточный округа Москвы. Проходит некоторое время и МГИК внезапно меняет решение, добавляя в него городской округ Щербинка. Вдумайтесь в это, Щербинка в рамках Москвы - это кроха, с большим преувеличением это 25 тысяч избирателей, накиньте явку и поймете, что Щербинка для мэра ничего не решает. Так с чего вдруг надумали закинуть КОИБы в Щербинку?

 

На выборах явка составила 35%. Данные в ГАС Выборы до сих пор не введены. Все 20 мест в Совете депутатов заняли префектурские кандидаты с трехкратным от нас отрывом. В моем втором округе было всего 2 УИКа. Вот сравнительные цифры по нашим кандидатам (красные) и префектурским (синие):

 

 УИК 3359 % УИК 3360 % погрешность +-

Аникиев 166 20,29 132 15,40 2,45

Костин 84 10,27 73 8,52 0,88

Котина 315 38,51 357 41,66 1,57

Понизов 312 38,14 327 38,16 0,01

Свиридов 379 46,33 403 47,02 0,35

Сенькин 332 40,59 394 45,97 2,69

Урсу 96 11,74 90 10,50 0,62

Штокман 220 26,89 203 23,69 1,60

 

Отклонение от среднего между двумя участками не превышает 2,69%! А префектурский кандидат Понизов вообще имеет 38,14% и 38,16%, разница две сотых процента! Я в жизни не видел, чтобы два разных участка так единодушно проголосовали. Везде живут разные люди, по разному проводится агитация, кто-то где-то работает больше, кто-то где-то меньше. На муниципальных выборах всегда есть разброс, всегда! Здесь разброса нет.

Теперь о заложенных данных. Расстановка сил в нашей четверке получилась по первичным данным кандидатов. Первое место - Штокман: бывший директор местной школы, очень узнаваемая личность в округе. Второе место - Аникиев: замдиректора и тренер детской хоккейной школы в Щербинке. Менее известен, но всё же свой. Третье место - собственно я: человек неместный, но молодой, активный и помощник депутата МГД. Четвертое место - Костин: также неместный, молодой, но активности никакой.

Что не учитывалось при закладке результата, так это активность агитации кандидатов. Спросите любого коммуниста в Щербинке: "Кто пахал во втором округе?", Вам скажут "Урсу". Я действительно очень много работал, я заработал узнаваемость и рейтинг, а по оценке самих наших кандидатов Штокман и Аникиева, они были уверены, что из нашей четверки я займу первое место. Теперь сравним меня и Костина. Так сложилось, что Олег Костин в избирательной кампании фактически не принимал участия. Вообще никакого. Я же распространил тысячи личных буклетов, провел более 30ти более-менее значимых встреч с избирателями, бесчисленное число раз приходил во дворы и общался там с людьми, а под выборы расклеивал в подъездах плакаты с собой, как напоминание придти на выборы. Это только та работа, которую я проводил лично для себя, не включая работу, которая проводилась за всю четверку КПРФ. Тут и выходит существенный прокол, что я набираю, якобы, всего на 30 голосов больше, чем кандидат Костин, который не вел вообще никакой работы в Щербинке. Бред? Бред! Даже кандидат от Яблока Анна Головей, которая по началу полностью отвергала возможность программирования КОИБов, после того как увидела данные УИК 3360, где она набрала 102 голоса против моих 90, сказала: "Да, Юрий, теперь я верю. Я видела Вашу активность и знаю, что такого результата быть не может. Видимо, Вас гасили, а меня нет".

Фальсификации на самих участках мы исключили. Каждый участок был закрыт командой по 6-9 человек. Были перекрыты и переносные урны, и каждый список. Наблюдатели буквально сверяли данные в списках с паспортами избирателей, чтобы не допустить карусельщиков с бумажками в паспортах. Т.е. с точки наблюдения мы сели на шею комиссиям в 7 утра и не слезали до последнего, просто не дав им никаких шансов на ручные фальсификации. К слову,все наблюдатели сошлись во мнении, что около 70-80% избирателей, которые приходили на наши участки - это пожилые люди, которые, как всем известно, в большинстве своем голосуют за КПРФ. Однако, прошли 4 из 4 префектурских кандидата.

Теперь отвлечемся от меня, заглянем в первый округ. Там баллотировался коммунист Олег Жишко - избранный в 2011 году глава города. Ещё раз, медленно, этот человек был избран на высшую должность в Щербинке в 2011 году на прямых выборах. Он баллотируется в фактически родном ему округе, где концентрация его сторонников самая большая. В основном там живут его друзья (Щербинка по-прежнему маленький подмосковный город, где многие друг друга знают). В итоге он набирает всего 100 голосов на участок, префектурские набирают, как и в моем округе, 300 с лишним. По результатам КОИБов Жишко проигрывает даже фотографу(!!!). И кто в это поверит? В этом же округе на одном из участков отпечатанный и подписанный протокол председатель комиссии сначала убрал в сейф(!!!), а потом вытащил и порвал (!!!) на глазах всех наблюдателей, опять убрав ошметки в сейф! Копии протоколов никому не были выданы, о чем составлены акты. Мы до сих пор не понимаем какие будут данные с этого участка, в ГАС Выборах по-прежнему пусто.

Ночью же приходит информация из пятого округа, где КОИБ, внезапно, начал озвучивать реальные результаты выборов. Как только КОИБ озвучил, что наш кандидат Маргарита Петрова набрала 300+ голосов один из префектурских наблюдателей начинает вопить об ошибке в КОИБе, о смещении голосов на одну строчку и прочий бред. Наши наблюдатели и члены комиссии требовали ручной пересчет, который так и не дали провести. Какие результаты пойдут в ГАС Выборы опять же непонятно.

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

Я не расстроен тому, что я не стал депутатом. И этот пост даже не о КПРФ и не о Щербинке. Этот пост о КОИБах - комплексах игры в выборы. Игры, в которую невозможно победить, даже если Вы привели на участок сотню наблюдателей. Мы не верили в то, что программирование результата в КОИБе возможно, но убедились в обратном. Я могу поверить в то, что я проиграл, я даже могу поверить в то, что в красной Щербинке КПРФ не набрала большинство депутатских мандатов. Но я в жизни не поверю, что не прошел вообще ни один из наших кандидатов, да ещё и с такими цифрами... Сейчас наша общая задача думать о том, как избавиться от КОИБов раз и навсегда, как от инструмента, совершенно не поддающегося какому-либо контролю наблюдателей.

 

 

 

Доступны исходные коды двух версий КОИБов

http://habrahabr.ru/post/193414/

11 сентября в 23:38

Оценка и экспертиза IT-проектов, C#*, Электронное правительство

Евгений Федин раскопал где-то на ГосЗакупках техническое задание и автодокументацию на КОИБы (архив «КОИБ 500 шт»...).

КОИБы или комплексы обработки избирательных бюллетеней используются на некоторых избирательных участках России для автоматизации процесса подсчёта голосов на выборах и референдумах.

Автодокументация, PDF из архива, оказалась склейкой исходников, которые я без особого труда «расклеил» и положил на гитхаб. Там два коммита — старая, но комментированная, версия и новая, без комментариев, но зато с инсталлятором.

ПО написано на C#, в версии КОИБ-2003, по всей видимости, запускалось на Widnows, сейчас работает на unix-like системе под mono.

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

Контрольные соотношения в КОИБе программируются и могут не проверяться, если не введены соответствующие формулы.

Шаблон итогового протокола в КОИБах таков, что имена членов комиссий можно заполнять только руками…

Призываю всех искать фичи/баги, анализировать и делиться в комментариях!

UPD: Не уверен, что топик скоро наберёт 100 голосов, но хотелось бы пригласить Евгения на хабр, чтобы он здесь тоже мог поделиться своими наблюдениями. Если в этом меня поддерживает кто-то, у кого есть инвайт — скиньте ему, пожалуйста, личкой в твиттер (или мне в профиль, а я уж ему). Встречайте

 

Вбросы, мухлёж… всё предусмотрено. :)

 

+ public bool CheckMask(VoteKey mask)

 

Создаем нужное количество бланков за кандидата, оставляя все поля пустыми (не инициализированными, ммм… а, да, вы же не курсе, что все поля VotingKey предусмотрительно сделаны Nullable ?), кроме «нужных»:

 

1) VotingKey.GetHashCode()

 

Если VotingMode.Value == 0, ScannerSerialNumber.Value % 16 == 0, BlankId и ElectionNum совпадают с Id «для нужного», кандидата, тогда

 

VotingKey a;

VotingKey nuzniyKey;

 

a.GetHashCode() == nuzniyKey.GetHashCode();

 

2) public bool CheckMask(VoteKey mask) успешно проходится, если заполнено только CandidiateId (=CandidateId «за нужного» кандидата), BlankType (BlankType = All) из-за:

 

+ if (mask.CandidateId != null && mask.CandidateId != CandidateId ||

+

+ mask.ElectionNum != null && mask.ElectionNum != ElectionNum ||

+

+ mask.BlankId != null && mask.BlankId != BlankId ||

+

+ mask.ScannerSerialNumber.HasValue && mask.ScannerSerialNumber.Value != ScannerSerialNumber ||

+

+ mask.VotingMode.HasValue && mask.VotingMode.Value != VotingMode)

+

+ return false;

+

+

+

+

+

+ return true;

+

+ }

3) Вызываем AddVote(VoteKey)

 

 

Результаты моего небольшого исследования.

 

Во время инициализации КОИБ программа просит вставить флешку с исходными данными для голосования. Там содержится название выборов, список кандидатов для голосования, координаты квадратиков — и т.д. Всё как и должно быть.

 

Но самое интересное, что алгоритм заполнения протокола (формулы всякие, контрольные соотношения) зашиты прямо в том же файле. Включая расчёт строк протокола, в которых прописывается количество голосов за кандидата. Я думаю, что разработчики предполагали, что КОИБ может использоваться не только в России, и что правила заполнения протоколов могут поменяться. Но вот почему эти правила распространяются не в виде отдельного класса, который можно качественно обложить юнит-тестами, а в виде конфигурации, которая заливается на флешку и компилируется динамически, вот это вопрос.

 

В файле исходных данных все формулы пишутся прямо на C#. Некоторые метапеременные разворачиваются на этапе загрузки в соответствующие C#-выражения.

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

Также, учитывая, что протокол распечатывается после того, как в КОИБ введены данные о неиспользованных бюллетенях, председатель УИК мог втихаря залезть в сейф и хорошо спрятать некоторое количество бюллетеней. При обычных выборах без КОИБ такая фальсификация достаточно сложная, т.к. пришлось бы вбросить примерно то же самое количество бюллетеней, сколько спрятано (или чуть меньше). Иначе будет очень подозрительно, когда количество унесённых избирателями бюллетеней будет зашкаливать. Когда есть «заряженный» КОИБ, накидывание голосов желаемому кандидату может проводиться автоматически по формулам с флешки так, чтобы это не было подозрительно. Защищаться можно, как обычно — гарантируя справедливый жребий при определении участков для пересчёта.

Судя по коду, накрутить общее количество принятых бюллетеней во время голосования не представляется возможным. А значит, счётчику на панельке КОИБ можно доверять. Если в конце дня он показывает N, то будьте уверены, что внутри N бюллетеней. Если в протоколе окажется M > N, значит имело место жульничество. Одно но — КОИБ при этом не должен быть подключен к сети. В противном случае, эмулируя удалённый сканер (второй КОИБ, который стоит рядом с главным называется RemoteScanner), можно через процедуру AcceptNewState внедрить желаемые результаты по команде из центра. Прям натурально КОИБ примет хэш «кандидат => число_голосов». Чтобы защититься, наблюдатели должны внимательно проверять наличие лишних проводов, ведущих к КОИБам. А также не позволять их подключать после того, как голосование завершено, что бы там ни вешал на уши председатель.

В общем, резюме, как защищаться от фальсификаций на участках с КОИБами:

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

2. следить, чтобы ничего не подключали к КОИБу ни во время, ни после голосования.

Ну и совсем мёртвая зона — это доверие к выбору участков для ручного пересчёта. Кстати, проверить это тоже довольно легко. Можно сравнить результаты на участках, где был пересчёт, и где были КОИБ без пересчёта. Есть у кого такие данные?

 

 

Вообще это всё выглядит жутко подозрительно. Вот что там считать? Тем более используя ос высокого уровня?

По сути весь функционал реализуется на простом микроконтроллере. А тут перепрограммирование с flash носителя.

Наличие проводов тоже ни о чём не говорит, данные можно заслать хоть по gsm. Внутрь корпуса никто не даст залезть всё равно.

Делаю вывод, что нужно вообще убирать коибы.

 

 

А вот где ложь, ###деж и провокация — так это вот тут:http://www.cikrf.ru/banners/smi_tech/12/011211.html

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

Теперь мы точно знаем, что это не так.

 

 

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

Для сокрытия результатов голосования (кстати, это почти то же самое что экзит-полы, но их вроде не запрещают почему-то) можно счётчики шифровать, и публиковать ключи пост-фактум.

 

Само по себе подключение этих устройств к сети — дыра в безопасности.

Если это нужно только для контроля числа приходящих на голосование — это совсем не оправдано.

Если выкладывать в сеть зашифрованные голоса типа (12:33 участок№3 голос за МиккиМауса) то как только будут опубликованы ключи, будет де-факто раскрыта и тайна голосования. Так как эти временные отметки вполне можно соотнести с опусканием бюллетеня в урну.

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

 

алгоритм получается простой (я спецом ездил в москву наблюдать на участок с КОИБ, ради опыта этих киобов)

— закончили выборы (коиб кстати голосом говорит все ключевые временные точки), смотрим итоговые цифры на обеих машинах

— считаем и погашаем биллютени

(наблюдатель уже складываем эти цифры и сравнивает с общим количеством биллютеней)

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

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

если любое из этих 2 пукнтов не выполняется, у меня нет оснований верить коибу

 

Отвечу одним махом на горстку комментариев вида «как это должно быть».

 

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

 

Нет никакой возможности определить, работает то или иное ПО на устройстве. Устройство может имитировать компиляцию, проверку ключей, хэшей, получение данных с накопителя, самодиагностику — всё, что угодно.

 

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

При подсчёте голосов, убедиться, что устройство делает всё правильно можно независимо от того, какое ПО используется. Для этого нужно немного изменить обычную процедуру:

— после окончания ввода бюллетеней, печатается предварительный протокол

— после этого устройство переводится в режим простановки отметок на бюллетени

— бюллетени извлекаются и снова скармливаются устройству, на бюллетенях ставятся номера (все бюллетени сейчас хорошо перемешаны, тайна голосования защищена)

— выводится повторный протокол и таблица (№бюллетеня — отметки)

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

— последнюю процедуру можно повторить и в вышестоящем избирательном органе.

Все эти вещи рассмотрены в курсе на Coursera «Securing Digital Democracy».

А я могу написать обобщающий пост, если хабралюдям будет интересно.

 

В исходном коде может быть интересно поискать, как минимум, следующее:

• то, что может быть использовано для корректировки результатов,

• то, что может быть использовано для осуществления контроля волеизъявления (вот, например, блестяще найденное kpp https://gist.github.com/podshumok/6521904),

• то, что может быть использовано для задания необычного режима работы (как, например, возможность отключения контроля печати https://github.com/podshumok/KOIB/blob/master/Croc.Bpc/Recognizer/Ocr/StampTestLevel.cs  через системное меню https://github.com/podshumok/KOIB/blob/master/Croc.Bpc/Workflow/Activities/SystemMenu/SystemMenu.wf#L188-L190 или возможность нескольких печатей и печати вышестоящей комиссии https://github.com/podshumok/KOIB/blob/master/Croc.Bpc/Recognizer/RecognitionManager.cs#L240-L245),

• то, что может свидетельствовать о (не)защищённости перед атаками man-in-the-middle при передаче данных от главного сканера к подчинённому сканеру,

• просто не вполне понятные вещи (пример https://github.com/podshumok/KOIB/blob/e90546f45de7a6f20e44949a72389ebc4179c850/Croc.Bpc/Keyboard/KeyType.cs#L108-L116 ).

 

В коде проскакивает url: www.croc.ru Авторы сего кода?

 

Судя по поиску http://www.croc.ru/search/?s=&q=%EA%EE%E8%E1  они делали, но страницу с этой статьёй удалили уже, только в поиске и осталась ссылка.

 

 

Скрытые возможности КОИБов: несколько предположений о программировании выборов

http://www.specletter.com/vybory/2013-09-16/elektronnye-potroha-koiba.html

Александр ЛУРЬЕ,

программист

Электронные потроха КОИБа

Компьютерщики-энтузиасты раскопали на сайте госзакупок исходные программные коды КОИБов, которые обрабатывали голоса на выборах мэра Москвы 8 сентября 2013 года. Оказалось, возможностей для манипуляций с электронными урнами не меньше, чем с обычными.

 16 сентября 2013

Через несколько дней после прошедших в Москве выборов мэра на самом, пожалуй, популярном портале компьютерщиков «Хабрахабр» появился пост с исходными кодами двух версий комплексов обработки избирательных бюллетеней, применявшихся в том числе и на последнем состоявшемся в Москве голосовании. Бдительные IT-шники выковыряли электронные потроха КОИБов на сайте госзакупок, где соответствующий тендер проводила ЦИК РФ. Вскоре после сенсационной находки пикантная страница госзакупок ушла в глубокий нокаут, однако спустя некоторое время вернулась в строй, и даже вроде бы без содержательных изменений. Как бы то ни было, но 50 тыс. читателей «Хабра» успели ознакомиться с представленными материалами и, конечно, скачали всю документацию к себе на машины, дабы спокойно ее проанализировать. «Особая буква» поговорила с одним из пользователей «Хабра» — Александром Лурье, выпускником факультета информационной безопасности МИФИ, который рассказал, к каким выводам он пришел, изучив внутренности КОИБа.

КОИБ (комплекс обработки избирательных бюллетеней) — электронный сканер, считывающий с избирательного бюллетеня информацию  о том, как проголосовал гражданин, и по окончании голосования автоматически формирующий итоговый протокол участковой избирательной комиссии. Он самостоятельно проверяет действительность бюллетеня и подводит результаты голосования за кандидатов или партии.

— Можно ли говорить, что работавшие на выборах в Москве 8 сентября 2013 года КОИБы были начинены именно тем кодом, который раскопали юзеры на сайте госзакупок и обсуждают на «Хабре»?

Утверждать это со стопроцентной уверенностью мы не можем, потому что вполне вероятно, что с тех пор программа видоизменялась, в нее были добавлены или удалены какие-то возможности, исправлены какие-то ошибки. Тем не менее фундаментальное устройство программы, которое программисты называют архитектурой, изменить весьма непросто. Для этого надо потратить очень много ресурсов: заново реализовать многие программные модули, внести капитальные изменения в оставшиеся части программы, заново пройти все этапы тестирования, найти множество ошибок, исправить их, потом снова тестирование и, наконец, сертификация и приемка. Это очень долгий и дорогостоящий процесс. Поэтому без особых причин таких серьезных изменений разработчики всегда стараются избегать. Это дает основания полагать, что современные КОИБы работают на том же или незначительно измененном программном обеспечении. Достоверно известно, что на выборах мэра 8 сентября 2013 года использовались КОИБ-2010. Именно программный код КОИБа-2010 мы и анализировали, найдя его на сайте госзакупок.

— Какие уязвимости в программном коде КОИБов видны вам как программисту? Есть ли возможности для манипуляций и фальсификаций результатов голосования?

Я не стану утверждать, что описанная ниже уязвимость — это намеренно оставленный бэкдор, лазейка для посвященных. Вполне возможно, что это просто промах разработчиков. Но учитывая, что код КОИБов проходил аудит на соответствие требованиям безопасности, это уже двойной промах — и разработчиков, и аудиторов. Что наводит на мысли о том, что все так и было задумано.

Если говорить техническим языком, то найденная уязвимость относится к классу code injection. Она позволяет в момент формирования итогового протокола при помощи специальным образом подготовленных для КОИБ исходных данных выполнить на компьютере, встроенном в КОИБ, произвольный код. В том числе и такой, который изменит количество голосов, отданных за кандидатов. Утром в день голосования председатель УИК вставляет в КОИБ «ключевой носитель», представляющий собой обычную флешку, которую заранее выдают в вышестоящей комиссии. На этой флешке сохраняется XML-файл с полной информацией о выборах: когда начинается и заканчивается голосование, какой есть список кандидатов, какого формата бюллетени, и много других данных. Примеры записей взяты из технического задания, которое было размещено на госзакупках:

 Однако кроме вышеперечисленных (очевидных) параметров в том же файле сохраняется информация о правилах заполнения протокола: сколько в нем строк, какой текст должен быть написан в этих строках, по каким формулам вычисляются числовые значения и так далее.

Взглянем на пример исходных данных, по которым КОИБ формирует строки протокола:

 Код, который выполняет замену строк типа {BlankType=NoMarks,VotingMode=Portable} на соответствующий им программный код, находится в файле Common/Voting/Line.cs. Затем после подстановки значений код передается в компилятор C# (Common/Voting/SourceData.cs строка 434), где он будет скомпилирован и отложен до окончания голосования. Когда голосование заканчивается и формируется протокол, строка за строкой скомпилированная программа выполняется (Common/Voting/Line.cs, строка 262). Здесь-то и оказалась запрятана уязвимость. В формулу можно подставить вызов любой функции, в том числе которая будет менять итоги выборов:

Managers.VotingResultManager.VotingResults.SetNewVotesValue(111, 100500)

Например, таким образом можно проставить кандидату #111 (из примера выше) 100500 голосов. Кому-то добавить, кому-то отнять. Причем логику можно прописать любой сложности, которая будет проверять текущий процент за каждого из кандидатов, принимать решение, сколько голосов перекинуть, и так далее. Понятно, что просто добавить голосов какому-то кандидату не получится — в протоколе не сойдется общее количество бюллетеней, и подтасовка сразу будет видна. А перекинуть некоторое число голосов с одного кандидата на другого — беспроигрышный вариант. Никаким контролем, кроме ручного пересчета, обнаружить эту фальсификацию будет невозможно. Де факто выходит, что, не нарушая целостности пломб на КОИБе, можно повлиять на результат голосования.

— Как непосредственно это можно сделать?

В программном коде КОИБа есть описанная выше логика, позволяющая исполнять программный код с флешки. Само по себе это очень серьезная дыра в безопасности. Однако для того чтобы воспользоваться таким способом фальсификации, нужно, чтобы подмененные данные каким-либо образом попали в КОИБ.

Согласно инструкции по эксплуатации КОИБ, с утра в день голосования оператор должен включить КОИБ и загрузить в него исходные данные: «После запроса «Вставьте Flash» вставить ключевой носитель в главное сканирующее устройство (сканирующее устройство, к которому подключен принтер) и нажать клавишу «ДА» на задней панели сканирующего устройства. После этого на информационном табло главного сканирующего устройства появится сообщение «Загрузка исходных данных...».

Ключевой носитель (флешка) выдается председателю УИК накануне выборов в вышестоящей ТИК, чтобы можно было провести тестовое включение КОИБ, убедиться в его работоспособности. Ответственность за сохранность ключа с этого момента лежит на председателе УИК. Но самое интересное, что закон даже не требует от него хранить ключ-флешку в сейфе! Председатель может взять ключ домой и внести в него нужные изменения.

Хотя я не исключаю, что для защиты данных «от председателей» используются и дополнительные уровни защиты, которые сделают такую «лобовую» атаку невозможной. Например, флешка, на которой хранятся данные, вполне может содержать в себе криптоконтейнер, например, выпускаемый какой-либо отечественной компанией, который не позволит посторонним лицам (председателю УИК) подменить данные.

Однако никакого контроля со стороны наблюдателей за тем, кто имеет право шифровать и подписывать исходные данные для флешек, законодательно не установлено. Это значит, что лица, которые имеют доступ к криптографическим ключам, все равно могут изменить данные так, как им заблагорассудится. Какая бы совершенная криптосистема ни использовалась, все равно ее стойкость ограничена уровнем доверия к тем, кто формирует исходные данные. Пусть их готовит хоть сама ЦИК. Кто может гарантировать, что вводимые ею исходные данные кристально честные?

— Может быть, просто КОИБ делали немножечко криворукие программисты без всякого злого умысла?

В технических требованиях ЦИКа к КОИБам сказано: «КОИБ-2010 должен иметь действующий сертификат соответствия Федеральной службы по техническому и экспортному контролю по требованиям безопасности информации (в части контроля отсутствия недекларированных возможностей в специальном программном обеспечении)». А также: «Встроенное предустановленное специальное программное обеспечение КОИБ-2010 входит в стоимость изделия на условиях бессрочной лицензии с ежегодным обновлением, при необходимости, в рамках технической поддержки». Выводы о криворукости либо об умысле можете делать сами.

— А кто автор-исполнитель этого интересного кода для КОИБа?

В исходниках кода через строчку написано, что разработчики — КРОК:

[assembly: AssemblyCompany(\"Croc inc.\")]

[assembly: AssemblyProduct(\"Croc.Bpc.Workflow\")]

[assembly: AssemblyCopyright(\"Copyright © Croc inc. 2010\")]

Но это все, понятно, ерунда, так как вписать что угодно можно. Однако более весомое подтверждение, что это дело именно их рук, — участие КРОК в аукционе на право изготовления КОИБов. Собственно, КРОК и не скрывает, что плотно работает с ЦИКом и осуществляет, например, даже сервисную и техническую поддержку системы ГАС «Выборы».

— Понятно. Итак, как же может выглядеть фальсификация результатов голосования с использованием выявленных в программном коде КОИБа скрытых возможностей?

Способ фальсификации может выглядеть так: голосование идет без каких-либо видимых нарушений — нет никаких огромных дополнительных списков, каруселей, вбросов, массового голосования на дому. А когда голосование заканчивается, КОИБ выдает результат, где соотношение голосов перераспределено в пользу нужного кандидата. Все происходило на глазах у наблюдателей, комар носа не подточит — никаких оснований для ручного пересчета голосов нет. Ничего не подозревающие наблюдатели вынуждены согласиться, что выборы прошли честно.

Чтобы защититься от «заряженных» КОИБов, законодательство предусматривает обязательный ручной пересчет голосов на 5 процентов участков, выбираемых жребием. Как бы на месте жуликов сделать так, чтобы КОИБы, где будет ручной пересчет, показали правильный результат, а все остальные 95 процентов — «нужный»? Как бы подать сигнал КОИБу, что вот тут считай правильно, а тут можно жульничать? Идея! А давайте сделаем так: если КОИБ перезагрузят перед тем, как распечатывать протокол, то будем считать честно. А если не перезагрузят, то «как надо». Сделать это очень просто: например, как только станет известно, что пересчет будет на участке N, мы звоним доверенному лицу на участке и просим его выключить рубильник на минутку. Ну или кто-то о кабель питания «случайно» споткнется. КОИБ перезагрузится и выдаст правильный протокол. Перезагрузка КОИБа — это самое простое решение на такой случай. Кстати, в этот момент можно и ключевой носитель (флешку) подменить. Ведь председатель должен достать его из кармана (или где он там его хранит) и снова после перезагрузки вставить в КОИБ. Ему могут выдать два ключа: один честный, другой нет. И инструкция — в случае проблем с наблюдателями, пересчетом и т.д. перезагрузить КОИБ и вставить честный ключ.

Противодействовать этому можно только одним способом: сначала все КОИБы выдают электронные протоколы, которые подписываются членами УИК, и с них снимаются копии для наблюдателей, а только потом производится жеребьевка, выбираются участки для ручного пересчета и, собственно, производится пересчет. В таком случае можно будет реально удостовериться в честности КОИБа.

— То есть нынешних мер обеспечения честности голосования с помощью КОИБ недостаточно?

Их явно недостаточно. Вот пример алгоритма фальсификации, который построен на основании выявленных уязвимостей программного кода КОИБа. Уполномоченные лица (из ЦИК, ТИК или другой организации, кто готовит исходные данные для КОИБ) загружают на ключевой носитель исходные данные, которые при выполнении каких-либо внешних условий будут выполнять фальсификацию. Таким условием может быть, например, отсутствие перезагрузок с момента включения КОИБ или определенное время. Скажем, если протокол снимается в первой половине часа, то фальсификации не будет, а если во второй — то будет. Найденная уязвимость позволяет описать программную логику любой сложности.

Председателю УИК дается инструкция, что если ему будет объявлено о проведении ручного пересчета на участке, то необходимо протокол с КОИБ снять в первой половине часа. Тогда данные будут честными. Если ручного пересчета не будет, то под любым предлогом задержать снятие протокола до второй половины часа.

Косвенными признаками того, что на вашем участке могла быть такая фальсификация, являются: необъяснимые задержки в снятии протокола с КОИБ, внезапные отключения света перед снятием протокола с КОИБ, какие-либо другие нелогичные действия комиссии по отношению к КОИБ перед снятием протокола (перезагрузка, переключение шнуров), настоящей целью которых является подать сигнал КОИБу, как он должен считать — честно или нет.

— Другой вопрос, который волнует в связи с КОИБами: не нарушается ли КОИБом тайна голосования, если учесть, что он фиксирует время и отданный голос избирателя с ведущейся одновременно видеосъемкой голосования?

Действительно, после обработки бюллетеня КОИБ формирует запись об этом (Recognizer/RecognitionManager.cs, строка 744):

"Бюллетень N {0} {1}. Печать: {2}. {3}. Время: {4}",

И заносит ее в журнал (Recognizer/RecognitionManager.cs, строка 616):

WriteRecognitionResultToLog(recResult, stampResult, stampNumber, recLogAddInfoSb.ToString());

Учитывая, что время {4} фиксируется с точностью до тысячной доли секунды (Recognizer/RecognitionManager.cs, строка 750):

DateTime.Now.ToString("HH:mm:ss.fff"));

Это позволяет со стопроцентной точностью соотнести бюллетень с изображением человека с видеокамеры.

Стоит уточнить, что в системах, подключенных, к Интернету, время обычно синхронизируется со службами точного времени. Но КОИБ ни к чему не подключен, и часы на нем выставляются вручную через меню оператора. Однако при желании сопоставить время КОИБ и время видеорегистратора все равно, конечно, можно. Посмотрели на видео — кто-то опустил бюллетень в 15:20:21, и в это время никто больше не опускал (ни до, ни после). Нашли эту запись в журнале КОИБ — там она зафиксирована, допустим, в 15:19:38. Вычислили разницу во времени между КОИБ и камерой — 43 секунды, и дальше с учетом этого можно точно все остальные бюллетени опознать.

— Если видеотрансляция с участка идет в открытом доступе в Интернете, то кто может иметь доступ к журналу времени и «качества» голосования КОИБа? То есть кто может выяснить, как голосовал конкретный человек, сопоставив видео и записи журнала?

Учитывая, что эти данные на ключевой носитель не записываются, их можно будет получить только после выборов, подключившись к встроенным в КОИБ компьютерам. Доступом к компьютерам как минимум обладают техники, проводящие наладку, диагностику и ремонт КОИБов. Также, скорее всего, доступ есть и у сотрудников вышестоящих избирательных комиссий, поскольку извлечение данных из КОИБов может потребоваться для проведения разбирательств-проверок. Ну и, наверное, доступ к этой информации могут получить спецслужбы в рамках имеющихся у них компетенций.

— Можно ли вообще организовать чистое и честное голосование с КОИБами технически? Это должен быть open-source-код у КОИБов, чтобы все желающие могли спокойно его проверять, а не выискивать следы в госзакупках?

Делать КОИБ с открытыми исходниками бесполезно, поскольку никаким образом перед голосованием проверить, что в КОИБ загружен именно тот код, что выложен на всеобщее обозрение, нельзя. Хотя в целом, на мой взгляд, КОИБ — отличное решение, чтобы автоматически проверять подлинность бюллетеней, препятствовать вбросу пачек в урну, проводить альтернативный, не зависящий от людей подсчет голосов. Однако чтобы организовать чистое и честное голосование, необходимо на каждом участке считать голоса и при помощи КОИБов, и вручную. Ручной пересчет даст гарантию, что КОИБ не мухлевал с голосами, а КОИБ даст гарантию, что комиссия не будет перекладывать бюллетени из одной стопки в другую, сбегать с неподписанными протоколами, топить бюллетени в луже и так далее. Процедура должна требовать посчитать все вручную, а затем распечатать протокол из КОИБ. Если не сошлось, пересчитывать вручную еще раз. Если по-прежнему не сошлось, в обязательном порядке фиксировать нарушение.

Резюмируя, есть два варианта организации честного голосования. Первый — когда пересчитываются только 5 процентов участков. Тогда критически важно, чтобы сначала вышел протокол из КОИБ, а потом была жеребьевка. Чтобы у комиссии не было возможности сообщить КОИБу, чтобы он считал честно. Второй вариант — обязательный ручной пересчет всех участков. Тогда никакой разницы нет, что будет сначала: ручной подсчет или снятие электронного протокола.

 

Материал подготовили: Алексей Барановский, Евгений Порошин, Мария Пономарева

 


Вместе мы победим!