Безопасность аутентификации веб-приложений

Post on 08-Jul-2015

3.934 views 2 download

description

Доклад Сергея Нартымова на конференции Application Developer Days-4. г.Минск 13 декабря 2013

Transcript of Безопасность аутентификации веб-приложений

Безопасность аутентификациивеб-приложений

Сергей НартымовBrainspec

https://github.com/lesttwitter: @just_lest

Хэш пароля

• MD5

• SHA-1

• SHA-2

Хэш с солью

Хэш с солью

• Пароль пользователя• Соль пользователя• Соль приложения

PBKDF2

Password-Based Key Derivation Function 2

PBKDF2DK = PBKDF2(PRF, Password, Salt, c, dkLen)

DK = T1 || T2 || ... || Tdklen/hlenTi = F(Password, Salt, Iterations, i)

F(Password, Salt, Iterations, i) = U1 ^ U2 ^ ... ^ Uc

U1 = PRF(Password, Salt || INT_32_BE(i))U2 = PRF(Password, U1)...Uc = PRF(Password, Uc-1)

DK = PBKDF2(HMAC−SHA1, passphrase, ssid, 4096, 256)

PBKDF2DK = PBKDF2(PRF, Password, Salt, c, dkLen)

DK = T1 || T2 || ... || Tdklen/hlenTi = F(Password, Salt, Iterations, i)

F(Password, Salt, Iterations, i) = U1 ^ U2 ^ ... ^ Uc

U1 = PRF(Password, Salt || INT_32_BE(i))U2 = PRF(Password, U1)...Uc = PRF(Password, Uc-1)

DK = PBKDF2(HMAC−SHA1, passphrase, ssid, 4096, 256)

PBKDF2DK = PBKDF2(PRF, Password, Salt, c, dkLen)

DK = T1 || T2 || ... || Tdklen/hlenTi = F(Password, Salt, Iterations, i)

F(Password, Salt, Iterations, i) = U1 ^ U2 ^ ... ^ Uc

U1 = PRF(Password, Salt || INT_32_BE(i))U2 = PRF(Password, U1)...Uc = PRF(Password, Uc-1)

DK = PBKDF2(HMAC−SHA1, passphrase, ssid, 4096, 256)

PBKDF2DK = PBKDF2(PRF, Password, Salt, c, dkLen)

DK = T1 || T2 || ... || Tdklen/hlenTi = F(Password, Salt, Iterations, i)

F(Password, Salt, Iterations, i) = U1 ^ U2 ^ ... ^ Uc

U1 = PRF(Password, Salt || INT_32_BE(i))U2 = PRF(Password, U1)...Uc = PRF(Password, Uc-1)

DK = PBKDF2(HMAC−SHA1, passphrase, ssid, 4096, 256)

PBKDF2DK = PBKDF2(PRF, Password, Salt, c, dkLen)

DK = T1 || T2 || ... || Tdklen/hlenTi = F(Password, Salt, Iterations, i)

F(Password, Salt, Iterations, i) = U1 ^ U2 ^ ... ^ Uc

U1 = PRF(Password, Salt || INT_32_BE(i))U2 = PRF(Password, U1)...Uc = PRF(Password, Uc-1)

DK = PBKDF2(HMAC−SHA1, passphrase, ssid, 4096, 256)

bcrypt

bcrypt

$2a$10$vI8aWBnW3fID.ZQ4/zo1G.q1lRps.9cGLcZEiGDMVr5yUP1KUOYTa

идентификатор алгоритма

bcrypt

$2a$10$vI8aWBnW3fID.ZQ4/zo1G.q1lRps.9cGLcZEiGDMVr5yUP1KUOYTa

сложность

bcrypt

$2a$10$vI8aWBnW3fID.ZQ4/zo1G.q1lRps.9cGLcZEiGDMVr5yUP1KUOYTa

соль

bcrypt

$2a$10$vI8aWBnW3fID.ZQ4/zo1G.q1lRps.9cGLcZEiGDMVr5yUP1KUOYTa

PBKDF2

scryptbcrypt

504 Gateway Time-out

502 Bad Gateway

Перебор пользователей

Перебор пользователей

• Форма логина• Неверный адрес e-mail или пароль.

Перебор пользователей

• Форма восстановления пароля• Если ваш адрес e-mail есть в нашей базе данных, то в течение нескольких минут вы получите письмо с инструкциями по восстановлению вашего пароля.

Перебор пользователей

• Форма регистрации

Тайминговые атаки

Блокировка доступа

Блокировка доступа

• для пользователя• для IP-адреса

Блокировка доступа

• CAPTCHA

• разблокировка по ссылке из письма

Инвалидация сессии

Инвалидация сессии

• хранить в сессии данные, которые изменяются при изменении пароля

• проверять при доступе к сессии

Инвалидация сессии

• хранить сессии в БД• показывать активные сессии

Запомнить меня

Запомнить меня

• добавляем токен и время

• храним токен в HttpOnly cookie

Восстановление пароля

Восстановление пароля

• не стоит генерировать пароль и присылать его на почту

Восстановление пароля

• генерируем токен и отправляем на почту ссылку с этим токеном

• по ссылке показываем форму изменения пароля

Сложность пароля

Без пароля

Без пароля

• Одноразовые коды доступа

Без пароля

• Одноразовые коды доступа

• OpenID

Без пароля

• Одноразовые коды доступа

• OpenID

• OAuth

SSL

SSL

startssl.com

Двухэтапная аутентификация

Двухэтапная аутентификация

Двухэтапная аутентификация

Google

Двухэтапная аутентификация

Google

Facebook

Двухэтапная аутентификация

Google

Facebook

Dropbox

Двухэтапная аутентификация

Google

Facebook

AWS

Dropbox

Двухэтапная аутентификация

Google

Facebook

AWS

Dropbox

GitHub

Двухэтапная аутентификация

Спасибо

https://github.com/lesttwitter: @just_lest

Сергей НартымовBrainspec