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 для аналитиков, разработчиков и тестировщиков.

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

16b6c87229eaf58768d25ed7b2bbbf52?s=128

CodeFest

April 09, 2018
Tweet

Transcript

  1. 2.

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

    Information Security since 2008 • Mobile App Development since 2012 • Lazy Blogger
  2. 5.

    5 СТАТИСТИКА TRUSTWAVE ЗА 2017г 95% мобильных приложений уязвимы: •

    6.5 среднее количество уязвимостей на приложение • 35% имеют критические уязвимости • 45% имеют уязвимости с высоким риском
  3. 6.

    6 РИСКИ $ Потеря 10 000 000р H Публикация уязвимости

    на хабре Утечка пользовательских данных
  4. 8.

    8 ОСНОВНЫЕ ПРОБЛЕМЫ • Не актуальны базовые WEB уязвимости •

    Код запускается на стороне клиента • Настоящая изоляция приложений • Доверенная установка приложений • Есть доступ к пользовательским данным
  5. 10.

    10 СТАНДАРТ ПРОВЕРКИ МОБИЛЬНОЙ БЕЗОПАСНОСТИ • Формализует best practice •

    Разработан специально для мобильных приложений • Высокоуровневый • Не зависит от операционной системы
  6. 11.
  7. 12.

    12 L1: STANDARD SECURITY V1: Architecture V2: Data storage V3:

    Cryptography V4: Authentication V5: Network Communication V6: Platform Interaction V7: Code Quality V8: Resiliency
  8. 13.

    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
  9. 14.

    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
  10. 16.

    16 L1: STANDART SECURITY • Подходит для всех мобильных приложений

    • Включает основные практики безопасности • Предотвращает эксплуатацию распространенных уязвимостей
  11. 17.

    17 TEST CASE L1: STANDART SECURITY V2: DATA STORAGE AND

    PRIVACY REQUIREMENTS 2.2 No sensitive data is written to application logs.
  12. 18.

    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
  13. 19.

    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
  14. 20.

    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 … }
  15. 21.

    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
  16. 22.

    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(...); }
  17. 23.

    23 ДИНАМИЧЕСКИЙ ПОИСК НЕПРЕДНАМЕРЕННЫХ УТЕЧЕК В ЛОГАХ 1. Используйте все

    функции приложения 2. Проверьте, что в папке приложения (/data/data/<package-name>) не появились файлы логов 3. Проверьте logcat на чувствительные данные
  18. 24.

    24 L2: DEFENSE-IN-DEPTH • Подходит для мобильных приложений обрабатывающих конфиденциальные

    данные • Дополнительный слой безопасности • Предотвращает эксплуатацию сложных уязвимостей
  19. 25.

    25 TEST CASE L2: DEFENSE-IN-DEPTH V2: DATA STORAGE AND PRIVACY

    REQUIREMENTS 2.9 The app removes sensitive data from views when backgrounded.
  20. 27.

    27 СТАТИЧЕСКАЯ ПРОВЕРКА @property (UIImageView *)backgroundImage; - (void)applicationDidEnterBackground:(UIApplication *)application {

    UIImageView *myBanner = [[UIImageView alloc] initWithImage:@"overlayImage.png"]; self.backgroundImage = myBanner; [self.window addSubview:myBanner]; }
  21. 28.

    28 ДИНАМИЧЕСКАЯ ПРОВЕРКА 1. Зайдите на экран с чувствительными данными

    2. Нажмите кнопку Home 3. Перейдите к каталогу /var/mobile/Containers/Data/Application/$APP_ID/Library/Caches/ Snapshots/
  22. 29.

    29 L3: RESILIENCY AGAINST REVERSE ENGINEERING AND TAMPERING • Применим

    к приложениям, обрабатывающим критичные данные • Может служить для защиты интеллектуальной собственности • Противодействие реверсу • Предотвращает клиентские атаки
  23. 30.

    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.
  24. 31.

    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 }
  25. 35.

    35 МЕТРИКИ V1: Architecture V2: Data storage V3: Cryptography V4:

    Authentication V5: Network Communication V6: Platform Interaction V7: Code Quality V8: Resiliency
  26. 36.

    36 МЕТРИКИ V1: Architecture V2: Data storage V3: Cryptography V4:

    Authentication V5: Network Communication V6: Platform Interaction V7: Code Quality V8: Resiliency
  27. 37.

    37 ЗАКЛЮЧЕНИЕ • MASVS дает четкое руководство что и как

    проверять в мобильном приложении • Разделяет уровни безопасности приложения • Имеет разумное количество элементов и контролей безопасности • Оставляет хакера без работы ☺
  28. 38.

    38 ССЫЛКИ • OWASP Mobile Application Security Verification Standard •

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