1
2 
Выставка трофеев 
Итоги «охоты» в мобильных приложениях
3 
"Alces alces elan trophee chateau Tanlay" by Myrabella - Own work. Licensed under Creative Commons Attribution-Share Alike 4.0 via Wikimedia Commons - https://commons.wikimedia.org/wiki/File:Alces_alces_elan_trophee_chateau_Tanlay.jpg#mediaviewer/File:Alces_alces_elan_trophee_chateau_Tanlay.jpg
4 
Охота за ошибками 
•Мы платим за найденные проблемы с безопасностью 
•Не только в веб, но и в мобильных приложениях 
•Это программа поощрения для всех 
•Участвуют люди со всего мира 
•За интересные ошибки платим больше ;-) 
•Подробнее на http://company.yandex.ru/security/
5 
Скучная классификация трофеев
6 
Моя классификация 
•Типовые ошибки 
•Неочевидные и забористые проблемы 
•Всяческий трэш
7 
Типовые ошибки
8
9 
Открытые контент-провайдеры 
OWASP M2 Insecure Data Storage в Android 
•Открыты по-умолчанию в SDK <= 16 
•Часто прицеплены к базе данных SQLite 
public synchronized Cursor query (Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 
{ 
-return Database.getReadableDB().query(Database.DEVICE_ID_TABLE, projection, selection, selectionArgs, null, null, sortOrder); 
+ return Database.getReadableDB().query(Database.DEVICE_ID_TABLE, null, null, null, null, null, null); 
}
10 
Oauth-токен, куда бы его деть? 
OWASP M2 Insecure Data Storage в iOS 
•Авторизуем пользователя и сохраняем OAuth-токен в plist-файлы приложения 
ru.yandex.fotki.client.plist 
{ 
... 
YandexLogin = testuser; 
YandexToken = 64bb**************fcb9; 
... 
}
11 
Что было в логах, остается в логах? 
OWASP M4 Unintended Data Leakage 
•OVER9000 способов логирования 
•Пишем в логи всё подряд, например, тело HTTP-запроса или авторизационные токены 
D/Facebook-authorize( 2228): Login Success! 
access_token=CAACO8cOreeMB**********QXANzAqzDz3IJZB3wZAZAD9PIUcrSzdVMNO1i6ZB9zogduHbZAl6fnXO**********EIJzuXak3V6CJCx**************B3D9ZBvLCEKTjs3w************* 
expires=1377739946011
12 
Совсем не HTTPS 
OWASP M3 Insufficient Transport Layer Protection 
•В iOS и Android 
•Либо совсем нет шифрования, либо не проверяем сертификаты 
NSMutableURLRequest *request = [self requestWithMethod:@"GET" path:requestURL parameters:nil]; 
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
operation.allowsInvalidSSLCertificate = YES;
13 
Решения 
•Общие библиотеки 
•Тотальный HTTPS с проверкой сертификатов и пинингом 
•Логирование с предфильтрацией 
•Использование системных хранилищ для токенов
14 
Неочевидные серьезные проблемы
15 
Нарушение SOP в браузере под iOS 
w = window.open('http://host/redirect.html'); 
setTimeout(function() 
{ 
w.document.write(document.domain+' writes to <script> 
document.write(document.domain) 
</script>'); 
}, 
5000); 
? 
Сайт 1 (На первой вкладке) 
Сайт 2 (На второй вкладке)
16 
Кто виноват, что делать? 
•Не сделали нужных проверок для особого случая работы вкладок 
•Было сложно сделать тесты для работы с вкладками 
•При взаимодействии вкладок этом должна выполняться same origin policy, либо дочерняя вкладка должна быть пустой (about:blank). 
•Новые сложные тесты, проверяющие логику работы вкладок.
17 
Broadcast Intent в Android 
Broadcast Intent 
Открытый контент провайдер 
Доступ к аттачментам
18 
Кто виноват, что делать? 
•Не знали, что broadcast intent может быть перехвачен третьей стороной 
•Думали, что длинный случайный идентификатор – достаточная защита для аттачмента 
•Отказались от пересылки идентификатора 
•Закрыли контент-провайдер
19 
Статистика 
There are three kinds of lies: lies, damned lies, and statistics
20 
Количество уязвимостей по платформам 
23 
84 
3 
2 
iOS 
Android 
Windows Phone 
Symbian 
За всё время работы программы
21 
•2,5 % сообщений про мобильные приложения 
•В среднем мы получаем по одной уязвимости раз в четыре дня 
•Выплачено около 500000 рублей (максимум 1337$) 
•Типовых проблем больше в приложениях для Android 
•Сложных проблем больше в iOS
22 
Выводы
23 
Что в итоге? 
•Большое количество исследователей 
•Участвуют компетентные профессионалы 
•Множество исправленных проблем и найденных решений 
•… 
•PROFIT!!!
24 
Спасибо за внимание!
25 
Юрий Леонычев 
Администратор информационной безопасности 
yleonychev@yandex-team.ru tracer0tong 
© 000«Яндекс» 2014

Выставка трофеев: итоги «охоты за ошибками» в мобильных приложениях, Юрий Леонычев

  • 1.
  • 2.
    2 Выставка трофеев Итоги «охоты» в мобильных приложениях
  • 3.
    3 "Alces alceselan trophee chateau Tanlay" by Myrabella - Own work. Licensed under Creative Commons Attribution-Share Alike 4.0 via Wikimedia Commons - https://commons.wikimedia.org/wiki/File:Alces_alces_elan_trophee_chateau_Tanlay.jpg#mediaviewer/File:Alces_alces_elan_trophee_chateau_Tanlay.jpg
  • 4.
    4 Охота заошибками •Мы платим за найденные проблемы с безопасностью •Не только в веб, но и в мобильных приложениях •Это программа поощрения для всех •Участвуют люди со всего мира •За интересные ошибки платим больше ;-) •Подробнее на http://company.yandex.ru/security/
  • 5.
  • 6.
    6 Моя классификация •Типовые ошибки •Неочевидные и забористые проблемы •Всяческий трэш
  • 7.
  • 8.
  • 9.
    9 Открытые контент-провайдеры OWASP M2 Insecure Data Storage в Android •Открыты по-умолчанию в SDK <= 16 •Часто прицеплены к базе данных SQLite public synchronized Cursor query (Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { -return Database.getReadableDB().query(Database.DEVICE_ID_TABLE, projection, selection, selectionArgs, null, null, sortOrder); + return Database.getReadableDB().query(Database.DEVICE_ID_TABLE, null, null, null, null, null, null); }
  • 10.
    10 Oauth-токен, кудабы его деть? OWASP M2 Insecure Data Storage в iOS •Авторизуем пользователя и сохраняем OAuth-токен в plist-файлы приложения ru.yandex.fotki.client.plist { ... YandexLogin = testuser; YandexToken = 64bb**************fcb9; ... }
  • 11.
    11 Что былов логах, остается в логах? OWASP M4 Unintended Data Leakage •OVER9000 способов логирования •Пишем в логи всё подряд, например, тело HTTP-запроса или авторизационные токены D/Facebook-authorize( 2228): Login Success! access_token=CAACO8cOreeMB**********QXANzAqzDz3IJZB3wZAZAD9PIUcrSzdVMNO1i6ZB9zogduHbZAl6fnXO**********EIJzuXak3V6CJCx**************B3D9ZBvLCEKTjs3w************* expires=1377739946011
  • 12.
    12 Совсем неHTTPS OWASP M3 Insufficient Transport Layer Protection •В iOS и Android •Либо совсем нет шифрования, либо не проверяем сертификаты NSMutableURLRequest *request = [self requestWithMethod:@"GET" path:requestURL parameters:nil]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; operation.allowsInvalidSSLCertificate = YES;
  • 13.
    13 Решения •Общиебиблиотеки •Тотальный HTTPS с проверкой сертификатов и пинингом •Логирование с предфильтрацией •Использование системных хранилищ для токенов
  • 14.
  • 15.
    15 Нарушение SOPв браузере под iOS w = window.open('http://host/redirect.html'); setTimeout(function() { w.document.write(document.domain+' writes to <script> document.write(document.domain) </script>'); }, 5000); ? Сайт 1 (На первой вкладке) Сайт 2 (На второй вкладке)
  • 16.
    16 Кто виноват,что делать? •Не сделали нужных проверок для особого случая работы вкладок •Было сложно сделать тесты для работы с вкладками •При взаимодействии вкладок этом должна выполняться same origin policy, либо дочерняя вкладка должна быть пустой (about:blank). •Новые сложные тесты, проверяющие логику работы вкладок.
  • 17.
    17 Broadcast Intentв Android Broadcast Intent Открытый контент провайдер Доступ к аттачментам
  • 18.
    18 Кто виноват,что делать? •Не знали, что broadcast intent может быть перехвачен третьей стороной •Думали, что длинный случайный идентификатор – достаточная защита для аттачмента •Отказались от пересылки идентификатора •Закрыли контент-провайдер
  • 19.
    19 Статистика Thereare three kinds of lies: lies, damned lies, and statistics
  • 20.
    20 Количество уязвимостейпо платформам 23 84 3 2 iOS Android Windows Phone Symbian За всё время работы программы
  • 21.
    21 •2,5 %сообщений про мобильные приложения •В среднем мы получаем по одной уязвимости раз в четыре дня •Выплачено около 500000 рублей (максимум 1337$) •Типовых проблем больше в приложениях для Android •Сложных проблем больше в iOS
  • 22.
  • 23.
    23 Что витоге? •Большое количество исследователей •Участвуют компетентные профессионалы •Множество исправленных проблем и найденных решений •… •PROFIT!!!
  • 24.
    24 Спасибо завнимание!
  • 25.
    25 Юрий Леонычев Администратор информационной безопасности yleonychev@yandex-team.ru tracer0tong © 000«Яндекс» 2014