Transcript
Page 1: Прикладная теория Application Security
Page 2: Прикладная теория Application Security

Прикладная теория Application Security

Владимир Кочетков/Positive Technologies/Application Inspector/Team Lead

Образовательная программа «Практическая безопасность»

Page 3: Прикладная теория Application Security

3

AgendaЧто?

Теоретический минимум, необходимый для осознанной разработки или анализа защищенности кода

Зачем?

Перестать следовать культу карго

Page 4: Прикладная теория Application Security

4

Главный вопрос Жизни, Вселенной и всего остального…

Page 5: Прикладная теория Application Security

5

…что такое "уязвимость"?

Page 6: Прикладная теория Application Security

6

Что такое "уязвимость"?«Недостаток (слабость) программного (программно-технического) обеспечения средства или информационной системы в целом, который (которая) может быть использована для реализации угроз безопасности информации» - ГОСТ Р 56546-2015

Page 7: Прикладная теория Application Security

7

Что такое "уязвимость"?«Недостаток (слабость) программного (программно-технического) обеспечения средства или информационной системы в целом, который (которая) может быть использована для реализации угроз безопасности информации» - ГОСТ Р 56546-2015 «В чем сила, брат?» (с)

Page 8: Прикладная теория Application Security

8

Что такое "уязвимость"?«Недостаток (слабость) программного (программно-технического) обеспечения средства или информационной системы в целом, который (которая) может быть использована для реализации угроз безопасности информации» - ГОСТ Р 56546-2015 «В чем сила, брат?» (с)

«Набор входных данных, приводящий машину Тьюринга в запрещенную конфигурацию» - Computer Science

Page 9: Прикладная теория Application Security

9

Что такое "уязвимость"?«Недостаток (слабость) программного (программно-технического) обеспечения средства или информационной системы в целом, который (которая) может быть использована для реализации угроз безопасности информации» - ГОСТ Р 56546-2015 «В чем сила, брат?» (с)

«Набор входных данных, приводящий машину Тьюринга в запрещенную конфигурацию» - Computer Science

Page 10: Прикладная теория Application Security

10

Существующие определения не дают ни малейшего представления о технической сущности уязвимости

Page 11: Прикладная теория Application Security

11

Правильный вопрос: в чем разница между защищенным и уязвимым кодом?

Page 12: Прикладная теория Application Security

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();...

Page 13: Прикладная теория Application Security

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-кода.

Page 14: Прикладная теория Application Security

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();...

Page 15: Прикладная теория Application Security

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-кода, что может привести к нарушению правил предметной области приложения.

Page 16: Прикладная теория Application Security

16

Что такое "уязвимость"?1)

[Authorize(Roles = "All")]public ActionResult SomeAction(){ ... return View();}

2)

[Authorize(Roles = "Baz, Qux")]public ActionResult SomeAction(){ ... return View();}

Page 17: Прикладная теория Application Security

17

Что такое "уязвимость"?1)

[Authorize(Roles = "All")]public ActionResult SomeAction(){ ... return View();}

2)

[Authorize(Roles = "Baz, Qux")]public ActionResult SomeAction(){ ... return View();}

Невозможно оценить защищенность кода, не владея всеми предметными областями приложения (в данном случае, политики контроля доступа).

Page 18: Прикладная теория Application Security

18

Критерии уязвимости определяются множеством предметных областей приложения

Page 19: Прикладная теория Application Security

Примеры предметных областейВторичные:

― защищенность;― отказоустойчивость;― опыт взаимодействия,― производительность.

Основные:

― интернет-торговля;― онлайн-банкинг;― бухучет;― … (тысячи их).

Каждое приложение реализует модели как основной предметной области, так и множество моделей вторичных предметных областей

Page 20: Прикладная теория Application Security

20

Application Security – вторичная предметная область

Page 21: Прикладная теория Application Security

21

Предметная область Application Security

Page 22: Прикладная теория Application Security

22

Сущность– абстракция реального объекта в некотором контексте, обладающая следующими характеристиками:

• свойство – значимый атрибут абстрагируемого сущностью объекта или одноместное отношение;

• состояние– множество текущих значений всех свойств сущности;

• инвариант– множество допустимых состояний сущности.

Отношение – утверждение, определяющее взаимосвязь изменения состояний сущностей.

Page 23: Прикладная теория Application Security

23

Предметная область – множество сущностей, их инварианты и отношения

Page 24: Прикладная теория Application Security

24

Пример: логистикаСущность: точки на карте города

• свойство: координаты – пара значений «широта-долгота»;• инвариант: координаты принадлежат перекресткам города или

строениям.

Сущность: маршрут• свойство: путь - упорядоченное множество точек на карте города;• инвариант: путь непрерывен и проходит по улицам города в

соответствии с ПДД;• отношение: оптимальность – длина пути минимальна для одних и

тех же начальной и конечной точек.

Сущности: точка загрузки, точка доставки• свойство: точка на карте города

Page 25: Прикладная теория Application Security

25

Задача коммивояжёраВ терминах предметной области логистики:

построить оптимальный маршрут из точки загрузки, проходящий через все точки доставки по одному разу и возвращающийся в точку загрузки.

Page 26: Прикладная теория Application Security

26

Задача коммивояжёраВ терминах предметной области логистики:

построить оптимальный маршрут из точки загрузки, проходящий через все точки доставки по одному разу и возвращающийся в точку загрузки.

В терминах предметной области теории графов:

Найти гамильтонов цикл минимального веса в полном (дополненном ребрами бесконечной длины) взвешенном графе.

Page 27: Прикладная теория Application Security

27

Предметная область Application Security

Page 28: Прикладная теория Application Security

28

«Трясина Тьюринга» - не только об эзотерических языках

Page 29: Прикладная теория Application Security

"Modeling Computer Insecurity" (Sophie Engle, Sean Whalen and Matt Bishop):

Провести полный анализ защищенности программы можно, только выполнив ее на всех возможных наборах входных данных.

Разработка защищенного кода менее трудоемкий процесс, чем анализ защищенности уже существующего кода.

Вычислимость проблемы защищенности

Статическая оценка защищенности программы является неразрешимой проблемой.

Определение защищенности текущего состояния программы, очевидно, разрешимо

Page 30: Прикладная теория Application Security

30

Применимость теоремы Райса к реальным системам – такая же теоретизация, как и идея описывать приложение в виде конечного автомата

Page 31: Прикладная теория Application Security

31

Приложение стоит рассматривать, как поток управления, обрабатывающий множество потоков данных

Page 32: Прикладная теория Application Security

32

Потоки управления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);}

Page 33: Прикладная теория Application Security

33

Потоки управления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);}

Page 34: Прикладная теория Application Security

34

Потоки управления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);}

Page 35: Прикладная теория Application Security

35

Потоки управления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);}

Page 36: Прикладная теория Application Security

36

Потоки управления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);}

Page 37: Прикладная теория Application Security

37

Потоки управления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);}

Page 38: Прикладная теория Application Security

38

Потоки управления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);}

Page 39: Прикладная теория Application Security

39

Потоки управления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);}

Page 40: Прикладная теория Application Security

40

Потоки управления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);}

Page 41: Прикладная теория Application Security

41

Потоки управления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);}

Page 42: Прикладная теория Application Security

42

Потоки управления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);}

Page 43: Прикладная теория Application Security

43

Потоки управления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);}

Page 44: Прикладная теория Application Security

44

Потоки управления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);}

Page 45: Прикладная теория Application Security

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);}

Page 46: Прикладная теория Application Security

46

Потоки управления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);}

Page 47: Прикладная теория Application Security

47

Потоки управления всегда являются производными от потоков данных

Page 48: Прикладная теория Application Security

48

Потоки данных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);}

Page 49: Прикладная теория Application Security

49

Потоки данных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);}

Page 50: Прикладная теория Application Security

50

Потоки данных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);}

Page 51: Прикладная теория Application Security

51

Потоки данных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);}

Page 52: Прикладная теория Application Security

52

Потоки данных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);}

Page 53: Прикладная теория Application Security

53

Потоки данных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);}

Page 54: Прикладная теория Application Security

54

Потоки данных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);}

Page 55: Прикладная теория Application Security

55

Потоки данных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);}

Page 56: Прикладная теория Application Security

56

Потоки данных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);}

Page 57: Прикладная теория Application Security

57

Потоки данных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);}

Page 58: Прикладная теория Application Security

58

Потоки данных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(Convert.FromBse64String(Request.Params["parm"])),"Wrong Key!"}

Page 59: Прикладная теория Application Security

59

Множества значений всех потоков данных в конкретной точке потока выполнения определяют состояние приложения

Page 60: Прикладная теория Application Security

60

Граф переходов между состояниями приложения определяет все возможные потоки вычисления

Page 61: Прикладная теория Application Security

61

Граф потоков вычисления является семантически-эквивалентной моделью приложения

Page 62: Прикладная теория Application Security

62

Предметная область Application Security

Page 63: Прикладная теория Application Security

63

Театр начинается с вешалки, а уязвимость – с недостатка

Page 64: Прикладная теория Application Security

64

Недостаток- неэффективная реализация моделей предметных областей приложения и контролей инвариантов их сущностей

Примеры контролей Application Security:

• предварительная обработка потоков данных;• подтверждение аутентичности потоков вычисления;• проверка прав доступа к потокам данных;• обеспечение соответствия потока вычисления модели

функциональной предметной области;• …

Page 65: Прикладная теория Application Security

65

Угроза- обусловленная недостатком возможность нарушить состояние защищенности потока вычисления, лишив его одного из свойств:

• конфиденциальности;• целостности;• доступности;• авторизованности;• аутентичности;• аппелируемости;• подотчетности;• достоверности;• <нужное вписать>

Page 66: Прикладная теория Application Security

66

КонфиденциальностьСостояние потока вычисления, при котором доступ к нему осуществлен только сущностями, имеющими на это право.

A

E

B

Page 67: Прикладная теория Application Security

67

ЦелостностьСостояние потока вычисления, при котором изменения в нем осуществлены только сущностями, имеющими на это право.

A

E

B

C

Page 68: Прикладная теория Application Security

68

ДоступностьСостояние потока вычисления, при котором доступ к нему могут осуществить все сущности, имеющие на это право.

A B

Page 69: Прикладная теория Application Security

69

АвторизованностьСостояние потока вычисления, при котором его источниками являются только сущности, имеющие на это право.

E

B

A

Page 70: Прикладная теория Application Security

70

АутентичностьСостояние потока вычисления, при котором подтверждена подлинность его источника.

‘A’

B

A

Page 71: Прикладная теория Application Security

71

АппелируемостьСостояние потока вычисления, при котором его источник не может отказаться от того, что он является таковым.

A B

Page 72: Прикладная теория Application Security

72

Уязвимость – состояние приложения, в котором возможна реализация угрозы

Page 73: Прикладная теория Application Security

73

Невозможность реализации угрозы в каждой точке потока вычисления* является инвариантом защищенности приложения

* …пересекающего границу доверия

Page 74: Прикладная теория Application Security

74

Уязвимость бизнес-логики–состояние реализации угрозы через нарушение правил основной предметной области приложения

Page 75: Прикладная теория Application Security

75

То, что может сделать с потоками вычисления атакующий, нарушив инварианты сущностей предметных областей, называется угрозой (threat)

То, где и благодаря чему он может это сделать, называется уязвимостью (vulnerability), обусловленной недостатком (weakness)

То, как он может это сделать, называется атакой (attack)

То, с какой вероятностью у него это удастся и какие последствия может повлечь, называется риском (risk)

Иными словами…

Page 76: Прикладная теория Application Security

76

То, что не позволяет атакующему провести атаку, обеспечивает защищенность (security)

Page 77: Прикладная теория Application Security

77

То, что минимизирует риск, обеспечивает безопасность (safety)

Page 78: Прикладная теория Application Security

78

Акцентировать внимание разработчикам и пентестерам необходимо на причинах*, а не на следствиях**!

* недостатки** уязвимости, атаки или риски

Page 79: Прикладная теория Application Security

79

Причинно-следственные связи

Недостаток Угроза

Уязвимость Атака

Риск

Незащищенность

Небезопасность

Page 80: Прикладная теория Application Security

80

ВыводыРазработка защищенного кода сводится к реализации контроля инвариантов всех сущностей основной предметной области и области защищенности приложения

Анализ защищенности кода сводится к оценке эффективности реализованных контролей

Ни то, ни другое – невозможно без досконального изучения основной предметной области и области защищенности приложения

Page 81: Прикладная теория Application Security

КлассификацияКлассификация уязвимостей возможна по:

― предметной области; // защищенность приложения― недостатку; // неэффективная предварительная

обработка потоков данных― потоку вычисления; // формирующие первообразные

потоков выполнения― угрозе; // нарушение целостности

// уязвимость к атакам инъекций (в зависимости от интерпретатора потока данных: XSS, SQLi, XMLi, XPATHi, Path Traversal, LINQi, XXE и т.п.)

Page 82: Прикладная теория Application Security

КлассификацияКлассификация уязвимостей возможна по:

― предметной области; // защищенность приложения― недостатку; // неэффективное подтверждение

аутентичности источника потока вычисления― потоку вычисления; // HTTP-запрос, приводящий к

изменению состояния приложения― угрозе; // нарушение аутентичности

// уязвимость к атакам CSRF

Page 83: Прикладная теория Application Security

КлассификацияКлассификация уязвимостей возможна по:

― предметной области; // онлайн-торговля― недостатку; // неэффективный контроль

использования погашенных купонов на скидку― потоку вычисления; // транзакция оплаты заказа― угрозе; // нарушение авторизованности

// уязвимость к атакам на бизнес-логику (повторное использование погашенных купонов)

Page 84: Прикладная теория Application Security

84

Что будет, если поиграть в алхимию с критериями классификации?

Page 85: Прикладная теория Application Security

85

Page 86: Прикладная теория Application Security

Вопросы?

Владимир Кочетков

[email protected]@kochetkov_v

/Positive Technologies/Application Security/Application Inspector/Compiling and Low-Level Applications Analysis/Team Lead

Page 87: Прикладная теория Application Security

Recommended