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

553 views
445 views

Published on

Я расскажу про самые интересные и массовые уязвимости, которые находили в мобильных приложениях Яндекса внешние исследователи. Мы обсудим, почему эти уязвимости появились и как их не повторить в своих проектах, а также что мы сами сделали, чтобы больше не наступать на те же грабли.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
553
On SlideShare
0
From Embeds
0
Number of Embeds
311
Actions
Shares
0
Downloads
2
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

  1. 1. 1
  2. 2. 2 Выставка трофеев Итоги «охоты» в мобильных приложениях
  3. 3. 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. 4. 4 Охота за ошибками •Мы платим за найденные проблемы с безопасностью •Не только в веб, но и в мобильных приложениях •Это программа поощрения для всех •Участвуют люди со всего мира •За интересные ошибки платим больше ;-) •Подробнее на http://company.yandex.ru/security/
  5. 5. 5 Скучная классификация трофеев
  6. 6. 6 Моя классификация •Типовые ошибки •Неочевидные и забористые проблемы •Всяческий трэш
  7. 7. 7 Типовые ошибки
  8. 8. 8
  9. 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. 10 Oauth-токен, куда бы его деть? OWASP M2 Insecure Data Storage в iOS •Авторизуем пользователя и сохраняем OAuth-токен в plist-файлы приложения ru.yandex.fotki.client.plist { ... YandexLogin = testuser; YandexToken = 64bb**************fcb9; ... }
  11. 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. 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. 13 Решения •Общие библиотеки •Тотальный HTTPS с проверкой сертификатов и пинингом •Логирование с предфильтрацией •Использование системных хранилищ для токенов
  14. 14. 14 Неочевидные серьезные проблемы
  15. 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. 16 Кто виноват, что делать? •Не сделали нужных проверок для особого случая работы вкладок •Было сложно сделать тесты для работы с вкладками •При взаимодействии вкладок этом должна выполняться same origin policy, либо дочерняя вкладка должна быть пустой (about:blank). •Новые сложные тесты, проверяющие логику работы вкладок.
  17. 17. 17 Broadcast Intent в Android Broadcast Intent Открытый контент провайдер Доступ к аттачментам
  18. 18. 18 Кто виноват, что делать? •Не знали, что broadcast intent может быть перехвачен третьей стороной •Думали, что длинный случайный идентификатор – достаточная защита для аттачмента •Отказались от пересылки идентификатора •Закрыли контент-провайдер
  19. 19. 19 Статистика There are three kinds of lies: lies, damned lies, and statistics
  20. 20. 20 Количество уязвимостей по платформам 23 84 3 2 iOS Android Windows Phone Symbian За всё время работы программы
  21. 21. 21 •2,5 % сообщений про мобильные приложения •В среднем мы получаем по одной уязвимости раз в четыре дня •Выплачено около 500000 рублей (максимум 1337$) •Типовых проблем больше в приложениях для Android •Сложных проблем больше в iOS
  22. 22. 22 Выводы
  23. 23. 23 Что в итоге? •Большое количество исследователей •Участвуют компетентные профессионалы •Множество исправленных проблем и найденных решений •… •PROFIT!!!
  24. 24. 24 Спасибо за внимание!
  25. 25. 25 Юрий Леонычев Администратор информационной безопасности yleonychev@yandex-team.ru tracer0tong © 000«Яндекс» 2014

×