Автор работы: Пользователь скрыл имя, 02 Октября 2009 в 19:14, Не определен
В реферате содержится информация о современных методах защиты баз данных.
Конфигурация по умолчанию модуля mod_security не фильтрует значение, переданные как cookie. Одновременно, в некоторых случаях, а также в некоторых конфигурациях по умолчанию php, переменные cookie регистрируются автоматически.
Таким образом, злонамеренные значения переменных, абсолютно прозрачно для mod_security можно передать как cookie значения.
DOS в MySQL инъекции.
Если не имеется возможности применения union в запросе, например, MySQL имеет версию 3.*, то, тем не менее, инъекцию можно эксплуатировать, например, для того, чтобы заставить сервер базы данных исчерпать все свои ресурсы.
Для этого, будем использовать функцию BENCHMARK, которая повторяет выполнение выражения expr заданное количество раз, указанное в аргументе count. В качестве основного выражения возьмем функцию, которая сама по себе требует некоторого времени. Например, md5(). В качестве строки возьмем current_date, чтобы строка не содержала кавычек. Функции BENCHMARK можно вкладывать друг в друга. И так, составляем запрос:
http://site/test.php?
1000000
запросов md5 выполняются (в зависимости
от мощности сервера), примерно 5
секунд, 10000000 будут выполнятся около
50 секунд. Вложенный benchmark будет выполняться
очень долго, на любом сервере.
другие типа MySQL инъекции.
Фильтровать
целые значения для целых параметров
и кавычки для строковых
mysql_query("select id from users where password like '".addslashes($password)."' and user like '".addslashes($user)."'");
в этом случае к любому пользователю подойдет пароль %
apache mod_rewrite
В некоторых случаях, СКЛ инъекция возможна даже в параметре, который преобразуется методами mod_rewrite модуля apache, к GET параметру скрипта.
Например, скрипты типа /news/127.html преобразуются к /news/news.php?id=127 следующим правилом: RewriteRule ^/news/(.*).html$ "/news/news.php?id=$1"
Это позволит передать злонамеренные значения параметра скрипту. Так, например /news/128-1.html
Если выводятся подробные сообщения об ошибках, то можно сразу узнать адрес скрипа, и далее, подобрав параметр работать уже с ним. Если же нет, то можно исследовать уязвимость, прямо редактируя имя файла.
коротко о защите.
Для защиты от всего вышесказанного достаточно придерживаться нескольких простых правил.
1) для целых и дробных величин, перед их использованием в запросе достаточно привести величину к нужному типу.
$id=(int)$id; $total=(float)$total;
Вместо этого можно вставить систему слежения за тестированием на SQL инъекцию.
if((string)$id<>(
//пишем в лог о попытке
die('ops');
}
2) для строковых параметров, которые не используются в like, regexp и тд, экранируем кавычки.
$str=addslashes($str);
или, лучше,
mysql_escape_string($
3)
в строках, которые
Статья "О сервере бедном замолвите слово..." вызвала большой интерес читателей, поэтому я решил продолжить эту тему – тем более что кроме Web-серверов есть еще и сервера баз данных...
Итак,
у вас есть сервер под управлением
Windows NT (2000). Как вы, наверное, знаете,
под этой операционной системой могут
работать различные типы серверов:
Web, почтовые, файловые, печати, баз данных.
Microsoft настоятельно рекомендует для
каждой из перечисленных задач
После эпидемии вирусов Code Red, Code Red 2 и Nimda1 надежность Web-сервера IIS (Internet Information Services) от Microsoft была поставлена под большой и жирный знак вопроса. По всему миру огромное количество компьютеров стало уязвимо не на словах, а на деле. Пусть софтверный гигант бьет себя пяткой в грудь и говорит, что их Web-сервер самый популярный и поэтому в нем нашли столько много багов... Как эта популярность набрана, говорить, наверное, не надо – ровно так же, как было и с Internet Explorer. Если вам надо поставить что-то серверное, то часто без установленного IIS это сделать просто нельзя2. Да и про популярность можно поспорить, по крайней мере в России. Хорошо лишь, что после нашествия вирусов все-таки (наконец!!!) администраторы стали устанавливать заплатки. Ладно, если вам нравится IIS (как мне, например), используйте его на здоровье, но – будьте бдительны!
Какая
фирма обходится без баз
Аутентификация пользователей в MS SQL Server3 возможна двумя путями: используя логин из Windows и/или конкретную учетную запись, созданную специально для базы данных. Первый вариант предоставляет пользователю больше удобств. Зная имя и пароль в базе данных, можно делать в домене все, что доступно данному пользователю. Или наоборот – если вы прописаны в домене, то можете получить доступ к данным из БД, причем очень велика вероятность того, что администратор не обрезал права доступа. А вероятность того, что в базе данных хранится много секретной или в крайнем случае конфиденциальной информации, ничуть не меньше....
А зная пароль администратора, можно вообще горы сдвигать! Так вот, вся пугающая прелесть MS SQL Server в том, что по умолчанию после установки заводится учетная запись sa – это и есть администратор. Догадываетесь, какова длина его пароля? Ноль символов! Обычно все дальнейшие действия с базой данных администратор проводит через заход под своим именем из домена, а про sa все забывают. Если, конечно, вообще знали...
Таким образом, любой человек, имеющий доступ к серверу, может делать с базой всё, что угодно. Добавлять пользователей БД, менять им пароли, читать данные, удалять, изменять... Главное хорошо знать язык построения запросов SQL. Да, помните, я говорил в начале статьи, что если взломан4 один сервис, то могут быть взломаны и все остальные? Сейчас я докажу это!
Попробуйте подсоединиться к серверу баз данных и выполнить следующий код:
use master
exec xp_cmdshell 'dir /O c:'
Рис. 1. Получение структуры каталогов
на удаленном сервере
Да-да-да, не удивляйтесь, через сервер БД можно получить доступ к командной строке. Для этого служит хранимая процедура xp_cmdshell. Какую потенциальную опасность это несет, я и говорить не буду – просто вспомните про net.exe, route.exe, format.exe... Да мало ли добра лежит в winntsystem32! К тому же и в самом SQL есть большое количество полезных команд и хранимых процедур. Больше всего мне понравилась одна, видимо, оставленная Microsoft специально для хакеров – напишешь shutdown, и сервер перезагрузится. Лепота... В общем, имея доступ к командной строке с правами администратора, имеешь [доступ ко] все[му].
Рис. 2. Меняем пароль администратора БД
Есть одно большое НО. Чтобы подсоединиться к серверу, надо либо самому оказаться в его локальной сети, либо же "застать" оный в Интернете. Второе, по логике, должно быть вообще недопустимым – ведь даже если пароль администратора неизвестен, его можно подобрать, и очень легко – поверьте моему опыту. Однако зачем такие сложности? Вспомните еще раз про две стороны медали. Например, у организации есть сервер баз данных. Через некоторое время руководство захотело иметь свой представительский Web-сервер. Второй компьютер покупать жалко, поэтому на первый поставили дополнительно Web-сервер и купили IP-адрес. Ура! Работает и первое, и второе. Про то, что база данных становится доступной извне, никто и не думает...
Итак,
если найден компьютер с IIS, то всегда
есть и шанс наличия MS SQL Server. Приблизительных
процентов подобного
Меня с моим приятелем, работающим в провайдерской конторе, давно интересовал вопрос о соотношении использования различных Web-серверов. Несомненно, есть всевозможные независимые статистические данные, но они часто противоречат друг другу. Однажды товарищ быстренько написал программу на Perl, которая проверяет наличие Web-сервера на удаленном компьютере и определяет его название. За неделю поисков было найдено довольно много компьютеров, и оказалось, что IIS в мире все-таки используется, и он не сильно отстал от Apache. А из всего объема просканированных компьютеров Web-сервера были установлены только на 0,5%.
Рис. 3. Статистика использования Web-серверов
в мире
Получив список адресов, где стоял IIS, я решил ради любопытства проверить их прочность. Запустив свой любимый LANguard Network Scanner (см. "О сервере бедном замолвите слово"), я стал смотреть, что, собственно, у кого открыто. Уже на третьем компьютере я обнаружил MS SQL. "А почему бы и нет?" – подумалось мне, и, запустив Query Analyzer и введя адрес + sa, я нажал Enter. В тот час пинг был быстрый и через несколько секунд глаза у меня разбежались от названий баз данных, к которым я получил доступ. Почти в каждой хранилось около сотни имен пользователей, их электронные и реальные адреса, даты рождений и, конечно, пароли. Немного побродив по таблицам, я отсоединился и забыл адрес. Даже ничего не стирал и приветов не оставлял. Я хоть и хакер, но безобидный...
Вообще
же, чрезвычайно весело лазить через
удаленный компьютер по чужой
локальной сети, подключать сетевые
диски с музыкой, а потом выполнять
на них что-то типа "start z:zemfira.mp3".
То-то пользователи удивяться, когда
на заблокированном сервере
Рис. 4. Отправка сообщения всем пользователем
удаленного домена
Шутки в сторону. Теперь задумайтесь, что можно сделать, если подходить к поиску информации осознанно. Если находить заказчиков и продавать им данные – получается промышленный шпионаж, и доступен он... практически каждому! Не надо заканчивать спецкурсы и учиться в закрытых структурах. Продвинутый школьник или студент сделает все "за таблеточку, за монеточку". Страшно.
Но всего этого можно избежать. Прислушаемся к советам Microsoft и хотя бы базу данных установим на дополнительном компьютере, не имеющем выхода в Интернет. При надобности будем обращаться к данным на другом компьютере через клиентское программное обеспечение. Пусть у нас есть, к примеру, Интернет-магазин. Можно предложить такую схему: CGI-скрипт на Web-сервере посылает запросы на сервер баз данных, используя специальную облегченную учетную запись пользователя, имеющего доступ только к таблицам магазина. Чтобы максимально защитить структуру базы, можно вместо посылки готовых запросов вызывать хранимые процедуры сервера БД. Если наш Интернет-магазин как-либо взломают, то достаточно лишь поменять пароль пользователя магазина и возможность потенциального доступа к другим таблицам сервера исчезнет. К тому же, если вызывать хранимые процедуры, то можно гораздо более независимо написать сам Интернет-магазин, да и данные он будет получать быстрее.