На главную | Содержание | Назад | Вперёд
Наши друзья

 

 

Посторонние символы

Посторонние символы (ghost characters) — это дополнительные символы, которые можно добавить к запросу. Эти символы не должны препятствовать исполнению запроса. Можно, например, добавить дополнительные символы косой черты к имени файла. Очень часто строкаявляются эквивалентными запросами.

Шаблон атаки: альтернативное кодирование и предшествующие посторонние символы
В некоторых API определенные символы, установленные впереди данных, просто удаляются из строки параметров. Иногда эти символы удаляются, поскольку расцениваются как избыточные. Другой вариант такого удаления обусловлен тем, что эти символы удаляются согласно правилам, заданным для синтаксического анализатора. В качестве набора попыток проведения атаки хакер может использовать различные типы альтернативно закодированных символов в начале строки.
Одной из широко используемых возможностей проведения атаки является добавление посторонних символов в запрос. Эти посторонние символы не влияют на сам запрос на уровне API. Главное — получить доступ к интересующим библиотекам API, а потом можно проверить различные варианты проведения атак. Если посторонние символы успешно проходят через проверки, хакер может перейти от "лабораторного" тестирования API к тестированию реальных служб.
Альтернативное кодирование и посторонние символы для FTP- и Web-серверов
Удачный пример использования альтернативного кодирования и посторонних символов можно продемонстрировать на основе FTP- и Web-серверов. В большинстве реализаций этих серверов осуществляется фильтрация попыток проведения атак с использованием свойств файловой системы (переход вверх по дереву каталогов). В некоторых случаях, при предоставлении хакером строки наподобие . . ./. ./. ,/winnt система не в состоянии осуществить правильную фильтрацию и хакер получает несанкционированный доступ к "защищенному" каталогу. Базовым элементом этой атаки является использование в начале строки трех (обратите внимание) символов точки. Ошибки подобного рода часто называют уязвимым местом троеточия (triple-dot vulnerability), хотя проблема намного серьезнее, чем простой прием трех символов точки.
Используя API файловой системы в качестве цели атаки, следующие строки имеют эквивалентное значение для многих программ.
.../../../test.txt
............/../../test.txt
..?/../../test.txt
..????????/../../test.txt
../test.txt
Как видно, существует множество способов семантически эквивалентных запросов. Все эти строки являются вариантами запроса одного и того же файла . . / test. txt.
Альтернативное кодирование символов трех точек в сервере SpoonFTP
Используя три символы точки, злоумышленник может "путешествовать" по каталогам на сервере SpoonFTP vl.l.
ftp> cd ...
250 CWD command successful. ftp> pwd
257 "/--." is current directory.

Эквивалентные метасимволы
символы разделения команд также играют весьма важное значение. Они используются для разделения команд или слов в запросе. Анализаторы выполняют поиск разделителей, чтобы распознать блоки команд. При атаке на интересующий вызов функции API, широко применяется добавление и запуск дополнительных команд. По этой причине понимание того, как можно закодировать символы разделения, представляет особый интерес. Фильтр может удалять или наоборот искать определенные разделители. Выявление разделителя команд во входных данных из ненадежного источника ясно указывает на то, что кто-то пытается внедрить дополнительные команды.
Рассмотрим символ пробела, который используется для разделения слов (как в этом предложении). Во многих программных системах символ табуляции является эквивалентом символа пробела. Для программы символ пробела — это символ пробела.
Шаблон атаки: альтернативное кодирование символов косой черты
Символы косой черты представляют особый интерес. В системах на основе каталогов, таких как файловые системы и базы данных, символ косой черты обычно используется для обозначения перехода в другой каталог или к другим контейнерным объектам. По непонятным причинам в первых персональных компьютерах (а впоследствии и в операционных системах компании Microsoft) для этой цели было решено использовать символ обратной косой черты (\), тогда как в UNIX-системах используется обычная косая черта (/). В результате многие системы на основе продуктов компании Microsoft вынуждены понимать обе формы символов косой черты. Это предоставляет хакеру возможность обнаружения и использования большого количества стандартных проблем фильтрации. Целью является обнаружение серверного программного обеспечения, в котором фильтруется только одна форма этих символов, и не фильтруется вторая.
Альтернативное кодирование символов косой черты
ДЛЯ большинства Web-серверов два следующих запроса являются эквивалентными.
http://target server/some_directory\..\..\..\winnt И
http://target server/some_directory/../../../winnt
Хакерами также могут использоваться различные варианты кодирования символов косой черты в виде кодов URL, UTF-8 и Unicode. Например, в строке
http://target server/some_directory\..%5C.%5C.\winnt
где строка %5С эквивалентна символу обратной косой черты (\).
Управляющие метасимволы
Многие фильтры выполняют поиск метасимволов, но могут пропускать некоторые из них при наличии символа ESC. Символ ESC обычно устанавливается в начале управляющей последовательности символов. Без этого символа управляющая последовательность была бы преобразована в другой символ или обработана как другой управляющий символ, установленный далее во входных данных.
Ниже приведены примеры для шаблонов фильтрации символов ESC. Обратите внимание, что для определения реального поведения программы необходимо провести тестирование.
• Фильтр ESCn, где ESC и п остаются в качестве обычных символов.
• Фильтр ESCn, где символ ESC удаляется, а п остается в качестве обычного символа.
(Замените п символом возврата каретки или символом NULL,)
Шаблон атаки: использование управляющих символов при альтернативном кодировании
Установка символа обратной косой черты в начале строки символов часто приводит к тому, что анализатор воспринимает следующий символ как специальный (управляющий). Например, пара байтов \0 может привести к передаче одного нулевого (NULL) байта. Другой пример— строка \ t, которая иногда преобразуется в символ табуляции. Часто эквивалентными считаются символ косой черты и управляющий символ с символом косой черты. Это означает, что строка \/ преобразуется в символ косой черты. И один символ косой черты также остается символом косой черты. В результате можно составить следующую таблицу.
В случае применения двух альтернативных способов кодировки одного символа возникают проблемы при фильтрации и "открывается путь" для атаки.
Альтернативное кодирование символов косой черты
Использовать этот шаблон фильтрации в атаке достаточно просто. Если вы думаете, что атакуемая программа осуществляет фильтрацию символа косой черты, попытайтесь воспользоваться строкой \/ и посмотрите, что получится. В качестве примера можно привести следующую командную строку
CWD . .\/. .\/..\/..\/winnt
>
которая часто преобразуется в следующий вариант.
CWD ../../../../winnt
Чтобы проверить наличие этой проблемы, может пригодиться небольшая программа на языке С, в которой используются процедуры вывода строки. Запуск простого фрагмента кода
int main(int argc, char* argv[ {
puts("\/ \\ \? \. \l return 0;
') ,
приводит к следующему результату
/ \

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

 

На главную | Содержание | Назад | Вперёд
 
Яндекс.Метрика