Слайды вебинара http://www.ptsecurity.ru/lab/webinars/#42235 :
"Каковы формальные признаки уязвимого и защищенного кода? Что такое уязвимость? Как разглядеть в коде уязвимость для атак, принадлежащих неизвестному классу? Чем уязвимости бизнес-логики отличаются от «традиционных» уязвимостей? Мы ответим на эти вопросы на вебинаре, посвященном теоретическому минимуму предметной области Application Security и практическому применению этих знаний в задачах анализа защищенности и при разработке защищенного кода"
Слайды доклада на конференции C++ Corehard Winter 2017 (г.Минск).
Автор доклада давно и успешно использует Модель Акторов при разработке приложений на C++. В основном это был положительный опыт. Но есть некоторые неочевидные моменты, про которые было бы хорошо узнать заранее. О том, где использование Модели Акторов уместно, а где нет, на какие грабли довелось наступить, какие шишки были набиты, как можно упростить себе жизнь и пойдет речь в докладе.
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by
Статический анализ появился почти 40 лет назад. В своём докладе мы хотим показать, чему за это время научились статические анализаторы. Мы рассмотрим различные методики анализа, как они появлялись и какие ошибки можно найти с помощью них. Посмотрим на примеры ошибок, найденных PVS-Studio в Open Source проектах. Поговорим о том, чем статический анализатор отличается от "линтеров" и некоторых других инструментов, а также какие проблемы решает современный статический анализатор C++ кода, помимо собственно анализа кода.
Павел Беликов
@PVS-Studio, Тула, Россия
Поговорим о рефлексии в C++, о том, что это такое, для чего нужно и почему это вообще важно. На практическом примере с котами рассмотрим эволюцию подходов к рефлексии в рамках разных версий языка: C++03, C++11/14, C++17. Посмотрим на то, что для нас готовят разработчики нового стандарта, узнаем где и как можно "пощупать" эти новые возможности. Поделимся полезными утилитами и подходами, которые облегчат жизнь пока эти новые возможности не придут к вам на проект.
Очередной скучный доклад про логгированиеPython Meetup
Стас Рудаков, компания СООО "Гейм Стрим"/Wargaming.net
Значение логов очень часто недооценивается, а зря. Доклад с оживленным диспутом со всеми участниками митапа, чтобы разобраться: как, куда и зачем писать логи. Помимо этого затронут вопрос, как из логов выжать больше информации.
200 open source проектов спустя: опыт статического анализа исходного кодаAndrey Karpov
Одна из особенностей работы нашей команды — анализ большого количества различных программных проектов. Рассказывать о закрытых коммерческих проектах часто запрещает NDA, а вот об open source можно и нужно говорить. Какие ошибки допускают в open-source-проектах? Какой код более качественный — закрытый или открытый? Нужно ли придерживаться стандартов кодирования, или они давно устарели? Какие ошибки сложнее найти и исправить — сложные архитектурные или простые опечатки? Проанализировав за несколько лет сотни программных проектов от zlib до Chromium, мы готовы поделиться своим опытом и ответить на эти вопросы.
Реактивный двигатель вашего Android приложенияMatvey Malkov
Презентация, объясняющая концепцию реактивных потоков с использованием Android SDK и RxJavа. Рассчитано на программистов с любым стажем, которые жеалют начать использовать эту концепцию в своих программах.
Реактивные потоки -- это круто.
Выступление Валерия Боронина, посвященное внедрению безопасной разработки с точки зрения руководителя, на встрече PDUG Meetup: SSDL for Management 25 ноября 2016 года.
Слайды доклада на конференции C++ Corehard Winter 2017 (г.Минск).
Автор доклада давно и успешно использует Модель Акторов при разработке приложений на C++. В основном это был положительный опыт. Но есть некоторые неочевидные моменты, про которые было бы хорошо узнать заранее. О том, где использование Модели Акторов уместно, а где нет, на какие грабли довелось наступить, какие шишки были набиты, как можно упростить себе жизнь и пойдет речь в докладе.
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by
Статический анализ появился почти 40 лет назад. В своём докладе мы хотим показать, чему за это время научились статические анализаторы. Мы рассмотрим различные методики анализа, как они появлялись и какие ошибки можно найти с помощью них. Посмотрим на примеры ошибок, найденных PVS-Studio в Open Source проектах. Поговорим о том, чем статический анализатор отличается от "линтеров" и некоторых других инструментов, а также какие проблемы решает современный статический анализатор C++ кода, помимо собственно анализа кода.
Павел Беликов
@PVS-Studio, Тула, Россия
Поговорим о рефлексии в C++, о том, что это такое, для чего нужно и почему это вообще важно. На практическом примере с котами рассмотрим эволюцию подходов к рефлексии в рамках разных версий языка: C++03, C++11/14, C++17. Посмотрим на то, что для нас готовят разработчики нового стандарта, узнаем где и как можно "пощупать" эти новые возможности. Поделимся полезными утилитами и подходами, которые облегчат жизнь пока эти новые возможности не придут к вам на проект.
Очередной скучный доклад про логгированиеPython Meetup
Стас Рудаков, компания СООО "Гейм Стрим"/Wargaming.net
Значение логов очень часто недооценивается, а зря. Доклад с оживленным диспутом со всеми участниками митапа, чтобы разобраться: как, куда и зачем писать логи. Помимо этого затронут вопрос, как из логов выжать больше информации.
200 open source проектов спустя: опыт статического анализа исходного кодаAndrey Karpov
Одна из особенностей работы нашей команды — анализ большого количества различных программных проектов. Рассказывать о закрытых коммерческих проектах часто запрещает NDA, а вот об open source можно и нужно говорить. Какие ошибки допускают в open-source-проектах? Какой код более качественный — закрытый или открытый? Нужно ли придерживаться стандартов кодирования, или они давно устарели? Какие ошибки сложнее найти и исправить — сложные архитектурные или простые опечатки? Проанализировав за несколько лет сотни программных проектов от zlib до Chromium, мы готовы поделиться своим опытом и ответить на эти вопросы.
Реактивный двигатель вашего Android приложенияMatvey Malkov
Презентация, объясняющая концепцию реактивных потоков с использованием Android SDK и RxJavа. Рассчитано на программистов с любым стажем, которые жеалют начать использовать эту концепцию в своих программах.
Реактивные потоки -- это круто.
Выступление Валерия Боронина, посвященное внедрению безопасной разработки с точки зрения руководителя, на встрече PDUG Meetup: SSDL for Management 25 ноября 2016 года.
Waf.js: How to Protect Web Applications using JavaScriptDenis Kolegov
The document discusses techniques for protecting web applications from client-side attacks using JavaScript (Waf.js). It covers the following key points in 3 sentences:
Waf.js provides defenses like CSRF prevention, DOM-based XSS prevention, and detection of unwanted applications. It utilizes parsers like Acorn and DOMPurify to parse and sanitize inputs to prevent injections. The document outlines approaches used by Waf.js to build the AST of an input and search for dangerous code like function calls to prevent attacks while minimizing false positives.
The document discusses security as an important metric for businesses, products, and development lifecycles. It summarizes an upcoming security meetup in Lviv, Ukraine on November 14, 2015 focused on topics like securing web and mobile applications, hacking REST and JavaScript apps, investigations, reverse engineering, social engineering, and physical hacking. The meetup will include hands-on labs, collaboration, competitions, and talks from elite hackers and industry experts.
Классификация экономико-технических атак. Спикер: Григорий ВасильковCyber Fund
О безопасности в сети Блокчейн в целом, а также о классификации экономико-технических атак узнаете вы от соучредителя BSU Blockchain and Smart Contracts Lab Григория Василькова.
Данная презентация была представлена на одном из еженедельных образовательных митапов от компании cyber•Fund.
Посмотреть полное видео с митапа можно здесь:
https://www.youtube.com/watch?v=sn-g2xZ7WOs
Прочитать текстовую версию выступления:
https://golos.io/ru--blokcheijn/@cyberevents/klassifikaciya-ekonomiko-tekhnicheskikh-atak-spiker-grigorii-vasilkov
Также вы можете задать интересующие вопросы непосредственно спикеру в Telegram @grvasilkov
Информация о компании cyber•Fund
Мы инвестируем и развиваем блокчейн проекты, способные кардинально менять наш мир в лучшую сторону, создавая экономику роботов и самовыражения людей. Больше о нашей работе вы можете узнать из следующих ресурсов:
Наши проекты:
сyber.fund - аналитика и разработка блокчейн систем
Golos.io - медийная блокчейн платформа
Satoshi.fund - первый фонд инвестирующий в криптоактивы
Cyberstudio.io - помощь в проведении ICO
Мы ждем вас в наших сообществах:
Блог:
https://blog.cyber.fund/
Email Newsletter:
http://company.cyber.fund/#newsletter
Социальные сети:
https://golos.io/@cyberfund
https://steemit.com/@cyberfund
https://twitter.com/cyberfundio
https://www.reddit.com/r/cyber_Fund/
https://www.facebook.com/cyberfund - официальная страница сyber•Fund
https://www.facebook.com/blockchainmeetups/ - официальная страница cyber•Events (Блокчейн митапы, конференции, доклады)
https://www.slideshare.net/CyberFund-Official
Для разработчиков:
https://t.me/CyberFundDev - telegram чат для блокчейн разработчиков
https://github.com/cyberFund - наш репозиторий на Github с open source software
https://github.com/cyberFund/Library - библиотека знаний по блокчейн
Анализ защищенности Web-приложений, выявление уязвимостей в реальных условияхDmitry Evteev
Уязвимости и атаки на Web-приложения, общепринятые классификации уязвимостей. Ошибки, допускаемые разработчиками при создании клиентской и серверной частей Web-приложения, их возможные последствия и методы выявления и устранения. Примеры из практики. Обзор специализированных средств защиты Web-приложений: Web Application Firewall (WAF). Стоит ли полагаться на WAF?
Методология выявления уязвимостей в Web-приложениях, в частности, с использованием различных средств автоматического анализа.
SAST и Application Security: как бороться с уязвимостями в кодеAndrey Karpov
Проблематика: Объёмы кода растут; Плотность ошибок растёт нелинейно; Все хотят качественный и БЕЗОПАСНЫЙ код; Старых методов контроля качества уже недостаточно.
Статический анализ исходного кода на примере WinMergeTatyanazaxarova
Сегодня я хочу посвятить пост тематике, почему инструменты анализа исходного кода полезны вне зависимости от уровня знаний и опыта программиста. А польза такого анализа будет продемонстрирована на примере инструмента, который известен всем программистам - WinMerge.
В докладе будет:
- что такое F.I.R.S.T
- организация кода приложения для повышения его тестируемости, поддерживаемости и производительности
- какой тест-фреймворк выбрать для решения какой задачи?
- какие виды тестирования бывают и за какие из них отвечают разработчики?
- как тратить больше времени на код, а не на тесты
- как и какие метрики тестирования собирать
"API «Битрикс24» — разбор с пристрастием". Александр Сербул, 1С-БитриксYandex
Весной «Битрикс24» представил открытый API, который позволяет разработчикам самостоятельно расширять возможности сервиса. В докладе речь пойдёт о том, как обеспечить безопасность не в ущерб функционалу, как решать проблемы, возникающие в поддержке состояния объектов, какие подводные камни таятся в форматах данных. Идемпотентность — нужна ли она и когда именно. Будут рассмотрены примеры использования Маркетплейса. Также поговорим о том, как масштабировать проекты и куда расти.
Развитие систем анализа защищенности. Взгляд в будущее!Dmitry Evteev
Системы анализа защищенности являются удобным и простым инструментом, помогающим своевременно обнаруживать уязвимости в информационных системах. Они прошли долгий путь от утилит из набора "для хакера" до систем обеспечения информационной безопасности в инфраструктуре любой сложности. Как все было на самом деле, что мы имеем сейчас и что нас ждет в будущем? Именно об этом и пойдет речь в этом выступлении.
Waf.js: как защищать веб-приложения с использованием JavaScriptPositive Hack Days
Ведущие: Денис Колегов и Арсений Реутов
Авторы доклада продемонстрируют, как внедрение клиентских сценариев JavaScript может быть использовано для обнаружения и предотвращения различных атак, поиска уязвимых клиентских компонент, определения утечек данных об инфраструктуре веб-приложений, выявления веб-ботов и инструментальных средств нападения. Поделятся собственными методами обнаружения инъекций при помощи синтаксических анализаторов без сигнатур и фильтрующих регулярных выражений, а также рассмотрят реализацию концепции JavaScript-ловушек на стороне клиента для атак SSRF, IDOR, Command Injection и CSRF.
Будущее для безопасности интернета вещей и встраиваемых систем: Kaspersky Ope...Лаборатория Касперского
KasperskyOS — это безопасная операционная система, предназначенная для встраиваемых систем, подключенных к сети Интернет и обладающими специфическими требованиями к информационной безопасности. Задача KOS состоит в защите программного обеспечения и данных системы от последствий действий вредоносного кода и атак хакеров, таких как недекларируемое поведение любой из частей системы, потеря, уничтожение или модификация конфиденциальной или приватной информации, падение производительности или отказ в работе. В дополнение к этому, KOS позволяет снизить влияние ошибок в программном обеспечении.
Решения HP для обеспечения информационной безопасностиКРОК
Более чем 20-летний опыт КРОК и лучшие технологии HP легли в основу единственного в России Центра решений HP по информационной безопасности (HP Solutions Center Security). Центр представляет собой лабораторию с функционирующими в реальных условиях системами, которые интегрированы как между собой, так и с базовой инфраструктурой.
Подробнее на http://www.croc.ru/promo/hpsc/?&tab=ES
3. :~$ whoami && whonotme
• .NET-разработчик, руководитель группы разработки анализаторов
компилируемых приложений в Positive Technologies
• Участник Positive Development User Group
• Исследователь в области защищенности приложений
• Участник RSDN
• Оторванный от реальности теоретик
• Упоротый параноик
3
9. Причины разработки уязвимого кода
― Низкая квалификация
― Человеческий фактор
― Отсутствие системного подхода
― Шаблонное мышление
9
10. Agenda
Что?
Теоретический минимум, необходимый для осознанной разработки
защищенного кода;
разбор известных уязвимостей.
Зачем?
Перестать следовать культу карго и
шаблонному подходу к вопросам
обеспечения защищенности.
10
13. Что такое "уязвимость"?
«Недостаток (слабость) программного (программно-технического) обеспечения
средства или информационной системы в целом, который (которая) может быть
использована для реализации угроз безопасности информации» - ГОСТ Р 56546-
2015
13
14. Что такое "уязвимость"?
«Недостаток (слабость) программного (программно-технического) обеспечения
средства или информационной системы в целом, который (которая) может быть
использована для реализации угроз безопасности информации» - ГОСТ Р 56546-
2015
«В чем сила, брат?» (с)
14
15. Что такое "уязвимость"?
«Недостаток (слабость) программного (программно-технического) обеспечения
средства или информационной системы в целом, который (которая) может быть
использована для реализации угроз безопасности информации» - ГОСТ Р 56546-
2015
«В чем сила, брат?» (с)
«Набор входных данных, приводящий машину Тьюринга в запрещенную
конфигурацию» - Theoretical Computer Science
15
16. Что такое "уязвимость"?
«Недостаток (слабость) программного (программно-технического) обеспечения
средства или информационной системы в целом, который (которая) может быть
использована для реализации угроз безопасности информации» - ГОСТ Р 56546-
2015
«В чем сила, брат?» (с)
«Набор входных данных, приводящий машину Тьюринга в запрещенную
конфигурацию» - Theoretical Computer Science
16
19. Внимание, белый ящик!
var cmd = new SqlCommand("SELECT Value FROM Discounts WHERE CouponCode LIKE '" +
Request["CouponCode"] + "'");
var connection = new SqlConnection(connectionString);
connection.Open();
cmd.Connection = connection;
var couponValue = cmd.ExecuteScalar();
...
19
20. Внимание, белый ящик!
var cmd = new SqlCommand("SELECT Value FROM Discounts WHERE CouponCode LIKE '" +
Request["CouponCode"] + "'");
var connection = new SqlConnection(connectionString);
connection.Open();
cmd.Connection = connection;
var couponValue = cmd.ExecuteScalar();
...
Атакующий имеет возможность нарушить целостность
выходного потока данных (кода SQL-запроса), манипулируя
потоком входных данных (параметром HTTP-запроса),
приходящим в операцию выполнения SQL-кода.
20
22. Внимание, белый ящик!
var cmd = new SqlCommand("SELECT Value FROM Discounts WHERE CouponCode LIKE
@CouponCode");
cmd.Parameters.AddWithValue("@CouponCode ", Request["CouponCode"]);
var connection = new SqlConnection(connectionString);
connection.Open();
cmd.Connection = connection;
var couponValue = cmd.ExecuteScalar();
...
22
23. Внимание, белый ящик!
var cmd = new SqlCommand("SELECT Value FROM Discounts WHERE CouponCode LIKE
@CouponCode");
cmd.Parameters.AddWithValue("@CouponCode ", Request["CouponCode"]);
var connection = new SqlConnection(connectionString);
connection.Open();
cmd.Connection = connection;
var couponValue = cmd.ExecuteScalar();
...
Атакующий имеет возможность нарушить целостность
выходного потока данных (параметра SQL-запроса),
манипулируя потоком входных данных (параметром HTTP-
запроса), приходящим в операцию выполнения SQL-кода,
что может привести к нарушению правил предметной
области приложения.
23
24. Внимание, белый ящик!
var fieldName = Request["field"] ?? "Id";
var minValue = int.Parse(Request["min"] ?? "0");
var maxValue = int.Parse(Request["max"] ?? "0");
var queryTemplate = string.Format(
"SELECT Id, Nickname, Rating, MessageCount, TopicCount FROM Users WHERE {0} >= @minValue AND {0} <= @maxValue
ORDER BY {0}",
fieldName.Replace("'", string.Empty).
Replace(" ", string.Empty).
Replace("", string.Empty).
Replace(",", string.Empty).
Replace("(", string.Empty).
Replace(")", 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}
24
Users
Id
Nickname
Rating
MessageCount
TopicCount
Password
25. Внимание, белый ящик!
var fieldName = Request["field"] ?? "Id";
var minValue = int.Parse(Request["min"] ?? "0");
var maxValue = int.Parse(Request["max"] ?? "0");
var queryTemplate = string.Format(
"SELECT Id, Nickname, Rating, MessageCount, TopicCount FROM Users WHERE {0} >= @minValue AND {0} <= @maxValue
ORDER BY {0}",
fieldName.Replace("'", string.Empty).
Replace(" ", string.Empty).
Replace("", string.Empty).
Replace(",", string.Empty).
Replace("(", string.Empty).
Replace(")", 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=a&max=a
25
Users
Id
Nickname
Rating
MessageCount
TopicCount
Password
26. Внимание, белый ящик!
var fieldName = Request["field"] ?? "Id";
var minValue = int.Parse(Request["min"] ?? "0");
var maxValue = int.Parse(Request["max"] ?? "0");
var queryTemplate = string.Format(
"SELECT Id, Nickname, Rating, MessageCount, TopicCount FROM Users WHERE {0} >= @minValue AND {0} <= @maxValue
ORDER BY {0}",
fieldName.Replace("'", string.Empty).
Replace(" ", string.Empty).
Replace("", string.Empty).
Replace(",", string.Empty).
Replace("(", string.Empty).
Replace(")", 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=a&max=a
26
Users
Id
Nickname
Rating
MessageCount
TopicCount
Password
Атакующий имеет возможность
нарушить конфиденциальность
хранящегося потока данных,
манипулируя потоком входных
данных (параметром HTTP-запроса),
приводящим к нарушению правил
предметной области приложения.
27. Какой из фрагментов кода уязвим?
1)
[Authorize(Roles = "Foo")]
public ActionResult SomeAction()
{
...
return View();
}
2)
[Authorize(Roles = "Bar, Qux")]
public ActionResult SomeAction()
{
...
return View();
}
27
28. Какой из фрагментов кода уязвим?
1)
[Authorize(Roles = "Foo")]
public ActionResult SomeAction()
{
...
return View();
}
2)
[Authorize(Roles = "Bar, Qux")]
public ActionResult SomeAction()
{
...
return View();
}
Невозможно оценить защищенность кода,
не владея всеми предметными областями
приложения (в данном случае, правилами
предметной области контроля доступа).
28
30. Предметные области
Второстепенные:
― защищенность;
― отказоустойчивость;
― опыт взаимодействия,
― производительность.
Основные:
― интернет-торговля;
― онлайн-банкинг;
― бухучет;
― … (тысячи их).
Каждое приложение реализует модели как основной предметной области, так и
множество моделей второстепенных предметных областей
34. Сущность
– абстракция объекта в некотором контексте, обладающая следующими
характеристиками:
• свойство – значимый атрибут абстрагируемого сущностью объекта;
• состояние– множество текущих значений всех свойств сущности;
• инвариант– множество допустимых состояний сущности.
Отношение – утверждение, определяющее взаимосвязь изменения состояний
сущностей.
34
35. Пример: логистика
Сущность: точки на карте города
• свойство: координаты – пара значений «широта-долгота»;
• инвариант: координаты принадлежат перекресткам города или строениям.
Сущность: маршрут
• свойство: путь - упорядоченное множество точек на карте города;
• инвариант: путь непрерывен, проходит по улицам города в соответствии с ПДД;
• отношение: оптимальность – длина пути минимальна для заданных начальной и
конечной точек.
Сущности: точка загрузки, точка доставки
• свойство: точка на карте города;
• инвариант: координаты принадлежат строениям.
35
36. Задача коммивояжёра
В терминах предметной области логистики:
построить оптимальный маршрут из точки
загрузки, проходящий через все точки доставки по
одному разу и возвращающийся в точку загрузки.
36
37. Задача коммивояжёра
В терминах предметной области логистики:
построить оптимальный маршрут из точки
загрузки, проходящий через все точки доставки по
одному разу и возвращающийся в точку загрузки.
В терминах предметной области теории графов:
Найти гамильтонов цикл минимального веса в
полном (дополненном ребрами бесконечной длины)
взвешенном графе.
37
96. То, что может сделать с потоками вычисления атакующий, нарушив инварианты
сущностей предметных областей, называется угрозой (threat)
То, где и благодаря чему он может это сделать, называется уязвимостью
(vulnerability), обусловленной недостатком (weakness)
То, как он может это сделать, называется атакой (attack)
То, с какой вероятностью у него это удастся и какие последствия может повлечь,
называется риском (risk)
Иными словами…
96
97. То, что не позволяет атакующему
провести атаку, обеспечивает
защищенность (security)
97
101. Промежуточные итоги
Разработка защищенного кода сводится к реализации контроля инвариантов
всех сущностей основной предметной области и области защищенности
приложения
Анализ защищенности кода сводится к оценке эффективности реализованных
контролей
Ни то, ни другое – невозможно без досконального изучения основной
предметной области и области защищенности приложения
101
102. Классификация
Классификация уязвимостей возможна по:
― предметной области; // защищенность приложения
― недостатку; // неэффективная предварительная обработка
потоков данных
― потоку вычисления; // интерпретация потока данных в поток выполнения
― угрозе; // нарушение целостности
// уязвимость к атакам инъекций (в зависимости от интерпретатора потока
данных: XSS, SQLi, XMLi,XPATHi, Path Traversal, LINQi,XXE и т.п.)
103. Формальные признаки уязвимостей к инъекциям
Дано: потенциально уязвимая операция (точка потока выполнения) PVO(text):
операция прямой или косвенной интерпретации текста text на формальном
языке.
Пусть text = transform(argument), где argument – поток данных множества
аргументов точки входа EP, а transform – функция промежуточных
преобразований.
Тогда приложение уязвимо к атаке инъекции в точке PVO, если существует и
достижимо хотя бы одно множество vector таких значений элементов EP, при
которых происходит изменение структуры синтаксического дерева текста text, не
предусмотренное правилами прочих предметных областей приложения.
103
104. Для защиты от атак инъекций в
любой язык необходимо и
достаточно обеспечить для
transform инвариант «vector –
пустое множество»
104
115. Классификация
Классификация уязвимостей возможна по:
― предметной области; // онлайн-торговля
― недостатку; // неэффективный контроль использования погашенных
купонов на скидку
― потоку вычисления; // транзакция оплаты заказа
― угрозе; // нарушение авторизованности
// уязвимость к атакам на бизнес-логику (повторное использование купонов на
скидку)
116. Классификация
Классификация уязвимостей возможна по:
― предметной области; // защищенность приложения
― недостатку; // неэффективный контроль операций прямой записи
пользовательских потоков данных или их производных в память
― потоку вычисления; // интерпретация внутренних данных на стеке или
куче
― угрозе; // нарушение целостности
// уязвимость к атакам переполнения буфера
121. Дополнительные условия
― hostname должен состоять из цифр и точек;
― первый символ hostname должен быть цифрой;
― последний символ hostname не должен быть точкой;
― hostname должен быть достаточной длины, чтобы вызвать переполнение;
― hostname должен успешно разбираться как IPv4 адрес функцией inet_aton();
121
122. С учетом всех ограничений, был
разработан экплоит, для Exim,
позволяющий обойти механизмы
защиты ASLR и PIE и выполнить
произвольный код в системе
https://www.qualys.com/2015/01/27/cve-2015-0235/exim_ghost_bof.rb
122