RASP — что это, принцип работы и защита в реальном времени

Автор: IT Sectr Опубликовано: 2026-04-03 Время чтения: 10 мин

RASP (Runtime Application Self-Protection) — технология безопасности, которая встраивается непосредственно в приложение и анализирует его поведение в runtime для обнаружения атак. В отличие от межсетевых экранов или WAF, RASP работает изнутри: он видит не только входящий запрос, но и то, как этот запрос обрабатывается кодом — какие функции вызываются, какие данные читаются из памяти, какие системные вызовы выполняются. По данным OWASP Runtime Protection Project (2025), RASP-решения блокируют до 94% атак до того, как они достигают уязвимого кода. RASP не требует изменения инфраструктуры — всё необходимое работает внутри процесса приложения.

Главное

  • RASP — встраиваемая защита, работающая внутри приложения и анализирующая контекст выполнения каждого вызова в реальном времени
  • Принцип работы основан на инструментации кода: агент перехватывает критичные функции (exec, open, read, send) и проверяет их на аномалии
  • Отличие от WAF — RASP видит не только HTTP-запрос, но и весь контекст обработки: стек вызовов, значения переменных, состояние памяти
  • Мобильный RASP обнаруживает Frida, Xposed, отладку JDWP, эмуляторы и модификацию APK через проверку целостности в runtime
  • RASP-политики включают блокировку (crash), логирование с уведомлением сервера и генерацию ложных данных для дезориентации атакующего

Что такое RASP?

Runtime Application Self-Protection (RASP) — технология безопасности, интегрируемая в приложение на этапе сборки или через runtime-агент. RASP анализирует поведение приложения во время выполнения и принимает решения о блокировке атак на основе контекста: откуда пришёл вызов, какие данные передаются, каково состояние стека. В отличие от сигнатурных систем, RASP не ищет известные паттерны атак — он обнаруживает аномальное поведение, отклоняющееся от ожидаемого сценария выполнения кода.

Концепция RASP была формализована Gartner в 2011 году, а первые коммерческие реализации появились в 2014–2015. Для мобильных платформ RASP начал активно применяться с 2017 года, когда рынок осознал недостаточность традиционной обфускации. По данным отчёта MarketsandMarkets (2025), объём рынка RASP-решений составляет 2,8 млрд USD при годовом росте 24,5%. Внедрение RASP рекомендуется стандартами OWASP Mobile Top 10 и PCI DSS 4.0 для приложений, обрабатывающих платёжные данные.

RASP работает на двух уровнях: interception и assessment. Interception — перехват системных и библиотечных вызовов через хуки, встраиваемые в код на этапе сборки или в runtime через динамическую инструментацию. Assessment — анализ контекста вызова: проверка входных параметров, стека вызовов, состояния sandbox, наличия отладчика. Решение принимается на основе политики безопасности, задаваемой разработчиком. Политика может быть жёсткой (блокировать), мягкой (логировать) или адаптивной (изменять поведение в зависимости от уровня угрозы).

Как работает RASP: архитектура и механизмы

Архитектура RASP-агента состоит из трёх компонентов: instrumentation layer, анализатор и политика. Instrumentation layer перехватывает системные вызовы и вызовы фреймворка. Анализатор проверяет контекст на соответствие ожидаемым паттернам. Политика определяет реакцию.

Инструментация кода

Для мобильных приложений используется compile-time instrumentation: байткод или нативный код модифицируется на этапе сборки — перед каждым опасным вызовом вставляется проверка. Компилятор RASP-агента модифицирует точки входа FileOutputStream.write(), Runtime.exec(), Class.forName() и android.app.Activity.onStart(). Для Android используется трансформация DEX-байткода через Gradle plugin; для iOS — модификация Mach-O бинарника через post-link скрипт.

Анализ контекста

При перехвате вызова RASP анализирует: caller class и method (кто вызывает), stack trace (цепочка вызовов), аргументы (передаваемые данные), return value (что возвращается), timestamp и thread id. Аномалия фиксируется, когда, например, Runtime.exec() вызывается не из UI-потока и не из кода приложения, а из библиотеки, загруженной через JNI с нестандартным путём. Или когда FileOutputStream.write() получает данные, содержащие исполняемый байткод вместо ожидаемого PNG-заголовка.

Политики реагирования

RASP поддерживает три типа реагирования: Block — аварийное завершение приложения при обнаружении атаки, Log — отправка деталей инцидента на сервер сбора логов без остановки приложения, Deceive — подмена возвращаемого значения на ложное, чтобы атакующий получил некорректные данные. Комбинация Log и Deceive позволяет собирать разведданные об атакующем, не раскрывая факт обнаружения.

java
// Пример: RASP-проверка вызова Runtime.exec()
public class RASPAgent {
    public static Object onExecCalled(String command,
            StackTraceElement[] stack) {

        // Проверка caller
        String caller = stack[1].getClassName();

        // Если вызов не из нашего пакета — подозрительно
        if (!caller.startsWith("com.example.app")) {
            SecurityPolicy.reportIncident(
                "UNEXPECTED_EXEC", command, stack
            );
            return SecurityPolicy.getAction().execute(command);
        }

        // Проверка команды на чёрный список
        String[] blocked = {"su", "frida", "ptrace", "/data/local"};
        for (String pattern : blocked) {
            if (command.contains(pattern)) {
                SecurityPolicy.reportIncident(
                    "BLOCKED_CMD", command, stack
                );
                return new Process(); // deceiving: пустой процесс
            }
        }

        return null; // разрешить выполнение
    }
}

RASP vs WAF и другие средства защиты

RASP часто сравнивают с Web Application Firewall (WAF), но принципиальное отличие — в позиционировании. WAF находится на периметре сети и анализирует только HTTP-запросы. RASP работает внутри приложения и видит логику обработки.

ХарактеристикаWAFRASP
РасположениеПериметр сетиВнутри приложения
Что анализируетHTTP-запросыСистемные вызовы, память, стек
Шифрованный трафикТребует расшифровки TLSВидит после расшифровки
Мобильные атакиНе видит (Frida, отладка)Обнаруживает напрямую
Ложные срабатыванияВысокие (правила регулярок)Средние (анализ контекста)
Влияние на производительностьМинимальное3–7% в зависимости от глубины анализа

В отличие от обфускации (ProGuard, DexGuard), которая делает код нечитаемым, RASP активно обнаруживает атаки в процессе эксплуатации. Обфускация — пассивная защита: если атакующий потратил достаточно времени на reverse engineering, код будет прочитан. RASP — активная: он видит, что атакующий пытается отлаживать приложение, и реагирует до того, как будет прочитана хотя бы одна строка кода. Комбинация обфускации + RASP даёт многослойную защиту, где обфускация замедляет анализ, а RASP прерывает атаку на этапе инструментации.

RASP в мобильных приложениях

Мобильные RASP-решения адаптированы под специфику Android и iOS. В отличие от серверных Java-приложений, мобильные RASP-агенты работают в условиях ограниченной памяти и аккумулятора, что требует лёгкой инструментации.

RASP на Android

На Android RASP-агент встраивается через Gradle plugin, модифицирующий DEX-байткод на этапе сборки. Агент перехватывает более 50 системных вызовов, включая: Runtime.exec() для обнаружения запуска su или Frida, Class.forName() для выявления загрузки подозрительных классов, System.loadLibrary() для контроля загрузки нативных библиотек из нестандартных путей. Дополнительно проверяется наличие в /proc/self/maps библиотек frida-agent, frida-helper, libinject и substrate.

RASP на iOS

На iOS RASP реализуется через постобработку Mach-O бинарника. Для iOS сложность выше из-за строгих требований Apple к модификации бинарников. Агент перехватывает вызовы функции fork(), dlopen(), ptrace() и проверяет наличие CydiaSubstrate.dylib в загруженных библиотеках. RASP для iOS не может модифицировать код в App Store билде — только для Enterprise-распространения. Для App Store рекомендуется использовать compile-time instrumentation через Swift Macro или Objective-C method swizzling.

Детектирование инструментов анализа

Мобильный RASP обнаруживает: Frida (через проверку /proc/self/maps и /data/local/tmp/frida*), Xposed Framework (через проверку de.robv.android.xposed.XposedBridge в ClassLoader), отладчик JDWP (через Debug.isDebuggerConnected()), эмуляторы (через проверку Build.FINGERPRINT, Build.HARDWARE, Build.MODEL) и флаг debuggable в AndroidManifest. По данным NowSecure Mobile Threat Report (2025), RASP-агент обнаруживает 89–97% инструментированных сессий Frida.

Реализация RASP-агента на практике

Внедрение RASP в мобильное приложение требует настройки instrumentation, определения политик и интеграции с SIEM-системой для сбора логов инцидентов.

Выбор реализации: compile-time vs runtime

Compile-time instrumentation — модификация байткода на этапе сборки, не влияющая на производительность в runtime. Runtime instrumentation (через Java Agent на сервере или Frida на клиенте) — более гибкая, но добавляет 5–10% накладных расходов. Для мобильных приложений рекомендуется compile-time подход, так как он не требует постоянного подключения к сети и не расходует заряд батареи на анализ.

Интеграция с существующими библиотеками

RASP-агент должен корректно работать с популярными SDK. Firebase Crashlytics, Google Analytics, и Appsee не должны блокироваться. Настройка whitelist для известных библиотек обязательна. В конфигурации агента задаются исключения: если вызов приходит из класса com.google.firebase — проверка пропускается. Whitelist обновляется с каждым релизом SDK.

Пример обработки инцидента

При обнаружении Frida через RASP-агент происходит: сбор контекста (stack trace, версия ОС, время), отправка данных на сервер логирования в зашифрованном виде, выполнение политики (crash, log-only или deceive), инкремент счётчика для определения массовой атаки. Данные с разных устройств агрегируются на сервере для выявления паттернов атак.

kotlin
class RASPManager {
    fun analyzeAndReact() {
        val threats = detectThreats()
        if (threats.isNotEmpty()) {
            val report = ThreatReport().apply {
                threats = threats
                timestamp = System.currentTimeMillis()
                deviceId = DeviceInfo.getHashedId()
                stackTrace = Thread
                    .currentThread()
                    .stackTrace
                    .take(10)
                    .toList()
            }

            val policy = SecurityPolicy.getPolicy(threats.maxBy { it.severity })

            when (policy) {
                Policy.BLOCK   -> throw SecurityException("Protection triggered")
                Policy.LOG     -> ServerLogger.sendReport(report)
                Policy.DECEIVE -> DeceptionLayer.activate(report)
            }
        }
    }
}

Ограничения и ложные срабатывания

RASP не является серебряной пулей. Технология имеет ограничения, которые необходимо учитывать при проектировании защиты.

Производительность

Каждый перехваченный вызов добавляет проверку контекста. При агрессивной конфигурации (перехват всех IO и exec-вызовов) производительность может упасть на 5–15%. Для мобильных приложений критично время запуска: RASP-инициализация добавляет 200–500 мс на старте. Рекомендуется точечная инструментация — только критичные функции, а не все возможные. Профилирование с RASP-агентом обязательно на этапе тестирования.

Ложные срабатывания

RASP может блокировать легитимное поведение: Firebase Crashlytics, отправляющая стек ошибок через network call, может быть расценена как эксфильтрация данных; Google Play Integrity API, проверяющий целостность устройства, может быть идентифицирован как подозрительный вызов. Для снижения ложных срабатываний необходим период обучения (learning mode) длительностью 7–14 дней, в течение которого RASP только логирует, но не блокирует.

Обход RASP

Если атакующий получил kernel-level доступ (через эксплойт ядра), RASP не может доверять даже собственным проверкам — агент работает в пространстве пользователя и видит то, что ему позволяет ядро. Для предотвращения обхода на уровне ядра используется Secure Boot Chain проверка в комбинации с серверной аттестацией. Кроме того, RASP-агент сам должен быть обфусцирован и защищён от отладки — иначе атакующий удалит или отключит RASP до начала атаки.

Часто задаваемые вопросы

Чем RASP отличается от антивируса?

Антивирус работает на уровне ОС, сканирует файлы и процессы по сигнатурам. RASP работает внутри конкретного приложения и анализирует его поведенческий контекст. Антивирус не знает, как должно работать конкретное приложение; RASP — знает, потому что встроен в него и видит все внутренние вызовы и состояния.

RASP доступен в Google Play или App Store?

Да, но с ограничениями. Apple не разрешает runtime-модификацию кода в App Store, поэтому iOS-версии RASP используют compile-time instrumentation через Swift Macro. Android-версии RASP через Gradle plugin полностью совместимы с Google Play. Обе платформы требуют, чтобы RASP не нарушал приватность пользователя и не собирал данные без согласия.

Можно ли использовать RASP для серверных Java-приложений?

Да, RASP изначально появился на Java-стеке. Java-агенты через java.lang.instrument перехватывают вызовы на уровне JVM. OpenSource решения: OpenRASP (Baidu) и jRASP. Коммерческие решения: Contrast Security, Hdiv, Prevoty. Для микросервисной архитектуры RASP внедряется в каждый сервис отдельно.

Сколько стоит RASP-решение?

Коммерческие RASP-решения для мобильных приложений стоят от 3 000 до 15 000 USD в год в зависимости от числа приложений и уровня поддержки. OpenRASP (Baidu) — бесплатный open-source вариант для серверных приложений. Мобильные RASP SDK часто продаются вместе с обфускаторами (DexGuard + RASP, Arxan, Promon).

Как тестировать RASP-защиту?

Методология тестирования включает: попытку подключения Frida к приложению и проверку реакции RASP, запуск приложения на рутованном/джейлбрейкнутом устройстве, декомпиляцию APK через jadx и проверку, что RASP-код не удалён. Инструменты тестирования: Frida, Objection, MobSF (Mobile Security Framework) для автоматизации проверок.

Итоги

  • RASP — технология активной защиты приложений, работающая изнутри и анализирующая контекст выполнения каждого критического вызова в реальном времени
  • Архитектура RASP состоит из слоя инструментации (перехват вызовов), анализатора контекста (стек, аргументы, поток) и политики реагирования (block, log, deceive)
  • Мобильный RASP обнаруживает Frida, Xposed, отладку, эмуляторы и модификацию APK через проверку /proc/self/maps и системных вызовов
  • Compile-time instrumentation рекомендована для мобильных приложений — не влияет на runtime-производительность и не требует сети
  • Комбинация обфускации (пассивная защита) и RASP (активная) даёт многослойную защиту, где каждый уровень покрывает слабые места другого
  • Ограничения включают влияние на производительность (3–7%), риск ложных срабатываний (learning mode обязателен) и уязвимость к kernel-level эксплойтам
  • RASP — recommended стандартами OWASP Mobile Top 10 и PCI DSS 4.0 для приложений, обрабатывающих конфиденциальные и платёжные данные

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также