Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Теоретические основы Application Security

217 views

Published on

В рамках PDUG

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Теоретические основы Application Security

  1. 1. Заголовок ptsecurity.com Теоретические основы Application Security
  2. 2. Заголовок Предметная область, рассматривающая в качестве объекта защиты гипотетическую информационную систему (ИС): • включающую в себя конкретное приложение • объединяющую объекты окружения в единую сущность • замкнутую относительно информационных потоков приложения APPSEC (APPLICATION SECURITY) 1/2
  3. 3. ЗаголовокAPPSEC (APPLICATION SECURITY) 2/2 Входные данные Конфигурация окружения Исполняющая среда Выходные данные Приложение Окружение Граница доверия
  4. 4. Заголовок • вне области влияния приложения его окружение защищено • логика предметной области приложения корректна ДОПУЩЕНИЯ APPSEC
  5. 5. Заголовок Предметная область Application Security
  6. 6. Заголовок Множество сущностей, их инвариантов и отношений в рамках описываемых процессов ПРЕДМЕТНАЯ ОБЛАСТЬ
  7. 7. Заголовок Абстракция объекта в некотором контексте, обладающая следующими характеристиками: • свойство – значимый атрибут абстрагируемого сущностью объекта; • состояние– множество текущих значений всех свойств сущности; • инвариант– множество допустимых состояний сущности. Отношение – утверждение, определяющее взаимосвязь изменения состояний сущностей. СУЩНОСТЬ
  8. 8. Заголовок Каскадное изменение состояний сущностей в соответствии с их отношениями вследствие однократного воздействия на одну из них ОПЕРАЦИЯ
  9. 9. Заголовок Допустимая последовательность (поток) операций ПРОЦЕСС
  10. 10. Заголовок Неделимая последовательность операций в потоке ТРАНЗАКЦИЯ
  11. 11. Заголовок Сущность: точки на карте города • свойство: координаты – пара значений «широта-долгота»; • инвариант: координаты принадлежат перекресткам города или строениям. Сущность: маршрут • свойство: путь - упорядоченное множество точек на карте города; • инвариант: путь непрерывен, проходит по улицам города в соответствии с ПДД; • отношение: оптимальность – длина пути минимальна для заданных начальной и конечной точек. Сущности: точка загрузки, точка доставки • свойство: точка на карте города; • инвариант: координаты принадлежат строениям. ПРИМЕР: ЛОГИСТИКА
  12. 12. Заголовок В терминах предметной области логистики: построить оптимальный маршрут из точки загрузки, проходящий через все точки доставки по одному разу и возвращающийся в точку загрузки. ПРИМЕР: ЛОГИСТИКА
  13. 13. Заголовок В терминах предметной области теории графов: Найти гамильтонов цикл минимального веса в полном (дополненном ребрами бесконечной длины) взвешенном графе. ПРИМЕР: ЛОГИСТИКА
  14. 14. Заголовок Позволяют строить абстрактные модели предметных областей. ОБОБЩЁННЫЕ ПРЕДМЕТНЫЕ ОБЛАСТИ
  15. 15. ЗаголовокПРЕДМЕТНЫЕ ОБЛАСТИ ПРИЛОЖЕНИЙ Вторичные: • защищенность; • отказоустойчивость; • опыт взаимодействия, • производительность. Первичные (основные): ― интернет-торговля; ― онлайн-банкинг; ― бухучет; ― … (тысячи их). Каждое приложение реализует модели как основной предметной области, так и множество моделей вторичных предметных областей
  16. 16. Заголовок Предметная область Application Security
  17. 17. Заголовок Поскольку защищённость – темпоральное свойство, модель приложения должна отражать процесс его выполнения ВЫБОР МОДЕЛИ ПРИЛОЖЕНИЯ
  18. 18. Заголовок Приложение можно представить в виде базовых блоков, между которыми передаётся управление в процессе выполнения приложения ПОТОКИ УПРАВЛЕНИЯ
  19. 19. ЗаголовокПОТОКИ УПРАВЛЕНИЯ (ПРИМЕР 1/15) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  20. 20. ЗаголовокПОТОКИ УПРАВЛЕНИЯ (ПРИМЕР 2/15) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  21. 21. ЗаголовокПОТОКИ УПРАВЛЕНИЯ (ПРИМЕР 3/15) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  22. 22. ЗаголовокПОТОКИ УПРАВЛЕНИЯ (ПРИМЕР 4/15) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  23. 23. ЗаголовокПОТОКИ УПРАВЛЕНИЯ (ПРИМЕР 5/15) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  24. 24. ЗаголовокПОТОКИ УПРАВЛЕНИЯ (ПРИМЕР 6/15) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  25. 25. ЗаголовокПОТОКИ УПРАВЛЕНИЯ (ПРИМЕР 7/15) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  26. 26. ЗаголовокПОТОКИ УПРАВЛЕНИЯ (ПРИМЕР 8/15) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  27. 27. ЗаголовокПОТОКИ УПРАВЛЕНИЯ (ПРИМЕР 9/15) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  28. 28. ЗаголовокПОТОКИ УПРАВЛЕНИЯ (ПРИМЕР 10/15) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  29. 29. ЗаголовокПОТОКИ УПРАВЛЕНИЯ (ПРИМЕР 11/15) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  30. 30. ЗаголовокПОТОКИ УПРАВЛЕНИЯ (ПРИМЕР 12/15) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  31. 31. ЗаголовокПОТОКИ УПРАВЛЕНИЯ (ПРИМЕР 13/15) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  32. 32. ЗаголовокПОТОКИ УПРАВЛЕНИЯ (ПРИМЕР 14/15) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  33. 33. ЗаголовокПОТОКИ УПРАВЛЕНИЯ (ПРИМЕР 15/15) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  34. 34. Заголовок Потоки выполнения приложения являются производными от потоков данных окружения ПОТОКИ ДАННЫХ
  35. 35. ЗаголовокПОТОКИ ДАННЫХ (ПРИМЕР 1/9) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  36. 36. ЗаголовокПОТОКИ ДАННЫХ (ПРИМЕР 2/9) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  37. 37. ЗаголовокПОТОКИ ДАННЫХ (ПРИМЕР 3/9) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  38. 38. ЗаголовокПОТОКИ ДАННЫХ (ПРИМЕР 4/9) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  39. 39. ЗаголовокПОТОКИ ДАННЫХ (ПРИМЕР 5/9) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  40. 40. ЗаголовокПОТОКИ ДАННЫХ (ПРИМЕР 6/9) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  41. 41. ЗаголовокПОТОКИ ДАННЫХ (ПРИМЕР 7/9) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  42. 42. ЗаголовокПОТОКИ ДАННЫХ (ПРИМЕР 8/9) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  43. 43. ЗаголовокПОТОКИ ДАННЫХ (ПРИМЕР 9/9) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); }
  44. 44. Заголовок Множество всех возможных значений потока данных в конкретной точке потока выполнения определяет его состояние СОСТОЯНИЕ ПОТОКА ДАННЫХ
  45. 45. ЗаголовокСОСТОЯНИЕ ПОТОКА ДАННЫХ (ПРИМЕР) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); } str1 ∈ { Encoding.UTF8.GetString(data), "Wrong Key!" }
  46. 46. Заголовок Множество состояний всех потоков данных в конкретной точке потока выполнения определяют состояние приложения СОСТОЯНИЕ ПРИЛОЖЕНИЯ
  47. 47. ЗаголовокСОСТОЯНИЕ ПРИЛОЖЕНИЯ (ПРИМЕР) var name = Request.Params["name"]; var key1 = Request.Params["key1"]; var parm = Request.Params["parm"]; var data = string.IsNullOrEmpty(parm) ? new char[0]: Convert.FromBase64String(parm); string str1; if (name + "in" == "admin") { if (key1 == "validkey") { str1 = Encoding.UTF8.GetString(data); } else { str1 = "Wrong key!"; } Response.Write(str1); } str1 ∈ { Encoding.UTF8.GetString(data), "Wrong Key!" } name ∈ { Request.Params["name"] } key1 ∈ { Request.Params["key1"] } parm ∈ { Request.Params["parm"] } data ∈ { new char[0], Convert.FromBse64String(parm) }
  48. 48. Заголовок Граф переходов между состояниями приложения определяет все возможные потоки вычисления и является искомой моделью процесса его выполнения ГРАФ ПОТОКОВ ВЫЧИСЛЕНИЯ
  49. 49. ЗаголовокГРАФ ПОТОКОВ ВЫЧИСЛЕНИЯ (ПРИМЕР 1/7)
  50. 50. ЗаголовокГРАФ ПОТОКОВ ВЫЧИСЛЕНИЯ (ПРИМЕР 2/7)
  51. 51. ЗаголовокГРАФ ПОТОКОВ ВЫЧИСЛЕНИЯ (ПРИМЕР 3/7)
  52. 52. ЗаголовокГРАФ ПОТОКОВ ВЫЧИСЛЕНИЯ (ПРИМЕР 4/7)
  53. 53. ЗаголовокГРАФ ПОТОКОВ ВЫЧИСЛЕНИЯ (ПРИМЕР 5/7)
  54. 54. ЗаголовокГРАФ ПОТОКОВ ВЫЧИСЛЕНИЯ (ПРИМЕР 6/7)
  55. 55. ЗаголовокГРАФ ПОТОКОВ ВЫЧИСЛЕНИЯ (ПРИМЕР 7/7)
  56. 56. Заголовок Предметная область Application Security
  57. 57. Заголовок Приводимые далее термины и определения локальны и не претендуют на признание в качестве общеупотребительных. Тем не менее, они устраняют существующие разночтения и противоречия в традиционной терминологии, позволяя перейти от интуитивных формулировок к формальным. DISCLAIMER
  58. 58. Заголовок Театр начинается с вешалки, а незащищённость ИС – с её недостатков С ЧЕГО НАЧНЁМ?
  59. 59. Заголовок Неэффективная реализация процессов вычисления, логики предметной области или конфигурации окружения ИС НЕДОСТАТОК
  60. 60. Заголовок Обусловленная недостатком возможность нарушения свойств состояния защищенности информационного потока: • конфиденциальности; • целостности; • доступности; • авторизованности; • аутентичности. УГРОЗА
  61. 61. Заголовок Состояние возможности реализации угрозы УЯЗВИМОСТЬ
  62. 62. Заголовок Конкретный способ реализации угрозы (эксплуатации {состояния} уязвимости) АТАКА
  63. 63. Заголовок Состояние невозможности реализации любой угрозы ЗАЩИЩЁННОСТЬ
  64. 64. Заголовок Состояние приемлемого риска реализации любой угрозы БЕЗОПАСНОСТЬ
  65. 65. Заголовок То, что может сделать атакующий с потоками информации, называется угрозой (threat) То, когда и благодаря чему он может это сделать, называется уязвимостью (vulnerability), обусловленной недостатком (weakness) ИНЫМИ СЛОВАМИ
  66. 66. Заголовок То, как он может это сделать, называется атакой (attack) То, с какой вероятностью у него это удастся и какие последствия может повлечь, называется риском (risk) ИНЫМИ СЛОВАМИ
  67. 67. Заголовок То, что не позволяет атакующему провести атаку, обеспечивает защищенность (security) То, что минимизирует риск, обеспечивает безопасность (safety) ИНЫМИ СЛОВАМИ
  68. 68. ЗаголовокПричины и следствия Недостаток (weakness) Угроза (threat) Уязвимость (vulnerability) Атака (attack) Риск (risk) Незащищенность (insecurity) Небезопасность (unsafety)
  69. 69. Заголовок Информационная безопасность Защищённость приложений Разница между ИБ и AppSec
  70. 70. Заголовок Предметная область Application Security
  71. 71. Заголовок • Потоки операций являются и информационными потоками, и сущностями модели основной предметной области приложения • Потоки вычисления являются и информационными потоками, и сущностями предметной области защищённости приложения • Потоки данных окружения являются и информационными потоками, и сущностями модели окружения А ТЕПЕРЬ – ВСЁ ВМЕСТЕ
  72. 72. Заголовок • Недостаток – неэффективная реализация моделей предметных областей приложения или окружения (контролей инвариантов их сущностей) Примеры контролей: • предварительная обработка потоков данных; • подтверждение аутентичности потоков операций; • проверка прав доступа к потокам данных; • обеспечение целостности потока операций; • … А ТЕПЕРЬ – ВСЁ ВМЕСТЕ
  73. 73. Заголовок • Уязвимость приложения – состояние возможности нарушения конфиденциальности, целостности, доступности, аутентичности или авторизованности любого из потоков операций или вычисления приложения, а также потоков данных окружения • Состояние защищённости приложения возникает при невозможности эксплуатации в нём любой уязвимости А ТЕПЕРЬ – ВСЁ ВМЕСТЕ
  74. 74. Заголовок • Вычислительный – уязвимости, описываемые в терминах модели процесса выполнения приложения • Логический – уязвимости, описываемые в терминах модели предметной области приложения • Экзогенный – уязвимости, описываемые в терминах модели окружения СУПЕРКЛАССЫ УЯЗВИМОСТЕЙ ПРИЛОЖЕНИЯ
  75. 75. Заголовок «Не сегодня!» ЧТО МЫ СКАЖЕМ ЛОГИЧЕСКОМУ И ЭКЗОГЕННОМУ КЛАССАМ?
  76. 76. Заголовок Атаки на нарушение целостности потоков данных в результате их преобразования принято называть инъекциями Тип инъекции определяется грамматикой атакуемого потока данных (HTML, XML, SQL, XPath, XQuery, LDAP, LINQ, Path, …) ВЫЧИСЛИТЕЛЬНЫЙ КЛАСС: ИНЪЕКЦИИ
  77. 77. Заголовок «Пусть C - граф потоков вычисления приложения. Пусть pvf(t) - достижимая вершина потока управления на C, являющаяся вызовом функции прямой или косвенной интерпретации текста t, соответствующего известной формальной грамматике G. Пусть e - поток аргумента входных данных на С. Пусть De - множество потоков данных на C, порождаемых от e и достижимых в точке вызова pvf(t), где t принадлежит De» МОДЕЛИРОВАНИЕ ИНЪЕКЦИЙ (1/3)
  78. 78. Заголовок «Тогда приложение уязвимо к угрозе нарушения целостности потоков данных De в точке выполнения pvf(t), если среди них найдётся хотя бы одна пара таких значений, при которых, в результате их синтаксического разбора в соответствии с грамматикой G, получаются не изоморфные друг-другу деревья разбора» МОДЕЛИРОВАНИЕ ИНЪЕКЦИЙ (2/3)
  79. 79. ЗаголовокМОДЕЛИРОВАНИЕ ИНЪЕКЦИЙ (3/3) The Essence of Command Injection Attacks in Web Applications (http://web.cs.ucdavis.edu/~su/publications/popl06.pdf)
  80. 80. Заголовок Несогласованная работа с разделяемом ресурсом в многопоточном окружении приводит к гонкам за ресурс Окружение любого веб-приложения является многопоточным ВЫЧИСЛИТЕЛЬНЫЙ КЛАСС: ГОНКА ЗА РЕСУРС
  81. 81. Заголовок Пусть P – сеть Петри, построенная по C, где переходами сети являются все промежуточные вершины C, позициями – его вершины, соответствующие операциям чтения или записи каждого ресурса окружения, а условиями перехода – условия достижимости соответствующих вершин C. Тогда, возможность появления более одной метки в любом состоянии графа маркировок P укажет на возможность реализации угрозы нарушения целостности или аутентичности потока вычисления. ВЫЧИСЛИТЕЛЬНЫЙ КЛАСС: ГОНКА ЗА РЕСУРС
  82. 82. Заголовок • Направлены на реализацию угрозы (нарушение одного из свойств защищённости какого-либо потока вычисления, операций или данных окружения) • Могут являться как производными от предыдущих атак, так и первообразными для последующих. Например: • HTTP Response Splitting → Header Spoofing → Session Fixation Unvalidated Redirection Body spoofing → Content Spoofing Session Fixation Unvalidated Redirection Cross-Site Scripting … СВОЙСТВА АТАК
  83. 83. ЗаголовокКЛАССИФИКАЦИЯ Классификация, объединяющая уязвимости всех классов, опирается на признаки: • предметная область; • недостаток; • атакуемый поток; • угроза.
  84. 84. ЗаголовокКЛАССИФИКАЦИЯ: ИНЪЕКЦИИ Признак Значение Предметная область Защищённость приложения Недостаток Неэффективная обработка потоков данных Информационный поток Поток данных, интерпретируемый окружением Угроза Нарушение целостности
  85. 85. ЗаголовокКЛАССИФИКАЦИЯ: СПУФИНГ ПОТОКА ОПЕРАЦИЙ Признак Значение Предметная область Защищённость приложения Недостаток Неэффективное подтверждение аутентичности идентификатора потока операций Информационный поток Поток операций Угроза Нарушение аутентичности
  86. 86. ЗаголовокКЛАССИФИКАЦИЯ: ПЕРЕПОЛНЕНИЕ БУФЕРА Признак Значение Предметная область Защищённость приложения Недостаток Неэффективный контроль записи производных потоков окружения в память Информационный поток Метаданные на стеке или в куче Угроза Нарушение целостности
  87. 87. ЗаголовокКЛАССИФИКАЦИЯ: ОБХОД БИЗНЕС-ЛОГИКИ (ЧАСТНЫЙ СЛУЧАЙ) Признак Значение Предметная область Онлайн-торговля Недостаток Неэффективный контроль использования купонов на скидку Информационный поток Поток операций транзакции оплаты заказа Угроза Нарушение авторизованности
  88. 88. Заголовок ptsecurity.com Спасибо! Спасибо!

×