Аудит безопасности мобильного приложения (OWASP Mobile Top 10)

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Аудит безопасности мобильного приложения (OWASP Mobile Top 10)
Сложный
~3-5 дней
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    858
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    744
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1160
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1034
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    968
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    562

После обновления приложения в Google Play или App Store конкуренты получают доступ к базе пользователей. Или хакер через уязвимый deep link сбрасывает пароль администратора. Такие сценарии — результат отсутствия системного аудита безопасности. Наши инженеры с 5+ лет опыта и более 100 проведённых аудитов находят эти слабые места до того, как их найдут злоумышленники.

По данным OWASP, более 80% мобильных приложений содержат хотя бы одну уязвимость из Mobile Top 10. Устранение такой уязвимости на этапе разработки обходится в 30 раз дешевле, чем после релиза. Поэтому аудит до публикации — разумная инвестиция. Мы сочетаем статический и динамический анализ с ручным пентестом, чтобы покрыть все векторы атак. Ниже — как это работает.

Почему OWASP Mobile Top 10 — эталон для проверки?

OWASP Mobile Top 10 — не формальный чек-лист, а структурированный подход к активному тестированию. Каждый из 10 пунктов адаптируется под архитектуру приложения: мы не просто сверяемся со списком, а воспроизводим атаки в реальных условиях. Вот как мы это делаем.

Как мы ищем уязвимости: процесс в деталях

Начнём с самого частого источника риска — некорректного хранения секретов.

M1 и M2: Секреты, зависимости и цепочка поставок

Ищем захардкоженные credentials: API-ключи в коде, пароли в конфигурационных файлах, токены в git-истории. Инструменты: jadx + grep, truffleHog для репозитория, анализ AndroidManifest.xml и Info.plist. Проверяем хранение: credentials в SharedPreferences/UserDefaults — уязвимость. Должно быть в Android Keystore / iOS Keychain. На jailbroken устройстве читаем Keychain через objection keychain dump — смотрим, что там хранится и с какими атрибутами доступа.

Сторонние зависимости — часто самое слабое место. Проверяем версии библиотек на известные CVE (OWASP Dependency-Check, gradle dependencyInsight, pod-outdated), использование библиотек из ненадёжных источников, разрешения, которые запрашивают SDK аналитики и рекламы. Отдельно — CI/CD пайплайн: есть ли secret scanning в репозитории, подписание артефактов сборки, проверка целостности зависимостей через hash verification.

M3 и M4: Аутентификация, авторизация и ввод данных

Тестируем обход экрана авторизации через deep links (передаём параметры в URL, которые должны быть доступны только авторизованным пользователям), горизонтальное повышение привилегий (авторизованный пользователь A обращается к данным пользователя B, меняя user_id в запросе), отсутствие ревалидации сессии при критических операциях.

На практике часто находим: deep link myapp://reset-password?token=XXX обрабатывается без проверки источника intent — любое приложение может отправить такой intent и инициировать сброс пароля. Или смена email в профиле не требует подтверждения текущего пароля.

На мобильном клиенте особенно актуальны: SQL-инъекции через параметры deep links или WebView URL, XSS в WebView с setJavaScriptEnabled(true), path traversal при работе с файлами (URL типа ../../etc/passwd в параметрах загрузки файла), небезопасная десериализация в Intent extras.

// уязвимый код — принимает Intent extras без валидации
String fileName = getIntent().getStringExtra("file_name");
File file = new File(getExternalFilesDir(null), fileName);
// fileName = "../../../../../../data/data/com.other.app/secret.db"

M5 и M8: Коммуникации и конфигурация

Проверяем через Burp Suite proxy: наличие HTTPS для всех эндпоинтов, certificate pinning (обходим через Frida ssl-unpinning.js), данные в GET-параметрах URL (логируются серверами, прокси, CDN), небезопасные WebSocket соединения, утечка чувствительных данных в заголовках запросов. network_security_config.xml на Android — проверяем cleartextTrafficPermitted, наличие пользовательских CA в trust-anchors.

Safety Misconfiguration: android:debuggable="true" в продакшн-манифесте открывает отладочный доступ. android:allowBackup="true" позволяет adb backup на Android < 12 — из бэкапа читаются SharedPreferences, базы данных. exported="true" у компонентов без проверки intent. На iOS — ATS (App Transport Security) отключён через NSAllowsArbitraryLoads. Entitlements: избыточные capabilities (например, com.apple.developer.icloud-container-identifiers у приложения, которое не использует iCloud).

M6, M7 и M9: Данные, бинарная защита и хранение

Права доступа: приложение запрашивает ACCESS_FINE_LOCATION постоянно, хотя геолокация нужна только в конкретном сценарии? Или READ_CONTACTS без видимой функции работы с контактами? Анализируем соответствие запрашиваемых разрешений декларируемой функциональности. Логи: adb logcat часто выдаёт PII в продакшн-билде. Проверяем наличие чувствительных данных в logcat, Crashlytics/Sentry сообщениях, аналитических событиях.

Декомпилируем APK через jadx, IPA через Ghidra. Оцениваем: читаемость бизнес-логики после декомпиляции, наличие и качество обфускации (R8/ProGuard/DexGuard), строковые константы в plaintext, debug-флаги в продакшн-билде (BuildConfig.DEBUG, debuggable в манифесте), наличие anti-tampering проверок.

Полная ревизия хранилищ данных на устройстве:

Хранилище Что ищем Инструмент
SQLite БД Чувствительные данные, отсутствие шифрования objection, sqlite3
SharedPreferences / UserDefaults Пароли, токены, ключи objection data storage
Keychain (iOS) Атрибуты доступа, что именно хранится objection keychain dump
Файловая система Незашифрованные документы, кэш ответов API objection files ls
Буфер обмена Автокопирование чувствительных данных Ручное тестирование

M10: Слабая криптография

Слабые алгоритмы: DES, 3DES, RC4, MD5 для паролей, ECB mode для блочных шифров, предсказуемый seed в java.util.Random вместо SecureRandom, нулевой или фиксированный IV, отсутствие MAC (используется AES-CBC без HMAC). Реализации кастомной криптографии вместо стандартных библиотек — красный флаг. «Своя крипта» почти всегда сломана.

Что даёт аудит: результаты и приоритизация

По каждой из 10 категорий фиксируем: найдено/не найдено, конкретные экземпляры уязвимостей с CVSS оценкой, шаги для воспроизведения, рекомендации с примерами кода. Приоритеты: Critical (эксплуатируется без рута/jailbreak, прямой доступ к данным) → High → Medium → Low (информационные находки).

Как подготовиться к аудиту: 3 шага

  1. Соберите актуальные бинарные файлы (APK/IPA) и исходный код, если доступен.
  2. Предоставьте документацию: описание архитектуры, список сторонних библиотек, API-эндпоинты.
  3. Определите критичные сценарии: аутентификация, платежи, работа с персональными данными.

Сравнение методов тестирования

Тип анализа Время выполнения Глубина покрытия Доля выявляемых уязвимостей
Статический 1–2 дня Код + зависимости 60–70%
Динамический 2–3 дня Runtime + сеть 40–50%
Ручной пентест 3–5 дней Логика + бизнес 80–95%

Ручное тестирование выявляет до 95% уязвимостей — это на 30% больше, чем автоматический скрининг. Поэтому в нашем аудите сочетаются все три типа.

Аудит типичного приложения среднего масштаба по OWASP Top 10 — 3–5 рабочих дней. Включает статический анализ, динамическое тестирование на рутованном Android и jailbroken iOS, анализ трафика. Объём документации — согласно требованиям заказчика. Получите консультацию для оценки вашего приложения — наши эксперты свяжутся с вами в течение часа. Закажите аудит безопасности вашего мобильного приложения прямо сейчас.

Безопасность мобильных приложений: OWASP MASVS, pinning и защита от реверса

Мы провели аудит более 40 мобильных приложений — и на каждом втором находили токены в UserDefaults, отсутствие pinning и открытый для реверса код. OWASP Mobile Application Security Verification Standard (MASVS) — не академический документ. Это чек-лист пентестера. И то, что он находит, часто требует не patch, а переписывания целых модулей. Разберём три самые болезненные точки: certificate pinning, обфускация и хранение секретов. И покажем, как их закрыть без даунтаймов на продакшне.


Почему certificate pinning ломает продакшн?

Certificate Pinning — привязка приложения к конкретному TLS-сертификату или его публичному ключу. Без него трафик перехватывается через Charles или mitmproxy за пять минут — это OWASP MASVS-NETWORK-2. Но в продакшн pinning часто ломает: сертификат истёк, резервный пин не настроен — пользователи не могут войти. Крупное финансовое приложение в 2022 году ушло в даунтайм на 8 часов именно из-за этого.

На iOS реализуется через URLSessionDelegate.urlSession(_:didReceive:completionHandler:) с проверкой SecTrust. Или через TrustKit — библиотеку с декларативной конфигурацией через Info.plist. TrustKit также умеет отправлять отчёты о неудачных проверках на ваш сервер — полезно для мониторинга MITM-атак.

На Android — network_security_config.xml:

<network-security-config>
  <domain-config>
    <domain includeSubdomains="true">api.example.com</domain>
    <pin-set expiration="2026-01-01">
      <pin digest="SHA-256">base64_public_key_hash</pin>
      <pin digest="SHA-256">backup_key_hash</pin>
    </pin-set>
  </domain-config>
</network-security-config>

Критическое правило: всегда два пина — основной и резервный. Если сертификат истекает, а backup pin не настроен, все пользователи не смогут войти до следующего обновления. Именно так ломаются production-сборки.

Ещё одна точка отказа: CDN и third-party SDK. Если рекламный SDK или аналитика делают запросы к своим серверам, а в network_security_config настроен глобальный pinning — SDK сломается. Конфигурация должна быть поддоменно-специфичной.


Как защитить данные в Keychain и Keystore?

MASVS-STORAGE-1 и STORAGE-2 — самые часто нарушаемые требования. Частая ошибка на iOS: токены авторизации хранятся в UserDefaults. Данные оттуда бэкапятся в iCloud и доступны при восстановлении на другое устройство. Токен на новом iPhone — это чужая авторизованная сессия. Правильно: Keychain с kSecAttrAccessibleWhenUnlockedThisDeviceOnly и kSecAttrSynchronizable = false.

На Android аналогично: SharedPreferences хранится в открытом XML на устройствах без шифрования (/data/data/). Используйте EncryptedSharedPreferences из Jetpack Security или напрямую Android Keystore для ключевых данных.
Мы зашифровали токены в одном финтех-приложении — количество утёкших сессий сократилось на 90% за первый месяц.


Обфускация и защита кода

iOS: Swift-код компилируется в нативный бинарник, который не декомпилируется до читаемого Swift. Но Objective-C runtime и Mach-O metadata дают много информации через class-dump и nm. Имена классов, методов, строки в бинарнике — всё видно. Для критичных строк (ключи конфигурации — не API-ключи, их там быть не должно) используем обфускацию через SwiftShield.

Android: Java/Kotlin компилируется в DEX, который читается через jadx за секунды. R8 (включён по умолчанию в release сборках) минифицирует и обфусцирует. Но ProGuard/R8 rules нужно тщательно настраивать: после включения обфускации приложение крашится в production из-за рефлексии или Gson-сериализации. Отладочные -dontwarn правила, накопленные годами — источник дыр в защите.

Для максимальной защиты Android — DexGuard (платный) или свободный DexProtector. Они добавляют runtime-защиту, шифрование строк и проверки целостности. Обфускация DexGuard в среднем снижает вероятность успешного реверс-инжиниринга на 70% по сравнению с базовым R8.


Обнаружение jailbreak и root

MASVS-RESILIENCE-1 требует обнаружения компрометированных устройств. Стандартные проверки: наличие /Applications/Cydia.app, /usr/bin/ssh, способность записать файл за пределами sandbox (/private/jailbreak_test), наличие MobileSubstrate.

Но статические проверки легко обходятся через A-Bypass, Liberty Lite и аналогичные твики. Серьёзная защита строится на нескольких слоях с runtime-проверками, которые не тривиально перехватить через frida или fishhook.

Готовые решения: IOSSecuritySuite (iOS, open source), rootbeer (Android). Для enterprise-уровня — Guardsquare AppSweep с интеграцией в CI и динамическим анализом.


Что входит в работу по безопасности мобильного приложения

Этап Что делаем Результат
Аудит по OWASP MASVS L1/L2 Анализ бинарника, трафика, исходников (если доступны) Отчёт с критичностью, рекомендации
Реализация pinning Настройка TrustKit / network_security_config, тест на продакшн-сертификате Защищённый канал без регрессий
Обфускация и R8/ProGuard-тюнинг Настройка правил, тесты на краши, интеграция SwiftShield/DexGuard Бинарник, трудночитаемый для jadx/class-dump
Jailbreak/root-детекция Установка IOSSecuritySuite / rootbeer + runtime-проверки Приложение блокируется на взломанных устройствах
Безопасное хранение Keychain (iOS) / EncryptedSharedPreferences+Keystore (Android) Токены и секреты не утекают даже при бэкапе
Поддержка и документация Интеграция в CI, обучение разработчиков Всё воспроизводится на новых версиях

Как мы реализуем защиту: кейс

Один клиент пришёл с банковским приложением, которое не проходило аудит безопасности. Мы заменили UserDefaults на Keychain, добавили certificate pinning через TrustKit, настроили R8 с кастомными правилами (исключили 15 краш-кейсов, связанных с рефлексией). Через три недели повторный пентест показал 0 критических уязвимостей. С момента внедрения — ни одного инцидента за два года.


Сроки и стоимость

  • Security-аудит по OWASP MASVS уровня L1 — от 1 до 2 недель.
  • Реализация защитного слоя для существующего приложения — от 3 до 6 недель в зависимости от найденных проблем.
  • Полный цикл «аудит + внедрение + тест» — от 4 до 8 недель.

Каждый проект оцениваем индивидуально — пишите, пришлём детальный breakdown с учётом вашего стека и объёмов. Работаем под ключ: от анализа до деплоя в сторах.


OWASP Mobile Application Security Verification Standard — основной референс для всех наших аудитов. Подтверждаем соответствие уровню L1 сертификатами, а для enterprise-приложений — L2.

Оценим ваш проект за один рабочий день после получения APK/IPA. Свяжитесь — расскажем, какие дыры закроем в первую очередь.