Яндекс.АккаунтМенеджер - mobius 2015
TRANSCRIPT
![Page 1: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/1.jpg)
Разделяй и властвуй
Управление учетными записями пользователей
![Page 2: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/2.jpg)
С чего все начиналось…
![Page 3: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/3.jpg)
Мобильные приложения Яндекса когда-то
› Были сделаны самодельные системы аутентификации для Фоток и Карт
› Изначально использовались токены
4
![Page 4: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/4.jpg)
Мобильные приложения Яндекса сейчас
› 31 приложение для Android
› 24 приложения для iOS
› Более 20 приложений используют учетные записи
5
![Page 5: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/5.jpg)
Способы аутентификации
› Пароли
› Cookie
› Длинные пароли
› Токены (OAuth 2.0 токены)
6
![Page 6: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/6.jpg)
7
![Page 7: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/7.jpg)
Почему выбрали OAuth 2.0?
› Удобен для реализации на стороне клиента
› Есть возможности для разграничения доступа
› Легко прикрутить к HTTP API
› Является стандартом (RFC6749, RFC6750)
8
![Page 8: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/8.jpg)
Проблемы OAuth 2.0
![Page 9: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/9.jpg)
Как работает наш OAuth
› https://tech.yandex.ru/oauth/doc/dg/concepts/about-docpage/
10
![Page 10: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/10.jpg)
11
oauth.yandex.ruЗапуск приложения
Запрос разрешения
GET/ authorize?client_id=<id приложения>
Разрешаю
Приложение
<код подтверждения>
<токен для доступа к API>
POST /token? client_secret=<пароль приложения>
![Page 11: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/11.jpg)
Основные проблемы
› Проблема client_id и client_secret
› Проблема с распределением грантов
› Необходимость строгого использования TLS
12
![Page 12: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/12.jpg)
13
![Page 13: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/13.jpg)
Распределение грантов
Одно приложение = один грант
14
N приложений c M API-вызовами?
![Page 14: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/14.jpg)
Как появился XToken
![Page 15: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/15.jpg)
16
client_idи client_secret
access_token
oauth.yandex.ruЛогин и пароль
Разрешение: API Яндекс.Диск
API Яндекс.Диск
![Page 16: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/16.jpg)
17
client_id_D и client_secret_D
x_tokenAPI Яндекс.Диск
Логин и пароль
access_token_YD
access_token_YPРазрешение:
Получение токенов
oauth.yandex.ru
API Яндекс.Парковки
![Page 17: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/17.jpg)
Плюсы XToken
› Возможность однократного ввода логина и пароля пользователем
› Гибкость при установке или удалении приложений
18
![Page 18: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/18.jpg)
Минусы XToken
› Теоретически меньшая безопасность
› Более сложная схема работы при выписывании токенов и их отзыве
19
![Page 19: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/19.jpg)
Хранение токенов на устройстве
› iOS – shared keychain (нужно помнить про группы доступа)
› Android – content provider (не используем Android AM)
20
![Page 20: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/20.jpg)
AM и SSL-pinning
![Page 21: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/21.jpg)
Решаем три проблемы
› Найти соединения, где необходим TLS
› Дать разработчикам «правильный» TLS
› Не допустить MitM-атак
22
![Page 22: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/23.jpg)
Как найти все API вызовы
› Эмулятор и tcpdump
› Функциональное тестирование и MitM-proxy
› Исходные коды и статический анализ
24
![Page 24: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/24.jpg)
Трюк для iOS
› NSURLProtocol позволяет определить свой протокол, который перехватит всё сетевое взаимодействие
› https://events.yandex.ru/lib/talks/1076/
› http://nshipster.com/nsurlprotocol/
25
![Page 25: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/25.jpg)
Пример простого сниффера
Sniffer.h
#import <Foundation/Foundation.h>
@interface MySniffer : NSURLProtocol
@end
![Page 26: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/26.jpg)
Пример простого сниффера
Sniffer.m
#import ”Sniffer.h”
@implementation MySniffer
+ (BOOL)canInitWithRequest:(NSURLRequest *)request
{
NSLog(@"%@, %@", request.allHTTPHeaderFields, request.URL);
return NO;
}
@end
![Page 27: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/27.jpg)
Типичная ошибка
Нет нормальной проверки сертификатов
NSMutableURLRequest *request = [self requestWithMethod:@"GET" path:reques
tURL parameters:nil];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initW
ithRequest:request];
operation.allowsInvalidSSLCertificate = YES;
![Page 28: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/28.jpg)
Та же ошибка в 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](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/29.jpg)
30
Интернет
API (сервис)«Плохая» точка доступа
Пользователь
![Page 30: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/30.jpg)
«Старший брат» следит за тобой
▌ 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](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/31.jpg)
32
Интернет
API (сервис)«Плохая» точка доступа
Пользователь
Непонятныйгосударственный
firewall
![Page 32: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/32.jpg)
Бюджетный вариант пининга
33
1. Пининг сертификатов (в данном случае своего CA)
2. Использование стойких криптоалгоритмов (никакого SSLv3, стараемся использовать ECDSA)
3. Как делать TLS на стороне сервера https://events.yandex.ru/lib/talks/2434/
![Page 33: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/33.jpg)
Экстремальный вариант
34
1. Свой Intermediate CA
2. Несколько доверенных Intermediate CA с сертификатами на всех нужных платформах
3. Возможность динамического изменения списка «запиненных»
4. Черные и белые списки
![Page 34: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/34.jpg)
Яндекс.АккаунтМенеджер
![Page 35: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/35.jpg)
Что дает разработчику?
› Не нужно думать про аутентификацию пользователя
› Есть «правильная» реализация TLS
› Скрыты все вопросы реализации OAuth на стороне клиента
36
![Page 36: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/36.jpg)
Что дает СИБ?
› Единую точку концентрированного контроля
› Возможность быстро исправлять ошибки
› Меньше головной боли с TLS
37
![Page 37: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/37.jpg)
Подведём итоги
› Мы научились не просить пользователя вводить пароль для каждого нашего приложения
› Разобрались с плюсами и минусами OAuth 2.0
› Научились безопасно передавать данные между приложением и сервером
38
![Page 38: Яндекс.АккаунтМенеджер - Mobius 2015](https://reader036.vdocuments.net/reader036/viewer/2022082218/55a54de11a28ab4d708b464c/html5/thumbnails/38.jpg)
Спасибо за внимание!