Хакер № 06/09 (126)

Подсмотрим и распознаем. Взлом Captcha-фильтров
S4aVRd0w (s4avrd0w@p0c.ru)
Фильтры captcha получили широкое распространение и повсеместно используются в многочисленных интернет-сервисах. Но не все captcha-фильтры одинаковы полезны. Многие из существующих реализаций себя не оправдывают, а лишь раздражают своим присутствием обычных пользователей. О недостатках применения captcha-фильтров и пойдет речь.
CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart, в простонародье – «капча») — полностью автоматизированный публичный тест Тьюринга для различения компьютеров и людей. В основном используется, когда необходимо предотвратить выполнение каких-либо автоматизированных действий в отношении интернет-сервисов, в частности, для предотвращения автоматических отправок сообщений, регистраций, проведения атак типа подбор пароля и т.п.
Понятие Теста Тьюринга было введено Аланом М. Тьюрингом (1912-1954) в работе «игра имитации». Задача такого теста – определить, обладает ли компьютерная программа интеллектом или, точнее, может ли она выдавать себя за человека. Критерий Тьюринга описан в виде игры «Имитация». Суть игры в том, что берется один мужчина, одна женщина и программа. Программа, не имея информации о половой принадлежности участников, задает им вопросы. Ее цель – определить пол людей. Несмотря на критику этой теории, она внесла большой вклад в развитие систем искусственного интеллекта и философии, а в наше время еще и нашла применение в борьбе с автоматизированным программным обеспечением.
В наиболее распространенном варианте использования captcha-фильтров требуется ввести символы, как правило, изображенные на предлагаемом рисунке в искаженном виде и обычно – с добавлением некоторого «шума». Могут также применяться другие плохо алгоритмизуемые задачи, основанные на логике мышления человека, например: указать, что изображено на картинке; ввести все символы, которые соприкасаются с чем-то (вспоминай кошек на rapidshare) и пр. Как альтернатива картинкам могут применяться капчи, основанные на распознавании речи. Встречаются также капчи, где предлагается ввести ответ на простое арифметическое действие (90 + 72 = ?).
Практика обхода Captcha-фильтров
Сегодня известно достаточно много способов обхода различного рода captcha-фильтров. Условно все способы можно разделить на уязвимости в реализации и фундаментальные недостатки самой концепции применения captcha-фильтров. К уязвимостям реализации относятся следующие распространенные проблемы.
1. Автоматизированное распознавание. Автоматизированное распознавание капчи или задача OCR (оптическое распознавание символов) – это одна из самых острых проблем применения captcha-фильтров. Дело в том, что во многих случаях существует возможность автоматизированного распознавания текста, нанесенного на изображение. Тот же Adobe Fine Reader с успехом может распознавать слабые реализации captcha (смотри скриншоты). Различного рода искажения с добавлением шумов на изображение способны лишь с некоторым процентом успешности воспрепятствовать этому. Ведь чем более искажена информация на изображении для ввода, тем больше проблем возникает у конечного пользователя. Разработчикам фильтров приходится находить некий компромисс между максимальным искажением информации и способностью пользователя прочитать и ввести значение за приемлемое количество попыток.
На фоне использования подобного недостатка появилось несколько проектов по практической демонстрации задач OCR. Наиболее известные из них – это UC Berkeley Computer Vision Group, PWNtcha и CAPTCHA Killer. Ваш покорный слуга, выполняя пентест одного банковского web-приложения, имел возможность познакомиться с последним более близко.
Проект CAPTCHA Killer заинтересовал, прежде всего, тем, что работа с ним основана на использовании API, и есть возможность легкого встраивания функции по автоматизированному взлому капчи в собственные приложения. На PHP это выглядит примерно так:
...
// передаем капчу на анализ
$fields = array('api_key' => $api_key,'method' => 'upload_captcha', 'captcha_url' => 'http://non/');
$files = array(array('name' => 'file','type' => 'image/jpeg','file' => $hash.'.jpg'));
$response = http_parse_message(http_post_fields("http://www.captchakiller.com/api.php", $fields, $files))->body;
...
// ждем результата анализа изображения
$fields = array('api_key' => $api_key,'method' => 'get_result','captcha_id' => $captcha_id);
$response = http_parse_message(http_post_fields("http://www.captchakiller.com/api.php", $fields, $files))->body;
...
Работа с проектом показала высокую эффективность – порядка 80% генерируемых изображений было распознано безупречно. Ограниченный набор генерируемых на изображениях символов (использование только верхнего регистра) позволил повысить эффективность вектора атаки еще на 10%. На анализ одного изображения тратилось около 20 секунд. В подобных условиях на твердую «четверку» мог отработать вектор по перебору паролей к аккаунтам исследуемой системы… если бы не одно «но». Ограничения проекта CAPTCHA Killer не позволяют распознавать более 20 изображений в сутки при использовании одного аккаунта в их системе. Ключевое слово тут – «одного». На сайте проекта существует баг, позволяющий регистрировать неограниченное количество пользователей. При всем уважении к проекту (на сайте даже было замечено использование защиты от CSRF) авторы не стали заморачиваться по поводу разработки стойкой капчи, а просто просят сложить два числа при регистрации нового пользователя, которые попадают в сырой HTML-код. Для моих целей достаточно было лишь самого вектора, но ты можешь воспользоваться этим недостатком, правда, думаю, баг довольно быстро прикроют.
Чтобы убедиться в эффективности OCR в полевых условиях, я провел небольшое исследование в отношении таких сервисов, как yandex и google. Все генерируемые капчи на ресурсе yandex распознаются без особых усилий. Для google вектор атаки по распознаванию капчи выглядит менее впечатляюще: удается распознать только 20% генерируемых изображений. Но и этого более чем достаточно, например, для автоматической регистрации новых ящиков электронной почты. А если учесть, что работать можно в несколько потоков... Другое дело, что при такой скорости особо не побрутфорсишь, но, как говорится, не все же коту масленица.
2.Ограниченное количество вариантов изображений. Самый яркий пример – это капчи с изображениями различной живности. Недостаток подобного подхода кроется в том, что количество известных обычному обывателю животных, птиц и прочих существ ограничено, а это позволяет сформировать базу всех возможных вариаций картинок.
Эксплуатируется вектор достаточно просто. Сначала собираются картинки со всеми доступными изображениями животных. И в зависимости от реализации системы, атака на капчу осуществляется путем сравнения степени похожести с имеющимися экземплярами. Или более простой случай – если для картинок не используется различного рода искажений и добавление шума. Тогда просто сверяются контрольные суммы, и становится понятно, с каким парнокопытным мы имеем дело.
3. Уязвимости при передаче значения капчи в браузер пользователя. Как устанавливается соответствие между значением капчи и генерируемой картинкой? Многие разработчики captcha-фильтров почему-то полагают, что вместо некоторого внутреннего идентификатора лучше передавать в браузер пользователя зависимое значение от генерируемой капчи (хеш от генерируемого значения). И впоследствии осуществлять проверку по этому значению. Причем, порой передача осуществляется в виде открытого текста (то есть значение капчи передается, например, как значение скрытого параметра формы) или существует возможность обратимого шифрования передаваемого значения.
Иногда реализуемы и более изощренные атаки, направленные на эксплуатацию подобного типа уязвимости. Для примера возьмем следующий код, с которым мне довелось встретиться при аудите одного крупного интернет-сервиса:
...
my $key = int (rand 10000);
my @symbols = ('0'..'9');
for ( 1..5 ) {
$q .= $symbols[rand @symbols];
}
my $hash = sha1_hex( uc($q), $key );
...
Что тут не так? Ограниченный набор символов при генерации капчи, слабая «соль» (salt) и, как следствие – небольшая энтропия возможных значений хеша. А хеш, в свою очередь, передается в браузер пользователя. Все это позволяет сформировать заранее подготовленные таблицы соответствия хеша к генерируемому значению капчи (rainbow tables). С подобными таблицами любой запрос captcha-фильтра уже не будет препятствием для программного бота, прогуливающегося по уязвимому ресурсу.
4. Возможность повторного использования. Это типичная уязвимость не только для captcha-фильтров, но и для web-приложений в целом. Уязвимость включает в себя следующие недостатки:
- Использование идентификатора сессии без ввода капчи;
- Повторное использование значения капчи.
Эксплуатация первого недостатка заключается в том, что человеком вводится значение captcha при прохождении аутентификации в приложении. После чего боту передается значение идентификатора сессии web-приложения (например, cookies). И когда приложением не осуществляется мониторинг действий авторизованного пользователя, бот сможет беспрепятственно выполнять свои функции.
Повторное использование значения капчи встречается в двух случаях. В первом – не производится очистка использованных значений капчи, введенных пользователями. Достаточно получить одно верное значение капчи и его идентификатора – и становится возможным беспрепятственно обходить captcha-фильтр. Во втором случае проблема возникает, когда допускается долгосрочное хранение сгенерированных, но никем не использованных значений captcha-фильтра, и при этом отсутствует какая-либо привязка к идентификатору капчи при проверке его значения. Это позволяет проводить вектор атаки типа брутфорс. Например, один поток осуществляет бесконечные обращения к модулю генератора капчи, а второй – осуществляет перебор по постоянному диапазону значений (вспоминай теорию вероятности и поймешь, почему надо использовать «постоянный» диапазон значений). В ситуации, когда набор символов при генерации значения капчи ограничен (используются, например, только цифры), вектор атаки может быть достаточно эффективным!
5. Взлом капчи, за счет эксплуатации других уязвимостей Web. Ни для кого не секрет, что значения капчи в основном хранятся в БД, с которым работает web-приложение. Если приложение содержит уязвимость, позволяющую при эксплуатации дотянуться до хранимых значений captcha, задача по обходу ее ввода будет сводиться к простой выборке нужных значений из соответствующей таблицы БД. Например, это реализуемо при эксплуатации уязвимости типа SQL Injection.
На практике мне встречались подобные приложения. В свое время даже был забавный случай, когда обследуемое web-приложение содержало вроде бы безобидную уязвимость типа листинг директорий. В пространстве корневой директории web-сервера располагались генерируемые изображения капчи, а в именах файлов содержались их значения. Безусловно, это единичный случай, но с учетом повсеместных уязвимостей типа SQL Injection данный вектор более чем применим для обхода ввода капчи. Другое дело, будет ли это востребованным в случае, когда приложение содержит такие грубые ошибки.
К фундаментальным проблемам использования captcha-фильтров относится возможность использования человеческого ресурса для распознавания капчи («метод леммингов»). Это замечательный и очень эффективный вектор обхода captcha-фильтров, которым с момента широкого распространения этой технологии с успехом пользуются спамеры всего мира и который ставит под сомнение само применение captcha-фильтров.
Идея использования человеческого ресурса в общем виде выглядит так. Создается некий ресурс, для которого предполагается высокая посещаемость. Таким ресурсом обычно становится бесплатный порно-сайт, на котором пользователю предлагается ввести значение капчи в обмен на просмотр желаемого ролика. Кроме порно-ресурсов, для реализации подобных целей замечательно подойдет крупная социальная сеть. Однако до сих пор социальные сети используются исключительно для распознавания капчи в благих целях. Это проект ReCAPTCHA, признанный помочь в оцифровке трудно распознаваемого текста книг. Проект запущен в таких социальных сетях, как Facebook, Bash.org.ru и др.
Вместо заключения
Надежность любой системы безопасности в значительной степени зависит от качества ее реализации. У практических решений есть свои недостатки, которые могут быть использованы злоумышленниками. В полной мере это правило применимо и к системам, использующим CAPTCHA. Поэтому даже в очень правильной реализации captcha-фильтра использование только его одного для противодействия автоматизированным действиям в отношении интернет-сервиса может быть недостаточно. Хорошей практикой является в дополнение к капче использовать и другие механизмы, затрудняющие автоматизированные действия. Например, могут использоваться различные временные задержки при выполнении множества однотипных действий за короткое время, запрос, какой-либо информации, известной лишь авторизованному пользователю и др.
Info
- Оптическое распознавание символов – это одна из самых острых проблем применения captcha-фильтров.
- С использованием OCR можно легко обходить текущие реализации CAPTCHA на таких ресурсах, как yandex, google и др.
- «Метод леммингов» ставит под сомнение эффективность самого использования captcha-фильтров.
WWW
Ссылки по теме:
Содержание
ВИДЕО К ЭТОМУ НОМЕРУХакерский прокси В этом ролике ты узнаешь, как можно за пару минут поднять собственный прокси-сервер с помощью утилы Pproxy...
Пропуск на корпоратив Dr.Web Enterprise Suite предназначен для централизованного управления защитой рабочих станций корпоративной сети под управлением Windows 9x-Vista...
Конь в яблоках Данный ролик демонстрирует работу трояна на Apple iPhone. По команде хакера осуществляется отправка СМС, совершается звонок с телефона и выполняются системные (shell) команды...
Классика проникновения Насколько серьезную опасность может представлять собой инъекция в Web-приложении? Наверняка ты не раз слышал, о дефейсах, сливе инфы и прочей пакости. Что делать, если сервер надежно спрятан за DMZ?...
Мой умный дом - моя крепость LinuxMCE представляет собой полнофункциональную систему автоматизации дома. Она способна управлять всеми доступными девайсами, начиная от обычного выключателя света до устройств безопасности...
|
 |
|