Слайд 2Что это?
Способ несанкционированного доступа к данным, хранящимся в БД, основанный на
внедрении в запрос произвольного SQL-кода.
Слайд 3Пример
$id = $_REQUEST['id'];
$res = mysql_query("SELECT * FROM news WHERE id_news =
$id");
http://site.com/news.php?id=5
SELECT * FROM news WHERE id_news = 5
http://site.com/news.php?id=-1+OR+1=1
SELECT * FROM news WHERE id_news = -1 OR 1=1
Слайд 4Пример
$search_text = $_REQUEST['search_text'];
$res = mysql_query("SELECT id_news, news_date, news_caption, news_text, news_id_author
FROM news WHERE news_caption LIKE('%$search_text%')");
http://site.com/news.php?search_text=qwerty
SELECT id_news, news_date, news_caption, news_text, news_id_author FROM news WHERE news_caption LIKE('%Test%')
')+and+(news_id_author='1
SELECT id_news, news_date, news_caption, news_text, news_id_author FROM news WHERE news_caption LIKE('%') AND (news_id_author='1%')
Слайд 5Причины
Отсутствие необходимой обработки входящих запросов
Отсутствие обработки ошибок
Отсутствие ограничений прав
Слайд 6Последствия
Компрометация пользовательских данных
Дамп БД
Внедрение “бэкдора”
Доступ к хостовой ОС
Подмена данных
Внедрение данных
Слайд 7Основные типы
UNION query
Error-based
Stacked queries
Blind injections
Слайд 8UNION query SQL injection
$res = mysql_query("SELECT id_news, header, body, author FROM
news WHERE id_news = " . $_REQUEST['id']);
-1 UNION SELECT 1, username, password, 1 FROM admin
SELECT id_news, header, body, author FROM news WHERE id_news = -1 UNION SELECT 1, username, password, 1 FROM admin
Слайд 9Error-based SQL injection
Инъекция заведомо некорректного запроса с
целью получения ошибки для определения
типа и версии используемой СУБД.
Определение уязвимостей, специфичных для данной версии.
Определение особенностей СУБД.
Определение дальнейшего вектора атаки
Слайд 10Stacked queries SQL injection
Если веб-приложение поддерживает
последовательные запросы - в уязвимый
параметр HTTP-запроса добавляется точка
с запятой (;) и следом внедряемый SQL-
запрос.
SELECT id_news, header, body, author FROM news WHERE id_news = -1; SELECT username,password FROM admin
Слайд 11Blind SQL-injection
Time-based
К уязвимому запросу добавляется синтаксически верный SQL-запрос
Замеряется время обработки запроса
Замеряется
изменение времени обработки при изменении запроса
Boolean-based
Слайд 12Тестирование
Выполняется:
Программистами на основании code review
DBA и/или QA – проверка настроек БД,
прав пользователей, имен таблиц и т.д.
QA:
Тестирование вручную – на основании знаний о системе и выполняемых ею функций
Автоматизированные тестирование – с использованием сканеров для определения потенциально опасных функций и/или возможности эксплуатации определенных функций
Слайд 13Автоматизация
Проблема: Поиск производится по «шаблону» - большое
количество ложных срабатываний.
Следствие: эффективность
тестирования «общими» сканерами
стремится к 0.
Варианты решения:
Ручное тестирование
Ревъю кода
Использование узкоспециализированных либо «самописных» средств
Слайд 14SQLmap
Преимущества:
минимальное количество ложных срабатываний
возможность эксплуатации встроенными средствами
развернутая информация об уязвимости
простота в
использовании
бесплатность
Недостатки:
Необходимость предварительного ручного тестирования (поиск потенциальных слабостей)
Необходимость минимальных технических навыков
Требуется понимание принципов инъекций и их использования
Слайд 15Методы защиты
Обработка вводимых данных
Ограничение прав
Логгеры, триггеры
Else…
Слайд 16Links:
http://en.wikipedia.org/wiki/SQL_injection
http://sqlmap.sourceforge.net
http://mwgrasp.oni.cc
http://antichat.ru
https://www.owasp.org
http://http://www.mavitunasecurity.com/netsparker