Яндекс.АккаунтМенеджер - mobius 2015

39
Разделяй и властвуй Управление учетными записями пользователей

Upload: yury-leonychev

Post on 15-Jul-2015

80 views

Category:

Software


6 download

TRANSCRIPT

Page 1: Яндекс.АккаунтМенеджер - Mobius 2015

Разделяй и властвуй

Управление учетными записями пользователей

Page 2: Яндекс.АккаунтМенеджер - Mobius 2015

С чего все начиналось…

Page 3: Яндекс.АккаунтМенеджер - Mobius 2015

Мобильные приложения Яндекса когда-то

› Были сделаны самодельные системы аутентификации для Фоток и Карт

› Изначально использовались токены

4

Page 4: Яндекс.АккаунтМенеджер - Mobius 2015

Мобильные приложения Яндекса сейчас

› 31 приложение для Android

› 24 приложения для iOS

› Более 20 приложений используют учетные записи

5

Page 5: Яндекс.АккаунтМенеджер - Mobius 2015

Способы аутентификации

› Пароли

› Cookie

› Длинные пароли

› Токены (OAuth 2.0 токены)

6

Page 6: Яндекс.АккаунтМенеджер - Mobius 2015

7

Page 7: Яндекс.АккаунтМенеджер - Mobius 2015

Почему выбрали OAuth 2.0?

› Удобен для реализации на стороне клиента

› Есть возможности для разграничения доступа

› Легко прикрутить к HTTP API

› Является стандартом (RFC6749, RFC6750)

8

Page 8: Яндекс.АккаунтМенеджер - Mobius 2015

Проблемы OAuth 2.0

Page 9: Яндекс.АккаунтМенеджер - Mobius 2015

Как работает наш OAuth

› https://tech.yandex.ru/oauth/doc/dg/concepts/about-docpage/

10

Page 10: Яндекс.АккаунтМенеджер - Mobius 2015

11

oauth.yandex.ruЗапуск приложения

Запрос разрешения

GET/ authorize?client_id=<id приложения>

Разрешаю

Приложение

<код подтверждения>

<токен для доступа к API>

POST /token? client_secret=<пароль приложения>

Page 11: Яндекс.АккаунтМенеджер - Mobius 2015

Основные проблемы

› Проблема client_id и client_secret

› Проблема с распределением грантов

› Необходимость строгого использования TLS

12

Page 12: Яндекс.АккаунтМенеджер - Mobius 2015

13

Page 13: Яндекс.АккаунтМенеджер - Mobius 2015

Распределение грантов

Одно приложение = один грант

14

N приложений c M API-вызовами?

Page 14: Яндекс.АккаунтМенеджер - Mobius 2015

Как появился XToken

Page 15: Яндекс.АккаунтМенеджер - Mobius 2015

16

client_idи client_secret

access_token

oauth.yandex.ruЛогин и пароль

Разрешение: API Яндекс.Диск

API Яндекс.Диск

Page 16: Яндекс.АккаунтМенеджер - Mobius 2015

17

client_id_D и client_secret_D

x_tokenAPI Яндекс.Диск

Логин и пароль

access_token_YD

access_token_YPРазрешение:

Получение токенов

oauth.yandex.ru

API Яндекс.Парковки

Page 17: Яндекс.АккаунтМенеджер - Mobius 2015

Плюсы XToken

› Возможность однократного ввода логина и пароля пользователем

› Гибкость при установке или удалении приложений

18

Page 18: Яндекс.АккаунтМенеджер - Mobius 2015

Минусы XToken

› Теоретически меньшая безопасность

› Более сложная схема работы при выписывании токенов и их отзыве

19

Page 19: Яндекс.АккаунтМенеджер - Mobius 2015

Хранение токенов на устройстве

› iOS – shared keychain (нужно помнить про группы доступа)

› Android – content provider (не используем Android AM)

20

Page 20: Яндекс.АккаунтМенеджер - Mobius 2015

AM и SSL-pinning

Page 21: Яндекс.АккаунтМенеджер - Mobius 2015

Решаем три проблемы

› Найти соединения, где необходим TLS

› Дать разработчикам «правильный» TLS

› Не допустить MitM-атак

22

Page 22: Яндекс.АккаунтМенеджер - Mobius 2015

OAuth 2.0 и TLS

› “Implementations MAY also support additional transport-layer security mechanisms that meet their security requirements” https://tools.ietf.org/html/rfc6749#section-1.6

› И требование использовать TLS по всему RFC

23

Page 23: Яндекс.АккаунтМенеджер - Mobius 2015

Как найти все API вызовы

› Эмулятор и tcpdump

› Функциональное тестирование и MitM-proxy

› Исходные коды и статический анализ

24

Page 24: Яндекс.АккаунтМенеджер - Mobius 2015

Трюк для iOS

› NSURLProtocol позволяет определить свой протокол, который перехватит всё сетевое взаимодействие

› https://events.yandex.ru/lib/talks/1076/

› http://nshipster.com/nsurlprotocol/

25

Page 25: Яндекс.АккаунтМенеджер - Mobius 2015

Пример простого сниффера

Sniffer.h

#import <Foundation/Foundation.h>

@interface MySniffer : NSURLProtocol

@end

Page 26: Яндекс.АккаунтМенеджер - Mobius 2015

Пример простого сниффера

Sniffer.m

#import ”Sniffer.h”

@implementation MySniffer

+ (BOOL)canInitWithRequest:(NSURLRequest *)request

{

NSLog(@"%@, %@", request.allHTTPHeaderFields, request.URL);

return NO;

}

@end

Page 27: Яндекс.АккаунтМенеджер - Mobius 2015

Типичная ошибка

Нет нормальной проверки сертификатов

NSMutableURLRequest *request = [self requestWithMethod:@"GET" path:reques

tURL parameters:nil];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initW

ithRequest:request];

operation.allowsInvalidSSLCertificate = YES;

Page 28: Яндекс.АккаунтМенеджер - Mobius 2015

Та же ошибка в Android

Используется AllowAllHostnameVerifier или X509TrustManager

пропускающий все сертификаты

SSLContext sslContext = SSLContext.getInstance("SSL");

sslContext.init(null, new TrustManager[] { new X509TrustManager() {

public X509Certificate[] getAcceptedIssuers() {

return null;

}

} }, new SecureRandom());

Page 29: Яндекс.АккаунтМенеджер - Mobius 2015

30

Интернет

API (сервис)«Плохая» точка доступа

Пользователь

Page 30: Яндекс.АккаунтМенеджер - Mobius 2015

«Старший брат» следит за тобой

▌ iOS

› http://support.apple.com/en-us/ht5012

› 209 сертификатов

▌ Android

› http://kurrytran.blogspot.ru/2013/05/how-to-get-root-certification.html (для < 4.0 ICS)

› Settings – Security – Trusted Credentials

31

Page 31: Яндекс.АккаунтМенеджер - Mobius 2015

32

Интернет

API (сервис)«Плохая» точка доступа

Пользователь

Непонятныйгосударственный

firewall

Page 32: Яндекс.АккаунтМенеджер - Mobius 2015

Бюджетный вариант пининга

33

1. Пининг сертификатов (в данном случае своего CA)

2. Использование стойких криптоалгоритмов (никакого SSLv3, стараемся использовать ECDSA)

3. Как делать TLS на стороне сервера https://events.yandex.ru/lib/talks/2434/

Page 33: Яндекс.АккаунтМенеджер - Mobius 2015

Экстремальный вариант

34

1. Свой Intermediate CA

2. Несколько доверенных Intermediate CA с сертификатами на всех нужных платформах

3. Возможность динамического изменения списка «запиненных»

4. Черные и белые списки

Page 34: Яндекс.АккаунтМенеджер - Mobius 2015

Яндекс.АккаунтМенеджер

Page 35: Яндекс.АккаунтМенеджер - Mobius 2015

Что дает разработчику?

› Не нужно думать про аутентификацию пользователя

› Есть «правильная» реализация TLS

› Скрыты все вопросы реализации OAuth на стороне клиента

36

Page 36: Яндекс.АккаунтМенеджер - Mobius 2015

Что дает СИБ?

› Единую точку концентрированного контроля

› Возможность быстро исправлять ошибки

› Меньше головной боли с TLS

37

Page 37: Яндекс.АккаунтМенеджер - Mobius 2015

Подведём итоги

› Мы научились не просить пользователя вводить пароль для каждого нашего приложения

› Разобрались с плюсами и минусами OAuth 2.0

› Научились безопасно передавать данные между приложением и сервером

38

Page 38: Яндекс.АккаунтМенеджер - Mobius 2015

Спасибо за внимание!

Page 39: Яндекс.АккаунтМенеджер - Mobius 2015

[email protected] tracer0tong

Юрий Леонычев

Менеджер проектов