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

CodeFest 2018. Николай Исламов (Tinkoff) — Mobile Application Security Verification Standard

CodeFest 2018. Николай Исламов (Tinkoff) — Mobile Application Security Verification Standard

Посмотрите выступление Николая: https://2018.codefest.ru/lecture/1325/

В докладе расскажу о стандарте безопасности мобильных приложений (MASVS).

Как MASVS помогает создавать безопасные приложения и осуществлять поддержку на нужном уровне.

Разберем из чего состоит стандарт и какой уровень безопасности подходит именно для вашего приложения.

Объясню в чем ценность MASVS для аналитиков, разработчиков и тестировщиков.

Уровень
Архитекторы мобильных приложений, разработчики мобильных приложений, специалисты по безопасности мобильных приложений. Уровень значения не имеет.

CodeFest

April 09, 2018
Tweet

More Decks by CodeFest

Other Decks in Programming

Transcript

  1. 2 ОБО МНЕ • Mobile AppSec Expert at Tinkoff.ru •

    Information Security since 2008 • Mobile App Development since 2012 • Lazy Blogger
  2. 5 СТАТИСТИКА TRUSTWAVE ЗА 2017г 95% мобильных приложений уязвимы: •

    6.5 среднее количество уязвимостей на приложение • 35% имеют критические уязвимости • 45% имеют уязвимости с высоким риском
  3. 6 РИСКИ $ Потеря 10 000 000р H Публикация уязвимости

    на хабре Утечка пользовательских данных
  4. 8 ОСНОВНЫЕ ПРОБЛЕМЫ • Не актуальны базовые WEB уязвимости •

    Код запускается на стороне клиента • Настоящая изоляция приложений • Доверенная установка приложений • Есть доступ к пользовательским данным
  5. 10 СТАНДАРТ ПРОВЕРКИ МОБИЛЬНОЙ БЕЗОПАСНОСТИ • Формализует best practice •

    Разработан специально для мобильных приложений • Высокоуровневый • Не зависит от операционной системы
  6. 12 L1: STANDARD SECURITY V1: Architecture V2: Data storage V3:

    Cryptography V4: Authentication V5: Network Communication V6: Platform Interaction V7: Code Quality V8: Resiliency
  7. 13 L2: DEFENSE-IN-DEPTH V1: Architecture V2: Data storage V3: Cryptography

    V4: Authentication V5: Network Communication V6: Platform Interaction V7: Code Quality V8: Resiliency
  8. 14 R: RESILIENCY AGAINST REVERSE ENGINEERING AND TAMPERING V1: Architecture

    V2: Data storage V3: Cryptography V4: Authentication V5: Network Communication V6: Platform Interaction V7: Code Quality V8: Resiliency
  9. 16 L1: STANDART SECURITY • Подходит для всех мобильных приложений

    • Включает основные практики безопасности • Предотвращает эксплуатацию распространенных уязвимостей
  10. 17 TEST CASE L1: STANDART SECURITY V2: DATA STORAGE AND

    PRIVACY REQUIREMENTS 2.2 No sensitive data is written to application logs.
  11. 18 НЕПРЕДНАМЕРЕННЫЕ УТЕЧКИ В ЛОГАХ 06-23 16:48:11.728 4341-4364/ru.tinkoff.school.myapplication I/OpenGLRenderer: Initialized

    EGL, version 1.4 06-23 16:49:04.610 5182-5182/ru.tinkoff.school.myapplication W/System: ClassLoader referenced unknown path: /data/app/ru.tinkoff.school.myapplication-2/lib/x86 06-23 16:49:04.708 5182-5182/ru.tinkoff.school.myapplication E/TAG: https://api.tinkoff.ru/v1/login?username=j.bond&password=qwerty 06-23 16:49:04.915 5182-5212/ru.tinkoff.school.myapplication D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
  12. 19 НЕПРЕДНАМЕРЕННЫЕ УТЕЧКИ В ЛОГАХ 06-23 16:48:11.728 4341-4364/ru.tinkoff.school.myapplication I/OpenGLRenderer: Initialized

    EGL, version 1.4 06-23 16:49:04.610 5182-5182/ru.tinkoff.school.myapplication W/System: ClassLoader referenced unknown path: /data/app/ru.tinkoff.school.myapplication-2/lib/x86 06-23 16:49:04.708 5182-5182/ru.tinkoff.school.myapplication E/TAG: https://api.tinkoff.ru/v1/login?username=j.bond&password=qwerty 06-23 16:49:04.915 5182-5212/ru.tinkoff.school.myapplication D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
  13. 20 НЕПРЕДНАМЕРЕННЫЕ УТЕЧКИ В ЛОГАХ • Возможно где-то в коде

    есть что-то вроде public void sendRequest(String url) { Log.e("TAG", url); // making http request … } • Или даже такое public void login(String user, String pass) { // TODO for debug only, remove before production Log.d("DEBUG", "user = " + user + " pass " + pass); // making authorization … }
  14. 21 СТАТИЧЕСКИЙ ПОИСК НЕПРЕДНАМЕРЕННЫХ УТЕЧЕК В ЛОГАХ Функции и классы:

    • android.util.Log • Log.d | Log.e | Log.i | Log.v | Log.w | Log.wtf • Logger Ключевые слова: • System.out.print | System.err.print • logfile • logging • logs
  15. 22 СТАТИЧЕСКИЙ ПОИСК НЕПРЕДНАМЕРЕННЫХ УТЕЧЕК В ЛОГАХ ProGuard -assumenosideeffects class

    android.util.Log { public static boolean isLoggable(java.lang.String, int); public static int v(...); public static int i(...); public static int w(...); public static int d(...); public static int e(...); public static int wtf(...); }
  16. 23 ДИНАМИЧЕСКИЙ ПОИСК НЕПРЕДНАМЕРЕННЫХ УТЕЧЕК В ЛОГАХ 1. Используйте все

    функции приложения 2. Проверьте, что в папке приложения (/data/data/<package-name>) не появились файлы логов 3. Проверьте logcat на чувствительные данные
  17. 24 L2: DEFENSE-IN-DEPTH • Подходит для мобильных приложений обрабатывающих конфиденциальные

    данные • Дополнительный слой безопасности • Предотвращает эксплуатацию сложных уязвимостей
  18. 25 TEST CASE L2: DEFENSE-IN-DEPTH V2: DATA STORAGE AND PRIVACY

    REQUIREMENTS 2.9 The app removes sensitive data from views when backgrounded.
  19. 27 СТАТИЧЕСКАЯ ПРОВЕРКА @property (UIImageView *)backgroundImage; - (void)applicationDidEnterBackground:(UIApplication *)application {

    UIImageView *myBanner = [[UIImageView alloc] initWithImage:@"overlayImage.png"]; self.backgroundImage = myBanner; [self.window addSubview:myBanner]; }
  20. 28 ДИНАМИЧЕСКАЯ ПРОВЕРКА 1. Зайдите на экран с чувствительными данными

    2. Нажмите кнопку Home 3. Перейдите к каталогу /var/mobile/Containers/Data/Application/$APP_ID/Library/Caches/ Snapshots/
  21. 29 L3: RESILIENCY AGAINST REVERSE ENGINEERING AND TAMPERING • Применим

    к приложениям, обрабатывающим критичные данные • Может служить для защиты интеллектуальной собственности • Противодействие реверсу • Предотвращает клиентские атаки
  22. 30 TEST CASE V8: RESILIENCE REQUIREMENTS L3: RESILIENCY AGAINST REVERSE

    ENGINEERING AND TAMPERING 8.2 The app prevents debugging and/or detects, and responds to, a debugger being attached. All available debugging protocols must be covered.
  23. 31 ИСПОЛЬЗУЯ PTRACE #import <dlfcn.h> #import <sys/types.h> #import <stdio.h> typedef

    int (*ptrace_ptr_t)(int _request, pid_t _pid, caddr_t _addr, int _data); void anti_debug() { ptrace_ptr_t ptrace_ptr = (ptrace_ptr_t)dlsym(RTLD_SELF, "ptrace"); ptrace_ptr(31, 0, 0, 0); // PTRACE_DENY_ATTACH = 31 }
  24. 35 МЕТРИКИ V1: Architecture V2: Data storage V3: Cryptography V4:

    Authentication V5: Network Communication V6: Platform Interaction V7: Code Quality V8: Resiliency
  25. 36 МЕТРИКИ V1: Architecture V2: Data storage V3: Cryptography V4:

    Authentication V5: Network Communication V6: Platform Interaction V7: Code Quality V8: Resiliency
  26. 37 ЗАКЛЮЧЕНИЕ • MASVS дает четкое руководство что и как

    проверять в мобильном приложении • Разделяет уровни безопасности приложения • Имеет разумное количество элементов и контролей безопасности • Оставляет хакера без работы ☺
  27. 38 ССЫЛКИ • OWASP Mobile Application Security Verification Standard •

    OWASP Mobile Security Testing Guide • Mobile App Security Checklist • Trustwave Global Security Report • WhiteHatSec Application Security Report