Практические аспекты сетевой безопасности Уязвимости в веб-приложениях Часть I: SQLi.

Презентация:



Advertisements
Похожие презентации
Нарушение целостности структуры SQL-запроса. Внедрение SQL-кода (SQL injection) один из распространённых способов взлома ПО, работающего с базами данных,
Advertisements

SQL-injections for dummies. Что это? Способ несанкционированного доступа к данным, хранящимся в БД, основанный на внедрении в запрос произвольного SQL-
Корпоративные системы Лекция 5. Механизмы доступа к БД через Web-интерфейс.
Обнаружение уязвимостей в web- приложениях, написанных на Python, средствами динамического анализа исходных кодов Заливин Д.А. Козлов Д.Д. Петухов А.А.
СУБД Microsoft Access 2003 Элементы языка SQL. Язык SQL SQL (Structured Query Language) – структурированный язык запросов Язык SQL применяется во многих.
Тестирование безопасности или Security and Access Control Testing.
Базы данных. Введение Базы данных обеспечивают хранение информации. Доступ к базе данных осуществляется через специальную программу - систему управления.
База данных База данных – это конкретная предметная область, описанная с помощью таблиц.
PL/SQL Курсоры. Курсор – специальный элемент, связанный с SQL-оператором SELECT. Объявление курсора происходит в секции объявления базового блока. Работа.
Основы SQL Запросы к базе данных. Что такое база данных SQL? SQL (Structured Query Language - «Структурированный язык запросов») - универсальный компьютерный.
Администрирование и безопасность MySQL. Создание и удаление пользователей Под учетной записью пользователя MySQL подразумевается строка в таблице user.
Соколова В. В. Поддержка баз данных в РНР. Соколова В. В. Лаб 6 Работа с базами данных в РНР В РНР реализована обширная поддержка практически всех существующих.
Защита баз данных. Повестка дня Реалии сегодняшнего дня … Источники атак Уязвимости СУБД Что делать ? Кто поможет ? DbProtect – новое предлагаемое решение.
Тамбовский государственный университет имени Г.Р. Державина Институт математики, физики и информатики Кафедра информатики и информационных технологий Иванова.
Обеспечение целостности данных Процедурное. Хранимые процедуры Хранимые процедуры пишутся на специальном встроенном языке программирования, они могут.
Язык SQL Операторы манипулирования данными. Операции манипулирования данными DELETE операция удаления записей INSERT операция добавления или ввода новых.
1 Основы SQL: MySQL Будем использовать MySQL СУБД с открытым кодом Бесплатная версия (Community Edition) – на В Linux-дистрибутивах.
1 БАЗЫ ДАННЫХ Использование SQL для построения запросов. ЗАНЯТИЕ 6 ПУГАЧЁВ Ю.В. Учитель информатики Харьковская общеобразовательная школа І-ІІІ ступеней.
БАЗЫ ДАННЫХ ЛЕКЦИЯ 12. тема: ОСНОВЫ ЯЗЫКА SQL Общие сведения SQL структурированный язык запросов (Structured Query Language)
Программируемый клиент ORACLE Технология Pro C/C++
Транксрипт:

Практические аспекты сетевой безопасности Уязвимости в веб-приложениях Часть I: SQLi

Making things clear Недостатки (weakness) и уязвимости переполнение буфера в ls – не уязвимость! Атака: цели: технические и нетехнические технологический шпионаж, причинение вреда репутации повышение привилегий, нарушение работоспособности уязвимость –> техническая цель атаки – арность 1 к N нетехническая цель –> метод атаки – арность 1 к N уязвимости client-side и уязвимости server-side атаки на клиента и атаки на сервер софистика: XSS в интерфейсе администратора

Уязвимости в ПО Уязвимость – свойство ПО => адаптируем существующие подходы к анализу ПО надо различать методы обнаружения и методы эксплуатации уязвимостей Классификация подходов к анализу свойств ПО по возможностям оператора-аналитика доступ только к внешним интерфейсам ПО доступ к внутреннему представлению ПО по состоянию объекта анализа анализ во время выполнения анализ без выполнения статический анализ, динамический анализ и тестирование черного ящика

Тестирование черного ящика Что мы можем делать? получать «нормальные» HTTP-запросы переходить по ссылкам, заполнять формы и т.п. манипулировать полученными HTTP-запросами проигрывать их as-is, меняя порядок, от лица другого userа изменять методы и заголовки запросов; изменять URL удалять и добавлять параметры, дублировать параметры модифицировать значения параметров Что доступно для анализа? код и заголовки HTTP-ответа тело ответа время ответа

Типичные причины уязвимостей Некорректная обработка входных данных полное доверие заголовки, cookies, скрытые поля и т.п. проверка на стороне клиента проверка на основе черных списков ошибки при реализации белых списков нормализация данных (например, кривой HTML ) Небезопасные настройки в т.ч. пароли по умолчанию

SQL injection Терминология SQL injection – это название атаки недостаток: возможность внедрения операторов SQL причина: некорректная обработка входных данных Определение пользователь может изменить структуру SQL-запроса Возможные последствия нарушение конфиденциальности/целостности данных нарушение доступности (DROP DATABASE …) нарушение целостности приложения (в т.ч. операций) повышение привилегий на сервере

Наглядный пример SELECT * FROM DB WHERE uname=John AND cardtype=2 SELECT * FROM DB WHERE uname=John AND cardtype=2 OR 1

Работа с СУБД: типичный workflow Получение данных из HTTP-запроса Обработка данных на корректность Формирование SQL-запроса DML-запросы, SELECT Получение результата SQL-запроса и/или обработка исключительных ситуаций SELECT одной записи, многих записей Формирование HTTP-ответа в ответ попадает выборка из СУБД ответ зависит от успешности запроса ответ не зависит от результата SQL-запроса

Пример $username = $_POST["username"]; $password = $_POST["password"]; $query = "SELECT * FROM authuser WHERE uname='$username' AND passwd=MD5('$password')"; $result = mysql_query($query); if ($row = mysql_fetch_array($result, MYSQL_BOTH)) { uid = $row["uid"]; //login successful } else { //report error } mysql_free_result($result); First & Second order SQLi

Методы обнаружения Вызвать ошибку (синтаксическую или runtime) ошибка показывается ошибка не показывается надо различать страницы: успешный запрос, неуспешный корректный запрос, некорректный запрос Изменить размер выборки and 1=1 vs and 1=0 или or 1=1 vs and 1=1 Вызвать задержку MySQL sleep(); MSSQL WAITFOR DELAY; heavy queries Вызвать события out-of-band ping, запрос файлов по HTTP, DNS

Demo: обнаруживаем SQLi

Основные контрмеры Предотвращение использование prepared statement $stmt = $dbh->prepare("INSERT INTO TAB(name, value) VALUES (?, ?)"); $stmt->bindParam(1, $name); $stmt->bindParam(2, $value); $name = 'one'; $value = 1; $stmt->execute(); Минимизация последствий реализация least privilege для подключений к СУБД вынесение сервера СУБД на отдельный узел контроль целостности приложения

Типичный workflow эксплуатации Определить доступные базы Узнать имена таблиц в каждой базе Узнать количество, имена и тип столбцов Узнать содержимое каждой таблицы Обычно в СУБД есть системные таблицы с мета-информацией

Demo: мета-информация в MySQL

MySQL (>= 5.0) Получение схемы: SELECT schema_name FROM information_schema.schemata SELECT table_name FROM information_schema.tables WHERE table_schema = … SELECT column_name FROM information_schema.columns WHERE table_schema = … AND table_name … SELECT column_name FROM schema_name.table_name Получение общего числа записей: SELECT count(*) FROM … WHERE … Получение записей по одной (0

Методы эксплуатации (1 из 2) Ошибка СУБД выводится в HTTP-ответ вызывать runtime-ошибки SELECT name, desc FROM names WHERE uid = 1 UNION (SELECT count(*), concat(string,floor(rand(0)*2)) AS x FROM table GROUP BY x) string может быть version() или (SELECT schema_name FROM information_schema.schemata LIMIT j,1) самостоятельное исследование: почему rand(0)? Выборка выводится в HTTP-ответ использовать UNION SELECT name, desc FROM names WHERE uid = 1 UNION SELECT, schema_name FROM information_schema.schemata

Demo: Proof of Concept

Методы эксплуат ации (2 из 2) Ни ошибка, ни выборка не выводится в ответ задавать вопросы да/нет ловим задержку или различие в страницах Определение целого (метод бисекции): SELECT * FROM users WHERE uid = 1 and (SELECT count(*) FROM information_schema.schemata) < 1000 –– Определение строки: SELECT * FROM users WHERE uid = 1 and (SELECT length(column) FROM table LIMIT j,1) < 100 –– SELECT * FROM users where uid = 1 and (SELECT substr(column,i,1) FROM table LIMIT j,1) > 'a' -- Автоматизация: sqlMap, Toolza

Demo: автоматизация!

Домашнее задание Максимально далеко пройти в лабораторной работе от Дмитрия Евтеева задания ищите на Установить HacMe Bank v2 и найти там SQLi какие технические цели можно достичь, используя эту уязвимость? Перечислите их и опишите методы Ссылки: Книга «SQL Injection Attacks and Defense» Блог Reinersа: Блог Дмитрия Евтеева:

Вопросы?