Слайды вебинара http://www.ptsecurity.ru/lab/webinars/#42235 :
"Каковы формальные признаки уязвимого и защищенного кода? Что такое уязвимость? Как разглядеть в коде уязвимость для атак, принадлежащих неизвестному классу? Чем уязвимости бизнес-логики отличаются от «традиционных» уязвимостей? Мы ответим на эти вопросы на вебинаре, посвященном теоретическому минимуму предметной области Application Security и практическому применению этих знаний в задачах анализа защищенности и при разработке защищенного кода"
How to Develop a Secure Web Application and Stay in Mind? (PHDays 3)
Прикладная теория Application Security
1.
2. Прикладная теория Application Security
Владимир Кочетков
/Positive Technologies/Application Inspector/Team Lead
Образовательная программа «Практическая безопасность»
6. Что такое "уязвимость"?
«Недостаток (слабость) программного (программно-технического) обеспечения
средства или информационной системы в целом, который (которая) может быть
использована для реализации угроз безопасности информации» - ГОСТ Р 56546-
2015
6
7. Что такое "уязвимость"?
«Недостаток (слабость) программного (программно-технического) обеспечения
средства или информационной системы в целом, который (которая) может быть
использована для реализации угроз безопасности информации» - ГОСТ Р 56546-
2015
«В чем сила, брат?» (с)
7
8. Что такое "уязвимость"?
«Недостаток (слабость) программного (программно-технического) обеспечения
средства или информационной системы в целом, который (которая) может быть
использована для реализации угроз безопасности информации» - ГОСТ Р 56546-
2015
«В чем сила, брат?» (с)
«Набор входных данных, приводящий машину Тьюринга в запрещенную
конфигурацию» - Computer Science
8
9. Что такое "уязвимость"?
«Недостаток (слабость) программного (программно-технического) обеспечения
средства или информационной системы в целом, который (которая) может быть
использована для реализации угроз безопасности информации» - ГОСТ Р 56546-
2015
«В чем сила, брат?» (с)
«Набор входных данных, приводящий машину Тьюринга в запрещенную
конфигурацию» - Computer Science
9
12. Что такое "уязвимость"?
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();
...
12
13. Что такое "уязвимость"?
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-кода.
13
14. Что такое "уязвимость"?
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();
...
14
15. Что такое "уязвимость"?
var cmd = new SqlCommand("SELECT Value FROM Discounts WHERE CouponCode =
@CouponCode");
cmd.Parameters.AddWithValue("@CouponCode ", Request["CouponCode"]);
var connection = new SqlConnection(connectionString);
connection.Open();
cmd.Connection = connection;
var couponValue = cmd.ExecuteScalar();
...
Атакующий имеет возможность нарушить целостность
выходного потока данных (параметра SQL-запроса),
манипулируя потоком входных данных (параметром HTTP-
запроса), приходящим в операцию выполнения SQL-кода,
что может привести к нарушению правил предметной
области приложения.
15
16. Что такое "уязвимость"?
1)
[Authorize(Roles = "All")]
public ActionResult SomeAction()
{
...
return View();
}
2)
[Authorize(Roles = "Baz, Qux")]
public ActionResult SomeAction()
{
...
return View();
}
16
17. Что такое "уязвимость"?
1)
[Authorize(Roles = "All")]
public ActionResult SomeAction()
{
...
return View();
}
2)
[Authorize(Roles = "Baz, Qux")]
public ActionResult SomeAction()
{
...
return View();
}
Невозможно оценить
защищенность кода, не
владея всеми предметными
областями приложения (в
данном случае, политики
контроля доступа).
17
19. Примеры предметных областей
Вторичные:
― защищенность;
― отказоустойчивость;
― опыт взаимодействия,
― производительность.
Основные:
― интернет-торговля;
― онлайн-банкинг;
― бухучет;
― … (тысячи их).
Каждое приложение реализует модели как основной предметной области, так и
множество моделей вторичных предметных областей
24. Пример: логистика
Сущность: точки на карте города
• свойство: координаты – пара значений «широта-долгота»;
• инвариант: координаты принадлежат перекресткам города или строениям.
Сущность: маршрут
• свойство: путь - упорядоченное множество точек на карте города;
• инвариант: путь непрерывен и проходит по улицам города в соответствии с ПДД;
• отношение: оптимальность – длина пути минимальна для одних и тех же
начальной и конечной точек.
Сущности: точка загрузки, точка доставки
• свойство: точка на карте города
24
25. Задача коммивояжёра
В терминах предметной области логистики:
построить оптимальный маршрут из точки
загрузки, проходящий через все точки доставки по
одному разу и возвращающийся в точку загрузки.
25
26. Задача коммивояжёра
В терминах предметной области логистики:
построить оптимальный маршрут из точки
загрузки, проходящий через все точки доставки по
одному разу и возвращающийся в точку загрузки.
В терминах предметной области теории графов:
Найти гамильтонов цикл минимального веса в
полном (дополненном ребрами бесконечной длины)
взвешенном графе.
26
29. "Modeling Computer Insecurity" (Sophie Engle, Sean Whalen and Matt Bishop):
Провести полный анализ защищенности программы можно, только выполнив ее
на всех возможных наборах входных данных.
Разработка защищенного кода менее трудоемкий процесс, чем анализ
защищенности уже существующего кода.
Вычислимость проблемы защищенности
Статическая оценка защищенности
программы является неразрешимой
проблемой.
Определение защищенности
текущего состояния программы,
очевидно, разрешимо
30. Применимость теоремы Райса к
реальным системам – такая же
теоретизация, как и идея
описывать приложение в виде
конечного автомата
30
75. То, что может сделать с потоками вычисления атакующий, нарушив инварианты
сущностей предметных областей, называется угрозой (threat)
То, где и благодаря чему он может это сделать, называется уязвимостью
(vulnerability), обусловленной недостатком (weakness)
То, как он может это сделать, называется атакой (attack)
То, с какой вероятностью у него это удастся и какие последствия может повлечь,
называется риском (risk)
Иными словами…
75
76. То, что не позволяет атакующему
провести атаку, обеспечивает
защищенность (security)
76
80. Выводы
Разработка защищенного кода сводится к реализации контроля инвариантов
всех сущностей основной предметной области и области защищенности
приложения
Анализ защищенности кода сводится к оценке эффективности реализованных
контролей
Ни то, ни другое – невозможно без досконального изучения основной
предметной области и области защищенности приложения
80
81. Классификация
Классификация уязвимостей возможна по:
― предметной области; // защищенность приложения
― недостатку; // неэффективная предварительная обработка
потоков данных
― потоку вычисления; // формирующие первообразные потоков выполнения
― угрозе; // нарушение целостности
// уязвимость к атакам инъекций (в зависимости от интерпретатора потока
данных: XSS, SQLi, XMLi,XPATHi, Path Traversal, LINQi,XXE и т.п.)