Чтение онлайн

на главную

Жанры

Защита от хакеров корпоративных сетей

авторов Коллектив

Шрифт:

SELECT * FROM Users WHERE Username=’$name’ AND Password=’$pass’,

где $name и $pass – параметры имя пользователя и его пароль. В результате выполнения запроса будут найдены все записи в базе данных, у которых имя пользователя и пароль совпадают со значениями параметров, введенными пользователем. Полученный результат может быть обработан следующим образом:

if ( number_of_return_records > 0) {

# username and password were found; do stuff

} else {

# not found, return error

}

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

предположении. Представьте, что злоумышленник передаст в качестве параметра $pass следующее значение:

boguspassword OR TRUE

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

Ошибка заключается в логическом условии (при number_of_return_records > 0). Это условие предполагает наличие ситуации, при которой одной комбинации имени пользователя и его пароля соответствуют многочисленные записи в базе данных. В правильно разработанном приложении подобная логическая ошибка должна быть исправлена. Исправленное логическое условие должно быть таким: (number_of_return_records == 1). Потому, что если число записей равно нулю, то в результате запроса не было найдено ни одной записи с заданной комбинацией имени пользователя и пароля, что свидетельствует о неуспешном завершении процедуры аутентификации. Одна найденная запись говорит об успешном завершении процедуры аутентификации, а более одной – о наличии проблемы из-за ошибки работы с базой данных или атаки злоумышленника.

Конечно, из-за взятого в кавычки параметра $pass описанная только что ситуация может не произойти. Результат непосредственной подстановки значения параметра в запрос будет выглядеть так:

… AND Password=’boguspassword OR TRUE’

В итоге часть запроса OR TRUE не будет интерпретироваться как команда. Можно расставить собственные кавычки (boguspassword\' OR TRUE) и преодолеть это ограничение. При этом запрос примет вид:

… AND Password=’boguspassword’ OR TRUE’

Обычно это приводит к выдаче диагностического сообщения о том, что кавычка непарная. Для того чтобы избавиться от сообщения, можно использовать символ комментария за ключевым словом TRUE или использовать в запросе замыкающую кавычку. При присвоении параметру $pass значения

boguspassword’ OR NOT Password=’otherboguspassword

запрос станет следующим:

… AND Password=’boguspassword’ OR NOT Password=’otherboguspassword’

и замыкающая кавычка окажется на своем месте. Естественно, что правильно выполненная в программе проверка корректности данных и расстановки кавычек не даст такому запросу выполниться. Именно так и реализована аутентификация в пакете wwwthreads (www.wwwthreads.com). Запрос, включенный в их демоверсию, выглядит следующим образом:

my $query = qq!

SELECT *

FROM Users

WHERE Username = $Username_q

!;

А этому фрагменту кода предшествуют следующие строчки:

my $Username_q = $dbh->quote($Username); my $Password_q = $dbh->quote($Password);

В этих строчках проводимые проверки гарантируют, что значение параметра $Username правильно взято в кавычки. Благодаря этому все, что говорилось по поводу расстановки кавычек, работать не будет. Несмотря на это, еще раз рассмотрим запрос. Видно, что описанная проверка анализирует только имя пользователя. Это означает, что если кто-то использует правильное имя пользователя, то результат запроса заставит поверить пакет wwwthreads в то, что пользователь успешно прошел процедуру аутентификации. Исправленный запрос выглядит следующим образом:

my $query = qq!

SELECT *

FROM Users

WHERE Username = $Username_q

AND Password = $Password_q

!;

О найденной ошибке была оповещена служба поддержки пакета wwwthreads, и проблема была решена.

Маскировка непредвиденных данных

Многие люди часто не замечают разновидности атак злоумышленника, основанных на маскировке характерных признаков (сигнатуры) непредвиденных

разработчиком входных данных программы. На проверке сигнатуры данных основана работа некоторых приложений: сканеров вирусов и систем обнаружения вторжений. Цель маскировки сигнатуры данных состоит в преобразовании злонамеренной сигнатуры (сигнатуры вируса или атаки) таким образом, чтобы приложение не смогло ее распознать. Более подробно системы обнаружения вторжений (IDS) описаны в главе 16.

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

В качестве примера рассмотрим Web-запрос. Пусть система обнаружения вторжений настроена на подачу сигнала тревоги при появлении любого запроса, содержащего строку /cgi-bin/phf. Предполагается, что в рассматриваемом случае давно известная уязвимость, основанная на вызове программы phf интерфейса CGI, будет оформлена по стандартным правилам протокола HTTP, и поэтому ее будет легко обнаружить. Но опытный злоумышленник, используя тонкие моменты в работе протокола HTTP и атакуемого Web-сервера, может исказить сигнатуру строки /cgi-bin/phf.

Например, запрос может быть представлен в эквивалентном шестнадцатеричном виде:

GET /%63%67%69%2d%62%69%6e/phf HTTP/1.0

Приведенная строка не соответствует в точности строке /cgi-bin/phf, но Web-сервер перед использованием полученной строки переведет каждый фрагмент %XX в соответствующий ASCII-символ. В запросе может также использоваться нечасто встречаемая форма указания директории самой на себя:

GET /cgi-bin/./phf HTTP/1.0

Включенные в состав запроса символы указания директории самой на себя /./ позволяют изменить сигнатуру уязвимости. Или пусть, для примера, атакуемый Web-сервер – информационный сервер Интернет (IIS) Windows NT (хотя phf – это программа интерфейса CGI системы UNIX). Тогда запрос можно оформить следующим образом:

GET /cgi-bin\phf HTTP/1.0

Приведенная строка маскирует сигнатуру искомой строки.

Недавно получил распространение способ маскировки данных, поставивший всех в тупик. Он основан на кодировании URL при помощи меняющих друг друга кодировок UTF-8 и Unicode, которые понимают сервера Microsoft IIS и некоторые другие. (UTF-8 – ASCII-совместимый многобайтовый код, применяемый в языке Java. Unicode – 16-битный стандарт кодирования символов, позволяющий представлять алфавиты всех существующих в мире языков). Для представления символов ASCII можно использовать 16-битное кодирование Unicode. Обычно приложения воспринимают эти 16-битные величины как неверные, хотя некоторые могут их обрабатывать.

Хорошим примером, иллюстрирующим возможности перехода к представлению данных на Unicode-коде, является уязвимость, исправленная патчем Microsoft MS00-078. Ранее можно было обмануть информационный сервер Интернет IIS и получить доступ к файлам, размещенным за пределами Web-директории, при помощи обращения к родительской директории. Пример подобного трюка с URL выглядит так

/cgi-bin/../../../../winnt/system32/cmd.exe

В идеальном для злоумышленника случае это позволило бы ему получить доступ к корневой директории, а затем к системной директории WINNT и ее поддиректориям, вызвав программу операционной системы cmd.exe. Позволило бы, если бы информационный сервер Интернет не был достаточно умен, чтобы противостоять злоумышленнику и не позволить ему преодолеть систему безопасности. Меняя некоторые символы на их эквиваленты в Unicode-коде, злоумышленник может обмануть информационный сервер Интернет IIS, заставив его поверить в безопасность URL. После декодирования URL информационный сервер Интернет выполнит программу cmd.exe. Результат замены символов в URL может выглядеть так:

/cgi-bin/..%c0%af..%c0%af..%c0%af..%c0%afwinnt/system32/cmd.exe

В этом примере символ «/» заменен на 16-битный эквивалент в Unicode-коде с представлением в шестнадцатеричном формате «0xC0AF», который затем был перекодирован в URL как «%c0%af». Вместо символа «/» можно было закодировать в Unicode-коде любой другой символ. Символ «/» был использован только в качестве примера.

Методы поиска и устранения уязвимостей, обусловленных непредвиденными входными данными

Поделиться:
Популярные книги

Дракон с подарком

Суббота Светлана
3. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
6.62
рейтинг книги
Дракон с подарком

Государь

Кулаков Алексей Иванович
3. Рюрикова кровь
Фантастика:
мистика
альтернативная история
историческое фэнтези
6.25
рейтинг книги
Государь

Новая мама в семье драконов

Смертная Елена
2. В доме драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Новая мама в семье драконов

Прорвемся, опера!

Киров Никита
1. Опер
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прорвемся, опера!

Офицер-разведки

Поселягин Владимир Геннадьевич
2. Красноармеец
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Офицер-разведки

Провинциал. Книга 3

Лопарев Игорь Викторович
3. Провинциал
Фантастика:
космическая фантастика
рпг
аниме
5.00
рейтинг книги
Провинциал. Книга 3

Мимик нового Мира 5

Северный Лис
4. Мимик!
Фантастика:
юмористическая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Мимик нового Мира 5

Убивать чтобы жить 3

Бор Жорж
3. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 3

Мама для дракончика или Жена к вылуплению

Максонова Мария
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Мама для дракончика или Жена к вылуплению

Кодекс Охотника. Книга XVI

Винокуров Юрий
16. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVI

Ученик

Первухин Андрей Евгеньевич
1. Ученик
Фантастика:
фэнтези
6.20
рейтинг книги
Ученик

Сопротивляйся мне

Вечная Ольга
3. Порочная власть
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Сопротивляйся мне

Сам себе властелин 4

Горбов Александр Михайлович
4. Сам себе властелин
Фантастика:
фэнтези
юмористическая фантастика
попаданцы
6.09
рейтинг книги
Сам себе властелин 4

Полковник Империи

Ланцов Михаил Алексеевич
3. Безумный Макс
Фантастика:
альтернативная история
6.58
рейтинг книги
Полковник Империи