Пентестер держит смартфон в отладочном кронштейне, зелёный свет терминала отражается на руках и очках. Монитор с фосфорным дисплеем освещает тёмную комнату.


На аудите Android-приложения для одного из банков клиент запросил «проверку на L2 по MASVS». Открываю актуальную версию стандарта - уровней L1, L2 и R в нём больше нет. OWASP убрал их в MASVS v2.0.0, наметив переход к системе Testing Profiles, которые планируется формализовать в MASTG. Разговор о скоупе затянулся на два часа: клиент оперировал терминами из v1.5.0, а стандарт жил по другим правилам. Ситуация типичная - OWASP MASVS обновление вышло весной 2023 года, но многие команды до сих пор строят чеклисты по старой версии. И потом удивляются, почему отчёт не маппится ни на что актуальное.

Почему OWASP пересмотрел стандарт безопасности мобильных приложений​

1780131456716.webp

Предыдущая версия MASVS (v1.5.0) копила проблемы несколько лет. С позиции мобильного пентестера, три вещи раздражали больше всего. Архитектура мобильных ОС изменилась. Защитные механизмы стали стандартом из коробоки. Разделение на "обычное" и "защищённое" приложение потеряло смысл.

Пересечения между контролями. Одно и то же требование формулировалось в разных разделах с минимальными вариациями. При составлении отчёта приходилось решать, куда вписать находку - в STORAGE или в CRYPTO - и часто это был вопрос вкуса, а не методологии. Пересказывать спеку в сотый раз не вижу смысла, но поверьте - дублирование было повсюду.

Нетестируемые контроли. Раздел MASVS-ARCH описывал архитектурные рекомендации и процессы governance. При внешнем аудите мобильного приложения у пентестера нет доступа к процессу разработки - только к результату. Эти контроли создавали видимость полноты, но верифицировать их на практике невозможно. Красивый фантик без содержимого.

Жёсткая привязка тестов к уровням. L1 означал «базовый», L2 - «для чувствительных данных», R - «устойчивость к реверсу». Одно и то же приложение могло требовать L2 по хранилищу и L1 по сетевому взаимодействию - стандарт такую гранулярность не предусматривал. Тупо: один уровень на всё приложение, хочешь не хочешь.

При рефакторинге команда OWASP MAS поставила четыре задачи (озвученные в официальном релизе на mas.owasp.org):
  • Сохранить абстракцию - детали тестирования оставить для MASTG.
  • Упростить - убрать дублирование контролей.
  • Навести терминологическую ясность - опираться на NIST SP 800-175B, NIST OSCAL, CWE.
  • Сузить скоуп - архитектурные и процессные требования безопасности мобильных приложений делегировать OWASP SAMM и NIST SP 800-218 (SSDF).
Контроли MASVS-ARCH полностью удалены из стандарта. По данным Approov, команда проекта решила, что архитектурные рекомендации хорошо покрыты в NIST SP 800-218 и OWASP SAMM - дублировать их в мобильном стандарте нет смысла. Побочный эффект позитивный: теперь каждый контроль в MASVS реально тестируем при внешнем аудите. Наконец-то.

MASVS 2.0 изменения: уровни L1/L2/R уступают место Testing Profiles​

Самое заметное изменение в OWASP MASVS v2.0.0, и именно оно вызывает путаницу в индустрии.

В v1.5.0 три уровня определяли скоуп тестирования:
  • L1 - базовый, для любого приложения.
  • L2 - глубокая проверка для приложений с чувствительными данными (финансы, здоровье).
  • R - дополнительные требования к устойчивости против реверс-инжиниринга и тамперинга.
В v2.0.0 эти уровни исключены из MASVS. Сам стандарт содержит только абстрактные контроли - что проверять. Вопросы как и насколько глубоко планируется вынести в MASTG (Mobile Application Security Testing Guide) в виде MAS Testing Profiles. На момент релиза v2.0.0 это направление развития; в MASTG пока продолжают использоваться уровни L1/L2/R как переходное решение.

Логика: один контроль MASVS может приводить к разным тестам в зависимости от профиля приложения. Возьмём контроль MASVS-STORAGE-1 («The app securely stores sensitive data»): для базового профиля допустимо хранение в internal storage, для расширенного - ожидается шифрование. Контроль один, а проходные критерии разные. Одна формулировка - два совершенно разных теста.

MAS Testing Profiles выровнены с NIST OSCAL (Open Security Controls Assessment Language) - стандартный формат описания контролей безопасности, позволяющий обмениваться наборами контролей между организациями в машиночитаемом виде. Для мобильной безопасности OWASP это означает интеграцию с другими фреймворками без ручного перемаппинга. Кто хоть раз маппил контроли руками между двумя стандартами - оценит.

На практике подход к отчёту меняется: вместо «приложение соответствует/не соответствует L2» теперь «приложение проверено по профилю L2 для категорий STORAGE и NETWORK, профилю L1 для AUTH». Гранулярность выше, но отчёт структурировать сложнее - нужно согласовывать профили с клиентом до начала работ. Без этого на сдаче отчёта начнётся цирк.

Сравнение MASVS vs MASVS 2.0 в части скоупинга:

ПараметрMASVS v1.5.0MASVS v2.0.0
Определение глубиныУровни L1/L2/R в самом стандартеTesting Profiles в MASTG (в разработке)
ГранулярностьОдин уровень на всё приложениеПрофиль per категория контролей
ФорматТекстовый документВыровнен с NIST OSCAL
Серверная аутентификацияВнутри MASVSДелегирована OWASP ASVS
Архитектурные контролиMASVS-ARCH (нетестируемые)Удалены, делегированы SAMM/NIST SSDF

MASVS контроли безопасности: новая структура в v2.0.0​

1780130141649.webp

OWASP MASVS v2.0.0 делит атакуемую поверхность мобильного приложения на контрольные группы. Каждая маркируется как MASVS-XXXXX, а индивидуальные контроли внутри - MASVS-XXXXX-Y.

ГруппаПокрытиеЧто изменилось в v2.0.0
MASVS-STORAGEХранение данных на устройстве (data-at-rest): KeyStore/Keychain, шифрованные БД, отсутствие открытого текста в sandboxУпрощена до 2 контролей из десятка
MASVS-CRYPTOКриптография: генерация ключей, отсутствие hardcoded-ключей, корректные алгоритмыВыровнена с NIST SP 800-175B и SP 800-57
MASVS-AUTHАутентификация: биометрия, MFA, валидация сессий, хранение токеновРазделена на клиентскую и серверную; серверная делегирована OWASP ASVS
MASVS-NETWORKСетевое взаимодействие: TLS, certificate pinning, запрет clear-text HTTPОднозначная позиция: pinning обязателен для максимальной безопасности канала
MASVS-PLATFORMВзаимодействие с платформой: WebView, IPC, deep links, Android intents, iOS URL schemesБез радикальных изменений, уточнения формулировок
MASVS-CODEКачество кода, обработка данных, актуальность приложенияМинимальные изменения
MASVS-RESILIENCEУстойчивость к реверсу и тамперингу13 требований v1.5.0 сжаты в 4 абстрактных контроля

По данным документации OWASP MAS, позднее добавилась группа MASVS-PRIVACY - требования к приватности пользовательских данных. Она не входила в первоначальный релиз v2.0.0, но является частью актуальной модели стандарта.

Что это значит для пентестера на практике:

MASVS-STORAGE - группа, которая раньше содержала десяток контролей, сведена к двум. Проверок не стало меньше - конкретные тесты переехали в MASTG. Но в отчёте пентестер оперирует двумя высокоуровневыми контролями, а не десятком пересекающихся. То же самое с MASVS-CRYPTO - два контроля вместо россыпи. Жить стало проще.

MASVS-AUTH - чёткое разделение: клиентская аутентификация (биометрия, локальный PIN) остаётся в MASVS, серверная делегирована OWASP ASVS. Логично: API-бэкенд проверяется по другому стандарту, пентестер мобильного приложения фокусируется на клиентской части. Раньше это была серая зона - теперь граница проведена.

MASVS-NETWORK - по данным Approov, в v2.0.0 OWASP однозначно заявил: certificate pinning обязателен для максимального уровня безопасности канала. В v1.5.0 формулировки были размытыми, и некоторые команды ссылались на рекомендации Apple и Google (которые сами по себе противоречивы) как на основание не реализовывать пиннинг. Двусмысленность устранена. Попробуй теперь отмазаться.

MASVS-RESILIENCE: что проверять на мобильном пентесте​

Группа MASVS-RESILIENCE описывает противодействие тем техникам, которые пентестер использует ежедневно - поэтому она заслуживает отдельного разбора.

В v1.5.0 раздел «V8: Resilience Requirements» содержал 13 специфичных требований. В v2.0.0 они сведены к четырём абстрактным контролям. По данным Digital.ai, каждый контроль настолько абстрактен, что покрывает не только существующие, но и будущие векторы атак - конкретика вынесена в MASTG.

MASVS-RESILIENCE-1 - валидация целостности платформы. Приложение проверяет: рутован/джейлбрейкнут ли девайс, запущено ли оно в эмуляторе или виртуализаторе, установлены ли потенциально вредоносные приложения. Маппится на Subvert Trust Controls (T1553, Defense Evasion) по MITRE ATT&CK.

MASVS-RESILIENCE-2 - защита от тамперинга: проверка подписи пакета, валидация целостности DEX-кода и нативных библиотек, проверка ресурсов. Маппится на Code Signing (T1553.002, Defense Evasion).

MASVS-RESILIENCE-3 - защита от статического анализа: обфускация, шифрование строк, control flow flattening, удаление символов, инъекция мёртвого кода. Маппится на Obfuscated Files or Information (T1027, Defense Evasion).

MASVS-RESILIENCE-4 - защита от динамического анализа: детекция дебаггера, обнаружение Frida и аналогичных фреймворков, детекция hooking и swizzling.

На практике проверка RESILIENCE-4 начинается с подключения Frida к целевому приложению:
Bash:
frida -U -f com.target.app
Если приложение продолжает работать без реакции - контроль MASVS-RESILIENCE-4 не реализован. Качественная реализация завершает процесс при обнаружении Frida-сервера или его артефактов в памяти. Всё просто: подцепился - значит, защиты нет.

Для RESILIENCE-3 - распаковка APK и анализ читаемости классов:
Bash:
apktool d target.apk -o decoded_app
jadx -d jadx_output/ target.apk
Если после jadx получаем осмысленные имена классов, методов и строковые литералы в открытом виде - обфускация либо отсутствует, либо минимальна. ProGuard с настройками по умолчанию переименовывает классы, но не шифрует строки - этого недостаточно для профиля R. По-хорошему, после jadx код должен выглядеть как каша из a.b.c() и зашифрованных строк, а не как учебник по Java.

В v2.0.0 зафиксирована позиция: обфускация необходима, но недостаточна. Approov отмечает новый акцент на защите от динамического анализа и runtime-тамперинга - эволюция по сравнению с v1.5.0, где основной упор был на статические меры. Правильное направление: статический анализ обходится проще, чем качественный anti-debug.

Маппинг MASVS на MITRE ATT&CK для мобильной безопасности​

1780130836102.webp

📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме

Верификация безопасности мобильных приложений: обновляем рабочий процесс​

Переход на MASVS v2.0.0 - не одномоментное событие. OWASP сам признаёт «transition phase»: MASTG в версии v1.5.0 изначально оставался привязан к MASVS v1.5.0. Полная синхронизация MASTG с MASVS v2.0.0 потребовала времени, и команда продолжала работу над маппингом на протяжении 2023–2024 годов.

Ключевая концепция нового MASTG - элементарные тесты. Старые крупные тест-кейсы разбиваются на мелкие управляемые блоки. Каждый целостный тест привязан к конкретному контролю MASVS и конкретному профилю (L1, L2, R). Это даёт гранулярную картину покрытия и упрощает применение профилей к конкретному типу приложения. Вместо монолитного «проверить хранение данных» - набор точечных проверок, каждая с чётким pass/fail.

Ещё одно пополнение - MASWE (Mobile Application Security Weakness Enumeration). Согласно официальной странице OWASP MAS, MASWE - перечень типовых уязвимостей и проблем приватности мобильных приложений, который служит мостом между MASVS (что проверять) и MASTG (как проверять). По сути, MASWE делает для мобильного AppSec то же, что CWE для веба - стандартизирует описание слабостей.

Для обновления пентест-процесса под MASTG и MASVS 2024 рекомендую три шага:
  1. Скачать актуальный чеклист с mas.owasp.org. Чеклист объединяет все категории MASVS в одну таблицу с трассируемостью до конкретных версий MASVS и MASTG. Поддерживает добавление колонок - можно расширить под формат отчёта вашей компании.
  2. Перемаппить старые тесты на новые контроли. Если раньше чеклист содержал 15 пунктов по STORAGE, теперь их два - но каждый покрывается набором атомарных тестов из MASTG. Нужно убедиться, что все прежние проверки вошли в новые тесты и ни одна не потерялась при переходе. Потратьте на это день - это дешевле, чем обнаружить пробел на сдаче отчёта.
  3. Согласовать профили с клиентом до начала работ. Вместо «L1 или L2» обсуждение идёт по категориям: STORAGE-L2, NETWORK-L2, AUTH-L1, RESILIENCE-R. Это требует более детального скоупинга, но снижает риск недоразумений при сдаче отчёта. Я теперь включаю таблицу профилей в оффер - клиент подписывает конкретный скоуп, а не абстрактный «уровень».
MAS Crackmes, перезапущенные одновременно с MASVS v2.0.0, дают практические задания по реверс-инжинирингу Android и iOS - полезный ресурс для отработки навыков проверки MASVS-RESILIENCE в контролируемой среде. Потренироваться «на кошках», прежде чем лезть в боевое приложение банка.

За два года с момента выхода OWASP MASVS v2.0.0 наблюдаю одну и ту же картину: стандарт стал лучше, а его применение - хаотичнее. Команда OWASP MAS сделала правильные вещи: убрала нетестируемые контроли, разделила «что проверять» и «как проверять», выровнялась с NIST. На бумаге структура безупречна. В реальности - разрыв. На проектах команды нередко продолжают использовать чеклисты v1.5.0. Клиенты просят «L2-аудит», а объяснение про профили отнимает время, которое можно потратить на тестирование. Добавление MASWE как промежуточного звена - сильный ход, но вся эта система всё ещё собирается по частям.

Мой прогноз: к середине 2026 года переход завершится окончательно и MASVS v1.x перестанут упоминать даже в корпоративных тендерных документах. Кто сейчас пишет чеклисты под старую версию - остановитесь и потратьте день на перемаппинг. Это инвестиция, которая окупится на ближайшем проекте. А привязка контролей к ATT&CK-техникам, описанная выше, превращает отчёт по мобильному аудиту из формальной бумаги в документ, понятный SOC-команде заказчика. Попробуйте добавить колонку с ATT&CK ID в свой следующий отчёт - и посмотрите на реакцию.
 
Последнее редактирование модератором:
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab