Курс «Основы тестирования ПО» Лекция № 4 «Тестирование

Скачать презентацию Курс «Основы тестирования ПО» Лекция № 4 «Тестирование Скачать презентацию Курс «Основы тестирования ПО» Лекция № 4 «Тестирование

8-dokuchaev._osnovy_testirovaniya_po_-_lekciya_#4.pptx

  • Количество слайдов: 94

>Курс «Основы тестирования ПО» Лекция № 4 «Тестирование безопасности вебприложений» Докучаев Сергей / руководитель Курс «Основы тестирования ПО» Лекция № 4 «Тестирование безопасности вебприложений» Докучаев Сергей / руководитель группы нефункционального тестирования/ Тензор, 2014

>2 Вводная 2 Вводная

>3 Вводная 3 Вводная

>4 Вводная Стив Возняк    Вместе с Джобсом занимались фрикерством в промышленных 4 Вводная Стив Возняк Вместе с Джобсом занимались фрикерством в промышленных масштабах

>5 Вводная 5 Вводная

>6 Вводная Mendax  NASA, Пентагон, множество военных систем США, Motorola, Xerox, Panasoniс, банковские 6 Вводная Mendax NASA, Пентагон, множество военных систем США, Motorola, Xerox, Panasoniс, банковские системы Отделался административным штрафом

>7 Вводная 7 Вводная

>8 Вводная Кевин Митник  Самый знаменитый хулиган и тролль в хакерском мире 80-90-х 8 Вводная Кевин Митник Самый знаменитый хулиган и тролль в хакерском мире 80-90-х Несколько раз сидел в тюрьме

>9 Вводная Любой подросток, начитавшийся журнала «Хакер»   умеет запускать программы читать профильные 9 Вводная Любой подросток, начитавшийся журнала «Хакер» умеет запускать программы читать профильные форумы по времени ограничен только мамой

>10 Термины Компьютерная безопасность  Тестирование безопасности веб-приложений  Тестирование на проникновение  Хакер 10 Термины Компьютерная безопасность Тестирование безопасности веб-приложений Тестирование на проникновение Хакер POC (Proof Of Concept)

>11 Термины Компьютерная безопасность  Тестирование безопасности веб-приложений  Тестирование на проникновение  Хакер 11 Термины Компьютерная безопасность Тестирование безопасности веб-приложений Тестирование на проникновение Хакер POC (Proof Of Concept)

>12 Термины Компьютерная безопасность  Тестирование безопасности веб-приложений  Тестирование на проникновение  Хакер 12 Термины Компьютерная безопасность Тестирование безопасности веб-приложений Тестирование на проникновение Хакер POC (Proof Of Concept)

>13 Термины Компьютерная безопасность  Тестирование безопасности веб-приложений  Тестирование на проникновение  Хакер 13 Термины Компьютерная безопасность Тестирование безопасности веб-приложений Тестирование на проникновение Хакер POC (Proof Of Concept)

>14 Термины Компьютерная безопасность  Тестирование безопасности веб-приложений  Тестирование на проникновение  Хакер 14 Термины Компьютерная безопасность Тестирование безопасности веб-приложений Тестирование на проникновение Хакер POC (Proof Of Concept)

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

>16 Вводная Что будет сегодня:  XSS – принципы, тестирование, защита  SQL Injection 16 Вводная Что будет сегодня: XSS – принципы, тестирование, защита SQL Injection – принципы, примеры эксплуатации DOS атаки Социальная инженерия

>17 Вводная Источники информации:  OWASP Testing Guide: https://www.owasp.org/index.php/OWASP_Testing_Guide_v4_Table_of_Contents 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 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 19 XSS

>20 XSS XSS (Cross Site Scripting) – уязвимость, позволяющая атакующему внедрять скрипты на страницы, 20 XSS XSS (Cross Site Scripting) – уязвимость, позволяющая атакующему внедрять скрипты на страницы, которые просматривают другие пользователи. Как минимум треть сайтов в сети уязвимо через XSS Самая недооценённая уязвимость, т.к. идёт атака на пользователя Два основных типа: отраженная и хранимая

>21 XSS Reflected XSS Атакующий Жертва Уязвимый сайт 21 XSS Reflected XSS Атакующий Жертва Уязвимый сайт

>22 XSS Reflected XSS Атакующий провоцирует жертву на переход по ссылке, в которой содержится 22 XSS Reflected XSS Атакующий провоцирует жертву на переход по ссылке, в которой содержится скрипт

>23 XSS Reflected XSS Жертва переходит по ссылке, по которой открывается страница уязвимого сайта 23 XSS Reflected XSS Жертва переходит по ссылке, по которой открывается страница уязвимого сайта

>24 XSS Reflected XSS Жертва получает страницу, на которой срабатывает код атакующего 24 XSS Reflected XSS Жертва получает страницу, на которой срабатывает код атакующего

>25 XSS Reflected XSS Атакующий получает приватные данные жертвы 25 XSS Reflected XSS Атакующий получает приватные данные жертвы

>26 XSS 26 XSS

>27 XSS 27 XSS

>28 XSS 28 XSS

>29 XSS 29 XSS

>30 XSS 30 XSS

>31 XSS 31 XSS

>32 XSS Stored XSS Атакующий Жертва Уязвимый сайт 32 XSS Stored XSS Атакующий Жертва Уязвимый сайт

>33 XSS Stored XSS Злоумышленник передаёт данные на сайт, где они сохраняются 33 XSS Stored XSS Злоумышленник передаёт данные на сайт, где они сохраняются

>34 XSS Stored XSS Жертва открывает сайт, выполняя код 34 XSS Stored XSS Жертва открывает сайт, выполняя код

>35 XSS Stored XSS Приватные данные уходят к злоумышленнику 35 XSS Stored XSS Приватные данные уходят к злоумышленнику

>36 XSS Как тестировать:  Определяем все входные параметры Передаём в качестве значения параметра 36 XSS Как тестировать: Определяем все входные параметры Передаём в качестве значения параметра код: Открываем страницу, на которой выводится значение параметра Проверяем, что инъекция не сработала

>37 Литература Примеры XSS 37 Литература Примеры XSS

>38 XSS Пример тестирования, если есть защита:  1. JavaScript чувствителен к регистру и 38 XSS Пример тестирования, если есть защита: 1. JavaScript чувствителен к регистру и разработчик может решить защититься переведя все символы в заглавные: 2. Тогда мы можем сделать так:

>39 XSS Пример тестирования, если есть защита:  1. Разработчик решает просто вырезать символ 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. Разработчик решил вырезать все подстроки: 40 XSS Пример тестирования, если есть защита: 1. Разработчик решил вырезать все подстроки: 2. Тогда мы можем сделать так: snippetipt>snippetsnippetipt>

>41 XSS Пример тестирования, если есть защита:  1. Разработчик решил вырезать все подстроки: 41 XSS Пример тестирования, если есть защита: 1. Разработчик решил вырезать все подстроки: 2. Тогда мы можем сделать так: ipt>

>42 XSS Пример тестирования, если есть защита:  1. Разработчик решил вырезать все подстроки: 42 XSS Пример тестирования, если есть защита: 1. Разработчик решил вырезать все подстроки: 2. Тогда мы можем сделать так:

>43 XSS Как предотвратить?  Для того, что бы было проще понимать механизмы предотвращения 43 XSS Как предотвратить? Для того, что бы было проще понимать механизмы предотвращения XSS, стоит представлять себе любую страницу сайта как множество различных слотов. А все данные делить на доверенные и не доверенные. Доверенные данные мы сами формируем, а не доверенные нам передают извне.

>44 XSS Как предотвратить?  <div>     <div>   44 XSS Как предотвратить?

Текст

>45 XSS Как предотвратить?  <div>     <div>   45 XSS Как предотвратить?

Текст

>46 XSS Как предотвратить?  <div>     <div>   46 XSS Как предотвратить?

Текст Слот

>47 XSS Как предотвратить?  <div>     <div>   47 XSS Как предотвратить?

Текст

>48 XSS Как предотвратить?  Правило № 1  Никогда не вставлять данные, которым 48 XSS Как предотвратить? Правило № 1 Никогда не вставлять данные, которым мы не доверяем (получаем от пользователя) в следующие места: <- напрямую в скрипт <- в HTML комментарий

<- в имя аттрибута < ...user_data... href="/test" /> <- в имя тэга <- напрямую в CSS

>49 XSS Как предотвратить?  Правило № 2  Для остальных слотов эскейпим спецсимволы 49 XSS Как предотвратить? Правило № 2 Для остальных слотов эскейпим спецсимволы перед вставкой пользовательских данных: & --> & < --> < > --> > " --> " ' --> ' / --> /

>50 XSS Как предотвратить?  Правило № 3  Использовать CSP (Content Security Policy) 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 очень распространён и сильно не дооценён  При тестировании 51 XSS Итого: XSS очень распространён и сильно не дооценён При тестировании требуется подобрать такие значения, при которых на атакуемой странице сработает скрипт 99% защита состоит из контроля за тем куда вставляем и эскейпинга спецсимволов Сканеры справляются плохо, нужна аналитика

>52 SQL Injection 52 SQL Injection

>53 SQL Injection SQL Injection – уязвимость, при которой вредоносный SQL код вставляется в 53 SQL Injection SQL Injection – уязвимость, при которой вредоносный SQL код вставляется в исходный SQL код. Следовательно может возникать при следующих условиях: Запросы составляются динамически Сайт принимает не доверенные данные

>54 SQL Injection Атакующий БЛ СУБД Вебсервер 54 SQL Injection Атакующий БЛ СУБД Вебсервер

>55 SQL Injection Атакующий Атакующий передаёт запрос с инъекцией на сервер БЛ СУБД Вебсервер 55 SQL Injection Атакующий Атакующий передаёт запрос с инъекцией на сервер БЛ СУБД Вебсервер

>56 SQL Injection Атакующий Вебсервер передаёт данные в код БЛ СУБД Вебсервер 56 SQL Injection Атакующий Вебсервер передаёт данные в код БЛ СУБД Вебсервер

>57 SQL Injection Атакующий Из кода выполняется запрос в БД БЛ СУБД Вебсервер 57 SQL Injection Атакующий Из кода выполняется запрос в БД БЛ СУБД Вебсервер

>58 SQL Injection Атакующий СУБД возвращает результат (записи или сообщение) БЛ СУБД Вебсервер 58 SQL Injection Атакующий СУБД возвращает результат (записи или сообщение) БЛ СУБД Вебсервер

>59 SQL Injection Атакующий Данные попадают к пользователю БЛ СУБД Вебсервер 59 SQL Injection Атакующий Данные попадают к пользователю БЛ СУБД Вебсервер

>60 SQL Injection Имеется SQL запрос:  SELECT *  FROM Users  WHERE 60 SQL Injection Имеется SQL запрос: SELECT * FROM Users WHERE Username='$username' AND Password='$password' Параметры $username и $password мы получаем от пользователя Будем инжектить в эти параметры.

>61 SQL Injection Имеется SQL запрос:  SELECT *  FROM Users  WHERE 61 SQL Injection Имеется SQL запрос: SELECT * FROM Users WHERE Username='$username' AND Password='$password' Параметры $username и $password мы получаем от пользователя Будем инжектить в эти параметры.

>62 SQL Injection Наша задача – подобрать такие параметры, что бы при их вставке 62 SQL Injection Наша задача – подобрать такие параметры, что бы при их вставке изначальный запрос преобразовался бы в запрос, который бы возвращал запись/записи из таблицы. $username = 1' or '1' = '1 $password = 1' or '1' = '1

>63 SQL Injection Получаем в итоге такой запрос:  SELECT *  FROM Users 63 SQL Injection Получаем в итоге такой запрос: SELECT * FROM Users WHERE Username='1' OR '1' = '1' AND Password='1' OR '1' = '1' Который вероятно вернёт все записи с пользователями Если в коде была просто проверка на то, что запрос хоть что-то вернул, то мы проходим.

>64 SQL Injection Что делать, если в коде идёт проверка на ровно один результат 64 SQL Injection Что делать, если в коде идёт проверка на ровно один результат в выборке? Нужно исключить второй параметр из запроса! $username = 1' or '1' = '1' LIMIT 1/* В этом случае мы ограничиваем число найденных записей одним и «комментарим» весь оставшийся запрос.

>65 SQL Injection Что делать, если в коде идёт проверка на ровно один результат 65 SQL Injection Что делать, если в коде идёт проверка на ровно один результат в выборке? Нужно исключить второй параметр из запроса! $username = 1' or '1' = '1' LIMIT 1/* В этом случае мы ограничиваем число найденных записей одним и «комментарим» весь оставшийся запрос.

>66 SQL Injection SQL Injection атаки можно разбить на три класса:  Внутрипоточные – 66 SQL Injection SQL Injection атаки можно разбить на три класса: Внутрипоточные – данные передаются по тому же каналу Внепоточные – данные передаются по другому каналу (e.g. почта, скайп) Слепые (данные не передаются)

>67 SQL Injection Техники эксплуатации SQL Injection:  UNION – пытаемся с исходными данными 67 SQL Injection Техники эксплуатации SQL Injection: UNION – пытаемся с исходными данными зацепить произвольные Boolean – при работе с булевыми значениями Error-based – когда атакующий принимает решения в зависимости от ошибок, которые генерирует Внепоточный – когда мы пытаемся получить данные используя другой канал Time-delay – использование таких команд как sleep Техники можно комбинировать!

>68 SQL Injection Техники эксплуатации SQL Injection: UNION  Имеется такой запрос:  SELECT 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  В итоге получаем такой запрос: 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  Проблема первая: мы не знаем 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  Проблема вторая: мы не знаем 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 Процесс трудоёмкий, поэтому используем инструменты, которые облегчат нам работу!  Два 72 SQL Injection Процесс трудоёмкий, поэтому используем инструменты, которые облегчат нам работу! Два самых популярных инструмента: sqlmap и Havij Демонстрация работы sqlmap

>73 SQL Injection Способы защиты:  Параметризованные запросы  Хранимые процедуры  Проверка и 73 SQL Injection Способы защиты: Параметризованные запросы Хранимые процедуры Проверка и экскейпинг всех входных параметров Урезаем права, под которыми выполняются запросы

>74 DOS 74 DOS

>75 DOS DOS (от англ. Denial Of Service) – атака на отказ в обслуживании. 75 DOS DOS (от англ. Denial Of Service) – атака на отказ в обслуживании. DDOS (от англ. Distributed Denial Of Service) – распределённая атака на отказ в обслуживании. От первой можем защититься, от второй можем только отбить простейшие атаки. 100% защиты от DDOS в настоящий момент нет

>76 DOS Визуализация DDOS атаки, прикрывающей SQL Injection атаку 76 DOS Визуализация DDOS атаки, прикрывающей SQL Injection атаку

>77 DOS Атака на блокировку аккаунтов  Если у нас есть авторизация => можем 77 DOS Атака на блокировку аккаунтов Если у нас есть авторизация => можем подобрать пароль Защита: при нескольких неправильно введённых паролях – блокировать аккаунт. Оборачиваем защиту против защитников: подбираем список логинов постоянно лочим все аккаунты с данными логинами Итого: пользователь не может войти с правильным логином и паролем

>78 DOS Атака на сессию  Если у нас есть возможность хранить какую-либо информацию 78 DOS Атака на сессию Если у нас есть возможность хранить какую-либо информацию в сессии и есть возможность генерировать новые сессии, то мы можем исчерпать память или дисковое пространство генерируя большие объёмы сессий. Как тестировать: Убеждаемся, что указанные условия выполняются При помощи fuzzing атаки создаём как можно больше сессий Контролируем состояние системы (не уменьшается ли свободные ресурсы)

>79 DOS ZIP бомба  Ищем место на сайте в котором на сервер передаётся 79 DOS ZIP бомба Ищем место на сайте в котором на сервер передаётся архив, а далее уже на сервере этот архив распаковывается: хостинг файлов для экономии места антивирусы проверяющие файлы в архивах документы, которые затем будут передаваться адресату etc. Создаём очень большой файл (в несколько петабайт), который сохраняем в zip-архив. Отправляем получившийся файл на сервер и получаем переполнение памяти или отказ дисковой подсистемы.

>80 DOS ZIP бомба  Берём файл размером в 1 Гб, состоящий из одних 80 DOS ZIP бомба Берём файл размером в 1 Гб, состоящий из одних нулей. Пакуем его в zip-архив Создаём 10 копий полученного архива и пакуем их в новый архив Повторяем процесс 9 раз В итоге получаем архивный файл в сотню килобайт, который при итеративной распаковке становится размером примерно в 1 эксабайт. Для сравнения: в 2006 году на всём Земном шаре насчитывался приблизительно 161 эксабайт

>81 DOS Миллиард улыбок  Идея состоит в том, что бы атаковать xml-парсер, вынудив 81 DOS Миллиард улыбок Идея состоит в том, что бы атаковать xml-парсер, вынудив его создать из маленького файла большой. Эксплуатация: Так же как и при zip-бомбе составляем подставную xml Находим место на сайте, которое принимаем xml файлы, а далее их парсит Передаём xml-файл … Profit

" src="http://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 Миллиард улыбок ]> &lol9;

" src="http://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 Миллиард улыбок ]> &lol9;

" src="http://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 Миллиард улыбок ]> &lol9;

" src="http://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 Миллиард улыбок ]> &lol9;

>86 Социальная инженерия 86 Социальная инженерия

>87 Социальная инженерия Социальная инженерия — метод несанкционированного доступа к информационным ресурсам основанный на 87 Социальная инженерия Социальная инженерия — метод несанкционированного доступа к информационным ресурсам основанный на особенностях психологии человека. В отличии от других видов атак, в данной ситуации объектом является человек, пользователь системы. В отличии от технических видов атак, практически не претерпели изменений.

>88 Социальная инженерия Претекстинг – метод социальной инженерии, при котором мы вначале выстраиваем доверительные 88 Социальная инженерия Претекстинг – метод социальной инженерии, при котором мы вначале выстраиваем доверительные отношения с жертвой, а затем просим выполнить что-то потенциально вредное на атакуемой системе При это используется: Создание выдуманной личности Использование известной информации о жертве, коллегах, компании Постепенное увеличение серьёзности просьб

>89 Социальная инженерия Претекстинг – метод социальной инженерии, при котором мы вначале выстраиваем доверительные 89 Социальная инженерия Претекстинг – метод социальной инженерии, при котором мы вначале выстраиваем доверительные отношения с жертвой, а затем просим выполнить что-то потенциально вредное на атакуемой системе Как защититься: использование строгой политики безопасности в компании

>90 Социальная инженерия Фишинг – метод получения логина/пароля, при котором используется подставной сайт, который 90 Социальная инженерия Фишинг – метод получения логина/пароля, при котором используется подставной сайт, который выдаёт себя за другой. Методы защиты: атнифишинг-плагины для браузеров двухфакторная авторизация антиспамфильтры вывод персональной информации на страницах сайта

>91 Социальная инженерия Quid pro quo (от лат. Quid pro quo — «то за 91 Социальная инженерия Quid pro quo (от лат. Quid pro quo — «то за это») – услуга за услугу. Сценарий: Звоним жертве и представляемся специалистом технической поддержки Сообщаем о проблеме у пользователя и предлагаем помощь в решении В процессе «решения» проблемы вынуждаем жертву раскрыть приватную информацию

>92 Социальная инженерия Дорожное яблоко   Сценарий: В месте, где жертва часто бывает 92 Социальная инженерия Дорожное яблоко Сценарий: В месте, где жертва часто бывает оставляем флэшку с инфицированными файлами Используем любопытство (наклеиваем логотип компании и пишем «Информация о доходах») Жертва подбирает флэшку и открывает на корпоративном компьютере … Profit!

>93 Вопросы есть? 93 Вопросы есть?

>Спасибо за внимание! Разработка СБИС  Докучаев Сергей Валерьевич / sv.dokuchaev@tensor.ru (4852) 262-000 (доб. Спасибо за внимание! Разработка СБИС Докучаев Сергей Валерьевич / sv.dokuchaev@tensor.ru (4852) 262-000 (доб. 3435) sbis.ru