Разработка и исследование методов повышения cтойкости к автоматическому прохождению Captcha
Теоретические и практические аспекты реализации и внедрения Captcha. Разработка методов повышения стойкости теста к автоматическому распознаванию. Алгоритмы генерации изображений. Морфинг шрифтов как новый метод искажения. Правила внесения искажений.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 13.10.2017 |
Размер файла | 4,0 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
67
Размещено на http://www.allbest.ru/
Содержание
- Введение
- 1. Теоретические и практические аспекты реализации и внедрения CAPTCHA
- 1.1 Сущность теста Тьюринга. Определение символьно-графического и текстового CAPTCHA
- 1.2 Анализ основных видов искажений и шума в алгоритмах генерации изображений для CAPTCHA
- 1.3 Практические аспекты внедрения символьно-графического CAPTCHA и анализ основных способов его автоматического обхода
- 2. Разработка методов повышения стойкости к автоматическому распознаванию CAPTCHA
- 2.1 Методика разработки алгоритмов генерации изображений
- 2.1.1 Правила внесения искажений
- 2.1.2 Методика разработки алгоритмов символьно-графического теста CAPTCHA
- 2.2 Морфинг шрифтов как новый вид искажения
- 2.2.1 Определение морфинга шрифтов и применение в CAPTCHA
- 2.2.2 Алгоритм морфинга
- 2.2.3 Морфинг на множестве шрифтов
- 3. Практическое применение результатов исследования
- 3.1 Разработка системы для проведения CAPTCHA
- 3.1.1 Проектирование и реализация системы
- 3.1.2 Тестирование
- 3.2 Разработка системы для генерации новых шрифтов с помощью морфинга и интеграция в систему для проведения CAPTCHA
- 3.2.1 Проектирование и реализация
- 3.2.2 Тестирование
- Заключение
- Библиографический список
Введение
Актуальность темы. В настоящее время, тесты CAPTCHA используются более чем на семи миллионах сайтов по всему интернету. Большинство из них используют либо собственные разработки, либо готовые модули для систем управления сайтами. А сервисов, предоставляющих услуги генерации и проверки CAPTCHA сторонним сайтам, сравнительно немного. Согласно статистике, среди прочих лидирует вид теста, в котором пользователю предлагается распознать символы, изображённые графически с различными искажениями и шумами. Пять из шести сайтов, на которых используется CAPTCHA, имеют символьно-графический тест. Каждый шестой сайт применяет альтернативное решение, предоставляемое сторонней организацией.
За более чем десятилетний период с появления самой идеи CAPTCHA, накопилось достаточно много примеров программ автоматического прохождения этого теста через имитацию действий пользователя.
В интернете сформировалось как минимум 2 основных метода автоматического прохождения теста CAPTCHA:
1. автоматическое прохождение через имитацию действий пользователя, например, если говорить о символьно-графическом CAPTCHA, то зачастую это нейронные сети для распознавания образов приведённых символов;
2. эксплуатация ошибок внедрения, к которым можно отнести все, что не вошли в первый пункт.
Противодействие второму зависит от компетентности программистов, а первый требует обобщения имеющегося опыта и исследований. В связи с этим, актуальной является задача поиска наиболее эффективных алгоритмов генерации изображений CAPTCHA и их особенностей таким образом, чтобы сделать разработку упомянутых выше вредоносных программ максимально сложной, в идеальном случае, невозможной.
Степень разработанности темы исследования. Помимо основного труда Алана Тьюринга "Вычислительные машины и разум", датированного 1950-м годом, автор опирался, в основном, на статьи, посвященные CAPTCHA, в периодических изданиях и профильных электронных библиотеках. Отечественные авторы значительное внимание уделяют исследованию надежности теста Тьюринга (см. работы Ахмада А.С.Э., Попова А.А., Козлова А.Е., Яковлева А.В. и др.), а также проблемам уязвимости систем, где CAPTCHA используется как средство аутентификации (см., например, работы Биркун Н.И., Гуськовой А.М., Басараб М.А., Яна Д. и др.). Вопросы так или иначе связанные с повышением стойкости к автоматическому распознаванию поднимаются в относительно узком круге работ. Так, например, интерес представляет исследование Голубевой А.С., где поднят вопрос различных видов искажений, ставший основой для более полной и развернутой классификации искажений и шумов, предложенной автором.
Значительное внимание автор уделял зарубежной периодической литературе и переводным статьям в различных российских изданиях, где CAPTCHA рассматривается как актуальное средство борьбы со спамом и бот-атаками в различных сферах жизни деятельности.
Следует отметить, что ни в одном источнике автором не были найдена попытка (или ссылка на нее) разработки методики и новых методов повышения стойкости к автоматическому распознаванию. В основном, авторы предлагают подходы, связанные с наложением ещё больших шумов и искажений, что делает CAPTCHA практически не читаемой для пользователя, или же отходят от символьно-графического представления и выбирают разнообразные аналоги, среди которых наибольшую популярность приобретают движущиеся или статичные картинки с последующим определением их содержания. Попыток подойти к проблеме с иной точки зрения, а именно создания нового шрифта, который отсутствует в базе данных бот-систем, автором не было найдено.
Цель и задачи диссертации.
Целью данного исследования является реализация и тестирование методов повышения стойкости к автоматическому прохождению символьно-графического CAPTCHA.
В качестве задач исследования выделены следующие:
1. Обобщить теоретические аспекты реализации и внедрения CAPTCHA, в частности провести анализ основных видов искажений и шума в алгоритмах генерации изображений для CAPTCHA;
2. Выделить практические аспекты внедрения символьно-графического CAPTCHA и провести анализ основных способов его автоматического обхода;
3. Создать методику разработки алгоритмов генерации изображений;
4. Идентифицировать морфинг как новый вид искажения и дать характеристику алгоритму его осуществления;
5. Подтвердить повышенную работоспособность разработанного метода с использованием нейронных сетей различного типа.
В качестве объекта исследования выберем практическую реализацию системы генерации изображений и проведения аутентификации на основе символьно-графического теста Тьюринга.
В процессе исследования автором получены следующие научные результаты:
1. Предложена авторская классификация видов искажений символьно-графического CAPTCHA.
2. Разработана методика построения алгоритмов генерации изображений символов при проведении CAPTCHA.
3. Определено понятие морфинга шрифтов как нового вида искажений символов. Разработан алгоритм унификации точек для проведения морфинга. Приведены результаты исследования морфинга шрифтов с целью позиционирования его как нового вида нелинейного искажения символов.
4. Разработана архитектура системы для проведения символьно-графического CAPTCHA на сторонних сайтах.
Автором были получены следующие практически значимые результаты:
Обобщены и проанализированы особенности практического внедрения CAPTCHA на основе актуального авторского опыта работы с высоконагруженными системами.
Разработана структура, архитектура и программная реализация системы для проведения символьно-графического CAPTCHA на сторонних сайтах. Для сервиса реализован оригинальный алгоритм генерации изображений на основе предложенной методики.
Создан оригинальный алгоритм и реализована система генерации новых шрифтов на основе имеющихся в системе с помощью морфинга.
Создана сверточная нейронная сеть, использующая базу рукописных шрифтов MNIST, для тестирования морфинга.
По результатам исследований опубликовано 3 научных статьи и получен патент номер 2608262 на изобретение "ИСКАЖЕНИЕ СИМВОЛОВ ДЛЯ СИМВОЛЬНО-ГРАФИЧЕСКОГО ОБРАТНОГО ТЕСТА ТЬЮРИНГА", зарегистрированного в Государственном реестре изобретений 17 января 2017 г. (Приложение 1).
captcha морфинг алгоритм генерация
1. Теоретические и практические аспекты реализации и внедрения CAPTCHA
1.1 Сущность теста Тьюринга. Определение символьно-графического и текстового CAPTCHA
Вопрос о том, может ли машина мыслить, задаётся исследователями с момента зарождения идей о создании вычислительных систем и искусственного интеллекта. Впервые относительно чёткую формулировку ответа на данный вопрос дало исследование Алана Тьюринга, опубликованное более 65-ти лет назад. В данном исследовании ответ на вопрос утвердительный, однако, с поправкой на то, что машины, безусловно, мыслят иначе. Конечно, такой вывод вызвал массу дискуссий, поскольку для людей того времени сам факт того, что неодушевлённый предмет способен мыслить не воспринимался как реальность. Изначально дискуссии носили исключительно философский характер, однако именно они натолкнули Тьюринга на формулировку проблемы по-новому, а именно: "Могут ли машины делать то, что можем делать мы (как мыслящие создания)"? Теперь задача сводилась к тому, чтобы предложить действенные способы провести грань между человеком и компьютером в виде чётко сформулированной методики действий. Такой тест и был предложен Аланом Тьюрингом в статье "Вычислительные машины и разум" в 1950 году.
Тест Тьюринга - эмпирический тест, в основе которого лежит идея определения, кем является пользователь системы: человеком или программой, изначально имеющий следующую формулировку: "Человек взаимодействует с одним компьютером и одним человеком. На основании ответов на вопросы он должен определить, с кем он разговаривает: с человеком или компьютерной программой. Задача компьютерной программы - ввести человека в заблуждение, заставив сделать неверный выбор" Тьюринг А.М. Вычислительные машины и разум. // В сб.: Хофштадер Д., Деннет Д. Глаз разума. - Самара: Бахрах-М, 2003. - С. 47-59. .
Смысл такого теста заключается в эмпирической проверке наличия симбиоза логического и нелогического поведения субъекта, который обычно присущ человеку.
Разработка Тьюринга, безусловно, опережала время, и изначально дискуссионными оставались исключительно философские вопросы, поскольку аналоги и контрпримеры не имели место. Однако, с течением времени вопрос продолжал изучаться и анализироваться, получив развитие в эксперименте под названием "Китайская комната". В 1980-ом году американским учёным Джоном Сёрлом был предложен мыслительный эксперимент. Автором предлагалось представить человека, не знающего ни одного китайского иероглифа, внутри комнаты с руководством по манипуляции этими иероглифами с неизвестной целью. Всё что нужно - это следовать инструкциям, словно машина. В комнату периодически приносят вопросы на китайском языке, а человек должен давать на них ответы. Сёрль заключает, что, во-первых, такой человек не сможет пройти тест Тьюринга. Во-вторых, если компьютер, будучи на месте этого человека, и пройдёт тест, то это не будет означать какого-либо понимания с точки зрения компьютера того, что он делает, а значит, такой тест не является адекватной проверкой наличия мыслительных способностей.
В данной работе мы не ставим перед собой задачи углубляться в философию искусственного интеллекта. Однако для понимания особенностей функционирования теста Тьюринга считаем необходимым охарактеризовать структуру поведения человека и компьютера (рисунок 1.1).
На рисунке 1.1 представлено 3 квадрата поведения, из которых стоит особо выделить "сверхлогическое" поведение, подразумевающее способность быстро производить сложные вычисления. Известны случаи, когда такое поведение наблюдалось и за людьми, однако человек при этом терял способность к социальной адаптации, которую в нашем случае следует отчасти отнести к "нелогическому поведению" (так как оно зависит от пройденной человеческим видом эволюции и часто противоречит логике).
Рисунок 1.1 - Поведение человека и поведение компьютера
Составлено автором
Таким образом, схема иллюстрирует типичное для нормального человека поведение. С другой стороны представлено поведение компьютера, который не только способен выполнять любое логическое действие, которое присуще человеку, но и делать то, на что обычный человек не способен (например, в уме вычислить бином Ньютона 4-ой степени). К тесту Тьюринга относится оценка всех видов поведения для интерпретации результата.
Интерес к методикам прохождения теста Тьюринга не ослабевает и сегодня. Периодически проводятся все новые и новые испытания так называемых "чатботов", пытающихся убедить коллегию судей в том, что общающаяся с ними машина на самом деле человек. Так, в середине 2014 года в сети появились сообщения о том, что тест Тьюринга был пройден на детском уровне. Машине удалось убедить судью, что она 13-летний мальчик, однако специалисты посчитали результаты не слишком объективными, поскольку судьями выступали не специалисты в области искусственного интеллекта и на сторону машины встал лишь один из трех.
Для стимулирования разработок в этой области в 1990 году была учреждена премия Лёбнера, которая поощряет авторов программ для прохождения теста Тьюринга. До настоящего времени никому пока не удалось создать программу, способную пройти тест на текстовом, визуальном и звуковом уровне (c наградой в 25000$ и 100000$), однако ежегодно поощряется автор наиболее "человечной" программы, которому вручают 2000$ Официальный сайт премии Лёбнера. [Электронный ресурс]. URL: http: //www.loebner.net/Prizef/loebner-prize.html (дата обращения: 04. 01.2017). . В 2016 году премию вручили Стиву Уорсвику, который вовсе не является ученым, математиком, программистом или специалистом по искусственному интеллекту. Уорсвик - владелец музыкального сайта, он создал программу Mitsuki, которая была призвана разнообразить общение в чате на сайте Ализар А. Чатбот Mitsuki выиграл премию Лёбнера // Хакер.ru [Электронный ресурс]. URL: https: //xakep.ru/2013/09/19/61285/ (дата обращения: 04. 01.2017). .
Нас же в рамках данной работы интересует полностью автоматизированный публичный тест Тьюринга для различения компьютеров и людей, сокращенно CAPTCHA. Данное определение было сформулировано в институте Карнегги-Меллон в 2000 году в рамках разработки инструмента борьбы с подбором паролей и массовыми рассылками сообщений. Его основная идея заключается в предложении пользователю такой задачи, которую может с легкостью решить человек, но сделать это компьютеру будет несоизмеримо сложнее. Таким образом, практическая невозможность автоматического прохождения CAPTCHA не является целью, а только пределом в задаче исследования алгоритмов генерации CAPTCHA.
С появления идеи CAPTCHA было предложено множество способов её реализации, однако устоялось два сочетающихся друг с другом метода. Первый заключается в распознавании символов изображенных на предлагаемой картинке (часто с добавлением помех и искажений текста). Второй направлен на предоставление возможности пройти тест людям со слабым зрением, и основан на распознавании речи (также с помехами).
Среди альтернативных методов проведения теста можно выделить:
задачи на определение содержимого фотографии с привычными для человека объектами;
задачи на восстановление разрезанного на фрагменты изображения;
арифметические задачи, записанные как текстом, так и в качестве изображений;
вопросы на эрудицию (например, "Как называется наша планета?) или особенности менталитета ("Висит груша, нельзя скушать").
В научных исследованиях встречаются варианты объединения двух и более вышеперечисленных методов для усложнения автоматического прохождения теста. Целью создания таких симбиозов является упрощение решения CAPTCHA пользователями. Однако побочным эффектом становится объединение не только присущих объединённым методам достоинств, но и синтеза их проблем. Так, например, в исследовании Шаухет Ахмад Каучи и Ахмат Ясира Shouket A. K. Secured architecture strategy for fighting against bots / Shouket A. K., Abdullah A., Yasir A. // Computer Sciences and Telecommunications - 2013 - № 4 (40) - С. 20 предложено объединение методов определения содержимого фотографий и распознавания искаженных символов.
Для удобства написания точных формулировок, введем определение отдельного вида CAPTCHA, который был взят за основу данной научной работы.
Определим символьно-графический тест Тьюринга (символьно-графический CAPTCHA) как полностью автоматизированный публичный тест Тьюринга для различения компьютеров и людей на основе автоматически генерируемых изображений с искаженными символами.
Данное определение четко характеризует отдельный вид CAPTCHA - символьно-графический, ранее не выделяемый в научной и периодической литературе.
Каждый из названных выше методов проведения теста Тьюринга чем-то выделяется среди остальных, имеет неоспоримое преимущество перед другими, но в то же время и не лишен недостатков. В этой связи, явных лидеров среди методов нет, оценки близки (за исключением вопросно-ответной системы), но с небольшим преимуществом на первое место выходит метод символьно-графической капчи. Как уже было упомянуто выше, именно она сейчас является наиболее популярной и широко используемой. Экспертная оценка подтвердила это субъективное предположение автора.
Символьно-графический CAPTCHA как метод наиболее часто применяется по ряду причин. Во-первых, данному методу не присущи так называемые понятийные и психологические барьеры, а значит они практически не оказывают на успешность прохождения теста никакого влияния. Технологически метод следует признать абсолютно готовым и находящимся на пике использования. Обращаясь к основному критерию, отражающему эффективность данного метода, а именно - устойчивость к взлому, следует отметить, что взломостойкость напрямую зависит от сложности шумов и искажений символов, а это в свою очередь параметр обратно пропорциональный легкости распознавания для пользователя. Стараясь облегчить пользователю задачу прохождения символьно-графического CAPTCHA, сайты минимизируют количество искажений, что делает тест более доступным для распознавания и автоматического прохождения. С другой стороны, наложение множества искажений на символы усложняет задачу автоматического распознавания, но зачастую делает CAPTCHA сложно читаемым для пользователя.
В рамках данной главы предлагается сосредоточить внимание на изучении символьно-графической капчи как метода, актуального для более чем 5 миллионов сайтов.
1.2 Анализ основных видов искажений и шума в алгоритмах генерации изображений для CAPTCHA
Особенность CAPTCHA состоит в том, чтобы усложнить прохождение этого теста ботами, что достигается наложением на привычные для человека текстовые символы тех или иных искажений и шумов так, чтобы люди всё ещё могли распознать цифры или буквы.
Примеры изображений символьно-графической CAPTCHA приведены на рисунке 1.2.
Рисунок 1.2 Пронумерованные варианты изображений символьно-графических алгоритмов CAPTCHA.
Составлено автором
Источник: Построение защищенной надписи // CAPTCHA.ru [Электронный ресурс] URL: http://www.captcha.ru/articles/visual/ (дата обращения: 04.01.2017)
Проанализируем рисунок 1.2, разделив искажения на несколько групп:
Изменение положения
Поворот
Изменение размеров
Наложение маски искажений (эффект "кривое зеркало")
Шрифт
Шум
Одним из наиболее популярных искажений, применяемых в символьно-графических CAPTCHA, является изменение положения символов относительно друг друга, оно проиллюстрировано на рисунке 1.2, варианты 1, 2, 4 и 5.
Отображение символьно-графических CAPTCHA представляется пользователю в виде двумерного растрового изображения, которое является проекцией сформированного множества символов, искажений и шумов. Поэтому в рамках данной работы рассматриваются искажения видимые пользователем. В качестве изменения положения символов относительно друг друга примем во внимание только модификацию их координат в двумерной плоскости. В случае если символы заданы в трёхмерном пространстве, а их координаты изменяются во всех плоскостях, то после построения проекции на двумерное изображение CAPTCHA, получим два сочетающихся друг с другом искажения: изменение положения символов и изменение их размеров. В случае отражения под углом отличным от 90-тоградусного, добавятся другие виды искажений, которые будут описаны ниже.
Следующий вид искажения, используемый для генерации CAPTCHA - это поворот символов (все представленные варианты с рис.1.2) относительно определённого центра поворота. Он может лежать внутри символа или за его пределами. Таким образом, символы можно поворачивать относительно единого центра или центр у каждого символа может быть свой. В случае, если центр поворота лежит за пределами символа, то имеет место быть сочетание двух видов искажений: изменение положения символа и поворот символа относительно внутреннего центра. При этом поворот символа может быть осуществлён как по часовой стрелке, так и против неё.
Следующий вид искажения - это изменение размеров символов относительно друг друга (варианты 2, 3, 6 рис.1.2). В данной работе под этим понимается не только масштабирование растрового изображения символа в соответствии с теми или иными алгоритмами сглаживания, но и изменение кегля шрифта. Так как используемые шрифты могут быть не только растровые, но и векторные, то в зависимости от способа изменения размера символа (через модификацию кегля, либо редактированием растрового изображения), результаты такого искажения могут существенно отличаться друг от друга. Изменение размеров растрового изображения может быть выполнено без соблюдения пропорций. В качестве одного из частных случаев такого искажения можно привести увеличение одной только ширины.
При изменении размеров символа было упомянуто изменение кегля шрифта. Однако сам по себе шрифт имеет и другие свойства, которые можно менять - это толщина, курсив и семейство ("Times New Roman", "Georgia", "Garamond"). В большинстве рассмотренных CAPTCHA используется только одно семейство без изменения толщины или курсива.
Среди наиболее интересных для анализа искажений, стоит выделить наложение маски искажений (создание эффекта "кривое зеркало") на один символ, либо их набор (вариант 6 рис.1.2). В качестве примера можно привести закручивание изображения по спирали, имитацию размазывания невысохших красок пальцем, сдвиг отдельных участков символа относительно заданной кривой или наложение других сложных растровых фильтров, среди составных частей которых можно выделить сдвиг, кручение, наклон и изменение размеров отдельных частей изображения.
Кроме типичных искажений символов, существует практика наложения шума, который может иметь самые разные варианты воплощения:
1. наложение точек или других геометрических фигур одного или разных размеров со случайным или заданным распределением поверх или позади символов (вариант 4 рис.1.2) или с инверсией цвета (вариант 3 рис.1.2)
2. наложение линий (вариант 1 рис.1.2), часто ломаных (вариант 2 рис.1.2), или решеток (варианты 5 и 6 рис.1.2)
3. добавление фоновых изображений (вариант 5 рис.1.2)
4. изменение цвета при пересечении границ символов (вариант 3 рис.1.2)
Как видно из изложенного материала, вариации искажений практически безграничны, так как могут сочетать в себе различные виды. Наглядно обобщить все проанализированные искажения символьно-графического CAPTCHA позволяет схема, представленная в приложении 2.
1.3 Практические аспекты внедрения символьно-графического CAPTCHA и анализ основных способов его автоматического обхода
Использование CAPTCHA на практике имеет свои особенности. Они продиктованы наличием автоматической генерации изображений - операции, которая может быть весьма дорогой для оперативной памяти и процессорного времени сервера, так как может содержать сложные процедуры с растровыми изображениями. Одной из атак, направленных на эксплуатацию ошибок внедрения, может выступать DDoS-атака (распределённая атака типа "отказ в обслуживании"). Другими способами обхода теста могут быть следующие тривиальные ошибки реализации:
хранения ответа на тест на стороне клиента (тогда злоумышленнику достаточно будет проанализировать сообщения между сервером и его браузером, чтобы найти верный ответ на предложенный тест);
использование фиксированного набора изображений с искаженными символами (тогда злоумышленник может вручную ответить на большинство тестов, а затем создать программу, находящую ответы по имеющемуся у неё словарю);
отсутствие устаревания пройденной каптчи (тогда, подменив идентификаторы, злоумышленник сможет отправлять результаты одной и той же каптчи на сервер по нескольку раз);
Вернёмся к вопросу защиты от атаки типа "отказ в обслуживании", так как она является наиболее серьёзным вызовом при проектировании и разработке систем проведения CAPTCHA. Такой вид атак характеризуется огромным количеством запросов в узкую точку системы с целью приостановить или замедлить обслуживание своих клиентов. В качестве методов противостояния подобным атакам необходимо придерживаться следующих рекомендаций.
В первую очередь, в архитектуру системы следует заложить асинхронность генерации изображений для CAPTCHA, таким образом, чтобы при получении большого количества запросов на их получение, сервер не испытывал бы больших нагрузок. Здесь же стоит упомянуть о необходимости минимизации затрат ресурсов на отдачу клиенту теста.
Асинхронность создания изображений влечёт за собой факт того, что их количество будет ограничено. Поэтому число запросов на начало теста, превышающее количество имеющихся в наличии изображений приведёт к отказу в обслуживании клиентов до тех пор, пока новые изображения не будут созданы. Чтобы предотвратить эту проблему, следует представлять себе хотя бы примерное количество обслуживаемых запросов и время до начала наполнения буфера с изображениями для CAPTCHA. Это позволит рассчитать размер этого буфера, чтобы соблюсти баланс между возможностями серверов и временем до принятия категорических мер по решению проблемы наличия DDoS-атаки. Следующим шагом в борьбе с потоком запросов, существенно превышающим ожидания, является ведение счёта запрошенных CAPTCHA с одного клиента. Такое слежение можно организовать на основе:
1. хранимых на стороне клиента cookies (но этот путь не является надёжным, так как подразумевает допущение того, что клиент хранит и не меняет свои cookies);
2. хранимых на стороне сервера параметров сессии пользователя, что влечёт за собой подключение дорогостоящих для сервера бэкенда и базы данных (кроме того, такое решение требует использования cookies из первого пункта, поэтому может иметь своим недостатком допущение доверия пользователю);
3. счётчика обращений за CAPTCHA в памяти веб-сервера для введения таймаутов (например, в геометрической прогрессии), используя в качестве индекса IP-адрес пользователя (возможно, с другими заголовками, вроде User-Agent, чтобы нивелировать неудобство пользователей, имеющих одинаковый внешний IP-адрес).
С другой стороны, в качестве гибридного решения для покрытия недостатков всех предложенных выше вариантов, стоит рассмотреть возможность реализации достаточно быстрого бэкенда и кэша в оперативной памяти с индексами как на основе пары IP-адрес и User-Agent ("UA"), так и на основе хранимого в cookies идентификатора с целью ведения многоуровневой системы таймаутов. Предлагаемая структура данных для хранения в кэше должна состоять из счётчика обращений по указанному индексу (либо IP и UA, либо UID из cookies браузера) и времени последнего получения изображения для CAPTCHA. Таким образом, можно будет задать время ожидания для получения новой каптчи.
Следующий пункт среди рекомендаций по внедрению CAPTCHA - это ограничение времени ожидания ответа на предложенный тест с целью недопущения разрастания размера отведённых ресурсов под тесты, которые никогда не будут завершены. А также ограничением показа одного изображения одному пользователю, чтобы избежать массового прохождения тестов после отгадывания только одного изображения.
Кроме того, стоит предусмотреть возможность сменить изображение CAPTCHA на новое по требованию пользователя через определённое время после отдачи предыдущего, так как те или иные сочетания искажений могут вызывать проблемы с интерпретацией у разных людей в различных условиях его прохождения (на улице в солнечную погоду или с мобильного телефона с низким разрешением экрана).
Рекомендуется предоставить пользователю руководство на случаи, когда стандартными путями нет возможности пройти тест. Например, если клиентская часть системы реализована с использованием сторонних дополнений к браузеру, которые на ней отсутствуют.
А также отображать статус штатных состояний системы и внештатный ситуаций пользователю с информированием его о сроках разрешения проблемы. К таким событиям относятся: ожидание пользователем обновления изображения каптчи после нажатия на соответствующую кнопку, и перебои в работе сервиса, например, по причине отсутствия сгенерированных заранее изображений.
Разумеется, необходимо вести журнал учёта следующих событий с необходимым уровнем детализации: успешный ввод каптчи (без лишних подробностей), запрос новой каптчи (стоит запомнить каптчу, от которой отказались), неуспешная попытка пройти каптчу (стоит заполнить каптчу, которую не смогли пройти), количество попыток ввода каптчи до того, как успешно её пройти, количество попыток ввода каптчи с уходом с сайта (если такие будут), количество неудовлетворённых запросов на получение каптчи (в связи с перебоями в работе сервиса).
В рамках данной главы рассмотрим также основные способы автоматического обхода символьно-графических CAPTCHA.
Во-первых, одним из видов автоматического обхода CAPTCHA является эксплуатация ошибок внедрения, внесение которых в систему не зависит от алгоритмов генерации изображений, а диктуется лишь необходимостью защиты от возможных атак. Они разобраны выше.
Во-вторых, это возможность подбора правильного варианта. Такой вид обхода присущ алгоритмам с небольшим количеством вариантов ответа. Программе достаточно сделать несколько сотен или тысяч попыток, чтобы подобрать CAPTCHA. Говоря о символьно-графических тестах, в качестве примера можно привести изображение коротких слов, состоящих из не более чем 4-х символов. Допустим, взят алфавит из десятичных цифр, тогда слово длиной в один символ будет иметь 10 вариантов (по числу символов в алфавите), длиной в два символа будет иметь 100, в три символа 1000, в четыре 10 тысяч и только длина слова в пять символов даст больше 100 тысяч вариантов. Таким образом, путь противодействия атаке подбором заключается в увеличении количества вариантов ответа (например, через расширение используемого алфавита), введением временных промежутков между попытками и/или учетом введенных вариантов ответа при предложении новых тестов. Например, если пользователь допустил ошибку при вводе 3-хсимвольного слова, то далее предлагать ему только 4-хсимвольные; если ошибся трижды на 4-хсимвольных словах, то предлагать 5-тисимвольные и так далее.
Также стоит выделить возможность использования пользователей других сайтов незаметно для них или наоборот явно, за соответствующую плату. Противодействие такому виду обхода тестов CAPTCHA представляется довольно сложным или невозможным. Например, сервер злоумышленника может выступать в роли посредника между пользователем и защищаемой системой, предлагая пользователю ввести каптчу, которую получил с другого сайта.
Последним, четвёртым, среди выделяемых видов программного прохождения CAPTCHA является автоматическое распознавание предлагаемых символов на изображениях, например, с помощью обучаемых нейронных сетей. Они получили широкое распространение в области распознавания каптчи в связи с тем, что существует широкое множество библиотек для работы с ними, и есть руководства с примерами создания таких программ.
Но если третьему способу крайне сложно придумать метод противодействия (хотя он, в большинстве случаев, требует денежных затрат), то четвёртый находится на грани между возможностью человека пройти тест и невозможностью такое прохождение алгоритмизировать. Однако, как показывает почти 15-тилетний мировой опыт использования символьно-графического CAPTCHA на сайтах для их защиты, большинство реализованных алгоритмов обходятся с помощью обучаемых нейронных сетей. На основании этого можно сделать вывод о неэффективности многих используемых на сегодняшний день алгоритмов генерации изображений CAPTCHA. Это обусловлено отсутствием системного подхода к анализу существующих алгоритмов и тех из них, для обхода которых были написаны программы для автоматического распознавания символов. Целью такого анализа должно быть формирование методики разработки алгоритмов генерации изображений для избегания часто встречающихся ошибок.
Исходя из сделанных выше выводов, предлагается обратиться к совершенствованию символьно-графической капчи в тех направлениях, где у нее, на наш взгляд, имеются слабые места, а именно:
проблемы прохождения и распознавания символьно-графической капчи в связи со слишком большим наложением искажений и шумов;
снижение её устойчивости к взлому через имитацию действий пользователя.
Таким образом, развитие данного метода лежит в плоскости разрешения противоречия "легкость прохождения - устойчивость к взлому".
Указанные вопросы будут рассмотрены в следующих главах диссертации.
2. Разработка методов повышения стойкости к автоматическому распознаванию CAPTCHA
2.1 Методика разработки алгоритмов генерации изображений
2.1.1 Правила внесения искажений
В связи с тем, что наибольшее распространение при создании программ автоматического распознавания каптчи получили нейронные сети, в дальнейшем анализе будем ориентироваться именно на них.
Программы распознавания в задаче прохождения CAPTCHA способны обрабатывать только отдельные символы по одному, причем только с минимальным шумом и искажениями, так как оперирование образами лежит в основе работы нейронных сетей. Поэтому для создания таких программ разрабатывают процедуры предварительной графической обработки, которые максимально очищают изображение от внесенных помех и выделяют на изображении отдельные символы (сегментация) Взлом старой каптчи сайта Хабрахабр // Хабрахабр [Электронный ресурс] URL: http: //habrahabr.ru/post/161159/ (дата обращения: 05. 01.2017) . В дальнейшем, будем называть такие процедуры подпрограммами предварительной подготовки (здесь и далее ППП). За ними следуют процедуры непосредственного распознавания отдельных символов (здесь и далее ПРОС). Схема их взаимодействия изображена на рисунке 2.1, где ПРОС разбита на части и изображена внутри цикла. Хотя в некоторых случаях в сегментации участвуют и ПРОС, проходя по нескольким вариантам разбиения слипшихся символов.
Таким образом, можно сделать вывод о том, что слабое место систем автоматического распознавания CAPTCHA в ППП. Они зачастую создаются именно для того, чтобы очистить предлагаемое изображение от внесенных искажений и шума, но главная их задача состоит в сегментации изображения для передачи выделенных участков в ПРОС. В этом состоит главное отличие таких систем от того, как проходит тест человек. Он видит изображение целиком. Поэтому разумно было бы использовать широкий набор известных человеку слов для создания изображений для каптчи. Главное, учесть при этом необходимость иметь очень широкий словарь или сочетать как случайные набор символов, так и данные из такого справочник.
Рисунок 2.1 Схема работы типичной программы распознавания символьно-графической CAPTCHA
Составлено автором
На основе проведенного в пункте 1.2 обзора часто применяемых искажений и шумов, а также опыта эксплуатации типичных ошибок при создании систем автоматического распознавания CAPTCHA, сформулируем правила и рекомендации для разработки алгоритмов генерации изображений символьно-графического CAPTCHA.
До сих пор, ведя речь об искажениях, мы рассматривали только их виды и сочетания. Однако в практической реализации алгоритмов генерации изображений для каптчи следует учитывать необходимость изменять параметры их применения во времени. Например, всё время поворачивая первый символ слова на 30 градусов по часовой стрелке, тест будет уязвим для закладывания в ППП поворота первого символа на 30 градусов против часовой стрелки. Поэтому введём термин линейности применяемых искажений. Если параметры применяемого к символам искажения не меняются от одного генерируемого изображения к другому с течением времени, то такое искажение назовём линейным. В ином случае, если параметры искажения меняются от одного генерируемого изображения к другому, то такое искажение назовём нелинейным. Тогда функция формирования слова для теста всегда является нелинейной, иначе единственное выводимое слово может быть всего один раз прочитано злоумышленником и записано в программу несанкционированного ввода информации. Разумно будет сделать нелинейной и функцию вычисления длины создаваемого слова, а не только выбор символов и их последовательности. Разумеется, все эти функции должны быть заданы на фиксированном отрезке значений, иначе могут возникнуть проблемы с генерацией изображений, или отображением результатов её работы.
Данное правило можно обобщить не только для всех видов искажений и их сочетаний, но и для свойств шума, которые были лишь отчасти включены в классификацию искажений. Например, формирование набор геометрических фигур для создания фона, их размеры, цвета, наличие и толщина контуров, положение на рисунке и возможные эффекты искажений, и их параметров, применяемые для символов.
Кроме того, шумы обычно носят вспомогательный характер и часто отсеиваются соответствующими графическими фильтрами на стадии обработки изображения в ППП. Поэтому следует рассмотреть применяемые в процессе формирования алгоритмов их создания практики. Например, если шум реализован в виде ломаных линий, то их толщина должна быть примерно равна толщине линий используемых для начертания символов. Иначе шум может быть убран из изображения путем манипуляций в ППП. То есть главное в наложении шума сделать так, чтобы он был максимально похож на отдельные части символов или на сами символы с минимальными отличиями от них. Однако не стоит забывать, что CAPTCHA должна быть максимально читабельной для человека.
Главное отличие человеческого зрения и обработки изображения CAPTCHA в ПРОС заключается в том, что человек видит картинку целиком. Поэтому добавление, например, коротких ломаных линий рядом с отдельными символами усложнит читабельность и для человека, и для ПРОС. Но вставка ломаных линий, проходящих через несколько символов или весь их набор, позволит человеческому зрению отнести линию к шуму, а символы, с ней пересекающиеся, к отдельным объектам. Однако, здесь тоже есть подводные камни. Продолжая пример с ломанными, они не должны выходить далеко за границы набора символов, иначе запрограммированная специальным образом ППП сможет отталкиваться от этого признака при очистке изображения от шума.
Выше была сформулирована главная задача ППП - это сегментация изображения. Т.е. выделение на изображении отдельных символов для передачи каждого в ПРОС. Поэтому наложение символов друг на друга представляется одним из наиболее эффективных способов усложнения реализации систем автоматического распознавания CAPTCHA. Однако и здесь есть свои нюансы. Например, должно быть случайное количество символов в изображаемом наборе, иначе сегментация может быть проведена выделением фиксированного числа наибольших областей скопления выделенных пикселей или заранее заданными фиксированными рамками. Также необходимо наличие в наборе символов, занимающих примерно в 2 раза больше места, чем большинство других. Это связано с тем, что ППП, выделив широкую область, может разделить наложенные друг на друга символы, например, пополам (или подбором), вместо того, чтобы счесть её одним широким символом (соблюдение рекомендации может быть легко достигнуто использованием специфических шрифтов или использованием изменения размера символа с помощью непропорционального масштабирования).
2.1.2 Методика разработки алгоритмов символьно-графического теста CAPTCHA
На основе сформулированных правил, рекомендаций и некоторых ошибок в реализациях алгоритмов CAPTCHA, сформулированных в предыдущем пункте, предлагается следующая методика разработки алгоритмов символьно-графического CAPTCHA:
Выбор множества шрифтов. Рекомендуется выбрать множество контурных шрифтов Под термином "контурные шрифты" подразумеваются такие, в которых начертания символов представляют собой границы привычных образов. , преимущества которых проявляются при наложении символов друг на друга. Так как ПРОС обрабатывает каждый символ отдельно, то частички других, попавшие на его изображение, послужат труднофильтруемым шумом.
Определение используемого алфавита и других параметров применения шрифтов. Лучше предпочесть алфавит, состоящий только из цифр, так как арабская нумерация всемирно распространена и корректно понимается подавляющим большинством человечества. Так же возможно применять различные шрифты для каждого символа, один шрифт для всего набора или, например, один шрифт для первых символов, другой для последующих. Использование одного шрифта для всего набора символов (но для каждого набора шрифт выбирать случайным образом) существенно повысит читаемость человеком, хотя и упростить задачу ПРОС, если её разработчики учтут такую особенность. Так же можно создать собственные шрифты с набором изображений для выбранного алфавита.
Исключение шрифтов, символы выбранного алфавита в которых трудночитаемы. Данный шаг осуществляется либо эмпирическим путем, либо с использованием фокус-группы Подобный анализ пригодности шрифтов для использования в CAPTCHA можно осуществить, собрав для этого несколько человек, чтобы демонстрировать каждому из них предварительную версию программы (без сильных искажений и шума) для сбора и сопоставления статистики по введенным вариантам и правильным. . На нем можно не отсеивать отдельные шрифты полностью, а создавать для них правила-исключения (например, исключая вероятность вывода цифр "2,3,5,6,9" в шрифте "Atari 1" в связи с возможными проблемами их интерпретации, рисунок 2.3).
Рисунок 2.3 Цифры, нарисованные шрифтом "Atari 1".
Составлено автором.
Определение минимальной и максимальной длины слова. Здесь важно не сделать длину слишком большой, т.к. это сильно затруднит прохождение теста человеком, и не слишком маленькой, т.к. иначе станет возможным подбор правильного ответа. Так же стоит рассчитать вероятность появления разных длин. Так как с одной стороны, можно реализовать равновероятное появление наборов разных длин, а с другой, можно отталкиваться от количества уникальных вариантов для каждой длины. Например, для слов длиной в 3 символа из одних цифр, получим 103 вариантов (1 тыс. слов), а при длине в 4 символа уже 10 тыс. слов. Поэтому вероятность выпадения 3-х и 4-хзначных (p3 и p4) сочетаний можно задать таким образом, которым это представлено в формулах (2.1) и (2.2) ниже.
(2) (3)
Это предотвратит возможность подбора по самому короткому набору.
Выбор применяемых искажений и шума. В качестве обязательных выступают изменение положения символов относительно друг друга, их размеров, а также поворот отдельных символов. Наложение шума целесообразно только если есть возможность пожертвовать читаемостью CAPTCHA для человека Зачастую это экономически необоснованно, т. к. клиент может отказаться от желания контактировать, встретившись с препятствием в виде сложночитаемой им CAPTCHA. . Здесь рекомендуется использовать разные его виды попеременно. Например, геометрические фигуры в стиле применяемого шрифта (например, для "Atari 1", рис.2.3, подошли бы незаполненные прямоугольники с шириной границы в 1 пиксель) или ломаные вертикальные и горизонтальные линии.
Определение интервалов для задания параметров нелинейных искажений символов и шума. В этот шаг входит определение рамок изменения размера символов, их положения относительно друг друга (разумеется, с учетом ширины самих символов рисуемых с использованием конкретного шрифта), интервал поворота символов и границы других искажений (например, определение алгоритмов наложения маски искажений и его параметров).
Проверка результатов с помощью фокус-группы и корректировка полученного алгоритма. Сюда входит необходимость учесть следующие возможные проблемы. Во-первых, сочетание различных настроек (выбранных искажений, шума, алфавита, шрифтов) друг с другом может привести к серьёзным проблемам с читаемостью каптчи человеком, даже если по-отдельности такие искажения выглядели приемлемыми. Например, как показала практика, перевёрнутую на 180 градусов букву "П", написанную шрифтом "Times New Roman", человек склонен распознать как букву "Ц" Или цифру "1" написанную курсивным шрифтом "Arial" человек может принять за цифру "7", подвергшуюся искажению. Такое происходит и без курсивного начертания, если единица повёрнута на 20-40 градусов по часовой стрелке. Другой проблемой, с которой может столкнуться создатель алгоритма генерации изображений для символьно-графического CAPTCHA может быть проблема схожести цифры "3" (три) и буквы "З" ("Заяц"), цифры "0" (ноль) и буквы "О" ("Окулист").
Следуя описанным выше шагам, сформулируем основные характеристики разрабатываемого в качестве примера алгоритма:
Выбраны 30 контурных шрифтов, доступных в интернете для безвозмездного использования, и конвертированы в формат TrueType;
В качестве алфавита взяты только цифры, в виду их универсальности для различных языковых групп общества;
Эмпирическим путем отсеяно 10 шрифтов, показавшихся автору трудночитаемыми с первого взгляда, а также решено использовать один шрифт для всех символов из изображаемого на рисунке набора, дабы облегчить человеку задачу;
В качестве минимальной длины слова выбрано 3 символа, а максимальной 5, при этом вероятности выпадения рассчитаны, исходя из количества различных комбинаций по формуле (2.3).
(2.3)
В качестве искажений использовано: изменение размера символов и их положения относительно друг друга (по координате x от 20% до 40% от ширины предыдущего символа, по координате y от 1 до 3 пикселей в ту или иную сторону), поворот (в интервале от 7 до 15 градусов в ту или иную сторону); все это на белом фоне черными символами в поле 200 на 50 пикселей.
Таким образом, все используемые искажения являются нелинейными, так как заданы на фиксированных отрезках вещественных значений. Например, наложение символов друг на друга выражается в пикселях, но это не мешает взять дробное значение и положиться на алгоритм сглаживания при формировании конечного растрового изображения. Заданным на фиксированном множестве значений остаётся только шрифт. Кроме того, беспокойство может вызывать небольшое количество символов в алфавите. В связи с этим, стоит немного углубиться в тонкости разработки программ автоматического распознавания каптчи.
Для эффективной работы ПРОС, разработчик должен составить алфавит, в рамках которого действует алгоритм CAPTCHA. Обычно это латинские буквы и цифры, т.к. чем шире алфавит, тем сложнее должна быть ПРОС и тем больше ресурсов ей понадобится для работы. Однако в экстенсивном расширении алфавита (за счет использования большего количества разнообразных символов) есть и оборотная сторона - это рост сложности распознавания символов человеком. Более того, используя латинский алфавит, разработчики CAPTCHA создают языковой барьер, хотя его значимость не так велика, если использовать заглавные символы латиницы. Это утверждение основано на том факте, что клавиатура любого компьютера размечена, в первую очередь, заглавными символами латиницы, а значит человек, даже не являясь носителем английского языка, сможет ввести увиденное слово. Хотя это и станет для него большим испытанием.
Однако рекомендуется применять интенсивный способ расширения алфавита, путем использования в алгоритмах CAPTCHA различных шрифтов. Особенно хорошо усложняют работу ПРОС контурные шрифты. Благодаря этому, становится возможным упростить процесс прохождения CAPTCHA человеком, используя, например, только цифры, которые знакомы носителям любого языка. Тем не менее, если на изображении присутствуют символы разных шрифтов, человеку становится очень сложно их распознать. Поэтому для отдельных наборов символов рекомендуется использовать только один случайный шрифт из доступного их множества.
Подобные документы
Проектирование информационной системы по автоматическому формированию договоров на оказание услуг связи, выполнение технических работ и контроля дебиторской задолженности. Разработка алгоритма реализации программы с целью повышения качества обслуживания.
курсовая работа [54,7 K], добавлен 05.07.2010Основные вредоносные действия интернет-ботов, особенности противодействия их автоматическим действиям. Характеристика системы противодействия интернет-ботам CAPTCHA, написание программы, которая демонстрирует принцип ее работы. Алгоритм CAPTCHA-проверки.
курсовая работа [889,7 K], добавлен 17.02.2012Обзор области генерации сетевого трафика. Описание выбранных методов, моделей, алгоритмов решения задач. Создание модели поведения пользователя, распределение количества посещённых страниц сайта. Выбор средств реализации программного продукта (проекта).
курсовая работа [1,3 M], добавлен 30.06.2017Теоретический анализ современных методик создания программных средств по распознаванию образов, их преимущества и недостатки. Описание предметной области, обоснование выбора технологии и разработка проекта программного средства по распознаванию образов.
дипломная работа [2,3 M], добавлен 20.05.2013Анализ системы получения изображений микропрепарата Атлант-микро. Разработка модели, алгоритмов совмещения фрагментов. Разработка пользовательского интерфейса системы. Оценка качества совмещения фрагментов алгоритмом с бинаризацией на основе гистограмм.
дипломная работа [8,0 M], добавлен 23.09.2012Методы вычисления определенных интегралов: метод трапеций и метод Симпсона (парабол). Примеры применения, блок-схемы методов трапеций и Симпсона. Разработка программы в объектно-ориентированной среде программирования Lazarus, конструирование интерфейса.
реферат [2,1 M], добавлен 18.04.2011Рассмотрение методов прямоугольников и трапеций как способов вычисления определенных интегралов. Характеристика графика зависимости погрешности от числа разбиений N. Создание приложения по вычислению интеграла с помощью методов приближенного вычисления.
курсовая работа [1,6 M], добавлен 20.06.2012Разработка алгоритма формирования относительных параметров для минюций. Подбор параметров системы допусков и критериев схожести при сравнении отпечатков. Метод пригоден для распознавания битовых изображений: символьной информации, шрифтов и подписей.
дипломная работа [4,0 M], добавлен 23.06.2008Анализ руководящих документов по антитеррору и проведению специальных операций. Анализ современных методов 3D-моделирования, его функциональные возможности и методы повышения оптимизации. Разработка имитационной 3D-модели, и базы данных филиала.
дипломная работа [5,0 M], добавлен 03.06.2013Метод решения математической модели на примере решения задач аналитической геометрии. Описание согласно заданному варианту методов решения задачи. Разработка математической модели на основе описанных методов. Параметры окружности минимального радиуса.
лабораторная работа [310,6 K], добавлен 13.02.2009