<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>RASP on My personal blog</title>
        <link>https://www.matteobianchi.eu/tags/rasp/</link>
        <description>Recent content in RASP on My personal blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Tue, 05 May 2026 09:00:00 +0200</lastBuildDate><atom:link href="https://www.matteobianchi.eu/tags/rasp/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>IAST e RASP: sicurezza dall&#39;interno</title>
        <link>https://www.matteobianchi.eu/p/iast-e-rasp/</link>
        <pubDate>Tue, 05 May 2026 09:00:00 +0200</pubDate>
        
        <guid>https://www.matteobianchi.eu/p/iast-e-rasp/</guid>
        <description>&lt;img src="https://www.matteobianchi.eu/p/iast-e-rasp/cover.png" alt="Featured image of post IAST e RASP: sicurezza dall&#39;interno" /&gt;&lt;h2 id=&#34;perché-conta&#34;&gt;Perché conta
&lt;/h2&gt;&lt;p&gt;Il &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/sast-analisi-statica/&#34; &gt;SAST&lt;/a&gt; vede il codice ma non il runtime; il
&lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/dast-analisi-dinamica/&#34; &gt;DAST&lt;/a&gt; vede il runtime ma non il codice. &lt;strong&gt;IAST&lt;/strong&gt; e
&lt;strong&gt;RASP&lt;/strong&gt; colmano il divario strumentando l&amp;rsquo;applicazione &lt;em&gt;dall&amp;rsquo;interno&lt;/em&gt;: un agent gira dentro il
processo, osserva il flusso reale dei dati nel codice mentre l&amp;rsquo;app riceve richieste vere. Uniscono la
localizzazione precisa del SAST al realismo del DAST.&lt;/p&gt;
&lt;h2 id=&#34;iast-osservare-durante-i-test&#34;&gt;IAST: osservare durante i test
&lt;/h2&gt;&lt;p&gt;L&amp;rsquo;&lt;strong&gt;IAST (Interactive AST)&lt;/strong&gt; è un agent attivo &lt;em&gt;durante i test&lt;/em&gt; (funzionali, DAST, QA). Mentre il
traffico di test attraversa l&amp;rsquo;app, l&amp;rsquo;agent vede dall&amp;rsquo;interno se un input contaminato raggiunge un
sink pericoloso — ma stavolta nel codice reale in esecuzione, non per inferenza.&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart LR
    T[Test / DAST&amp;lt;br/&amp;gt;generano traffico] --&amp;gt; APP
    subgraph APP[App strumentata]
        AG[Agent IAST&amp;lt;br/&amp;gt;osserva dall&amp;#39;interno]
    end
    APP --&amp;gt; AG
    AG --&amp;gt; F[&amp;#34;Finding preciso:&amp;lt;br/&amp;gt;riga + percorso dati&amp;lt;br/&amp;gt;+ richiesta che l&amp;#39;ha innescato&amp;#34;]
    style F fill:#fde2e4,stroke:#e63946
&lt;/pre&gt;

&lt;p&gt;Il risultato è il meglio dei due mondi: pochi falsi positivi (l&amp;rsquo;ha &lt;em&gt;visto&lt;/em&gt; accadere) &lt;strong&gt;e&lt;/strong&gt;
localizzazione esatta (riga di codice, non solo URL). Lo svantaggio: copre solo ciò che i test
esercitano — se non c&amp;rsquo;è traffico di test su un percorso, l&amp;rsquo;IAST non vede nulla lì.&lt;/p&gt;
&lt;h2 id=&#34;rasp-difendere-in-produzione&#34;&gt;RASP: difendere in produzione
&lt;/h2&gt;&lt;p&gt;Il &lt;strong&gt;RASP (Runtime Application Self-Protection)&lt;/strong&gt; è lo stesso principio spostato in &lt;strong&gt;produzione&lt;/strong&gt; e
con un ruolo diverso: non osservare, ma &lt;em&gt;bloccare&lt;/em&gt;. L&amp;rsquo;agent, dentro l&amp;rsquo;app, intercetta le operazioni
pericolose a runtime e le ferma quando vede uno sfruttamento in corso.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Richiesta → entra nell&amp;#39;app → RASP osserva l&amp;#39;operazione reale
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  query SQL che contiene la struttura di un&amp;#39;injection?   → blocca
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  tentativo di leggere /etc/passwd via path traversal?   → blocca
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  → decide sul COMPORTAMENTO reale, non su firme di pattern come un WAF
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;La differenza con un WAF: il WAF sta &lt;em&gt;fuori&lt;/em&gt; e indovina dalle richieste; il RASP sta &lt;em&gt;dentro&lt;/em&gt; e vede
cosa l&amp;rsquo;app sta effettivamente per fare con quell&amp;rsquo;input. Meno falsi positivi, ma al prezzo di vivere
nel processo.&lt;/p&gt;
&lt;h2 id=&#34;il-costo-prestazioni-e-accoppiamento&#34;&gt;Il costo: prestazioni e accoppiamento
&lt;/h2&gt;&lt;p&gt;Niente è gratis. Un agent nel processo aggiunge overhead (CPU, latenza) e si accoppia al runtime
specifico (JVM, .NET, Node): va mantenuto, aggiornato, testato a ogni upgrade del linguaggio. Il RASP
in produzione aggiunge anche un rischio di stabilità: un agent difettoso può degradare o far cadere
l&amp;rsquo;app che dovrebbe proteggere. Per questo non sono controlli &amp;ldquo;di default&amp;rdquo; ma scelte mirate, su
applicazioni ad alto valore dove il beneficio giustifica il peso.&lt;/p&gt;


&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Domanda:&lt;/strong&gt; se il RASP vede e blocca gli attacchi dall&#39;interno dell&#39;app, non rende superflui WAF, SAST e DAST?&lt;/summary&gt;
&lt;p&gt;No, e pensarlo porta a un unico punto di difesa, che è l&#39;opposto della sicurezza a strati. Il RASP ha
un difetto strutturale che gli altri controlli non hanno: &lt;em&gt;protegge l&#39;app solo se l&#39;attacco arriva fino
all&#39;app&lt;/em&gt;, e lo fa consumando risorse dell&#39;app stessa. Un WAF davanti assorbe il rumore di fondo — le
scansioni automatiche, i payload banali, i picchi volumetrici — prima che tocchino il processo, così il
RASP si occupa solo di ciò che passa; toglierlo significa far arrivare ogni tentativo fin dentro la JVM.
Il SAST e il DAST agiscono &lt;em&gt;prima&lt;/em&gt; del rilascio: il loro scopo è che la vulnerabilità non esista
in produzione, non difenderla una volta che c&#39;è. Affidarsi al solo RASP equivale a dire &#34;lasciamo pure i
difetti nel codice, tanto li blocca a runtime&#34; — ma il RASP può fallire, può essere aggirato, può essere
disattivato per un problema di prestazioni, e nel frattempo la falla è lì. C&#39;è anche il rischio di
stabilità già citato: il RASP vive nel processo, un suo bug degrada l&#39;app. Il modello corretto è difesa
in profondità: eliminare i difetti a sinistra con SAST/DAST, filtrare il grosso con il WAF, e tenere il
RASP come ultima rete interna per lo sfruttamento che supera tutto il resto — non come sostituto di
nessuno di essi.&lt;/p&gt;
&lt;/details&gt;


&lt;h2 id=&#34;conclusione&#34;&gt;Conclusione
&lt;/h2&gt;&lt;p&gt;IAST e RASP strumentano l&amp;rsquo;app dall&amp;rsquo;interno: l&amp;rsquo;IAST unisce precisione e realismo durante i test, il
RASP blocca lo sfruttamento in produzione. Pagano in prestazioni e accoppiamento, quindi si scelgono
per i servizi ad alto valore, non ovunque. Finora abbiamo testato ciò che immaginiamo possa andare
storto; manca un metodo per scoprire i difetti che &lt;em&gt;non&lt;/em&gt; abbiamo immaginato, bombardando l&amp;rsquo;app di
input imprevisti. È il fuzzing, prossimo capitolo.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
