Безопасность интернет-приложений
Лекция 4«Логика приложений»
Ярослав Рабоволюк
Концепция ААА
Аутентификация
Аккаунтинг
Авторизация «Кто?»
«Что разрешено?»
«Что делал?»
Концепция ААА
AAA-схема
ldap, radius, soap
AAAWEB
Аутентификация
Html form-based http basic auth/digest authMultifactor
SSL certs/smartcardsOpenID
Аутентификация
«плохие» пароли
- Пустое значение- Слишком короткий- Пароль = логин- Пароль по умолчанию- Словарный пароль
Аутентификация
Информационные сообщения
Аутентификация
Канал передачи данных
рабочая станция роутер
провайдер
хостинг
локальная сеть
Аутентификация
Канал передачи данных
- SSL/TLS- Challenge-response
Аутентификация
Политика смены пароля
- Периодическая смена (устаревание) - Смена при инциденте (disaster plan)
Типичные ошибки:- Сообщение «пользователь отсутствует»- Отсутствие подтверждения старого пароля- Отсутствие защиты от перебора старого пароля- csrf
Аутентификация
Политика смены пароля: disaster plan
- Оповещение ссылкой на смену- Смена при следующем входе- Создание и отправка нового
Аутентификация
Восстановление забытого пароля
Типичные ошибки:- Простые челленджи (секретные вопросы)- Подбор секретного вопроса- Раскрытие данных пользователя- Логин при вводе правильного челленджа- Отправка кода восстановления на указанный адрес/номер- Подбор «одноразовой ссылки»
Аутентификация
Функция «запомнить пользователя»
$nc somehost.comGET / HTTP/1.1Host: somehost.comCookie: Storeduser=mike
HTTP/1.1 200 OkServer: nginxDate: Fri, 12 Nov 2012 14:42:04 GMTContent-Type: text/html; charset=UTF-8Connection: closeSet-Cookie: session=mike:0b0a2371cc93f46b; secure; HttpOnlyContent-Length: 5279
Аутентификация
«усечение» аутентификации
trim(passwd): “ pass”, “pass”, “p.ass”,”@@pass”
substr(passwd,0,8): “password”,”password1234”
tolower(passwd):”password”,”PASSWORD”,”Password”
Аутентификация
Передача данных
Типичные ошибки:- Отправка пароля в открытом виде по email- Бессрочный “account activation”- Подбираемый “account activation”
Аутентификация
хранение
Типичные ошибки:- store(passwd)- store(md5(passwd))- store(customcrypt(passwd))
Авторизация
Сессии
- ошибки создания сессии- ошибки валидации- ошибки хранения
Авторизация
Сессии: генерация
randomseed(const);session = md5(rand());
session = base64(“user:”+login + “date:”+date);
session = md5(passwd);
session = md5(timestamp()+passwd);
session = encrypt(user.data);
Авторизация
Сессии: передача
GET-метод:somesite.com?sess=0102030010394&a=1
- Попадание в логи- Кеш поиска- Реферреры
Даунгрейд с https к http - Перехват на сетевом уровне
Авторизация
Контроль доступа
Чтение сообщений
Модерация
Изменение настроек
САЙТ
пользовательмодераторадмин
Авторизация
Контроль доступа: роли
Чтение сообщений
Модерация
Изменение настроек
САЙТ
пользовательмодераторадмин
Авторизация
Контроль доступа: роли
Чтение сообщений
Модерация
Изменение настроек
САЙТ
пользовательмодераторадмин
Авторизация
Контроль доступа: роли
Чтение сообщений
Модерация
Изменение настроек
САЙТ
пользовательмодераторадмин
Авторизация
Контроль доступа: эскалация
Чтение сообщений
Модерация
Изменение настроек
САЙТ
пользовательмодераторадмин
Авторизация
Контроль доступа: эскалация
Чтение сообщений
Модерация
Изменение настроек
САЙТ
пользовательмодераторадмин
Логика приложения
Логические ошибки
- Прямой вызов ресурса
- Контроль доступа параметром
- Нарушение последовательности вызовов
- Контроль доступа реферерром
- Контроль по местоположению
Логика приложения
Пример: shopping cart
Выбор товаров Переход в корзину Оплата Доставка
Логика приложения
Пример: shopping cart
Выбор товаров Переход в корзину Оплата Доставка
Логика приложения
Пример: poker game
LET’S PLAY!
Логика приложения
Пример: poker game
Set-Cookie: hand=2,3,5,J,Q
Set-Cookie: hand=10,J,Q,K,A
Логика приложения
Пример: poker game
Cookie: hand=10,J,Q,K,A
Логика приложения
Пример: poker game
Cookie: hand=Q,Q,Q,Q,Q
Cookie: hand=10,J,Q,K,A
WIN!
Спасибо за вниманиеРабоволюк Ярослав,