Карта сайта Хакер в RSS Энциклопедия Хакера PDA версия сайта Почтовые рассылки Хакера    Хакер в Twitter
Журналы Новости Форум Видео Life Xakep Live (блоги)
Bugtrack Статьи Блог Поиск English
$1000 на Android: зарабатываем на приложениях для мобильной платформы от Google $1000 НА ANDROID: ЗАРАБАТЫВАЕМ НА ПРИЛОЖЕНИЯХ ДЛЯ МОБИЛЬНОЙ ПЛАТФОРМЫ ОТ GOOGLE
27.07.2010

Пара вечеров экспериментов и неожиданно удачная идея позволили за 2 месяца заработать более $1000. Это гораздо больше, чем я мог ожидать...
Фабрика сплоитов ФАБРИКА СПЛОИТОВ
26.07.2010

Откуда берутся сплоиты? Задумывался ли ты, каким образом тусклая новость из багтрака превращается в реально работающую отмычку...

Взлом CAPTCHA: надежный Битрикс

Оказывается, мир информационной безопасности тоже грязен и очень замешан на деньгах. Например, мы обнаружили, можно сказать, небольшую уязвимость в продукте фирмы Битрикс. Кто не знает - это такая система разработки сайтов на которой сделан securitylab.ru. Сайт в свою очередь делает Positive Technologies, которая в свою очередь выдала сертификат «Безопасное Веб Приложение» Битриксу. Вот такой круговорот денег в природе. Смысл в том, что все друг-друга прикрывают. И когда мы им сообщили об этой уязвимости - всем было пофигу, сертификат есть и дальше хоть трава не расти.

Технология CAPTCHA

Блуждая в глобальной сети мы наткнулись на статью, описывающую модуль captcha. Модуль применяется для защиты форумов, гостевых книг, сайтов c возможностью отправки SMS и так далее. В основе этого модуля лежит теория тестов Тьюринга. Но это отдельная тема для разговора. Попыток научиться распознавать эти картинки было множество, причём многие из них имели успех (например, был создан модуль в FineReader и т.д.). О методах можно прочитать, например, на Хакере - тут. Так вот, вернёмся к этому модулю, который как раз на практике и реализует это дело и должен защищать наши сайты от ботов и так далее.

В статье Маркуса Уитни (phpdevelop.info), посвящённой captcha, сказано:

Если у вас есть публично доступные веб-формы, вы в любой момент можете быть подвергнуты атакам со стороны людей, желающих использовать ваши приложения для собственных целей. Форумы, голосования, гостевые книги и блоги - все это популярные места для роботов, пытающихся сгенерировать неаутентичные сообщения на вашем сайте. Многие сайты, такие как Yahoo, в данный момент используют CAPTCHA. CAPTCHA или "completely automated public Turing test to tell computers and humans apart," ("полностью автоматизированный тест Тьюринга для разделения компьютеров и людей") является проектом Carnegie Mellon School of Computer Science, который предоставляет все необходимое для того, чтобы определить, человек или компьютер инициировал запрос. Технология CAPTCHA позволяет вам отличать человеческие запросы от запросов, сгенерированных компьютером, в вебе, где провести такое различие сложно.

Заметьте: В соответствии с Wikipedia, Тест Тьюринга - это тест возможности машины вести человекоподобные разговоры.

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

Установка Text_CAPTCHA

Благодаря Кристиану Вензу, в PEAR есть пакет, полностью предназначенный для проведения этих тестов как инструментов безопасности на вашем сайте. Пакет Text_CAPTCHA использует функциональность PHP GD для создания динамических изображений со случайными фразами и предоставляет простой объектно-ориентированный интерфейс. Для того, чтобы использовать Text_CAPTCHA, вы должны иметь установленную GD с поддержкой JPEG, PNG и шрифтов TrueType. Для получения дополнительной информации смотрите PHP Image Functions. Text_CAPTCHA зависит от двух других PEAR пакетов: Image_Text и Text_Password. Он использует Text_Password для генерации случайной фразы, используемой в тесте CAPTCHA и Image_Text для генерации изображения с текстом. Процесс установки Text_CAPTCHA в командной строке следующий:

$ pear install Text_Password
$ pear install Image_Text
$ pear install --alldeps Text_CAPTCHA

Представляем CAPTCHA

Пришло время применить этот пакет в деле. Простой и часто используемый интерфейс для введения этой новой меры безопасности - это форма комментариев в блоге. В этой форме вы обычно запрашиваете имя, e-mail и комментарий от персоны, посылающей сообщение в ваш блог. Форма может выглядеть следующим образом:

<form method="POST" action="">
Имя: <input type="text" name="name"><br>
e-mail: <input type="text" name="email"><br>
Комментарий: <textarea name="comment"><textarea>
<input type="submit">
</form>

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

<input type="text" name="captcha_phrase"><br>

<img src="captcha.jpg">

Здесь Text_CAPTCHA входит в игру. Перед выводом формы инициализируйте Text_CAPTCHA с помощью кода вроде того, что приведен ниже:

<?php
require_once('Text/CAPTCHA.php');
$captcha = Text_CAPTCHA::factory('Image');
$captcha->init(150,150);
?>

Первая строка требует файл Text_CAPTCHA.php. Вторая строка использует фабрику класса Text_CAPTCHA для возврата объекта подкласса Text_CAPTCHA. Дизайн Text_CAPTCHA позволяет создавать CAPTCHA с помощью разных драйверов. Вспомните, CAPTCHA - это технология для различия людей и компьютеров, а не только для генерации изображений для этого. Аргумент для метода-фабрики Image дает инструкцию Text_CAPTCHA создать объект драйвера Image, чтобы сгенерировать случайное изображение. Третья строка инициализирует объект Text_CAPTCHA и готовит его к использованию.

Фазу инициализации мы обследуем более подробно. Для начала, она принимает два параметра: ширину и высоту случайно сгенерированного изображения. Эти параметры опциональны и имеют значения по умолчанию 200 и 80 соответственно. init() также принимает два дополнительных, опциональных параметра. Первый - это $phrase, который позволяет программисту задать секретную фразу для использования в сгенерированном изображении. Если вы не передаете фразу, init() автоматически создаст фразу с максимальной длинной в восемь символов. Последний параметр - это массив $options, который позволяет вам передавать параметры в объект PEAR Image_Text, которые init() использует для создания изображения с текстом.

Массив $options - это важный параметр для данного применения Text_CAPTCHA, так как эти опции задают используемый шрифт и его размер, а также путь к шрифтам в вашей системе. Чтобы настроить эти параметры, создайте и передайте массив в метод init(), как следует ниже:

$text_image_options = array(
'font_size'=>'20',
'font_path'=>'/path/to/fonts/',
'font_file'=>'ARIAL.TTF'
);

$captcha->init(150,150,NULL,$text_image_options);

Как только init() создал изображение и фразу, остальной процесс довольно прост. Вы должны создать файл изображения, читабельный для браузера. init() не делает это автоматически. Чтобы получить доступ к изображению, используйте методы доступа getCAPTCHAAsJPEG() или getCAPTCHAAsPNG(), обе из которых возвращают случайно сгенерированное изображение в буфере, так что вы просто можете сделать дамп в свежий файл. Если вы используете PHP4, сделать это можно следующим образом:

$image_data = $captcha->getCAPTCHAAsJPEG();
$handle = fopen('captcha.jpg', 'a');
fwrite($handle, $image_data);
fclose($handle);

В PHP5 это намного более просто, используя функцию file_put_contents:

$image_data = $captcha->getCAPTCHAAsPNG();
file_put_contents('captcha.png',$image_data);

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

session_start();

Теперь, используя метод доступа getPhrase() Text_CAPTCHA, присвойте фразу переменной сессии для подготовки к тесту сообщения из формы:

$_SESSION['captcha_phrase'] = $captcha->getPhrase();

Проверка CAPTCHA

Вот и все со стороны формы. Теперь время определить, является ли пользователь человеком или нет. При отправке формы, просто проверяйте, задана ли фраза и совпадает ли она с хранящейся в переменной сессии. Если они совпадают, вы можете продолжить с соответствующим действием POST. Иначе отвергните отправку формы и примените те меры, которые вы считаете подходящими. Следующий код демонстрирует логику проверки теста CAPTCHA:

<?php
session_start();
if (isset($_POST['captcha_phrase']) &&
$_POST['captcha_phrase'] == $_SESSION['captcha_phrase'])
{
// операции по публикации
}
else {
// проверка безопасности
}
?>

Завершение

CAPTCHA может быть хорошим способом ограничить количество успешных, но нежелательных HTTP POST-запросов в вашем приложении. Text_CAPTCHA предоставляет подходящий объект для реализации этой функциональности. В данный момент, пакет находится в состоянии альфа, и поэтому не является официально годным для продуктивных сайтов. Так или иначе, он близок к прекрасному началу и привносит сознание безопасности PEAR, что всегда ценится. Счастливого CAPTCHA-инга!


и в статье Анатолия Ализара:

Полностью автоматизированный обратный тест Тьюринга (Completely Automated Public Turing Test to Tell Computers and Humans Apart) — компьютерная задача, которую может решить человек, но не может программа.

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

Полное название таких примитивных, но эффективных тестов — CAPTCHA (Completely Automated Public Turing Test to Tell Computers and Humans Apart), что означает «полностью автоматизированный публичный тест Тьюринга для различия компьютеров и людей». Такие задачи частенько называют обратными тестами Тьюринга, потому что они используют идею знаменитого математика Алана Тьюринга тестировать компьютерные программы на «человечность», но предназначены, наоборот, для тестирования людей (с той же целью).

В тестах CAPTCHA используются известные недостатки искусственного интеллекта, который пока не научился эффективно анализировать аналоговую информацию. Например, самый распространенный тест Gimpy представляет собой картинку с изображениями семи искаженных слов, случайным образом выбранных из словаря. Буквы накладываются друг на друга, и на сегодняшний день ни одна известная программа не способна определить хотя бы три слова, изображенных на картинке, хотя для человека это не представляет никакого труда.

Упрощенная версия Gimpy (с одним трудночитаемым словом или цифрами на сложном фоне) является частью процесса регистрации во многих почтовых службах, например, в Yahoo! Mail или на «Яндекс.Почте». Внедрение тестов в регистрационный процесс позволяет полностью избавиться от автоматических регистраций, которые выполняют спамерские роботы для проведения анонимных массовых рассылок. Лишь недавно появились эффективные программы, созданные в учеными из Университета Беркли и Кембриджа. Эти программы могут решить от 83% до 93% простых вариантов теста Gimpy, но у спамеров пока нет такого софта. Очевидно, скоро он появятся, и «Яндекс.Почте» придется использовать более сложный тест CAPTCHA.

Еще один тест, Sounds, состоит из искаженных, сгенерированных компьютером звуков, которые образуют слово или последовательность чисел. Человек должен распознать звуки и написать результат. Программа на это не способна. Всего на сайте проекта CAPTCHA выложены пять разработанных учеными тестов (Gimpy, Bongo, Pix, Sounds и Byan), причем бета-тестирование одного из них (Pix) пока не закончено.

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

Тесты CAPTCHA были изобретены учеными из университета Карнеги-Меллона, а первое упоминание о них в прессе приходится на 21 октября 2001 г.

нас заинтересовал следующий абзац:

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

Так ли это? Точно ли компьютер не может определить, что написано на данной картинке? Точно ли на странице нигде нельзя найти эту фразу? Мы провели собственное расследование.

Проблемы

За примером далеко не пойдём. И возьмём CAPTCHA c securitylab.ru, где он, например, используется на странице регистрации или на странице обсуждения статей и новостей.

Постановка задачи: без помощи распознавания изображения узнать цифры на картинке.

Первое, что пришло на ум - посмотреть свойство картинки.

Угадайте, что нас заинтересовало? Правильно - «?captcha_code=%7E%D32%7F%8F».

Вставляем ссылку в окно адреса браузера и начинаем играть.



Теперь нажмём обновить страницу



Изображение изменилось, но цифры остались те же самые. Это значит, что установлено взаимно однозначное соответствие между множеством картинок и множеством цифр, которые этим картинкам соответствуют. Продолжаем. Теперь после «=» поставим ………. ничего не поставим).

-« ?captcha_code=»

Значит ничего отображается в ничего. Отлично.
Далее « ?captcha_code=12345».
Получаем:



Теперь « ?captcha_code=12355».



Делаем второй важный вывод: каждой цифре (знаку) в строке параметра соответствует знак в картинке. Причём важен порядок. (1я цифра(знак) в строке параметра – 1-й знак на картинке и так далее). Можете это проверить самостоятельно.
Идём дальше: « ?captcha_code=1».



Теперь « ?captcha_code=11».



Вывод - алгоритмы получения символов для 1-й и 2-й позиции отличаются.

Далее « ?captcha_code=111».



Предположение: позиция номер 3 характерна тем, что одинакова в обоих отображениях.
Проверка: « ?captcha_code=11q».



Предположение доказано.
Следующая позиция « ?captcha_code=11q1».



И опять предположение: позиция 4 и позиция 1 шифруют с одинаковым алгоритмом.
Проверка: ?captcha_code=21q2.



Считаем, что предположение доказано.
Продолжим: « ?captcha_code=11111».



Вывод: алгоритм 5-й позиции уникален.

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

Что мы имеем.

А  Б  С  А  В 

5 символов. Где А - 1й алгоритм, Б – 2й алгоритм, С – символ без изменений, В - 3й алгоритм.

Нам нужно разложить три алгоритма чтобы точно утверждать, что зная код мы можем узнать цифры на картинке. Начнём с алгоритма А. Методом перебора можно выделить определённый алгоритм. Меняем первый параметр.

«?captcha_code=1»



«?captcha_code=2»



И так далее. Теперь попробуем сделать обратное. Поставим в качестве параметра, например, “w”

«?captcha_code=w»



А теперь t.



Ага. Видна обратная связь. Теперь делаем похожие действия, чтобы установить полную зависимость. Мы приведём окончательную расшифровку для первого параметра. А вы попробуйте проделать это самостоятельно. Итак. Нам понадобится это:

...

Вот, что мы получили для первого параметра.

Таблица для 1-ой и 4-ой цифры

цифра ASCII расшифровка ASCII
0 48 v 118
1 49 w 119
2 50 t 116
3 51 u 117
4 52 r 114
5 53 s 115
6 54 p 112
7 55 q 113
8 56 7E 126
9 57 7F 127

В первой графе таблицы находится цифра, отображаемая на картинке, следующая графа – её ASCII код, потом идёт код, который отображается в свойствах картинки и его ASCII код. Заметим, что если в качестве кода идёт «%..» это значит, что речь идёт о 16-ричном формате ASCII кода. Т.е. если, например, передаётся пробел, то в командной строке будет отображаться %7F. Поясняем: функция captcha генерирует 5-ти символьный код, символов из ASCII, причём эти символы не обязательно читабельные.



Теперь перейдем ко второму параметру. Рассмотрим несколько случайных кодов.
captcha_code=%7F%DC5t%85



captcha_code=r%D27q%8A



Если так проделать ещё какое-то число раз, то можно узреть, что ASCII диапазон второго параметра всегда выпадает из печатного диапазона. Т.е. на втором месте мы всегда видим только 16-ый вид ASCII кода. Потратив какое-то время расшифровали и второй знак. Приводим таблицу.

Таблица для 2-ой цифры

цифра ASCII расшифровка ASCII
0 48 D4 212
1 49 D5 213
2 50 D6 214
3 51 D7 215
4 52 D0 208
5 53 D1 209
6 54 D2 210
7 55 D3 211
8 56 DC 220
9 57 DD 221

Третий параметр, как мы писали выше, полностью соответствует знаку на картинке. А таблица для четвёртого алгоритма соответствует таблице для первого. Таблица для пятого параметра получается по аналогии.

Таблицадля 5-ой цифры

цифра ASCII расшифровка ASCII
0 48 140
1 49 8D 141
2 50 8E 142
3 51 8F 143
4 52 88 136
5 53 89 137
6 54 8A 138
7 55 8B 139
8 56 84 132
9 57 85 133

Если внимательно присмотреться к ASCII кодам, то можно заметить определённый алгоритм. Итак, мы доказали, что зная код можно узнать цифры. Показываем окончательное действие.

Итак, специально не отображаем, картинку.



Смотрим свойства:



1-й и 4-й символ: смотрим в 1-ю таблицу.
7F – 9
7E – 8
2-й символ смотрим по 2-й таблице:
D6 – 2
3-й символ берём без изменений
7 - 7
5-й по третей таблице
8A - 6
Т.е. по нашей теории получается число 92786:



Мы только что доказали, что зная параметры функции CAPTCHA мы знаем цифры, которые нужно ввести. Т.е. функция CAPTCHA, рассмотренная в данном примере, не удовлетворяет теории Тьюринга (принцип работы инструмента состоит в генерации изображения, содержащего фразу, не упоминаемую ни где на странице в формате, читабельном для компьютера). Т.е. машина может узнать цифры на рисунке.

Применение

Эта особенность может быть использована при создании ботов:

  • для отсылки смс
  • спама
  • регистрации пользователей

и так далее.

Мы считаем, что данная проблема достаточно актуальна. За несколько часов любой толковый злоумышленник может понять алгоритм работы, написать бота и зарегистрировать на сайте за ночь 1000000 пользователей, отправить столько же смс на один номер, заспамить форумы, гостевые книги и доски объявлений. И причинить ещё много различных бед.

Статью подготовили: Сачков Илья Константинович sachk@yandex.ru
Манвелян Георгий Карэнович george911@yandex.ru
Манвелян Рафаэл Карэнович rmal@yandex.ru

KeyWords: взлом Битрикс, уязвимость Битрикс, взлом CAPTCHA, уязвимость CAPTCHA, спас CAPTCHA, распознавание CAPTCHA





СЛЕДУЮЩИЕ СТАТЬИ
Фаззинг, фаззить, фаззер: ищем уязвимости в программах, сетевых сервисах, драйверах
Гюльчатай, открой личико: получение информации о веб-приложении нетрадиционными способами
JIT Spray против IE8: пишем собственный JIT-эксплойт
Площадка для взлома: головоломки для хакеров
Учимся на ошибках: методика проведения Error-based SQL-Injection
Unserialize баг в картинках: ошибки десериализации классов на живых примерах
GOV сайты под угрозой: взлом сайта Министерства образования и науки Украины
PHP и волшебные методы: сериализация PHP-объектов глазами хакера
Пилим xBtit: нестандартные уязвимости скриптов
Социальный взлом: Pen-testing популярного движка соцсети
ПРЕДЫДУЩИЕ СТАТЬИ
WMF-баг: Windows эксплуатация
Атака на VoIP: подслушивание
Атака на VoIP: перехват
Как была взломана Lenta.ru
Взлом московского ВУЗа
Атакуй атакующего! №4
Как был взломан крупнейший провайдер Узбекистана
Атакуй атакующего! №3
Демократичный хостинг: взлом под другим углом
Атакуй атакующего! №2
ОБСУЖДЕНИЕ СТАТЬИ
Логин:
Пароль:
Регистрации на сервере не требуется, вы можете использовать гостевой доступ.
Если у вас есть форумный логин, вы можете использовать его.
Если нет, то вы можете зарегистрироваться на forum.xakep.ru
Обсуждение этой статьи на forum.xakep.ru
ВСЕ ПОСТЫ ПРОХОДЯТ ПРЕМОДЕРАЦИЮ, не ждите их мгновенного появления в списке комментариев.
Для отправки сообщения введите код, указанный на картинке
Заголовок
Сообщение

Guest Отправлено: 26.04.2007 11:24:43
Немезис;  e-mail: nemesis@nemesis.ru
Немезис 4 месяца проверяли и такой примитивной дыры не нашли. Позор.
Guest Отправлено: 26.04.2007 11:24:43
Andrew;  e-mail: andre2006@km.ru
Молодцы, разобрались в алгоритме. Вот еще одна статья на эту тему: www.securitylab.ru /contest /239642.php , правда старенькая...
Guest Отправлено: 26.04.2007 11:24:43
me;  e-mail: me@me.me
+1 зачот
Guest Отправлено: 26.04.2007 11:24:43
durito;  e-mail: durito_@mail.ru
отличная статья молодца
Guest Отправлено: 26.04.2007 11:24:43
speller;  e-mail: qwe@qwe.qwe
Идея поковырять тюринг на секулабе и мне приходила, правда, руки не дошли. Вообще позорно, конечно, типо засекуренный сайт (РЕАЛЬНО - не сравнивать с ксакепом) и такой прокол. У меня есть впечатление, что вся секурность там строится на IDS и людях,оперативно читающих логи.
Guest Отправлено: 26.04.2007 11:24:43
hbreaker;  e-mail: hbreaker@mail.ru
Поздно, они уже исправили. Теперь в качестве параметра id сессии http://www.securitylab.ru/bitrix/tools/captcha.php?captcha_sid=1246052979
Guest Отправлено: 26.04.2007 11:24:43
mixer;  e-mail: mixer@gmail.com
Почитал статью, очень понравилась и сам заинтересовался сутью вопроса. При регистрации действительно исправили баг, но на форуме он все еще остался
Guest Отправлено: 26.04.2007 11:24:43
SecurityLab;  e-mail: support@SecurityLab.ru
Несколько вы переоцениваете важность сервиса. Это защита от роботов и не более. Для спама достаточно отправлять сообщения под зарегистрированным пользователем и катчпа при этом будет отключена. Так что выводы в статье в корне не верные.
Guest Отправлено: 26.04.2007 11:24:43
daser;  e-mail: daser@....ru
данная фишка была найдена на склабе давно и отправлена Boffin, которая ею не воспользовалась, поэтому ничего нового
Страницы: < 1 2 3 4 >






Keywords: zPOSTz zHOMEz, zHACKz, zINFOz, zINTERNETz z31268z
Для Авторов: edit Lock delete Lock



    Rambler's Top100