RASP — co to jest, zasada działania i ochrona w czasie rzeczywistym

Autor: IT Sectr Opublikowano: 2026-04-03 Czas czytania: 10 min

RASP (Runtime Application Self-Protection) — technologia bezpieczeństwa, która wbudowuje się bezpośrednio w aplikację i analizuje jej zachowanie w czasie wykonania (runtime) w celu wykrywania ataków. W przeciwieństwie do zapór sieciowych lub WAF, RASP działa od wewnątrz: widzi nie tylko przychodzące żądanie, ale także to, jak to żądanie jest przetwarzane przez kod — jakie funkcje są wywoływane, jakie dane są odczytywane z pamięci, jakie wywołania systemowe są wykonywane. Według danych OWASP Runtime Protection Project (2025), rozwiązania RASP blokują do 94% ataków, zanim dotrą one do podatnego kodu. RASP nie wymaga zmiany infrastruktury — wszystko, co niezbędne, działa wewnątrz procesu aplikacji.

Najważniejsze

  • RASP — wbudowywana ochrona działająca wewnątrz aplikacji i analizująca kontekst wykonania każdego wywołania w czasie rzeczywistym
  • Zasada działania opiera się na instrumentacji kodu: agent przechwytuje krytyczne funkcje (exec, open, read, send) i sprawdza je pod kątem anomalii
  • Różnica od WAF — RASP widzi nie tylko żądanie HTTP, ale cały kontekst przetwarzania: stos wywołań, wartości zmiennych, stan pamięci
  • Mobilny RASP wykrywa Frida, Xposed, debugowanie JDWP, emulatory i modyfikację APK poprzez sprawdzanie integralności w czasie wykonania
  • Polityki RASP obejmują blokowanie (crash), logowanie z powiadomieniem serwera i generowanie fałszywych danych w celu dezorientacji atakującego

Co to jest RASP?

Runtime Application Self-Protection (RASP) — technologia bezpieczeństwa integrowana z aplikacją na etapie budowania lub poprzez agenta czasu wykonania. RASP analizuje zachowanie aplikacji podczas działania i podejmuje decyzje o blokowaniu ataków na podstawie kontekstu: skąd pochodzi wywołanie, jakie dane są przekazywane, jaki jest stan stosu. W przeciwieństwie do systemów sygnaturowych, RASP nie szuka znanych wzorców ataków — wykrywa anormalne zachowanie odbiegające od oczekiwanego scenariusza wykonania kodu.

Koncepcja RASP została sformalizowana przez Gartner w 2011 roku, a pierwsze komercyjne implementacje pojawiły się w latach 2014–2015. Dla platform mobilnych RASP zaczął być aktywnie stosowany od 2017 roku, kiedy rynek uświadomił sobie niewystarczalność tradycyjnej obfuskacji. Według raportu MarketsandMarkets (2025), wartość rynku rozwiązań RASP wynosi 2,8 mld USD przy rocznym wzroście 24,5%. Wdrożenie RASP jest zalecane przez standardy OWASP Mobile Top 10 i PCI DSS 4.0 dla aplikacji przetwarzających dane płatnicze.

RASP działa na dwóch poziomach: interception i assessment. Interception — przechwytywanie wywołań systemowych i bibliotecznych poprzez hooki wbudowywane w kod na etapie budowania lub w czasie wykonania przez dynamiczną instrumentację. Assessment — analiza kontekstu wywołania: sprawdzanie parametrów wejściowych, stosu wywołań, stanu sandboxa, obecności debuggera. Decyzja jest podejmowana na podstawie polityki bezpieczeństwa określonej przez programistę. Polityka może być sztywna (blokuj), miękka (loguj) lub adaptacyjna (zmieniaj zachowanie w zależności od poziomu zagrożenia).

Jak działa RASP: architektura i mechanizmy

Architektura agenta RASP składa się z trzech komponentów: warstwy instrumentacji, analizatora i polityki. Warstwa instrumentacji przechwytuje wywołania systemowe i wywołania frameworka. Analizator sprawdza kontekst pod kątem zgodności z oczekiwanymi wzorcami. Polityka określa reakcję.

Instrumentacja kodu

Dla aplikacji mobilnych stosuje się instrumentację w czasie kompilacji (compile-time): bajtkod lub kod natywny jest modyfikowany na etapie budowania — przed każdym niebezpiecznym wywołaniem wstawiana jest kontrola. Kompilator agenta RASP modyfikuje punkty wejścia FileOutputStream.write(), Runtime.exec(), Class.forName() oraz android.app.Activity.onStart(). Dla Androida stosuje się transformację DEX-bajtkodu przez Gradle plugin; dla iOS — modyfikację binarnego pliku Mach-O przez skrypt post-link.

Analiza kontekstu

Podczas przechwytywania wywołania RASP analizuje: klasę i metodę wywołującą (kto wywołuje), ślad stosu (łańcuch wywołań), argumenty (przekazywane dane), wartość zwracaną (co jest zwracane), znacznik czasu i identyfikator wątku. Anomalia jest rejestrowana, gdy na przykład Runtime.exec() jest wywoływane nie z wątku UI i nie z kodu aplikacji, ale z biblioteki załadowanej przez JNI z niestandardową ścieżką. Lub gdy FileOutputStream.write() otrzymuje dane zawierające wykonywalny bajtkod zamiast oczekiwanego nagłówka PNG.

Polityki reagowania

RASP obsługuje trzy typy reagowania: Block — awaryjne zakończenie aplikacji po wykryciu ataku, Log — wysłanie szczegółów incydentu na serwer zbierania logów bez zatrzymywania aplikacji, Deceive — podmiana zwracanej wartości na fałszywą, aby atakujący otrzymał nieprawidłowe dane. Połączenie Log i Deceive pozwala zbierać dane wywiadowcze o atakującym, nie ujawniając faktu wykrycia.

java
// Przykład: Sprawdzenie wywołania Runtime.exec() przez RASP
public class RASPAgent {
    public static Object onExecCalled(String command,
            StackTraceElement[] stack) {

        // Sprawdzenie caller
        String caller = stack[1].getClassName();

        // Jeśli wywołanie nie pochodzi z naszego pakietu — podejrzane
        if (!caller.startsWith("com.example.app")) {
            SecurityPolicy.reportIncident(
                "UNEXPECTED_EXEC", command, stack
            );
            return SecurityPolicy.getAction().execute(command);
        }

        // Sprawdzenie komendy na czarnej liście
        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: pusty proces
            }
        }

        return null; // zezwól na wykonanie
    }
}

RASP vs WAF i inne środki ochrony

RASP jest często porównywany z Web Application Firewall (WAF), ale zasadnicza różnica polega na pozycjonowaniu. WAF znajduje się na obrzeżach sieci i analizuje tylko żądania HTTP. RASP działa wewnątrz aplikacji i widzi logikę przetwarzania.

CechaWAFRASP
LokalizacjaObrzeża sieciWewnątrz aplikacji
Co analizujeŻądania HTTPWywołania systemowe, pamięć, stos
Ruch szyfrowanyWymaga deszyfrowania TLSWidzi po deszyfrowaniu
Ataki mobilneNie widzi (Frida, debugowanie)Wykrywa bezpośrednio
Fałszywe alarmyWysokie (reguły regex)Średnie (analiza kontekstu)
Wpływ na wydajnośćMinimalny3–7% w zależności od głębokości analizy

W przeciwieństwie do obfuskacji (ProGuard, DexGuard), która sprawia, że kod jest nieczytelny, RASP aktywnie wykrywa ataki w trakcie eksploatacji. Obfuskacja to ochrona pasywna: jeśli atakujący poświęci wystarczająco dużo czasu na inżynierię wsteczną, kod zostanie odczytany. RASP jest aktywny: widzi, że atakujący próbuje debugować aplikację i reaguje, zanim zostanie odczytana choćby jedna linia kodu. Połączenie obfuskacji i RASP daje wielowarstwową ochronę, gdzie obfuskacja spowalnia analizę, a RASP przerywa atak na etapie instrumentacji.

RASP w aplikacjach mobilnych

Mobilne rozwiązania RASP są dostosowane do specyfiki Androida i iOS. W przeciwieństwie do serwerowych aplikacji Java, mobilne agenty RASP działają w warunkach ograniczonej pamięci i baterii, co wymaga lekkiej instrumentacji.

RASP na Androidzie

Na Androidzie agent RASP jest wbudowywany przez Gradle plugin modyfikujący DEX-bajtkod na etapie budowania. Agent przechwytuje ponad 50 wywołań systemowych, w tym: Runtime.exec() do wykrywania uruchamiania su lub Frida, Class.forName() do identyfikowania ładowania podejrzanych klas, System.loadLibrary() do kontroli ładowania bibliotek natywnych z niestandardowych ścieżek. Dodatkowo sprawdzana jest obecność w /proc/self/maps bibliotek frida-agent, frida-helper, libinject i substrate.

RASP na iOS

Na iOS RASP jest implementowany przez post-processowanie binarnego pliku Mach-O. Dla iOS złożoność jest wyższa ze względu na surowe wymagania Apple dotyczące modyfikacji plików binarnych. Agent przechwytuje wywołania funkcji fork(), dlopen(), ptrace() i sprawdza obecność CydiaSubstrate.dylib w załadowanych bibliotekach. RASP dla iOS nie może modyfikować kodu w buildzie App Store — tylko dla dystrybucji Enterprise. Dla App Store zaleca się stosowanie instrumentacji w czasie kompilacji przez Swift Macro lub Objective-C method swizzling.

Wykrywanie narzędzi analitycznych

Mobilny RASP wykrywa: Frida (poprzez sprawdzenie /proc/self/maps i /data/local/tmp/frida*), Xposed Framework (poprzez sprawdzenie de.robv.android.xposed.XposedBridge w ClassLoader), debugger JDWP (poprzez Debug.isDebuggerConnected()), emulatory (poprzez sprawdzenie Build.FINGERPRINT, Build.HARDWARE, Build.MODEL) i flagę debuggable w AndroidManifest. Według danych NowSecure Mobile Threat Report (2025), agent RASP wykrywa 89–97% sesji Frida z instrumentacją.

Implementacja agenta RASP w praktyce

Wdrożenie RASP w aplikacji mobilnej wymaga skonfigurowania instrumentacji, określenia polityk i integracji z systemem SIEM do zbierania logów incydentów.

Wybór implementacji: compile-time vs runtime

Instrumentacja w czasie kompilacji (compile-time) — modyfikacja bajtkodu na etapie budowania, nie wpływająca na wydajność w czasie wykonania. Instrumentacja w czasie wykonania (runtime) (przez Java Agent na serwerze lub Frida na kliencie) — bardziej elastyczna, ale dodaje 5–10% narzutu. Dla aplikacji mobilnych zaleca się podejście compile-time, ponieważ nie wymaga stałego połączenia z siecią i nie zużywa baterii na analizę.

Integracja z istniejącymi bibliotekami

Agent RASP musi poprawnie współpracować z popularnymi SDK. Firebase Crashlytics, Google Analytics i Appsee nie powinny być blokowane. Konfiguracja whitelist dla znanych bibliotek jest obowiązkowa. W konfiguracji agenta określa się wyjątki: jeśli wywołanie pochodzi z klasy com.google.firebase — kontrola jest pomijana. Whitelist jest aktualizowany z każdym wydaniem SDK.

Przykład obsługi incydentu

Po wykryciu Fridy przez agenta RASP następuje: zebranie kontekstu (ślad stosu, wersja OS, czas), wysłanie danych na serwer logowania w zaszyfrowanej formie, wykonanie polityki (crash, log-only lub deceive), zwiększenie licznika w celu określenia masowego ataku. Dane z różnych urządzeń są agregowane na serwerze w celu identyfikacji wzorców ataków.

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)
            }
        }
    }
}

Ograniczenia i fałszywe alarmy

RASP nie jest srebrną kulą. Technologia ma ograniczenia, które należy uwzględnić przy projektowaniu ochrony.

Wydajność

Każde przechwycone wywołanie dodaje sprawdzenie kontekstu. Przy agresywnej konfiguracji (przechwytywanie wszystkich wywołań IO i exec) wydajność może spaść o 5–15%. Dla aplikacji mobilnych krytyczny jest czas uruchamiania: inicjalizacja RASP dodaje 200–500 ms na starcie. Zaleca się punktową instrumentację — tylko krytyczne funkcje, a nie wszystkie możliwe. Profilowanie z agentem RASP jest obowiązkowe na etapie testowania.

Fałszywe alarmy

RASP może blokować legalne zachowanie: Firebase Crashlytics wysyłająca stos błędów przez wywołanie sieciowe może zostać uznana za eksfiltrację danych; Google Play Integrity API sprawdzające integralność urządzenia może zostać zidentyfikowane jako podejrzane wywołanie. Aby zmniejszyć liczbę fałszywych alarmów, niezbędny jest okres uczenia (learning mode) trwający 7–14 dni, podczas którego RASP tylko loguje, ale nie blokuje.

Ominnięcie RASP

Jeśli atakujący uzyska dostęp na poziomie jądra (poprzez exploit jądra), RASP nie może ufać nawet własnym kontrolom — agent działa w przestrzeni użytkownika i widzi to, na co pozwala mu jądro. Aby zapobiec ominięciu na poziomie jądra, stosuje się sprawdzanie Secure Boot Chain w połączeniu z atestacją serwerową. Ponadto sam agent RASP musi być zaciemniony i chroniony przed debugowaniem — w przeciwnym razie atakujący usunie lub wyłączy RASP przed rozpoczęciem ataku.

Często zadawane pytania

Czym RASP różni się od antywirusa?

Antywirus działa na poziomie systemu operacyjnego, skanuje pliki i procesy według sygnatur. RASP działa wewnątrz konkretnej aplikacji i analizuje jej kontekst behawioralny. Antywirus nie wie, jak powinna działać konkretna aplikacja; RASP wie, ponieważ jest w nią wbudowany i widzi wszystkie wewnętrzne wywołania i stany.

Czy RASP jest dostępny w Google Play lub App Store?

Tak, ale z ograniczeniami. Apple nie zezwala na modyfikację kodu w czasie wykonania w App Store, dlatego wersje iOS RASP używają instrumentacji w czasie kompilacji przez Swift Macro. Wersje Android RASP przez Gradle plugin są w pełni zgodne z Google Play. Obie platformy wymagają, aby RASP nie naruszał prywatności użytkownika i nie zbierał danych bez zgody.

Czy można używać RASP dla serwerowych aplikacji Java?

Tak, RASP pierwotnie pojawił się na stosie Java. Agenci Java przez java.lang.instrument przechwytują wywołania na poziomie JVM. Rozwiązania open source: OpenRASP (Baidu) i jRASP. Komercyjne rozwiązania: Contrast Security, Hdiv, Prevoty. Dla architektury mikroserwisowej RASP jest wdrażany w każdym serwisie osobno.

Ile kosztuje rozwiązanie RASP?

Komercyjne rozwiązania RASP dla aplikacji mobilnych kosztują od 3 000 do 15 000 USD rocznie w zależności od liczby aplikacji i poziomu wsparcia. OpenRASP (Baidu) — darmowa opcja open-source dla aplikacji serwerowych. Mobilne RASP SDK są często sprzedawane razem z obfuskatorami (DexGuard + RASP, Arxan, Promon).

Jak testować ochronę RASP?

Metodologia testowania obejmuje: próbę podłączenia Fridy do aplikacji i sprawdzenie reakcji RASP, uruchomienie aplikacji na zrootowanym/zjailbreakowanym urządzeniu, dekompilację APK przez jadx i sprawdzenie, czy kod RASP nie został usunięty. Narzędzia testujące: Frida, Objection, MobSF (Mobile Security Framework) do automatyzacji testów.

Podsumowanie

  • RASP — technologia aktywnej ochrony aplikacji działająca od wewnątrz i analizująca kontekst wykonania każdego krytycznego wywołania w czasie rzeczywistym
  • Architektura RASP składa się z warstwy instrumentacji (przechwytywanie wywołań), analizatora kontekstu (stos, argumenty, wątek) i polityki reagowania (block, log, deceive)
  • Mobilny RASP wykrywa Frida, Xposed, debugowanie, emulatory i modyfikację APK poprzez sprawdzanie /proc/self/maps i wywołań systemowych
  • Instrumentacja compile-time jest zalecana dla aplikacji mobilnych — nie wpływa na wydajność w czasie wykonania i nie wymaga sieci
  • Połączenie obfuskacji (ochrona pasywna) i RASP (aktywna) daje wielowarstwową ochronę, gdzie każdy poziom pokrywa słabe strony drugiego
  • Ograniczenia obejmują wpływ na wydajność (3–7%), ryzyko fałszywych alarmów (learning mode obowiązkowy) i podatność na exploity na poziomie jądra
  • RASP jest zalecany przez standardy OWASP Mobile Top 10 i PCI DSS 4.0 dla aplikacji przetwarzających dane poufne i płatnicze

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również