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