1. Короткий огляд

Інтернет-роботів, або як їх частіше називають боти, це програми створені для автоматизованого виконання деяких функцій в мережі. В залежності від їх призначення, мета роботи таких програм теж різна. Але об’єднує роботів одне – позбавити людину від виконання одноманітної рутинної роботи. Здавалося б, у цьому немає нічого поганого. Бізнесмен, який отримує на електронну пошту найсвіжіші новини з величезної кількості сайтів або роботи-пошуковики, не повинні приносити шкоду світовій спільноті. Але часто мета функціонування таких систем зовсім інша, крім цього навіть вище зазначені завдання можуть розцінюватися негативно. Адже якщо людина отримує останні зведення новин з допомогою бота, він так і не побачить рекламного банера, за показ якого власники сайта, можливо, отримують гроші. Робот-пошуковик, при певних умовах може натрапити на інформацію, публічний доступ до якої вкрай небажаний (згадати хоча б «Google Hacking»). Але це все крайнощі. Найчастіше, автоматизація – доля людей переслідують далеко не самі благі цілі.

За прикладами далеко ходити не варто. Активно зростаючий рівень спаму, дуже сильно залежить від роботи таких програм як збирачі пошти (для поповнення бази адрес), автоматичних реєстрацій поштових скриньок (які потім використовуються для розсилки). Роботи можуть використовуватися для «засмічення» форумів, чатів, живих журналів; вони можуть займатися розсилкою SMS через Web-інтерфейси, писати листи, брати участь в голосуваннях, підбирати паролі і т. д. Все це призводить або до скрутності отримання шуканої інформації користувачем, або до більш ефективної роботи зловмисників. Таке положення справ змусило людей, що займаються комп’ютерною безпекою, впритул задуматися про способи вирішення цієї проблеми, а хакерів, у свою чергу, про способи їх обходу.

Зображення, що містить цифри або слова, і прохання ввести їх з клавіатури…. Велика кількість користувачів не розуміють призначення цієї процедури, багато творці ботів не затримуються довго на таких сайтах, але деяких це не зупиняє. Дана стаття написана для того, щоб розібратися зі станом справ на цьому фронті. І зрозуміти, чи дійсно захищають нас від такого роду систем.

2. Комп’ютер або людина

Для визначення справді відвідувач сайту є людиною або це програма, йому належить вирішити завдання, просту для людини, але не вирішувану (а точніше важко вирішуване) для комп’ютера. Такого роду завдання називаються CAPTCHA.

CAPTCHA – це акронім, від виразу «Computer Aided Public Turing test to tell Computers and Humans Apart». Власне кажучи, це Тест Тюрінга для розрізнення людини від програми. Іноді CAPTCHA називають зворотним тестом Тюрінга (Більш детальну формулювання цього поняття можна знайти на Wikipedia).

Поняття Тесту Тюрінга було введено Аланом М. Тюринг (1912-1954 рр.) у його роботі «гра імітації». Завдання такого тесту визначити володіє комп’ютерна програма інтелектом, або, точніше, вона може видавати себе за людину. Критерій Тюрінга описаний у вигляді гри «Імітація». Суть гри полягає в тому, що береться один чоловік, одна жінка і програма. Остання, у свою чергу, не маючи інформації, про поле двох інших учасників, задає їм запитання. Мета програми – визначити стать людей. Незважаючи на критику цієї теорії, вона внесла великий внесок в розвиток систем штучного інтелекту та філософії, а в наш час ще знайшла застосування в боротьбі з автоматизованим програмним забезпеченням.

На сьогоднішній момент CAPTCHA можна зустріти практично скрізь: при реєстрації, авторизації, відправлення повідомлень, запиті будь-якої інформації і т. д. Скрізь де може бути вигідною автоматизація, в тому числі і нанесення збитків власникам Інтернет сервісів або їх клієнтам.


Рис. 1. Для отримання паспорта Microsoft .NET,

також потрібно пройти тест CAPTCHA.

CAPTCHA може бути реалізована різними способами. Іноді потрібно ввести не одне слово, а кілька. Зустрічаються також завдання, де треба знайти загальний елемент, присутній на 4-х зображеннях або сказати про вміст спотвореного малюнка. Для людей з поганим зором існують звукові тести або завдання, що вимагають логічного мислення.

Другий раз повторюю: я людина! CAPTCHA

Другий раз повторюю: я людина! CAPTCHA
Рис. 2. CAPTCHA тести бувають різними і носять різні назви

їх об’єднує лише загальна мета.

3. Питання безпеки

Цікаво, що «CAPTCHA Project», будучи піонером в даній області, дали назву течією, первісна мета якого зупинити спам. Так і фірма «Spam», першою почала практику масової розсилки і теж з часом визначила назву для «не бажаної кореспонденції рекламного характеру» (хоча взагалі то, тест отримав назву в 2000 році завдяки університету Carnegie Mellon і компанії IBM, але саме цей проект був першим). На даний момент вже існує великий вибір серед виробників CAPTCHA. Цим займаються, як і гіганти на ринку програмного забезпечення, так і окремі програмісти. Відповідно, від кваліфікації виробника безпосередньо залежить, наскільки легко можна обійти тест. На додаток, CAPTCHA вимагає правильного впровадження. Часто дуже хорошої якості тест, виявляється, легко обійти з-за того, що він використовується без дотримання політики безпеки.

Способів обійти або пройти тест досить багато. Більш того, на моїй практиці більше випадків, коли він виявляється безсилим проти автоматизованих програм. Але про все по порядку. Почнемо наш огляд з найменш вірогідних технік і закінчимо найефективнішими з них. У теж час, від простих в реалізації, до складних.

3.1. Уразливості програмного забезпечення

Так завжди, якщо є додаток, напевно знайдеться пара-трійка вразливостей. Ні, про переповнення буфера при проходженні тесту ми говорити не будемо. Хоча можливо і такі випадки зустрічаються. Почнемо, мабуть, з підбору контрольної інформації.

3.1.1. Перебір варіантів і передбачення результатів

Передбачення результатів припускає, що нам відомо, яка інформація безпосередньо впливає на генерацію CAPTCHA. Отримати її можна в двох випадках: вразливий проект надається у відкритому вихідному коді або вона була отримана за допомогою евристичного аналізу (певна кількість тестів, з усіма наслідками). Такою інформацією може бути наш IP адреса, час і знання про використовуваному генераторі випадкових чисел. Останнє, не повинно особливо вас бентежити, бо для прогнозування псевдовипадкових чисел існує величезна кількість програм (Більш детально про цю тему ви можете прочитати в роботі «Старий погляд на нові речі»). Ваше завдання, зрештою, зводиться до пошуків формули, за якою створюється тест. Але залишимо цей спосіб для людей, належним чином володіють математичним аналізом, і перейдемо до перебору.

Перебір можливих варіантів відповіді, в принципі, працездатний прийом. Повним перебором можна скористатися, якщо на сервері, неграмотно працює з сесією. Прикладом може служити движок vBulletin. Але про нього ми поговоримо трохи пізніше, а поки тільки визначимо які умови є необхідними для підбору. Їх усього два, більше того це швидше залежність коефіцієнтів:

1. Чим більше час існування сесії
2. Чим менше набір символів CAPTCHA або їх кількість

Якщо сесія існує «від сабміта до сабміта», перебір неможливий. У теж час, коли тест вимагає ввести 10 символів, серед яких букви, цифри і різні інші символи, ймовірність успіху різко прагне до нуля. Практично завжди, використання перебору, вимагає маніпуляції сесійного інформацією. Оскільки, написання переборщика виходить за рамки цієї статті, а маніпулювання сесій найчастіше дає інші результати, можна не розглядати перебір більш детально. Варто згадати, що для деяких тестів підходить перебір за словником, а це більш ефективно в порівнянні з повним перебором.

3.1.2. Використання неіснуючих сесій

Сесії – корінь зла. Це твердження, частіше за інших виявляється істинним. Оскільки мета статті показати простоту рішень, я буду намагатися скрізь, де це тільки можливо, наводити приклади. Цього разу під приціл потрапив сайт www.umc.ua. Це сторінка Українського мобільного оператора UMC.

Другий раз повторюю: я людина! CAPTCHA
Рис. 3. Для відправки SMS повідомлень з Інтернет, користувачеві

доведеться довести, що він чоловік, а не програма

На цьому сайті є інтерфейс для відправки SMS повідомлень. Як і більшість операцій такого роду, вона вимагає пройти тест «питання-відповідь» (CAPTCHA). Щоб почати аналіз та експлуатацію даного сервісу, спершу, слід прибрати все не потрібне з HTML коду.

Другий раз повторюю: я людина! CAPTCHA
Рис. 4. Прибравши все не потрібне, видно, що робота CAPTCHA

заснована на PHP сесії.

Погляньте на рядки 3 та 6. Легко побачити, що форма містить приховане поле з ідентифікатором сесії (рядок 3) та зображення, згенероване спеціально для цієї сесії (рядок 6). В принципі, сама по собі, така конструкція не представляє ніякої небезпеки. Але це тільки на перший погляд, її цікаві особливості можуть проявитися після певних тестів. В даному випадку, якщо в якості ідентифікатора сесії (PHPSESSID) вказати всі нулі, а в полі для відповіді на CAPTCHA залишити порожнім, повідомлення все одно надсилається успішно. В чому справа? Таке могло статися лише тоді, коли при вибірці даних SQL, не перевіряється кількість отриманих результатів (функція mysql_num_rows). Тому, фрагмент програми відправки повідомлень може виглядати як на рис.5.

Другий раз повторюю: я людина! CAPTCHA
Рис. 5. Псевдокод для перевірки CAPTCHA

Логіка експлуатування досить проста. Всі значення PHPSESSID в HTML формі — зануляются. Після чого, згенероване сервером зображення, виявиться порожнім! Не довго думаючи, поле біля малюнка (туди, по ідеї, слід ввести цифри), залишаємо порожнім. І ось що відбувається після відправки форми:

1. Для неіснуючого зображення в базі даних немає правильної відповіді.
2. Відсутність правильно відповіді в базі призводить до того, що він дорівнює пустому рядку.
3. Поле форми – «anti», що відповідає за наш відповідь, теж пусте.
4. Порівнюється правильну відповідь з нашим (обидві відповіді — порожні рядки).
5. Перевірка пройдена успішно, повідомлення надіслано.

Нестача одного рядка в програмі, зводить нанівець всі інші заходи безпеки. Якби програміст перевірив отриманий результат з бази або хоча б відкидав форми з порожнім значенням CAPTCHA-відповіді, така атака виявилася б неможливою. До речі, навіть багато хто з Web-движків середнього рівня, містять схожі недоробки.

3.1.3. Повторне використання сесій

Ви ще не забули, що більшість помилок виникають саме при обробці сесій. Я буду повторювати це знову і знову, щоб надовго закріпити у вашій свідомості. Ось ще один довід: сесії існують на певному інтервалі часу. Повернемося до розбору vBulletin. Я На нього натрапив, коли автоматизував голосування сайту www.DogsOnAcid.com, присвяченого d’n’b напряму в музиці.

Другий раз повторюю: я людина! CAPTCHA
Рис. 6. DogsOnAcid один з безлічі сайтів, які використовують vBulletin

Популярність системи не завжди є ознакою її надійності. vBulletin – тому доказ. Для реєстрації в системі вам знову-таки доведеться пройти тест «питання-відповідь». Поглянемо, що на цей раз нам належить обійти.

Другий раз повторюю: я людина! CAPTCHA
Рис. 7. Так в чистому вигляді виглядає CAPTCHA від vBulletin

Ситуація має дещо ускладнитися, оскільки крім сесії користувача (поле s, рядок 7), введена ще сесія для зображення поле imagehash, рядок 25). Крім всього цього, зображення видається сервером по обох вхідних параметрів (сесія і хеш). Скажу вам чесно, у вихідний код я не дивився. Але зауважив, дещо-що саме в HTML сторінки і файли. З початку про Cookie, їх треба ігнорувати взагалі. Якщо бот працює в Internet Explorer або якомусь іншому браузері, вимкніть їх. Якщо це додаток, надсилаючи запит до сервера, залиште їх значення порожнім. Таку вимогу необхідно, оскільки після реєстрації в них буде міститися інформація про те, що ви успішно зареєстровані, крім того, невідповідність сесії Cookie і HTML формі, може насторожувати атаковані сервіси.

Тепер найцікавіше, після успішного або неуспішного реєстрації, вам створюється нова сесія. Але, тим не менш, стара деякий час ще лежить в базі і може бути повторно використана. Сесія користувача, не повинна викликати у вас особливого інтересу, оскільки можна скористатися і нової. Інша справа хеш зображення. Відповівши один раз правильно на CAPTCHA, використовуючи старий хеш, ви можете дати ту ж саму відповідь, і він буде зарахований. Тому, уявімо собі ситуацію, коли ви один раз говорите боту правильну відповідь, а він в свою чергу, за надане йому час реєструє пару сотень користувачів. Або в інших системах, що мають таку ж помилку, пише коментарі, підбирає паролі, робить покупки і т. д.

Добре, якщо ви завжди поруч і можете йому підказати відповідь, в той час, коли стара сесія вже непридатна. Що ж робити у випадку, якщо від нього вимагається повністю автономна робота. Тут вже справа за вами, ви можете написати його так, щоб він самостійно, з допомогою повного перебору, отримував правильну відповідь, і далі повторно їм користувався. Якщо ви не далекі від програмування, у вас є всі шанси щодо написати простенький розпізнавач образів. Нехай він буде працювати не найшвидшим чином, зате від нього потрібно розпізнати текст протягом декількох хвилин, а тому швидкість роботи не критична. Далі результат розпізнавання ставиться на конвеєр. Але про розпізнаванні ми поговоримо пізніше.

Бувають і інші випадки, коли в HTML коді ви не зустрінете жодної згадки про сесії. Не турбуйтеся, вона обов’язково повинна бути. Раджу тоді поглянути на вміст Cookie. До повторного використання сесій не байдужі такі системи як Gotcha, Code Project Captcha, humanVerify, та інші. В них інформація про сесії зберігається саме в Cookie. До речі в цих системах підміняти треба саме сесію користувача (в даному випадку це PHPSESSID), оскільки хеш зображення там геть відсутня.

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

3.1.3. Маніпулювання значенням VEWSTATE

Будьте пильні, маючи справу з сесіями. Особливо коли хтось їх створив за вас, і ви навіть не замислюєтеся про принципи їх роботи. Мова йде про додатки написаних на ASP.NET. Елегантність і простота програмування на цій мові, проявляють побічні ефекти при їх детальнішого вивчення. Для прикладу, візьмемо сайт, вимагає проходження тесту, при кожному вході користувача в систему.

Другий раз повторюю: я людина! CAPTCHA
Рис. 8. Форма авторизації користувача створена на ASP.NET

Все має бути правильно. Як тільки користувач вводить свої логін і пароль, а до всього і вірно відповідає на питання, він успішно отримує свою сесію. Програма входу в систему виглядає наступним чином:

Другий раз повторюю: я людина! CAPTCHA
Рис. 9. Частковий вихідний код авторизації користувача на ASP.NET

На цій сторінці використовується CATPCHA від фірми Lanap. Дотримуючись стару послідовність дій, заглядаємо у вихідний код сторінки:

Другий раз повторюю: я людина! CAPTCHA
Рис. 10. Частковий вихідний код авторизації користувача до HTML

Спроби маніпуляції з ідентифікатором зображення не увінчалися успіхом. Але, оскільки це додаток написано на ASP.NET у нас є можливість зайнятися експериментами, маніпулюючи VEWSTATE.

Взагалі VEWSTATE це тема окремої статті. Для тих, хто не знайомий з його призначенням я коротко поясню деякі нюанси. Це приховане поле, і зроблено воно для забезпечення зручно-програмованої системи клієнт-сервер. VEWSTATE, свого роду сесія, але вона бере на себе набагато більше обов’язків. До них ставитися також і зберігання змінних. Відверто кажучи, VEWSTATE може бути потужним знаряддям для SQL Injection атак, XSS і т. д. Але зараз поговоримо тільки про її можливості зберігати значення змінних.

Отже, коли ви ввели свій логін і пароль, вони з великою ймовірністю можуть потрапити в VEWSTATE. В нашому випадку, успішний вхід користувача в систему, додатково контролюється змінної Logged. Як ви вже напевно здогадалися, вона теж зберігається в VEWSTATE. Ні, наступний етап це не дешифрация VEWSTATE, в даному випадку це зайве. Вводимо правильно логін, пароль і відповідь на тест. В результаті ми пройдемо авторизацію. Далі, в HTML-коді сторінки знаходимо значення VEWSTATE і копіюємо його. Створюємо HTML сторінку з формою авторизації. З оригінальної форми, можна видалити всі крім VEWSTATE і SUBMIT. Цікаво, що не потрібні навіть поля логін та пароль. Як ви думаєте, чому? Все дуже просто, їх значення зберігає VEWSTATE. Ви успішно авторизуєтесь.

Проблема даної програми полягає в рядку 23, там крім відповіді на CAPTCHA також перевіряється ваш статус. Якщо ви вже увійшли в систему, то дані не перевіряються. А ви ввійшли, про це свідчить значення VEWSTATE, яке прийшло на сервер. Я не забув нагадати, що це проблема сесії?

3.2. Розпізнавання образів

У широких колах розпізнавання образів по праву вважається найбільш ефективним способом для вирішення завдань інтерпретації. Це дійсно так, адже всі інші способи дуже специфічні, і для їх реалізації потрібні додаткові витрати часу. З іншого боку, ймовірність виявити вразливість в атакується інтерфейсі залежить від кваліфікації творців і зловмисника. Часто може бути так, що спроби знайти уразливість закінчуються невдачею. Тому в таких випадках, розпізнавання образів може виявитися дуже привабливим рішенням. Але не варто думати, що мова йде виключно про системи штучного інтелекту, хоча вони мають місце бути. Існує ще два способи, які увійшли в цей розділ.

3.2.1. Алгоритмічна обробка зображень (тест на ідентичність)

Даний спосіб може застосовуватися для розпізнавання зображень із низьким рівнем шумів або з їх повною відсутністю. Його суть полягає в тому, що для ідентифікації символів досить порівнянь окремих фрагментів зображення. Для прикладу(він побічно торкається теми статті, але допоможе в подальшому її розумінні), якщо ви використовуєте незареєстрований Total Commander (утиліту можна завантажити на сайті SoftKey.Ru), при кожному запуску від вас потрібно натиснути одну з трьох кнопок. Її номер задається випадковим чином і відображається в рядку «Please press button Nr.? to start the program! » (див. рис. 11).

Другий раз повторюю: я людина! CAPTCHA
Рис. 11. Вікно при запуску незареєстрованої копії Total Commander

Вікно з’являється в одних і тих же координатах, значить і позиція тексту, який говорить про номер кнопки, теж залишається незмінною. Тому, зберігши зображення всіх трьох варіантів діалогового вікна (для 1-ї, 2-ї та 3-ї), ви отримуєте можливість у будь-який момент часу, дізнатися який номер потрібно ввести. Все що для цього необхідно, це звичайна перевірка на ідентичність, підготовлених зображень (скріншотів) з вмістом на екрані. Далі, визначивши номер кнопки, можна програмно послати на неї натискання мишки, оскільки її позиція теж буде статичною.

Ситуація може бути трохи ускладнена, у випадку коли потрібно розпізнати текст розміщений на текстурі або складається з немоноширных символів. Для прикладу, можна глянути на сайті www.privatmobile.com.ua. Це сайт мобільного оператора, який надає безліч послуг настроюються через Інтернет. Одна з них це зміна номера телефону клієнта. Коли-то, переді мною була поставлена задача автоматизації цього процесу. Для підтвердження цієї операції, від користувача вимагається надіслати SMS повідомлення з контрольним текстом. Проблема полягає в тому, що спочатку він відображається у вигляді зображення, а не як текстова інформація (див. рис. 12).

Другий раз повторюю: я людина! CAPTCHA
Рис.12. Код підтвердження на сайті Privat::Mobile

відображається як малюнок

Як видно з малюнка, шум у зображення відсутня взагалі. Для успішної ідентифікації графічної інформації необхідно всього два етапи (Рис. 13):

1. позбавлення від фону зображення, для позиційно незалежної ідентифікації символів.

2. контурування символів, щоб позбавиться від ситуації їх накладення один на одного (в даному випадку це відбувається з першим символом, щодо другого).

Другий раз повторюю: я людина! CAPTCHA
Рис. 13 Початкове зображення і результати роботи 2-х фільтрів

Після попередньої обробки зображення, кожна з букв буде ідентифікована окремо. Як і в минулому прикладі, підготувавши «графічний словник», зробити це можна за допомогою звичайного порівняння зображень. Для програміста середньої кваліфікації, складання програми такого рівня складності, не складе великої проблеми. Незважаючи на це, сьогодні в Інтернеті, ще дуже часто можна зустріти сторінки, на яких генеруються малюнки такої ж складності, а то й простіше.

На додаток, на сайті www.kyivstar.net для відправки повідомлень, теж потрібно правильно відповісти на CAPTCHA.

Другий раз повторюю: я людина! CAPTCHA
Рис. 14. Сайт мобільного оператора Київстар та кілька

варіантів, згенерованих зображень.

Як ви можете помітити, що в деяких випадках тест можна легко обійти, чекаючи, поки згенерованого зображення буде під нульовим кутом (варіант D). Але цей процес можна значно наблизити. Для генерації CAPTCHA використовується скрипт image.php. Пам’ятаєте, що я казав про сесії? Так от, враховуючи, що сесія існує кілька хвилин, повторне звернення до image.php, дає зображення з тими ж цифрами, тільки під іншим кутом. Потрібно всього близько п’яти запитів, щоб отримати зображення легко оброблюваний вигляді. А ідентифікувавши текст, можна відправляти форми на сервер. У цьому випадку, проблема не тільки в простоті малюнка, додатково покладаючись на особливості сесії, ви можете легко обійти тест.

3.2.2. Розпізнавання образів

Всі вище наведені приклади, дуже прості у використанні. А зараз мова піде про дещо більш складних технологіях, але в той же час і більш ефективних. Ми поговоримо про розпізнавання образів, в чистому вигляді. Мова йде про завдання OCR – оптичного розпізнавання символів.

Багато хто вважає, розпізнавання образів недосяжною вершиною. Хочу вас запевнити, що це твердження далеко від істини. Ви як споживач, напевно не раз використовували Fine Reader. Хоча можна, засумнівається в якості його роботи, згадайте, що оброблюваний текст має відносно малі розміри і великий обсяг. А до всього і швидкість розпізнавання на високому рівні. Інша справа CAPTCHA: з одного боку нормальний розмір і короткий текст, але з іншого – високий рівень шумів і деформацій.

На сьогоднішній момент вже існує багато проектів займаються виключно розпізнаванням CAPTCHA. Найбільш відомими з них є два: «UC Berkeley Computer Vision Group» і «PWNtcha».

Члени «UC Berkeley Computer Vision Group опублікували в Інтернет документ, що посвідчує в тому, що їм вдається розпізнавати тести, згенеровані за допомогою Gimpy. Причому відсоток успіху становить 92%.

Другий раз повторюю: я людина! CAPTCHA
Рис. 15. Приклади CAPTCHA які були розпізнані

співробітниками інституту Берклі

Робота PWNtcha, показує теж значні результати:

Другий раз повторюю: я людина! CAPTCHA
Рис. 16. Фрагмент зі списку CAPTCHA зображень,

розпізнаних програмою PWNtcha

Використання штучного інтелекту незабаром повинно звести нанівець, застосування візуальних тестів. Попередньо навчена нейронна мережа, може з великою точністю правильно розпізнати зображення. Існує один суттєвий нюанс, поки запропоновані розробки не володіють високою швидкістю роботи. В основному це пов’язано з алгоритмами розпізнавання, а часто буває так, що їх кілька. Але для зловмисника, що використовує нейронні мережі, справи стоять куди простіше. Його завдання зводиться до навчання мережі. Це не проблема, оскільки більшість пропонованих CAPTCHA можна скачати і таким чином організувати навчання.

До всього перерахованого, додайте поняття асоціативних зв’язків, генетичного алгоритму, і можливість успішного розпізнавання буде рости «з покоління в покоління». Генотип алгоритмів обробки зображень, якщо це звучить абсурдно, гарненько задумайтеся над своїми знаннями в областях генетики і створення штучного інтелекту. Існуючі проекти, це лише вершина айсберга.

3.2.2. Використання людського ресурсу

Мабуть, найцікавішим з існуючих рішень, це те що придумали спамери, для реєстрації безкоштовних поштових скриньок в системах Yahoo і HotMail. Вони не шукали вразливостей, не писали розпізнавання образів. Спамери підключили до своєї боротьби пристойну частину користувачів Інтернету, а точніше любителів безкоштовного порно (див. Рис. 17).

Другий раз повторюю: я людина! CAPTCHA
Рис. 17. Любителям безкоштовного перегляду сайтів

порнографічного характеру необхідно проходити

CAPTCHA тест, для кожної наступної фотографії.

Спамери створюють безкоштовні фото галереї порнографічного характеру. Єдине, що потрібно від відвідувача, це відповідати на тест CAPTCHA, щоб переглянути наступну фотографію. Сам тест, вибирається з форми реєстрації поштового сервера. Відповідь користувача, відповідно вставляється в ту саму форму, і таким чином кожна фотографія дорівнює новому поштової скриньки. Технічно, така система не вимагає високої кваліфікації зловмисника, а тому є дуже простий у реалізації. Крім цього, любителів порно теж не мало.

3.3. Рекомендації з безпеки

Як легко переконатися, що способів обійти перевірку, хоч відбавляй. Тому цим ми і займемося. Ось деякі рекомендації:

1. Час існування сесії повинно бути обмежено, п’яти хвилин цілком вистачає. Якщо заповнюється форма дуже велика, розбийте її на кілька частин, а сесію створюйте на останньому етапі.
2. У разі отримання форми, сесія повинна бути негайно видалена, щоб уникнути повторного її використання.
3. Обов’язково перевіряйте отримані дані на порожні значення. Це має врятувати вас від ситуації з неіснуючою сесією. Це також допоможе вам з проблемою VIEWSTATE, якщо ви програмуєте на ASP.NET.
4. Бажано всі дані про сесії зберігати в Cookie і не виносити в HTML-код сторінки. До речі, в HTML можна виносити фіктивні сесії, для відстеження спроб злому на їх початковій стадії.
5. Якщо тест знаходиться у реєстраційній формі, поставте блокування по IP, на повторну реєстрацію. Це не панацея, але все ж. На додаток, якщо в генерації CAPTCHA буде приймати участь і IP адресу, то історія з vBulletin з вами не повториться.
6. Не генерує простих зображень, але і не перегинайте палицю з ефектами.

Насправді перед нами виникла досить велика проблема. Існуючі системи не захищають своїх споживачів. На цей раз мова йде не про вразливості, а про саму технологію. Ускладнюючи CAPTCHA ми вже часто, самі насилу розуміємо, що за текст ховається в зображенні. Так не може тривати далі. Область ІІ поступово розвивається, справа не в розумних будинках і не в милій дівчинці на ім’я Еліс, яка живе в інституті Берклі, люб’язно готової поспілкуватися з тобою. Справа в штучному інтелекті, нейронних мережах і асоціативному мисленні. Що далі? Швидше за все, це призведе до необхідності впровадження біометричних систем, з усіма витікаючими. Будьте пильні…