...

суббота, 15 марта 2014 г.

Голосования и информационная безопасность

В этом посте я изложу свои мысли о голосованиях с точки зрения информационной безопасности… В первую очередь топик направлен на IT специалистов, которым хочется иметь стройную, понятную им, картину того, что такое честное голосование. Описанное применимо к выборам модератора, к голосованию жюри при вручении премий, к референдумам, к президентским «гонкам» и т.д. В подобных рассуждениях правильнее везде использовать слово «голосование», но для краткости и для борьбы с тавтологией я буду иногда писать «выборы».

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

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

Замечу, что статья не про политику. Желающим обсудить что-нибудь политическое в контексте этой статьи настоятельно рекомендую заниматься этим не в комментариях, а где-нибудь ещё.

Принципы






  1. Баланс целей



    Почти всегда в сложных проектах есть несколько целей и много требований. И почти всегда они вступают в противоречие друг с другом. Например, требование: «фальшивые пользователи недопустимы», если для их проверки требуется слишком много ресурсов сервера, конфликтует с целью «обеспечить высокую производительность», то есть мы легко можем устроить DOS сами себе.

    В идеале, мы должны достигать всех целей (например, сделать качественную, но быструю проверку пользователей). Но не всегда можно обеспечить 100% по всем пунктам. В таких случаях нельзя впадать в крайности, вместо этого стоит проанализировать ситуацию, понять, что важнее, и осознанно снизить планку по одному из критериев, сделав соответствующее публичное заявление.


  2. Фальсифицируемость (проверяемость)



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


  3. Презумпция «виновности»



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


  4. Прозрачность, открытость и гласность



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


  5. «Мыслить как преступник»



    Этот принцип означает, что при проектировании, изменении и использовании системы необходимо постоянно задавать себе вопросы: «А что здесь может пойти не так?», «Могу ли я изменить результаты голосования так, чтобы никто не узнал о моём вмешательстве?», «Есть ли у меня (или у кого-нибудь) возможность добавить или удалить кандидата без формальной процедуры?», «Могу ли я сорвать выборы просто сорвав пару бумажек со штампом ОПЕЧАТАНО?» и т.п.


  6. Непрерывное устранение уязвимостей



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

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




Все эти принципы тесно связаны друг с другом. Отказ от одного делает бессмысленными остальные.

Роли






  1. Организаторы



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

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


  2. Номинируемые



    Это те, кто может стать кандидатом. Например, для конкурса кинофильмов это все фильмы, вышедшие в этом году, а для выборов мейнтейнера open-source проекта — это все активные разработчики.


  3. Номинирующие



    Те, кто имеет право выдвигать Кандидатов. Это могут быть некоторые представители жюри, сами Номинируемые (если это люди) или автомат.


  4. Кандидаты (соискатели)



    Соответственно, те, кто получил номинацию. Из них будут выбирать одного или нескольких. В некоторых случаях, не публикуется (иногда до определения результатов, а иногда и вовсе) информация о том, кем именно являются Кандидаты: доступны только сведения о достижениях, количестве blame строк кода, доходах, характеристиках, параметрах (зачеркнуть лишнее).


  5. Имеющие право голоса



    Право голоса могут иметь все жители планеты страны или города. В множество пользователей с этой ролью могут быть включены или не включены Организаторы, Номинирующие, Кандидаты. В какой-нибудь высоконагруженной компьютерной системе при выборе мастер-сервера правом голоса обладать могут все компьютеры кластера.


  6. Избиратели



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

    У избирателя может быть один голос, несколько (например, при голосовании на собрании акционеров) или даже дробное количество голосов. Можно даже придумать такие «выборы», где у одних избирателей будет положительное количество голосов, а у других — отрицательное.


  7. Проголосовавшие



    Это Избиратели, которые отдали свой голос. Как правило, после этого они больше не могут проголосовать в текущем голосовании. Исключением, например, является голосование на Евровидении и тому подобные средства относительно честного отъёма денег у населения.


  8. Наблюдатели



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




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

Цели






  1. Выборы должны состояться



    Это может показаться слишком очевидным, но не указать эту цель нельзя. Иначе можно так сильно «закрутить гайки» в остальных целях, что выборы провести будет просто невозможно.


  2. У Номинирующих должно сформироваться намерение выдвинуть кандидатов



    Организаторы должны:


    • оповестить всех Номинирующих о предстоящих выборах;

    • объяснить Номинирующим их права;

    • представить всех Номинируемых Номинирующим (не обязательно каждого каждому. А если Номинирующие и Номинируемые — одни и те же лица, этот пункт исчезает);

    • обеспечить Номинирующим возможность независимого объективного суждения без давления из вне.





  3. У Имеющих на это право должно сформироваться намерение проголосовать



    Организаторы должны:


    • оповестить всех Имеющих право голоса о предстоящих выборах;

    • объяснить потенциальным Избирателям их права;

    • обеспечить (потенциальным) Избирателям возможность независимого объективного суждения без давления из вне (как о необходимости становиться Избирателем, так и о том, за какого Кандидата голосовать).





  4. Каждый желающий избиратель должен проголосовать



    Иными словами, намерение проголосовать должно «превратиться» в учтённый голос. (И ничто другое в голос «превратиться» не должно!) Это касается действительно всех Избирателей, даже если они в космосе, не могут ходить, не могут видеть или болеют.


  5. Должна быть обеспечена тайна голосования



    Эта цель есть не всегда, а иногда она присутствует лишь частично. Например, в технических системах она означает лишь требование независимости решений Избирателей-автоматов. А в случае голосования в парламентах, соответствие (избиратель-голос) может держаться в тайне не вечность, а, скажем, несколько лет.

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


  6. Голоса должны быть правильно посчитаны



    Это означает, что система должна каждый голос правильно распознать и учесть. Например, при голосовании «в шапочку» ни одна бумажка (зафиксированный голос) не должна потеряться до окончания подсчёта и ведущий (Организатор) должен прочитать в закорючках на бумажках именно то, что написали Проголосовавшие.


  7. Должны быть оглашены правильные результаты



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


  8. Затраты на организацию выборов должны уложиться в бюджет



    Таковы суровые реалии. Бюджеты всегда ограничены, а педантичность и высокая достоверность стоят очень дорого. Нет смысла тратить миллионы долларов для того, чтобы решить, кому доверить управление миллионами долларов (тем, что от них останется после выборов). Хороший способ снижения затрат — кооперация с другими организаторами, использование совместных разработок.




Этапы






  1. Анализ ситуации и актуализация системы



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


  2. Предварительная агитация



    Организаторы объявляют даты и время проведения голосования, сообщают за что/кого будет голосование. Публикуют правила (уточнённые принципы, цели, этапы), отчёты (что изменилось с прошлого голосования). Распространяют сведения о ролях и их правах, принимают меры для защиты этих прав. В том числе, например, они должны «защитить» тех, кто имеет право голоса, но решил не становиться Избирателем, от насильственного посещения выборов.


  3. Регистрация



    Сначала регистрируются сами Организаторы, потом Номинирующие и Избиратели, затем Номинируемые.


  4. Номинация



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


  5. Объявление Кандидатов



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


  6. Агитация



    Это наиболее трудно формализуемый этап (и потому наиболее часто и успешно атакуемый).

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

    Но чаще всего этого недостаточно для объективных суждений и честного голосования. В таком случае организаторы всё же пытаются формализовать процесс агитации: проще всего для этого вести контроль ресурсов, используемых Кандидатами или их представителями для агитации. Такими ресурсами могут быть деньги, эфирное время в СМИ, количество полос в газетах, время аренды рекламных мест на улицах и др. Изначально ресурсы могут принадлежать кому угодно: Организаторам, Избирателям, Кандидатам, их представителям. Представителями кандидатов могут быть даже те, кто не имеет какой-либо роли в системе. Распределение ресурсов не обязательно должно быть равномерным — какой-то кандидат может получить больше, а какой-то меньше, если Организаторы посчитают (и смогут доказать), что такое распределение сделает агитацию более честной. Главное, чтобы всё это было отражено в итоговом отчёте.


  7. Сбор голосов



    Самый картинный этап любого голосования. Классификация сбора голосов может быть проведена по двум критериям:


    • Очный и заочный



      В случае очного голосования избиратель отдаёт голос, находясь на определённой территории для голосования. В противовес этому существует заочное голосование, в том числе через интернет и по почте.


    • С доказательством и без



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

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




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


  8. Подсчёт голосов



    Подсчёт голосов может происходить вручную, после сбора голосов и/или автоматически, в том числе во время сбора. Как отмечено выше, в общем случае машинам нельзя доверять. С другой стороны, ручной подсчёт всегда дороже, и люди чаще ошибаются. Так что хороший компромисс на этом этапе крайне важен. Приведу пример такого компромисса.(Насколько мне известно, лучшего способа подсчёта голосов на крупных выборах до сих пор не придумали.) Голоса считаются дважды. В первый раз — автоматически, во время сбора голосов. После сбора на всех, уже перемешанных, бюллетенях ставят случайные номера. При втором, снова автоматическом, подсчёте создаётся таблица (номер, голоса). Понятно, что результаты обоих подсчётов должны совпасть. Но помимо этого, можно проверить любое количество (например, репрезентативную выборку) бюллетеней вручную на соответствие записи в таблице.


  9. Анализ



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


  10. Объявление результатов



    Итоговый отчёт публикуется, голосование считается завершённым.


  11. Улучшение системы



    За время проведения голосования, особенно за время этапа анализа, могло накопиться много подтверждённых уязвимостей. На этом этапе, который постепенно переходит в этап 1, Организаторы меняют систему для защиты от соответствующих атак. Какие-то временные решения могу становиться постоянными, какие-то отвергаться в пользу более общих и т.д.




Человеческий фактор




Люди — не машины. Мы не всегда поступаем логично, пропускаем важный текст мелким шрифтом, боимся, на наши суждения легко повлиять. Если Избиратели, Организаторы или Наблюдатели — люди, то при организации выборов нужно минимизировать человеческий фактор.


  1. Юзабилити



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


  2. Давление



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


  3. Пропаганда



    Большое количество однобокой информации в СМИ гарантированно повлияет на суждения избирателей, сделает их менее объективными.


  4. Восприятие данных



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


  5. Лень



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




Цели атакующего




Истинных мотивов злоумышленника мы, конечно, не знаем, но можем считать, что его действия направлены на срыв наших целей, то есть:


  1. Срыв самих выборов



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


  2. Исключение или неправомерное добавление Кандидатов



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


  3. Создание препятствий при формировании намерения проголосовать



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


  4. Создание препятствий при голосовании



    Выше даны примеры таких атак — давление и плохо оформленные бюллетени. Сюда же относятся подделка бюллетеней, ангажирование оборудования и др.

    Другой пример — подкуп избирателей и его частный случай: голосование по цепочке. Злоумышленник выносит бюллетень за пределы территории для голосования, ставит в нём «правильную» отметку и предлагает другим избирателям опустить этот бюллетень в урну и принести назад чистый — за деньги.




  5. Публикация отметок избирателей



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

    Интересный пример — запись последовательности, в которой отдавались голоса (кандидат1, кандидат2, кандидат1). Зная дополнительно в каком порядке люди голосовали (избиратель1, избиратель2, избиратель3), злоумышленник может «проконтролировать волеизъявление» (избиратель1-кандидат1, избиратель2-кандидат2, избиратель3-кандидат1).




  6. Подтасовка при подсчёте



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


  7. Оглашение неверных результатов от имени организаторов



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


  8. Манипуляции с целью неоптимального использования бюджета



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




Классификация атак






  1. Изнутри и снаружи



    Атака может происходить со стороны пользователя с любой ролью. Атакующий вообще может не быть зарегистрирован в системе. Однако, наиболее опасные атаки исходят со стороны злоумышленников, имеющих статус организатора. (Речь идёт не о взломе системы аутентификации или авторизации, а о заранее спланированном участии злоумышленника в организации голосования). Такие атаки со стороны Организаторов являются атаками изнутри. Прочие атаки — атаками снаружи. Система может и должна быть спроектирована так, чтобы даже атака изнутри была невозможной.


  2. Локальные и глобальные



    Положим, будучи злоумышленником, я обнаружил уязвимость и решил ей воспользоваться. Как именно я смогу повлиять на ход голосования? Насколько масштабируема моя атака? Если я могу повлиять лишь на небольшое количество голосов (и общее количество скомпрометированных голосов линейно зависит от количества атакующих), то это локальная уязвимость и атака. Если уязвимость позволяет мне (возможно с малым количеством моих сторонников) полностью переписать результаты, то это глобальная уязвимость и атака.


  3. Обратимые и необратимые



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


  4. Анонимные и «авторские»



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


  5. Обнаружимые и необнаружимые



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


  6. Дешёвые и дорогие



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




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

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


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий