Runtime Application Self-Protection (RASP): cos’è e come si implementa

  


La sicurezza delle applicazioni è sempre più critica: le aziende non possono più contare solo su firewall, WAF o controlli di rete. Gli attacchi moderni sfruttano vulnerabilità a livello applicativo, spesso in esecuzione. Qui entra in gioco il Runtime Application Self-Protection (RASP): una tecnologia che si integra direttamente dentro l’applicazione e la protegge “dal di dentro”, monitorando e bloccando comportamenti malevoli in tempo reale.

🔗 Ti piace Techelopment? Dai un'occhiata al sito per tutti i dettagli!

Cos’è il RASP

Il RASP è un meccanismo di difesa integrato nel runtime dell’applicazione.

  • Non è un prodotto “esterno”, come un WAF, ma gira dentro il processo dell’applicazione stessa.
  • Intercetta chiamate e azioni sensibili (query al database, esecuzioni di comandi, chiamate a librerie di sistema, input/output dell’utente).
  • Analizza il contesto per capire se un’operazione è legittima o potenzialmente malevola (es. SQL injection, RCE, path traversal).
  • Può bloccare l’attacco, allertare i log e in alcuni casi anche autocorreggere l’esecuzione.

In sostanza, il RASP unisce application monitoring + intrusion prevention a livello di codice.


Come funziona tecnicamente

Ecco i principali approcci:

  1. Instrumentation: il codice dell’app viene “strumentato” (con agenti o librerie) per intercettare funzioni critiche.
  2. Hooking del runtime: il RASP si aggancia alle chiamate del linguaggio (es. metodi JDBC in Java, funzioni di parsing in .NET, esecuzioni di comandi in Node.js).
  3. Analisi comportamentale: combina signature note con modelli di comportamento (es. “questa query non è tipica” → blocco).

Esempio: protezione contro SQL Injection

Immaginiamo un’applicazione Java che esegue query SQL:

Senzo RASP

String query = "SELECT * FROM utenti WHERE username = '" + userInput + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);

Un attaccante potrebbe inserire:

' OR '1'='1

e bypassare l’autenticazione.

Con RASP (logica semplificata)

Il RASP intercetta la query prima dell’esecuzione:

  • Analizza la stringa SQL.
  • Riconosce pattern sospetti (' OR '1'='1).
  • Blocca l’esecuzione o riscrive la query.

Pseudo-codice di un agente RASP:

public ResultSet safeExecuteQuery(String query) throws SecurityException {
    if (isMalicious(query)) {
        logAttack("SQL Injection attempt: " + query);
        throw new SecurityException("Blocked malicious SQL");
    }
    return realStatement.executeQuery(query);
}

private boolean isMalicious(String query) {
    // Riconosce tautologie o manipolazioni note
    return query.toLowerCase().contains(" or '1'='1") 
        || query.toLowerCase().matches(".*(--|;).*");
}

Implementazione pratica

Le aziende non scrivono un RASP da zero: si usano soluzioni già pronte, spesso agenti da integrare nel runtime. Alcuni esempi:

  • Contrast Security
  • Imperva RASP
  • Micro Focus Fortify
  • Sqreen (ora Datadog Application Security)

Passi tipici per l’integrazione

  1. Installare l’agente: un jar/agent (Java), una libreria .NET, o un middleware per Node.js.
  2. Configurare le policy: cosa loggare, cosa bloccare.
  3. Test in staging: osservare falsi positivi e aggiustare.
  4. Deployment in produzione: il RASP gira “dentro” l’app, senza necessità di modifiche al codice nella maggior parte dei casi.

Esempio pratico: integrazione di Contrast Security Java agent in una Spring Boot app

1. Prerequisiti

- App Spring Boot (jar eseguibile).
- Account Contrast (o Community Edition) per scaricare l’agent e ottenere le credenziali.
(Contrast fornisce un agent “drop-in” che strumenta la JVM e raccoglie dati runtime).

2. Scarica l’agent

Dalla console Contrast scarichi il file contrast.jar (o contrast-agent.jar) o lo ottieni via Maven come indicato nella doc.

3. Avvia l'app con l'agent

Esempio: la tua app è app.jar, il jar agent è /opt/contrast/contrast.jar:

java -javaagent:/opt/contrast/contrast.jar -jar app.jar

Oppure, se vuoi passare parametri di configurazione (es. url del server Contrast, token), segui le indicazioni della console Contrast — spesso si impostano variabili d’ambiente o argomenti JVM.

4. Configurazione iniziale

  • Nell’interfaccia Contrast aggiungi l’app (Add Agent) e scarichi/ottieni le credenziali.
  • L’agent automaticamente inizia a monitorare richieste, flussi di dati sensibili e vulnerabilità in runtime; puoi attivare modalità di blocking o solo monitoring durante il testing.

5. Test pratico (SQLi)

Supponiamo un endpoint vulnerabile /login che accetta username e password. Test manuale con curl:

curl -X POST http://localhost:8080/login \
  -d "username=admin' OR '1'='1&password=whatever"

Cosa succede quando l’agent è attivo:

  • L’agent rileva pattern sospetto / flusso dati che corrisponde a SQLi.
  • In modalità block, l’accesso viene bloccato; in modalità monitor viene loggata l’evidenza dell’attacco nella console Contrast.

6. Suggerimenti pratici + best practice

  • Test in staging: sempre mettere RASP in monitoring prima di abilitare il blocco per ridurre falsi positivi. Onboarding graduale è la regola.
  • Metriche e overhead: misura CPU/latency perché l’instrumentation introduce overhead; dimensiona i nodi se necessario.
  • Logging & alerting: integra gli output del RASP nel tuo SIEM/monitoring per risposte rapide.
  • DevSecOps: usa i risultati del RASP per correggere il codice (non solo come banda di contenimento).

Consiglio pratico: quando metti in produzione un agent RASP, attiva prima la modalità 'monitor' e raccogli segnali per almeno qualche giorno/una settimana (dipende dal traffico) per calibrare le regole e minimizzare falsi positivi. Solo dopo puoi passare a politiche di blocking selettive per classi di attacco well-known (es. SQLi, RCE).


Vantaggi e limiti

Vantaggi

  • Protezione immediata contro exploit zero-day.
  • Contesto applicativo più ricco rispetto a un WAF.
  • Deployment relativamente semplice (non richiede modifiche infrastrutturali).

⚠️ Limiti

  • Possibili overhead di performance.
  • Rischio di falsi positivi.
  • Non sostituisce lo sviluppo sicuro (DevSecOps).

Conclusione

Il Runtime Application Self-Protection non è la bacchetta magica, ma rappresenta un tassello fondamentale della difesa in profondità. Integrando il RASP, un’applicazione non si limita a “subire” i controlli esterni, ma acquisisce la capacità di difendersi autonomamente durante l’esecuzione.



Follow me #techelopment

Official site: www.techelopment.it
facebook: Techelopment
instagram: @techelopment
X: techelopment
Bluesky: @techelopment
telegram: @techelopment_channel
whatsapp: Techelopment
youtube: @techelopment