Google Website Translator Gadget

понедельник, 5 марта 2012 г.

Взлом PollDaddy.com - накручивание счетчика

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


Какие бывают счетчики или как устроено голосование? 
Для голосования используется специальная панель, в которой можно выбрать, как правило, один вариант ответа. И проголосовать тоже можно, как правило, только один раз. Обычно организаторы конкурса, которые проводят голосование через Интернет, не нанимают программистов для разработки и создания своей собственной уникальной системы голосования - это дорого, долго, не целесообразно. Проще и лучше выбрать готовую существующую систему и использовать ее для голосования. В этом случае преимущества очевидны:
  1. можно выбрать именно ту систему и механизм голосования, который наиболее подходит для конкурса
  2. не нужно думать о технических аспектах реализации системы - экономия на программистах, специалистах в области компьютерной безопасности.
  3. готовая система уже апробирована и прошла тестирование в разных конкурсах, значит можно считать ее надежной и безопасной

К готовым системам голосования относятся голосования через лайки Вконтакте и Фейсбуке, специальные плагины к веб-движкам (они есть для Joomla, Drupal и т.д.), специальные сервисы, предоставляющие голосование как услугу (например, PollDaddy) с возможностью интеграции в любой веб-сайт. 
Любая даже самая раскрученная и навороченная система система голосования не может обеспечить заявленный уровень надежности и безопасности голосования, если этой системой не умеют пользоваться или ее не правильно настроили. К сожалению организаторы обычно этому уделяют мало внимания, и вероятно поэтому многие голосования проходят не честно.

Технические моменты учета голосов
В зависимости от сложности системы голосования, она получает от участника голосования следующие данные:
  1. IP-адрес компьютера.  По нему определяется провайдер участника, страна и город. Учитывая тот факт, что сейчас у всех либо статические либо динамические IP-адреса, то при желании можно точно определить место, с которого происходило голосование. Таким образом, если накручивать счетчик из дома, то администрация потенциально может определить не только полный почтовый адрес, но также фамилию, имя и отчество участника
  2. Куки (свои и чужие).  Куки содержат информацию сайтов, которые когда либо посещал участник. Собственные куки системы голосования выступают в роли меток, определяющих голосовал пользователь или нет. Доступ и анализ куки от других сайтов теоретически может идентифицировать личность участника, например, определить его ники в на других сайтах, e-mail адреса и т.п.
  3. Ник или имя пользователя (это справедливо для Вконтакте и других систем, требующих предварительной регистрации)
  4. Браузер и его версия
  5. Операционная система
  6. Страница, с которой зашел участник
  7. Локальное время компьютера участника
Исходя исключительно из этой информации система голосования пытается определить проголосовал участник или нет. Первые три пункта являются ключевыми и позволяют определить личность голосовавшего участника. Основной защитой злоумышленника от определения его личности является использование чужого или анонимного IP-адреса, например, путем использования анонимного прокси-сервера. Однако умные системы голосования умеют определять IP-адреса публичных прокси-серверов и блокируют возможность голосования. Кроме этого некоторые прокси-серверы некорректно передают данные, из-за чего не работает JavaScript, и как следствие панель голосования. Также необходимо учитывать тот факт, что некоторые пользователи работают через NAT, т.е. несколько компьютеров имеют один общий внешний IP-адрес. По такому принципу работают все организации. Поэтому за одним IP-адресом могут скрываться несколько реальных участников. Именно по этой причине используется комплексный подход для выявления среди участников голосования злоумышленников, накручивающих счетчик голосования.
Пример анализа и накрутки счетчика PollDaddy
Я буду писать про реальный конкурс - так будет интереснее:) В первый раз я решил участвовать в конкурсе фотографий с online-голосованием, где победитель выбирается путем голосования зрителями за понравившуюся работу. Конкурс назывался "Объективная лига"  и размещен на сайте http://inkazan.ru/fotokonkurs/. Конкурс уже завершен,  и хотя эта страница еще активна, панель голосования с сайта уже убрали. Поэтому текст будет снабжен скриншотами.

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

Я честно привлекал своих друзей к голосованию, чтобы всё было честно, открыто, как с моральной точки зрения, так и с технической - разные IP-адреса, браузеры, операционные системы и т.д. Кстати, друзья мои, всем вам большое спасибо! Мне, как специалисту в области IT, особо был интересен вопрос, связанный с безопасностью и валидностью голосования. 

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

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

С чем имеем дело?
Сначала нужно определить какая система голосования используется на сайте. Это можно сделать разными методами. Наиболее простой - определение через исходный код страницы: если используется сторонняя система голосования, то можно сразу узнать адрес, куда отправляются данные голосования, а по адресу уже определить саму систему. В рассматриваемом конкурсе для голосования использовался сайт PollDaddy.com. Панель голосования выглядела следующим образом:
Красным цветом выделена ссылка на сайт PollDaddy.com. Тут всё очень просто - название системы уже написано, так что даже не пришлось смотреть исходный код страницы. 

Анализ возможностей системы PollDaddy.com
Теперь мы знаем используемую систему голосования. Следующий шаг - анализ этой системы. Для этого заходим на сайт PollDaddy.com. Нам предлагают 3 типа аккаунта - бесплатный (базовый) и еще два платных. Их список услуг показан на экране:
Определяем тип аккаунта, который используется в конкурсе. Организаторы используют бесплатный аккаунт. Об этом говорит наличие ссылки в панели голосования (была отмечена красным цветом). Эта ссылка находится исключительно в бесплатной версии аккаунта (см. описание тарифных планов). Вообще это неудивительно, PollDaddy.com просит уж очень много денег за эту панель голосования! К тому же организатор данного конкурса - это не коммерческая организация, чтобы иметь возможность платить за такие навороты. Им вообще отдельное спасибо, что они проводят этот конкурс. Правда, надеюсь, в будущем, Интернет-голосование будет на более безопасным и на более высоком уровне.

Далее проводим анализ возможностей аккаунта и панели управления. Для этого регистрируемся на сайте и получаем доступ к своему бесплатному аккаунту. Панель управления позволяет использовать один из трех механизмов отслеживания уникальности голосующих:
  1. по IP-адресу
  2. через куки (рекомендуемый способ от PollDaddy). 
  3. по IP-адресу и куки

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

Способы накручивания счетчика
Таким образом, зная, что за накручивание счетчика мошеннику "ничего не будет" и "никто об этом не узнает", я расскажу как это можно сделать. Наверно самый простой вариант - это поискать в Интернете способы накручивания. Для счетчика PollDaddy.com есть описанные примеры на русском языке. Еще больше примеров на английском языке. К счастью или сожалению описанные в Интернете методы не работают. Это связано с тем, что система PollDaddy.com регулярно обновляется и совершенствуется. Поэтому указанные методы не работают с актуальной версией счетчика. Я приведу примеры работоспособных вариантов накручивания, годящихся для использования с последней версией счетчика. 

В первую очередь надо определить масштаб накручивания:
  1. Для малого количества голосов можно использовать более простые "ручные" методы. 
  2. Для сильного и быстрого накручивания необходима автоматизация.
Тестирование накручивания счетчика производилось не на самом сайте конкурса (это не этично), а на отдельном тестовом голосовании, созданном в PollDaddy.com. Это тестовое голосование с функциональной точки зрения - точная копия системы голосования рассматриваемого конкурса, т.е. имеет тот же класс аккаунта и те же настройки. 

Способы накручивания вручную
Рассмотрим сначала механизмы "легкого" накручивания. Самый прямолинейный вариант - это установить на компьютер и голосовать с разных браузеров: Firefox, Internet Explorer, Safari, Google Chrom, Opera. Таким образом, уже будет пять голосов:) А ведь браузеров гораздо больше - Kazehakase, Epiphany, Konqueror, SeaMonkey и т.д. Кроме этого текущий алгоритм PollDaddy.com работает так, что можно голосовать с одного и того же компьютера и из одного и того же браузера еще раз через определенный промежуток времени. Вероятно, это время жизни куки. И это время равно примерно одному часу. Возможно это время непостоянно.

Более логичный вариант, который приходит в голову для обхода системы голосования - это уничтожать все возможные следы, которые оставляет система голосования на компьютере голосующего. Для этого необходимо очистить кэш и куки браузера. Однако, как показывает практика, для PollDaddy.com подобный подход почему-то не работает в браузерах Google Chrome, Opera, Firefox, Safari.

Последний наиболее оптимальный из простейших вариантов - это использование так называемого режима инкогнито. Этот режим сейчас есть практически во всех браузерах. Он скрывает личную информацию пользователя от посещаемых сайтов, а также удаляет всю информацию, полученную после посещения этих сайтов. Тестирование показало, что корректная работа режима инкогнито осуществляется не во всех браузерах (например, Google Chrome тест провалил), а вот в браузере Firefox (для точности версия 10.0.2) всё работает как надо. Алгоритм действий такой:
  1. Включение в FireFox режима инкогнито.
  2. Зайти на сайт или обновить страницу, где расположена панель голосования.
  3. Проголосовать.
  4. Выключение режима инкогнито.
  5. Повторить всё заново, начиная с пункта 1.
Используя комбинацию быстрых клавиш (Ctrl+Shift+P, Ctrl+F5) приведенный метод можно считать вполне приемлемым для того, чтобы вручную накрутить счетчик.

Также хочу отметить, что для Firefox существует надстройка Default User Agent, позволяющая маскироваться под другой браузер. Кроме этого существуют плагины, позволяющие создавать и сохранять макросы, полуавтоматически менять свой IP-адрес через список прокси-серверов, что дает злоумышленнику больше функциональных возможностей выдавать себя за других людей.


Способы автоматизированного накручивания
Теперь рассмотрим механизмы быстрого автоматизированного накручивания счетчика, позволяющие добавлять тысячи голосов. Как это работает? Для начала лучше зайти на сайт http://polldaddy.com/poll/5667889/. Это официальный сайт PollDaddy. На нем всегда хранятся в открытом доступе шаблонная страница голосования. Поскольку голосование уже закрыто, то там голосовать уже нельзя и отображаются только результаты. Последние цифры ссылки 5667889 - это идентификационный номер голосования, его легко определить, изучив исходный код страницы http://inkazan.ru/fotokonkurs/ (напоминаю, что сейчас там уже нет счетчика голосований, соответственно в исходном коде отсутствует идентификационный номер голосования).  На сайте PollDaddy.com удобнее просмотреть исходный код страницы, чтобы увидеть код JavaScript функции vote, отвечающей за голосование. Это подход заключается в анализе исходного кода счетчика, передаваемых параметров, чтобы запрограммировать свой собственный скрипт, который автоматически голосует за нужный вариант. Код функции достаточно прост, можно определить смысл передаваемых параметров. Пример анализа этих параметров и сами скрипты есть в Интернете. Правда, как я писал ранее, эти скрипты устарели и не работают с последней версией PollDaddy.com. Они требуют определенных изменений. Естественно, что рабочий модифицированный код скрипта я приводить не буду - мы всё рассматриваем в учебных целях, а не ради реального взлома и хакерства. Существуют программные решения, ориентированные прямо или косвенно на накручивание голосов, рекламных кликов и т.д. Это также выходит за допустимые рамки учебно-познавательного материала. Для организаторов и компаний возможно проведение отдельных консультаций по защите голосований и другим вопросам кибербезопасности.

Выводы.
Для организаторов конкурсов:

  1. Необходимо четко прописать правила и условия голосования. Явно указать о запрете многократного голосования, мерах наказания за нарушения правил.
  2. Для проведения честного голосования в числе сотрудников должны быть специалисты в области компьютерной безопасности.
  3. Необходимо постоянно проводить мониторинг и контроль голосования, выявлять потенциальные накручивания счетчиков, публично объявлять и дисквалифицировать участников-нарушителей.
  4. Помните, проводить конкурсы с Интернет-голосованием нужно очень строго, аккуратно и на высоком уровне. Иначе катастрофически быстро растет число недовольных участников, число мягко говоря "возмущенных" комментариев на сайте и т.д., что приводит к дискредитации и падению рейтинга как самих организаторов, так и партнеров конкурса.

Для участников конкурсов:

  1. Подумайте, стоит ли участвовать в конкурсе? Настоящий ли это конкурс вообще? К сожалению сейчас проводятся подставные конкурсы, целью которых является кража идей и готовых работ.
  2. Какие условия конкурса и правила голосования? Если там не указано о способах борьбы и мерах наказания за накручивание счетчика, значит организаторы не проработали этот момент и не будут отслеживать нарушителей.
  3. Можно ли, прочитав положение о конкурсе, положив руку на сердце, сказать, что всё составлено так, чтобы конкурс проходил максимально честно? Если даже на бумаге организаторы не способны четко, ясно и честно изложить условия конкурса и отбора работ-победителей, то техническая реализация будет еще хуже.
Желаю всем удачи и творческих успехов!

P.S. Автор выражает глубокую благодарность организатору конкурса - Лиге студентов РТ за проведение конкурса и других мероприятий, ориентированных на развитие молодежи республики. Именно этот конкурс вдохновил меня на написание настоящего материала.