SlideShare une entreprise Scribd logo
1  sur  41
BlackBox-тестирование
Омар Ганиев
SpbCTF
Санкт-Петербург
Первый слайд
• Beched (@ahack_ru)
План
• Теория кратко
– Для чего нужен чёрный ящик
– Что нужно для чёрного ящика
• Детали и практика
– Быстрый поверхностный анализ сайта
– Фаззинг и фингерпринтинг интерфейсов
– Анализ логики и «угадывание» уявимостей
• Актуальные исследования
– Ограничения автоматических инструментов
– Возможные решения
1. Теория вкратце
• Зачем бизнесу такая услуга как
тестирование чёрным ящиком
• Зачем учиться ломать именно блекбоксом
• Какие особенные или нетривиальные
навыки для этого потребуются
Причины для чёрного ящика
• Недоверие, NDA или лицензионные
ограничения для выдачи исходных текстов
• Дороговизна анализа большого сложного
проекта в исходниках (автоматический
статанализ тоже неэффективен)
• Моделирование действий реальных
нарушителей (Red Team, BugBounty)
• Сканеры плохо справляются, поэтому
браться за дело приходится людям
С точки зрения пентестера
• У blackbox-тестирования ниже порог входа,
каждый может взять burp suite и начать
тыкать кавычки
• Но сложные вещи намного проще понять,
имея исходники, поэтому blackbox-
тестирование требует определённых
навыков, знаний, методик и инструментов
• Самое интересное – идеи и методики,
порой позволяющие реверсить
нестандартную логику
Навыки
• Хакерская догадка, угадайка, интуиция,
рандом и т.д. – умение строить
«неожиданные» правильные догадки о
server-side-логике приложения
• Умение пошагово анализировать
поведение приложения, выявляя
закономерности и алгоритм работы
Знания
• Языки программирования, их особенности
и специфичные уязвимости
• Архитектура и парадигмы
программирования веб-приложений
• Веб-серверы и их конфигурация, Linux
• Архитектура распределённых и
высоконагруженных систем
Методики
• Автоматическое сканирование различными
сканерами
• Фингерпринтинг используемого стека
технологий, сторонних фреймворков, CMS и
библиотек
• Ручной анализ логики работы и семантики
приложения
• Фаззинг точек входа для «реверс-
инжиниринга» приложения
Инструменты
• Большой пласт задач решается нативно или
через расширения в Burp Suite
• Сканеры: Acunetix WVS, w3af, Nessus, arachni,
AppScan, Netsparker, OWASP ZAP, Burp Suite, …
• Различные утилиты: subbrute, dirb,
расширения Burp Suite, libpywebhack
• Фингерпринтинг, скан конкретных CMS:
whatweb, wpscan, joomscan, droopescan
• GitHub, Python,
https://github.com/enaqx/awesome-pentest
2. Детали и практика
• Приблизительно разберём по шагам мыслительный
и практический процесс blackbox-тестирования
• Не теряя времени, сразу же проделаем некоторые
вещи на практике
• Адрес сервера: http://spbctf.ahack.ru/
(95.213.200.83)
• Софт: https://yadi.sk/d/qYTh6t_h33w3Zd
• На слайдах текстовые комментарии
• Автор таска phpsocute -- @d90andrew для phd
hackquest
Идентификация
• Для анализа веб-приложения нужно
определить scope или область
исследования
• Какие сетевые узлы и доменные имена
обслуживают сайт или связаны с ним
• Для каждого узла просканировать порты,
обнаружить имеющиеся веб-серверы
• Для каждого веб-сервера найти
виртуальные хосты, перебирать файловую
структуру
Hands-on
• Для разогрева решили простой таск двумя
способами: https://yadi.sk/d/QiN-q0_l33w4iH
• Умеем перебирать файловую структуру и
искать интересные файлы
• Умеем обелять чёрный ящик при ошибках
деплоя: скачивание git-репозитория, поиск
временных файлов nano, vim и т.д.
• Умеем перебирать входные HTTP-параметры
чёрного ящика и делать прочие мелкие
плюшки
Разведка
• Необходимо ответить на вопросы:
– Какой стек технологий (балансировщики,
application-серверы, фреймворки, CMS,
библиотеки, языки программирования)
использует сайт?
– Какие функции предоставляет этот сайт?
– Какие компоненты сайты являются
самописными, а какие сторонними
Hands-on
• По PTR-записи обнаружили скрытый виртхост с
таском, определили веб-сервер, язык
программирования, CMS
• Сигнатуры CMS оказались фейковые
• Сайт самописный, обнаружен только скрипт с
phpinfo
• Для всех .html-файлов ответ 500, кроме
index.html, причем он тоже обрабатывается
PHP
• Как это работает?
Осмысление
• Далее задаём следующие вопросы:
– Как именно разработчик мог реализовать ту
или иную функцию сайта?
– Какие ошибки в коде и в каких случаях он мог
допустить?
– Какие могли быть ошибки в окружении при
деплое и конфигурации?
Hands-on
• Давайте осмыслять. При ошибке 500 страница
не дорисована, значит, возникла fatal error
• Значит, текущий REQUEST_URI каким-то
образом обрабатывается php-скриптом, если
заканчивается на .html
• При этом обнаружено только одно валидное
имя – index
• Понятно, что сделано это при помощи
mod_rewrite с правилом вида ^(.+).html$
handler.php?file=$1
Анализ
• В итоге получаем дерево возможных
вариантов реализации каждой
интересующей нас функции
• Путём фаззинга проверяем каждый
вариант, проверяя какой из них рабочий
• Для каждой верной цепочки догадок
проверяем наличие уязвимости
Hands-on
• Может, есть белый список имён страниц (“index”) и
содержимое для каждой
• Может, идёт обращение к СУБД, где прописаны роуты.
Тогда возможна инъекция. Но кавычкопихательство
ничего не даёт
• А что если скрипт просто читает страницу из файла, имя
которого берёт из параметра?
• Тогда мы контролируем это имя файла, не зная ни имя
скрипта, ни имя параметра
• Для того, чтобы сделать обход директории в
REQUEST_URI, нужен двойной url-encode: %252f..%252f
• /..%252f..%252f..%252f..%252f..%252fetc%252fpasswd.html
Hands-on
• Ну ни хрена ж себе, это действительно
работает!
• Это угадайка? Нет, мы поняли по выхлопу
dirb архитектуру сайта и перебрали
возможные реализации кода и
соответствующие ошибки
Hands-on
• Альтернативный путь – давайте тыкать. У нас
есть phpinfo.
• Apache по умолчанию вызывает php-скрипт,
даже если при обращении продолжить путь
script.php/asdqwe…/test.html
• То, что курсивом – это PATH_INFO. А есть ещё
PATH_TRANSLATED – серверный путь к
текущему файлу
• Phpinfo отображает суперглобальные массивы,
так что попробуем сделать хрень:
/pi.php/test.html
Hands-on
• Видим: PATH_TRANSLATED redirect:/t3mp473l04d3r.php
• Мы правы, и .html-файлы обрабатываются
php-скриптом t3mp473l04d3r.php
• Перебираем параметры, чтобы дальше
фаззить их без ограничений RFC на
REQUEST_URI
• Поскольку вся эта логика может быть
связана с ФС, попробуем пейлоады
/../../../etc/passwd и /etc/passwd
Hands-on
• Мой кривой скрипт не справляется с
пейлоадом с “/../” из-за зависания сервера
• Но по “/etc/passwd” сразу обнаруживаются
2 параметра: template и dir
• Действительно:
/t3mp473l04d3r.php?dir=/etc/passwd
Анализ
• Цепочка догадок – это гипотезы о работе
интерфейса на разных уровнях, т.е. какой
путь проделывает пользовательский запрос
(веб-сервер, приложение, СУБД, ФС и т.д.)
• Одного интерфейса может быть
недостаточно для понимания структуры
приложения и обнаружения уязвимости
• Пересечение догадок и debug-информация
дают более точную картину
Hands-on
• Мы прочитали passwd, это «читалка»? Или
PHP-LFI?
• Вспоминаем, что у нас есть phpinfo, а через
него можно узнать имя временного файла
для проведения LFI
• Пробуем стандартным скриптом –
плейнтекст подключается, но PHP-код
падает с 500
Hands-on
• Очевидно, это не include и не readfile, но
это динамическое исполнение кода
• Какой ещё код может исполняться в PHP, но
отличаться по синтаксису?
• Шаблоны! Например, Smarty
• Пробуем выполнить PHP-через smarty-
выражения и получаем RCE
Вывод
• Как видно из решённой задачи, нам
понадобились и инструменты, и методики,
и навыки и знания:
https://yadi.sk/d/BHn852Zs33w4kB
• Часто, чтоб найти ошибку, нужно мыслить
как программист, который её совершает
• А для этого нужно знать технологии
разработки и языки программирования
Пример
• Простой и рутинный пример из практики,
очень похожий на CTF-таск Бума с того же
phd hackquest
• Есть форма ввода строки (имени), сервер
выдаёт в ответ адрес картинки, на которой
это строка написана
• Как действовать?
Пример
В параметре На картинке
asdqwe'" asdqwe'"
asdnqwe asd
qwe
asd!@#$%^&*()_+-=./,| asd!@#$&*()_+-=./,|
%% %
%x 72 Undefined
%d ./assets
%r DirectClass sRGB Matte
%[version] ImageMagick 6.7.7-10 2014-03-06 Q16
Пример
• В таблице показан последовательный
перебор значений для выявления
управляющих символов и определения
синтаксиса
• По поведению % стало ясно, что это
форматная строка
• По 2-3 значениям удалось определить, что
это формат imagemagick (что можно было
угадать и так)
Бонус
• Мы разбирали CTF-таски, но речь шла о
реальных приложениях и подходах в пентесте
• В соревнованиях есть свои особенности
• В CTF приложения обычно маленькие, и почти
всё сделано не зря, а для решения задачи
• Заведомо зная, что в сервис заложена
уязвимость, можно по имеющимся
интерфейсам понять, какая она, и как надо
решать
• В CTF не часто бывают побочные уязвимости,
которые не дают решения
Бонус
• В уже разобранной задаче увидели phpinfo –
значит, будет LFI
• Видим отправку личных сообщений
«администратору» – будет XSS c ботом
• Есть админка – надо в неё попасть
• Есть недоступный флаг (например, как товар в
магазине) – надо поднять привилегии или
применить логический баг
• Есть загрузка файлов – надо её использовать
• Флаг предположительно в ФС – нужна читалка
или RCE
Бонус
• Также полезно узнавать автора таска и
смотреть его ресерчи и релизы, недавно
обнаруженные им или популярные баги и
т.д.
• В A&D-цтфах белый ящик, но особенность в
том, что надо как можно раньше начать
собирать флаги, часто чёрным ящиком
нужный баг можно отыскать быстрее, чем
если читать исходники
Бонус
• BugBounty – тоже соревнование, но в нём
очень большой скоуп, нет заложенных багов, и
баг можно сдать только один раз
• Есть множество презентаций на тему
методологии в BB: lmgtfy
• Вкратце: нужно максимально
автоматизировать все проверки и постоянно
повторять стандартные сканеры, покрывая
новые хосты и скрипты
• Также нужно находить нестандартные
уязвимости, под которые тоже можно писать
чекеры и гонять их автоматом
3. Актуальные исследования
• Принципиально методология blackbox-
тестирования давно описана, например, в
OWASP
• Наиболее сложная и интересная тема –
эффективный автоматический blackbox-скан
• Фактически его полноценное создание требует
создания искусственного интеллекта
• На текущий момент на рынке нет state-of-art-
сканера, лидеры рынка существенно не
дотягивают до человека-пентестера
Ссылки
• Про «теорию»:
– http://blog.portswigger.net/2016/11/backslash-
powered-scanning-hunting.html
– http://artsploit.com/AdvancedWebAppFuzzing.pptx
– http://www.slideshare.net/beched/find-maximum-
bugs-in-limited-time
– http://www.slideshare.net/beched/data-mining-for-
nmap-acceleration
– http://2015.zeronights.org/assets/files/04-Novikov.pdf
Ссылки
• Про «практику»:
– http://www.slideshare.net/bugcrowd/bug-bounty-
hunter-methodology-nullcon-2016
– https://www.owasp.org/index.php/Appendix_A:_Testin
g_Tools
– https://www.owasp.org/index.php/OWASP_Testing_Gui
de_v4_Table_of_Contents
– https://habrahabr.ru/company/mailru/blog/202554/
– http://www.slideshare.net/beched/slides-33757106
Задачи для сканера
• Определять семантику приложения, смысл
интерфейсов
• Тестировать не только инъекции кода, но и
логические ошибки
• Отсеивать повторные проверки, эффективно
делать гипотезы и проводить фаззинг в
соответствии с ними
• Уметь вычленять элементы страницы,
отличать артефакты уязвимостей от иного
динамического содержимого
Задачи для сканера
• Одним словом, сканер должен адаптивно
эмулировать сознательные действия
человека, а не перебирать сигнатуры
• Для этого его в идеале нужно научить
естественному языку, программированию,
сетевым технологиям и т.д.
Что можно сделать
• Для решения недостатков сканеров можно
сделать разные шаги:
– Провести исследование и получить методику,
делающую сканирование эффективнее
– На основе этой методики создать свой кривой
сканер для себя, который стыдно показывать
(мой путь)
– Писать плагины под существующие популярные
инструменты: Burp Suite, w3af, …
Спасибо за внимание!
admin@ahack.ru
beched@incsecurity.ru

Contenu connexe

Tendances

Хорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеNikolay Sivko
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и DjangoTaras Lyapun
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДDatabase First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДNikolay Samokhvalov
 
Flask как хорошее решение для веб проекта
Flask как хорошее решение для веб проектаFlask как хорошее решение для веб проекта
Flask как хорошее решение для веб проектаPython Meetup
 
Собеседование на позицию Java Developer
Собеседование на позицию Java DeveloperСобеседование на позицию Java Developer
Собеседование на позицию Java DeveloperOlexandra Dmytrenko
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программированиеPython Meetup
 
C++ Core Guidelines
C++ Core Guidelines C++ Core Guidelines
C++ Core Guidelines Sergey Zubkov
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Fwdays
 
Демонизированный PHP - before it was cool
Демонизированный PHP - before it was coolДемонизированный PHP - before it was cool
Демонизированный PHP - before it was coolAndrey Tokarchuk
 
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)Ontico
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Yandex
 
Perl Debugger и mod_perl
Perl Debugger и mod_perlPerl Debugger и mod_perl
Perl Debugger и mod_perlИван mrRico
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Fwdays
 
#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентовNikolay Samokhvalov
 
Scala performance под капотом
Scala performance под капотомScala performance под капотом
Scala performance под капотомRoman Grebennikov
 
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?HappyDev-lite
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?Vasil Remeniuk
 
Akka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный кодAkka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный кодRoman Grebennikov
 
My talk on PgDay Russia 2014
My talk on PgDay Russia 2014My talk on PgDay Russia 2014
My talk on PgDay Russia 2014Alex Chistyakov
 

Tendances (20)

Хорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложение
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и Django
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДDatabase First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБД
 
Flask как хорошее решение для веб проекта
Flask как хорошее решение для веб проектаFlask как хорошее решение для веб проекта
Flask как хорошее решение для веб проекта
 
Собеседование на позицию Java Developer
Собеседование на позицию Java DeveloperСобеседование на позицию Java Developer
Собеседование на позицию Java Developer
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программирование
 
C++ Core Guidelines
C++ Core Guidelines C++ Core Guidelines
C++ Core Guidelines
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"
 
Демонизированный PHP - before it was cool
Демонизированный PHP - before it was coolДемонизированный PHP - before it was cool
Демонизированный PHP - before it was cool
 
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
 
Perl Debugger и mod_perl
Perl Debugger и mod_perlPerl Debugger и mod_perl
Perl Debugger и mod_perl
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"
 
#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов
 
Scala performance под капотом
Scala performance под капотомScala performance под капотом
Scala performance под капотом
 
Ryazan
RyazanRyazan
Ryazan
 
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?
 
Akka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный кодAkka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный код
 
My talk on PgDay Russia 2014
My talk on PgDay Russia 2014My talk on PgDay Russia 2014
My talk on PgDay Russia 2014
 

Similaire à BlackBox testing

Aspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHPAspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHPAlexander Lisachenko
 
2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...
2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...
2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...Омские ИТ-субботники
 
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultКак перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultOleg Mykolaichenko
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Fwdays
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Ontico
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyAlex Chistyakov
 
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustMichael Pankov
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструментыRoman Dvornov
 
Пост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновениеПост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновениеbeched
 
Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программистаSlach
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...it-people
 
Информационная безопасность в веб - основы
Информационная безопасность в веб - основыИнформационная безопасность в веб - основы
Информационная безопасность в веб - основыAlex Chistyakov
 
Caché Native Access. InterSystems Meetup 2014
Caché Native Access. InterSystems  Meetup 2014Caché Native Access. InterSystems  Meetup 2014
Caché Native Access. InterSystems Meetup 2014InterSystems
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)Sergey Skvortsov
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ontico
 
Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...Ontico
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014Alex Chistyakov
 
Как расширять Robot Framework под свои нужны с помощью Python?
Как расширять Robot Framework под свои нужны с помощью Python? Как расширять Robot Framework под свои нужны с помощью Python?
Как расширять Robot Framework под свои нужны с помощью Python? Mykhailo Poliarush
 

Similaire à BlackBox testing (20)

Sivko
SivkoSivko
Sivko
 
Aspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHPAspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHP
 
2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...
2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...
2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...
 
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultКак перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на Rust
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
Пост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновениеПост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновение
 
Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программиста
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
 
Информационная безопасность в веб - основы
Информационная безопасность в веб - основыИнформационная безопасность в веб - основы
Информационная безопасность в веб - основы
 
Caché Native Access. InterSystems Meetup 2014
Caché Native Access. InterSystems  Meetup 2014Caché Native Access. InterSystems  Meetup 2014
Caché Native Access. InterSystems Meetup 2014
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
 
Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014
 
Как расширять Robot Framework под свои нужны с помощью Python?
Как расширять Robot Framework под свои нужны с помощью Python? Как расширять Robot Framework под свои нужны с помощью Python?
Как расширять Robot Framework под свои нужны с помощью Python?
 

Plus de beched

Attacks against machine learning algorithms
Attacks against machine learning algorithmsAttacks against machine learning algorithms
Attacks against machine learning algorithmsbeched
 
Hacking as eSports
Hacking as eSportsHacking as eSports
Hacking as eSportsbeched
 
[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivation[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivationbeched
 
Find maximum bugs in limited time
Find maximum bugs in limited timeFind maximum bugs in limited time
Find maximum bugs in limited timebeched
 
Owasp web application security trends
Owasp web application security trendsOwasp web application security trends
Owasp web application security trendsbeched
 
Воркшоп по анализ защищённости веб-приложений
Воркшоп по анализ защищённости веб-приложенийВоркшоп по анализ защищённости веб-приложений
Воркшоп по анализ защищённости веб-приложенийbeched
 
Vulnerabilities in data processing levels
Vulnerabilities in data processing levelsVulnerabilities in data processing levels
Vulnerabilities in data processing levelsbeched
 
Что общего у CTF и тестов на проникновение?
Что общего у CTF и тестов на проникновение?Что общего у CTF и тестов на проникновение?
Что общего у CTF и тестов на проникновение?beched
 
Алгоритмы пентестов. BaltCTF 2012
Алгоритмы пентестов. BaltCTF 2012Алгоритмы пентестов. BaltCTF 2012
Алгоритмы пентестов. BaltCTF 2012beched
 

Plus de beched (9)

Attacks against machine learning algorithms
Attacks against machine learning algorithmsAttacks against machine learning algorithms
Attacks against machine learning algorithms
 
Hacking as eSports
Hacking as eSportsHacking as eSports
Hacking as eSports
 
[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivation[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivation
 
Find maximum bugs in limited time
Find maximum bugs in limited timeFind maximum bugs in limited time
Find maximum bugs in limited time
 
Owasp web application security trends
Owasp web application security trendsOwasp web application security trends
Owasp web application security trends
 
Воркшоп по анализ защищённости веб-приложений
Воркшоп по анализ защищённости веб-приложенийВоркшоп по анализ защищённости веб-приложений
Воркшоп по анализ защищённости веб-приложений
 
Vulnerabilities in data processing levels
Vulnerabilities in data processing levelsVulnerabilities in data processing levels
Vulnerabilities in data processing levels
 
Что общего у CTF и тестов на проникновение?
Что общего у CTF и тестов на проникновение?Что общего у CTF и тестов на проникновение?
Что общего у CTF и тестов на проникновение?
 
Алгоритмы пентестов. BaltCTF 2012
Алгоритмы пентестов. BaltCTF 2012Алгоритмы пентестов. BaltCTF 2012
Алгоритмы пентестов. BaltCTF 2012
 

BlackBox testing

  • 3. План • Теория кратко – Для чего нужен чёрный ящик – Что нужно для чёрного ящика • Детали и практика – Быстрый поверхностный анализ сайта – Фаззинг и фингерпринтинг интерфейсов – Анализ логики и «угадывание» уявимостей • Актуальные исследования – Ограничения автоматических инструментов – Возможные решения
  • 4. 1. Теория вкратце • Зачем бизнесу такая услуга как тестирование чёрным ящиком • Зачем учиться ломать именно блекбоксом • Какие особенные или нетривиальные навыки для этого потребуются
  • 5. Причины для чёрного ящика • Недоверие, NDA или лицензионные ограничения для выдачи исходных текстов • Дороговизна анализа большого сложного проекта в исходниках (автоматический статанализ тоже неэффективен) • Моделирование действий реальных нарушителей (Red Team, BugBounty) • Сканеры плохо справляются, поэтому браться за дело приходится людям
  • 6. С точки зрения пентестера • У blackbox-тестирования ниже порог входа, каждый может взять burp suite и начать тыкать кавычки • Но сложные вещи намного проще понять, имея исходники, поэтому blackbox- тестирование требует определённых навыков, знаний, методик и инструментов • Самое интересное – идеи и методики, порой позволяющие реверсить нестандартную логику
  • 7. Навыки • Хакерская догадка, угадайка, интуиция, рандом и т.д. – умение строить «неожиданные» правильные догадки о server-side-логике приложения • Умение пошагово анализировать поведение приложения, выявляя закономерности и алгоритм работы
  • 8. Знания • Языки программирования, их особенности и специфичные уязвимости • Архитектура и парадигмы программирования веб-приложений • Веб-серверы и их конфигурация, Linux • Архитектура распределённых и высоконагруженных систем
  • 9. Методики • Автоматическое сканирование различными сканерами • Фингерпринтинг используемого стека технологий, сторонних фреймворков, CMS и библиотек • Ручной анализ логики работы и семантики приложения • Фаззинг точек входа для «реверс- инжиниринга» приложения
  • 10. Инструменты • Большой пласт задач решается нативно или через расширения в Burp Suite • Сканеры: Acunetix WVS, w3af, Nessus, arachni, AppScan, Netsparker, OWASP ZAP, Burp Suite, … • Различные утилиты: subbrute, dirb, расширения Burp Suite, libpywebhack • Фингерпринтинг, скан конкретных CMS: whatweb, wpscan, joomscan, droopescan • GitHub, Python, https://github.com/enaqx/awesome-pentest
  • 11. 2. Детали и практика • Приблизительно разберём по шагам мыслительный и практический процесс blackbox-тестирования • Не теряя времени, сразу же проделаем некоторые вещи на практике • Адрес сервера: http://spbctf.ahack.ru/ (95.213.200.83) • Софт: https://yadi.sk/d/qYTh6t_h33w3Zd • На слайдах текстовые комментарии • Автор таска phpsocute -- @d90andrew для phd hackquest
  • 12. Идентификация • Для анализа веб-приложения нужно определить scope или область исследования • Какие сетевые узлы и доменные имена обслуживают сайт или связаны с ним • Для каждого узла просканировать порты, обнаружить имеющиеся веб-серверы • Для каждого веб-сервера найти виртуальные хосты, перебирать файловую структуру
  • 13. Hands-on • Для разогрева решили простой таск двумя способами: https://yadi.sk/d/QiN-q0_l33w4iH • Умеем перебирать файловую структуру и искать интересные файлы • Умеем обелять чёрный ящик при ошибках деплоя: скачивание git-репозитория, поиск временных файлов nano, vim и т.д. • Умеем перебирать входные HTTP-параметры чёрного ящика и делать прочие мелкие плюшки
  • 14. Разведка • Необходимо ответить на вопросы: – Какой стек технологий (балансировщики, application-серверы, фреймворки, CMS, библиотеки, языки программирования) использует сайт? – Какие функции предоставляет этот сайт? – Какие компоненты сайты являются самописными, а какие сторонними
  • 15. Hands-on • По PTR-записи обнаружили скрытый виртхост с таском, определили веб-сервер, язык программирования, CMS • Сигнатуры CMS оказались фейковые • Сайт самописный, обнаружен только скрипт с phpinfo • Для всех .html-файлов ответ 500, кроме index.html, причем он тоже обрабатывается PHP • Как это работает?
  • 16. Осмысление • Далее задаём следующие вопросы: – Как именно разработчик мог реализовать ту или иную функцию сайта? – Какие ошибки в коде и в каких случаях он мог допустить? – Какие могли быть ошибки в окружении при деплое и конфигурации?
  • 17. Hands-on • Давайте осмыслять. При ошибке 500 страница не дорисована, значит, возникла fatal error • Значит, текущий REQUEST_URI каким-то образом обрабатывается php-скриптом, если заканчивается на .html • При этом обнаружено только одно валидное имя – index • Понятно, что сделано это при помощи mod_rewrite с правилом вида ^(.+).html$ handler.php?file=$1
  • 18. Анализ • В итоге получаем дерево возможных вариантов реализации каждой интересующей нас функции • Путём фаззинга проверяем каждый вариант, проверяя какой из них рабочий • Для каждой верной цепочки догадок проверяем наличие уязвимости
  • 19. Hands-on • Может, есть белый список имён страниц (“index”) и содержимое для каждой • Может, идёт обращение к СУБД, где прописаны роуты. Тогда возможна инъекция. Но кавычкопихательство ничего не даёт • А что если скрипт просто читает страницу из файла, имя которого берёт из параметра? • Тогда мы контролируем это имя файла, не зная ни имя скрипта, ни имя параметра • Для того, чтобы сделать обход директории в REQUEST_URI, нужен двойной url-encode: %252f..%252f • /..%252f..%252f..%252f..%252f..%252fetc%252fpasswd.html
  • 20. Hands-on • Ну ни хрена ж себе, это действительно работает! • Это угадайка? Нет, мы поняли по выхлопу dirb архитектуру сайта и перебрали возможные реализации кода и соответствующие ошибки
  • 21. Hands-on • Альтернативный путь – давайте тыкать. У нас есть phpinfo. • Apache по умолчанию вызывает php-скрипт, даже если при обращении продолжить путь script.php/asdqwe…/test.html • То, что курсивом – это PATH_INFO. А есть ещё PATH_TRANSLATED – серверный путь к текущему файлу • Phpinfo отображает суперглобальные массивы, так что попробуем сделать хрень: /pi.php/test.html
  • 22. Hands-on • Видим: PATH_TRANSLATED redirect:/t3mp473l04d3r.php • Мы правы, и .html-файлы обрабатываются php-скриптом t3mp473l04d3r.php • Перебираем параметры, чтобы дальше фаззить их без ограничений RFC на REQUEST_URI • Поскольку вся эта логика может быть связана с ФС, попробуем пейлоады /../../../etc/passwd и /etc/passwd
  • 23. Hands-on • Мой кривой скрипт не справляется с пейлоадом с “/../” из-за зависания сервера • Но по “/etc/passwd” сразу обнаруживаются 2 параметра: template и dir • Действительно: /t3mp473l04d3r.php?dir=/etc/passwd
  • 24. Анализ • Цепочка догадок – это гипотезы о работе интерфейса на разных уровнях, т.е. какой путь проделывает пользовательский запрос (веб-сервер, приложение, СУБД, ФС и т.д.) • Одного интерфейса может быть недостаточно для понимания структуры приложения и обнаружения уязвимости • Пересечение догадок и debug-информация дают более точную картину
  • 25. Hands-on • Мы прочитали passwd, это «читалка»? Или PHP-LFI? • Вспоминаем, что у нас есть phpinfo, а через него можно узнать имя временного файла для проведения LFI • Пробуем стандартным скриптом – плейнтекст подключается, но PHP-код падает с 500
  • 26. Hands-on • Очевидно, это не include и не readfile, но это динамическое исполнение кода • Какой ещё код может исполняться в PHP, но отличаться по синтаксису? • Шаблоны! Например, Smarty • Пробуем выполнить PHP-через smarty- выражения и получаем RCE
  • 27. Вывод • Как видно из решённой задачи, нам понадобились и инструменты, и методики, и навыки и знания: https://yadi.sk/d/BHn852Zs33w4kB • Часто, чтоб найти ошибку, нужно мыслить как программист, который её совершает • А для этого нужно знать технологии разработки и языки программирования
  • 28. Пример • Простой и рутинный пример из практики, очень похожий на CTF-таск Бума с того же phd hackquest • Есть форма ввода строки (имени), сервер выдаёт в ответ адрес картинки, на которой это строка написана • Как действовать?
  • 29. Пример В параметре На картинке asdqwe'" asdqwe'" asdnqwe asd qwe asd!@#$%^&*()_+-=./,| asd!@#$&*()_+-=./,| %% % %x 72 Undefined %d ./assets %r DirectClass sRGB Matte %[version] ImageMagick 6.7.7-10 2014-03-06 Q16
  • 30. Пример • В таблице показан последовательный перебор значений для выявления управляющих символов и определения синтаксиса • По поведению % стало ясно, что это форматная строка • По 2-3 значениям удалось определить, что это формат imagemagick (что можно было угадать и так)
  • 31. Бонус • Мы разбирали CTF-таски, но речь шла о реальных приложениях и подходах в пентесте • В соревнованиях есть свои особенности • В CTF приложения обычно маленькие, и почти всё сделано не зря, а для решения задачи • Заведомо зная, что в сервис заложена уязвимость, можно по имеющимся интерфейсам понять, какая она, и как надо решать • В CTF не часто бывают побочные уязвимости, которые не дают решения
  • 32. Бонус • В уже разобранной задаче увидели phpinfo – значит, будет LFI • Видим отправку личных сообщений «администратору» – будет XSS c ботом • Есть админка – надо в неё попасть • Есть недоступный флаг (например, как товар в магазине) – надо поднять привилегии или применить логический баг • Есть загрузка файлов – надо её использовать • Флаг предположительно в ФС – нужна читалка или RCE
  • 33. Бонус • Также полезно узнавать автора таска и смотреть его ресерчи и релизы, недавно обнаруженные им или популярные баги и т.д. • В A&D-цтфах белый ящик, но особенность в том, что надо как можно раньше начать собирать флаги, часто чёрным ящиком нужный баг можно отыскать быстрее, чем если читать исходники
  • 34. Бонус • BugBounty – тоже соревнование, но в нём очень большой скоуп, нет заложенных багов, и баг можно сдать только один раз • Есть множество презентаций на тему методологии в BB: lmgtfy • Вкратце: нужно максимально автоматизировать все проверки и постоянно повторять стандартные сканеры, покрывая новые хосты и скрипты • Также нужно находить нестандартные уязвимости, под которые тоже можно писать чекеры и гонять их автоматом
  • 35. 3. Актуальные исследования • Принципиально методология blackbox- тестирования давно описана, например, в OWASP • Наиболее сложная и интересная тема – эффективный автоматический blackbox-скан • Фактически его полноценное создание требует создания искусственного интеллекта • На текущий момент на рынке нет state-of-art- сканера, лидеры рынка существенно не дотягивают до человека-пентестера
  • 36. Ссылки • Про «теорию»: – http://blog.portswigger.net/2016/11/backslash- powered-scanning-hunting.html – http://artsploit.com/AdvancedWebAppFuzzing.pptx – http://www.slideshare.net/beched/find-maximum- bugs-in-limited-time – http://www.slideshare.net/beched/data-mining-for- nmap-acceleration – http://2015.zeronights.org/assets/files/04-Novikov.pdf
  • 37. Ссылки • Про «практику»: – http://www.slideshare.net/bugcrowd/bug-bounty- hunter-methodology-nullcon-2016 – https://www.owasp.org/index.php/Appendix_A:_Testin g_Tools – https://www.owasp.org/index.php/OWASP_Testing_Gui de_v4_Table_of_Contents – https://habrahabr.ru/company/mailru/blog/202554/ – http://www.slideshare.net/beched/slides-33757106
  • 38. Задачи для сканера • Определять семантику приложения, смысл интерфейсов • Тестировать не только инъекции кода, но и логические ошибки • Отсеивать повторные проверки, эффективно делать гипотезы и проводить фаззинг в соответствии с ними • Уметь вычленять элементы страницы, отличать артефакты уязвимостей от иного динамического содержимого
  • 39. Задачи для сканера • Одним словом, сканер должен адаптивно эмулировать сознательные действия человека, а не перебирать сигнатуры • Для этого его в идеале нужно научить естественному языку, программированию, сетевым технологиям и т.д.
  • 40. Что можно сделать • Для решения недостатков сканеров можно сделать разные шаги: – Провести исследование и получить методику, делающую сканирование эффективнее – На основе этой методики создать свой кривой сканер для себя, который стыдно показывать (мой путь) – Писать плагины под существующие популярные инструменты: Burp Suite, w3af, …