Уязвимость в системе голосования от vestnik.in.ua

Posted Posted by Snipter in , , , , , Comments 0 коммент.


Если вы кременчужанин и одновременно активный пользователь Интернета, то скорей всего слышали о конкурсах проводимых газетой "Вісник Кременчука". Например: Sweet girl, Ice girl и им подобные. Голосование за тех или иных участников проходит как в Интернете, так и с помощью специальных купонов, которые можно найти все в той-же газете "Вісник Кременчука". Он-лайн голосования боле популярны, так как достаточно скинуть ссылку на страницу своему другу/подруге и жалостно попросить проголосовать за нужного участника. Зачастую, участники голосования или их помощники не ограничиваются отправкой сообщений только своим знакомым, а начинают посылать сообщения всем кому можно и кому нельзя. И я был не исключением…

Время от времени мне приходили сообщения типа: «Плиииииз)))) проголосуй за участницу под №….», «Привет! Проголосуй …. буду очень благодарна!!!!!))))», «Привет) Поддержи меня, я под №##) Можно голосовать каждый день) Заранее спасибо)» и т.д. и т. п. Смотря на все эти усилия и старания, я задался вопросами: так ли надежна и справедлива эта система голосования? На сколько сложно сфальсифицировать голос? Какие знания необходимы, что бы изменить ход опроса?

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

Начнемс

Свой первый минус веб-мастера сайта заработали еще до того, как я перешел на страничку сайта. Все дело в одном сообщении, которое однажды пришло мне в личку: «Привет) Поддержи меня  … Можно голосовать каждый день». Не, ну ребята… Ну что это такое? Лично мое представление о голосованиях - это пришел, раз проголосовал и ушел. И все. Больше права голоса ты не имеешь. Когда выставлены такие условия «Можно голосовать каждый день», то это больше похоже не на голосование, а на соревнования «упроси как можно больше друзей голосовать за тебя каждый день».

Конечно я сразу слепо не поверил данной особенности системы и в следующее утро помимо просмотра почты, зашел снова на страничку голосования. И что мы видим? Доступ к голосованию снова открыт… Не знаю ошибка ли это, или запланированные условия, но я бы за такое поставил минус.

И так, продолжим

Решив не заморачиваться на мелочах, я продолжил аудит системы. Что нужно для того, что бы найти уязвимости в голосовании? Правильно! Нужно понять, как оно работает. Так и сделаем. Заходим на страничку голосования и нажимаем CTRL+U. Перед нами открывается исходный код странички.



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

Начинаем анализ системы. Роемся в коде, сморим что, где и как. Уже через 15 минут появляются некоторые мысли по поводу обхода защиты системы, нужно проверить. Запускаем необходимые программы, вводим нужные данные и вуаля! Работает!!!! Радости нет придела! Нужно еще раз проверить. Да нет, точно работает!

Всего лишь через 15 – 20 минут после начала работы над сайтом у меня в руках был готовый алгоритм фальсификации голосования на сайте vestnik.in.ua.

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

Votes forger

Моей главной целью было создать простой и понятный интерфейс, пользоваться которым сможет даже ребенок, и надеюсь, я ее достиг. Внешний вид программы изображен ниже: 


Все довольно просто. Копируем адрес странички голосования, вставляем его в программу, анализируем и кликаем "Like" необходимому участнику. Но обо всем по порядку.

Расскажу про наш полигон, на котором будут поводится испытания. В качестве цели я взял конкурс, который проходит в данный момент, а именно «Sweet girl». Данный опрос состоит из шести этапов на каждом из которых выбывает определенное количество участников. Что бы не было никому обидно, возьмем страничку уже пройденного этапа конкурса по адресу http://vestnik.in.ua/news/3002-novyy-konkurs-startoval.html. Данный этап проходил с 9 по 16 февраля (ровно месяц назад). Благо, эту страницу никто не удалил, и у нас есть место где поиграться. Начнем.

Во-первых, нам нужно скопировать адрес странички:



Дальше вставляем адрес в необходимое поле программы и нажимаем кнопку «Анализ»:



Программа сканирует страницу, находит участников и предоставляет нам возможность голосовать за интересующего нас человека сколько угодно раз. Для этого необходимо кликнуть «Like» и все, голос сфальсифицирован. Просто, не правда ли? 

Давайте для примера за кого-то проголосуем. Ну например, например, Аня Кравченко. У нее не так уж много голосов, да и список не придется донизу листать. Решено. Делаем снимок до:



Пару раз клацаем на кнопке «Like», перезагружаем страницу и делаем снимок поле:




За время меньше чем пол минуты у Ани добавилось 7 голосов. Как по мне довольно неплохо. 

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


Видео записывалось в несколько дублей (то окно какое-то выскочит, то программа заглючит) и в итоге у Ани под конец видео было не 73 запланированных голоса, а целых 105! Но так как это голосование уже закрыто, то думаю мне простят =)

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


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

Что мы имеем?

Со всего выше сказанного можно сделать вывод – в системе голосования есть уязвимость, и уязвимость довольно таки серьезная. Используя наши наработки, можно создавать разные сценарии роботы программы, например: постоянное голосование за определенного участника с определенной частотой (к примеру 20 голосов в час), поддержание лидерства (например, выбранный участник всегда должен быть на 30 голосов выше, чем другие) и им подобные. Все что от нас потребуется - это всего лишь запустить программу, а дальше она все сделает за нас. 

Так ли уж это ужасно?

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


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


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

И что же делать?

Выше был продемонстрирован метод обхода системы голосования и возникает вопрос: а как же защититься от подобных фальсификаций? Дам несколько советов.

Captcha

Как пользователи Интернета, вы не могли не сталкиваться с подобной системой защиты:


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

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

Голосование от «Вконтакте»

Скорей всего вы сталкивались с подобной системой голосования от сайта vk.com. Он предоставляет прекрасный механизм, позволяющий устраивать голосования на ваших сайтах. Что бы поучаствовать в опросе, нужно быть зарегистрированным пользователем  социальной сети «Вконтакте». Проголосовав, специальный механизм запомнит ваш ответ и отобразит текущие результаты голосования. Что бы обойти такую систему нам нужно создать много фальшивых аккаунтов на сайте vk.com (в простонародье - боты), которых создать ой как не просто. Социальная сеть довольно хорошо защищена от ботов, и сфальсифицировать подобные голосования сложно, а порой и невозможно.

Использование подобной ситемы накладывает определенные ограничения – голосующий должен быть авторизирован на сайте vk.com. А что если у тебя нету аккаунта на данном сайте? Как в таком случае проголосовать? Да, голосование в данном случае невозможно. Но если посмотреть на текущею статистику, то процентов 85%-95% людей, участвующих в голосовании, имеют аккаунты на данном сайте  и смогут без проблем проголосовать. Думаю, потеря 5% - 15% процентов голосующих не сильно повлияет на ход голосования.

Выводы

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

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

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

Надеюсь, администрация сайта примет все необходимые меры для дальнейшего справедливого проведения голосования.

P. S.

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



Дополнительные материалы

Сайт газеты «Вісник кременчука»: ссылка
Страничка конкурса «Sweet girls»: ссылка
Страница голосования использованная в примерах: ссылка
Подробней про капчи: ссылка
Подробней об голосованиях от «vk.com»: ссылка

0 коммент.:

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