Безопасность backend приложений

Содержание

Слайд 2

Введение

Введение

Слайд 4

Последние большие факапы

Последние большие факапы

Слайд 6

Помощь профессионалов

Помощь профессионалов

Слайд 7

A01 Broken Access Control

A01 Broken Access Control

Слайд 8

A01 Broken Access Control

Получить одного пользователя с userID:

Удалить пользователя c userID

A01 Broken Access Control Получить одного пользователя с userID: Удалить пользователя c
:

DELETE /users/{userID}

GET /users/{userID}

Получаем данные другого пользователя

Удаляем другого пользователя

Слайд 9

Некоторые понятия

Некоторые понятия

Слайд 10

Некоторые понятия

Некоторые понятия

Слайд 11

Некоторые понятия

Некоторые понятия

Слайд 12

A01: Как бороться

A01: Как бороться

Слайд 13

A01: Как бороться

A01: Как бороться

Слайд 14

A02 Cryptographic Failures

Получаем информацию о пользователе:

GET /users/1

{"userName":"Alex",
"age":25,
"secretAnswer":"HelloWorld"}

Ответ может

A02 Cryptographic Failures Получаем информацию о пользователе: GET /users/1 {"userName":"Alex", "age":25, "secretAnswer":"HelloWorld"}
содержать избыточные данные:

Если фильтрация данных на стороне клиента, можем получить лишние данные

Слайд 15

A02: Cryptographic Failures

A02: Cryptographic Failures

Слайд 16

A02: Как бороться

A02: Как бороться

Слайд 17

TLS handshake

TLS handshake

Слайд 18

Salted hashing

Salted hashing

Слайд 19

A03 Injection

A03 Injection

Слайд 20

SQL injection

GET http://.../items/items.asp?itemid={idemId}

SELECT item_name, item_description FROM items
WHERE item_number = #{itemId}

GET http://.../items/items.asp?itemid=999

SELECT

SQL injection GET http://.../items/items.asp?itemid={idemId} SELECT item_name, item_description FROM items WHERE item_number =
item_name, item_description FROM items
WHERE item_number = 999

Слайд 21

SQL injection

GET http://.../items/items.asp?itemid=999 OR 1=1

SELECT item_name, item_description FROM items
WHERE item_number =

SQL injection GET http://.../items/items.asp?itemid=999 OR 1=1 SELECT item_name, item_description FROM items WHERE
999 OR 1=1

GET http://.../items/items.asp?itemid=999; DROP TABLE users

SELECT item_name, item_description FROM items
WHERE item_number = 999; DROP TABLE users

Слайд 22

SQL Injection – как бороться

SQL Injection – как бороться

Слайд 23

OS command Injection

POST /run

{"mkdir":"name"}

Если сервер выполняет команды без проверки, то злоумышленник

OS command Injection POST /run {"mkdir":"name"} Если сервер выполняет команды без проверки,
может послать следующую команду с большой вероятностью вывода сервера из строя:

POST /run

{"mkdir":"name && format C:/"}

Слайд 24

OS command Injection – как бороться

OS command Injection – как бороться

Слайд 25

A04 Insecure design

A04 Insecure design

Слайд 26

A04: Как бороться

A04: Как бороться

Слайд 27

A05 Security Misconfiguration

A05 Security Misconfiguration

Слайд 28

A05: Как бороться

A05: Как бороться

Слайд 29

A06 Vulnerable/Outdated Components

A06 Vulnerable/Outdated Components

Слайд 30

A06: Как бороться

A06: Как бороться

Слайд 31

A07 Identification/Authentication Failures

A07 Identification/Authentication Failures

Слайд 32

A07 Identification/Authentication Failures

Виды аутентификации

A07 Identification/Authentication Failures Виды аутентификации

Слайд 33

A07 Identification/Authentication Failures

Виды аутентификации

A07 Identification/Authentication Failures Виды аутентификации

Слайд 34

A07 Identification/Authentication Failures

API Key

POST https://my-api.com/my-service?key=API_KEY

A07 Identification/Authentication Failures API Key POST https://my-api.com/my-service?key=API_KEY

Слайд 35

A07 Identification/Authentication Failures

Basic auth

Authorization: "Basic dXNlcm5hbWU6cGFzc3dvcmQ="

Используется HTTP заголовок 'Authorization’:
Ключевое слово

A07 Identification/Authentication Failures Basic auth Authorization: "Basic dXNlcm5hbWU6cGFzc3dvcmQ=" Используется HTTP заголовок 'Authorization’:
Basic
Пробел
base64 закодированная строка username:password

Механизм поддерживается браузерами

Слайд 36

A07 Identification/Authentication Failures

Cookie-Based Authentication

В ответ на запрос аутентификации сервер посылает заголовок Set-Cookie,

A07 Identification/Authentication Failures Cookie-Based Authentication В ответ на запрос аутентификации сервер посылает
который содержит имя и значение cookie, а также дополнительные атрибуты: expires, domain, path, secure, httponly

После этого клиент автоматически будет посылать заголовок Cookie при каждом запросе

Set-Cookie: JSESSIONID=123456789; Path=/; HttpOnly

Cookie: JSESSIONID=123456789

Требуется хранить сессии на сервере

Слайд 37

A07 Identification/Authentication Failures

Token-Based Authentication

В ответ на запрос аутентификации сервер посылает заголовок

A07 Identification/Authentication Failures Token-Based Authentication В ответ на запрос аутентификации сервер посылает
Authorization, который содержит ключевое слово Bearer и токен

Может использоваться как часть OAuth 2.0 или OpenID Connect протоколов, так и сервер сам может сформировать токен

Для безопасного использования должен использоваться протокол, который обеспечивает шифрование данных, HTTP заголовков и URL, например HTTPS

Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjI4Y

Слайд 39

A07: Как бороться

A07: Как бороться

Слайд 40

A08 Software and Data Integrity Failures

A08 Software and Data Integrity Failures

Слайд 41

A08 Software and Data Integrity Failures

A08 Software and Data Integrity Failures

Слайд 42

A08: Как бороться

A08: Как бороться

Слайд 43

A09 Insufficient Logging & Monitoring

A09 Insufficient Logging & Monitoring

Слайд 44

A09: Как бороться

A09: Как бороться

Слайд 45

A10 Server-Side Request Forgery (SSRF)

A10 Server-Side Request Forgery (SSRF)