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

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

https://github.com/lest
twitter: @just_lest
Хэш пароля
• MD5
• SHA-1
• SHA-2
Хэш с солью
Хэш с солью
• Пароль пользователя
• Соль пользователя
• Соль приложения
PBKDF2

Password-Based Key Derivation Function 2
PBKDF2
DK = PBKDF2(PRF, Password, Salt, c, dkLen)
DK = T1 || T2 || ... || Tdklen/hlen
Ti = F(Password, Salt, Iterations, i...
PBKDF2
DK = PBKDF2(PRF, Password, Salt, c, dkLen)
DK = T1 || T2 || ... || Tdklen/hlen
Ti = F(Password, Salt, Iterations, i...
PBKDF2
DK = PBKDF2(PRF, Password, Salt, c, dkLen)
DK = T1 || T2 || ... || Tdklen/hlen
Ti = F(Password, Salt, Iterations, i...
PBKDF2
DK = PBKDF2(PRF, Password, Salt, c, dkLen)
DK = T1 || T2 || ... || Tdklen/hlen
Ti = F(Password, Salt, Iterations, i...
PBKDF2
DK = PBKDF2(PRF, Password, Salt, c, dkLen)
DK = T1 || T2 || ... || Tdklen/hlen
Ti = F(Password, Salt, Iterations, i...
bcrypt
bcrypt

$2a$10$vI8aWBnW3fID.ZQ4/z

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

$2a$10$vI8aWBnW3fID.ZQ4/zo1G

сложность
bcrypt

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

соль
bcrypt

o1G.q1lRps.9cGLcZEiGDMVr5yUP1KUOYTa
bcrypt
scrypt
PBKDF2
504 Gateway Time-out

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

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

• Форма регистрации
Тайминговые атаки
Тайминговые атаки

• https://code.djangoproject.com/ticket/
20760
Блокировка доступа
Блокировка доступа
• для пользователя
• для IP-адреса
Блокировка доступа
• CAPTCHA
• разблокировка по ссылке из письма
Инвалидация сессии
Инвалидация сессии
• хранить в сессии данные, которые

изменяются при изменении пароля

• проверять при доступе к сессии
Инвалидация сессии
• хранить сессии в БД
• показывать активные сессии
Запомнить меня
Запомнить меня
• добавляем токен и время
• храним токен в HttpOnly cookie
Восстановление пароля
Восстановление пароля

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

• по ссылке показываем форму изменен...
Сложность пароля
Без пароля
Без пароля
• Одноразовые коды доступа
Без пароля
• Одноразовые коды доступа
• OpenID
Без пароля
• Одноразовые коды доступа
• OpenID
• OAuth
SSL
SSL
startssl.com
Двухэтапная
аутентификация
Двухэтапная
аутентификация
Двухэтапная
аутентификация
Двухэтапная
аутентификация
Google
Двухэтапная
аутентификация
Google
Facebook
Двухэтапная
аутентификация
Google
Facebook
Dropbox
Двухэтапная
аутентификация
Google

AWS

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

AWS
GitHub
Dropbox
Open Web Application
Security Project
• https://www.owasp.org/
• https://www.owasp.org/index.php/
Cheat_Sheets
Спасибо
Сергей Нартымов
Brainspec

https://github.com/lest
twitter: @just_lest
Безопасность аутентификации веб-приложений
Безопасность аутентификации веб-приложений
Upcoming SlideShare
Loading in...5
×

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

3,968

Published on

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

Published in: Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,968
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
13
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

  1. 1. Безопасность аутентификации веб-приложений Сергей Нартымов Brainspec https://github.com/lest twitter: @just_lest
  2. 2. Хэш пароля • MD5 • SHA-1 • SHA-2
  3. 3. Хэш с солью
  4. 4. Хэш с солью • Пароль пользователя • Соль пользователя • Соль приложения
  5. 5. PBKDF2 Password-Based Key Derivation Function 2
  6. 6. PBKDF2 DK = PBKDF2(PRF, Password, Salt, c, dkLen) DK = T1 || T2 || ... || Tdklen/hlen Ti = 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)
  7. 7. PBKDF2 DK = PBKDF2(PRF, Password, Salt, c, dkLen) DK = T1 || T2 || ... || Tdklen/hlen Ti = 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)
  8. 8. PBKDF2 DK = PBKDF2(PRF, Password, Salt, c, dkLen) DK = T1 || T2 || ... || Tdklen/hlen Ti = 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)
  9. 9. PBKDF2 DK = PBKDF2(PRF, Password, Salt, c, dkLen) DK = T1 || T2 || ... || Tdklen/hlen Ti = 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)
  10. 10. PBKDF2 DK = PBKDF2(PRF, Password, Salt, c, dkLen) DK = T1 || T2 || ... || Tdklen/hlen Ti = 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)
  11. 11. bcrypt
  12. 12. bcrypt $2a$10$vI8aWBnW3fID.ZQ4/z идентификатор алгоритма
  13. 13. bcrypt $2a$10$vI8aWBnW3fID.ZQ4/zo1G сложность
  14. 14. bcrypt $2a$10$vI8aWBnW3fID.ZQ4/zo1G.q1lRps соль
  15. 15. bcrypt o1G.q1lRps.9cGLcZEiGDMVr5yUP1KUOYTa
  16. 16. bcrypt scrypt PBKDF2
  17. 17. 504 Gateway Time-out 502 Bad Gateway
  18. 18. Перебор пользователей
  19. 19. Перебор пользователей • Форма логина • Неверный адрес e-mail или пароль.
  20. 20. Перебор пользователей • Форма восстановления пароля • Если ваш адрес e-mail есть в нашей базе данных, то в течение нескольких минут вы получите письмо с инструкциями по восстановлению вашего пароля.
  21. 21. Перебор пользователей • Форма регистрации
  22. 22. Тайминговые атаки
  23. 23. Тайминговые атаки • https://code.djangoproject.com/ticket/ 20760
  24. 24. Блокировка доступа
  25. 25. Блокировка доступа • для пользователя • для IP-адреса
  26. 26. Блокировка доступа • CAPTCHA • разблокировка по ссылке из письма
  27. 27. Инвалидация сессии
  28. 28. Инвалидация сессии • хранить в сессии данные, которые изменяются при изменении пароля • проверять при доступе к сессии
  29. 29. Инвалидация сессии • хранить сессии в БД • показывать активные сессии
  30. 30. Запомнить меня
  31. 31. Запомнить меня • добавляем токен и время • храним токен в HttpOnly cookie
  32. 32. Восстановление пароля
  33. 33. Восстановление пароля • не стоит генерировать пароль и присылать его на почту
  34. 34. Восстановление пароля • генерируем токен и отправляем на почту ссылку с этим токеном • по ссылке показываем форму изменения пароля
  35. 35. Сложность пароля
  36. 36. Без пароля
  37. 37. Без пароля • Одноразовые коды доступа
  38. 38. Без пароля • Одноразовые коды доступа • OpenID
  39. 39. Без пароля • Одноразовые коды доступа • OpenID • OAuth
  40. 40. SSL
  41. 41. SSL startssl.com
  42. 42. Двухэтапная аутентификация
  43. 43. Двухэтапная аутентификация
  44. 44. Двухэтапная аутентификация
  45. 45. Двухэтапная аутентификация Google
  46. 46. Двухэтапная аутентификация Google Facebook
  47. 47. Двухэтапная аутентификация Google Facebook Dropbox
  48. 48. Двухэтапная аутентификация Google AWS Facebook Dropbox
  49. 49. Двухэтапная аутентификация Google Facebook AWS GitHub Dropbox
  50. 50. Open Web Application Security Project • https://www.owasp.org/ • https://www.owasp.org/index.php/ Cheat_Sheets
  51. 51. Спасибо Сергей Нартымов Brainspec https://github.com/lest twitter: @just_lest
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×