Anti-XSS 3.0 e il nuovo motore SRE - Security Runtime Engine

Credo non sia necessario ricordare quanti problemi abbiano dato e stiano dando le varie declinazioni degli attacchi XSS (Cross Site Scripting). Per questo motivo è essenziale conoscere sia alcune tecniche di programmazione che permattano di evitare gli errori più comuni sia utilizzare delle libreria a supporto degli sviluppatori per gestire correttamente i dati di input/output. In casa Microsoft la soluzione di riferimento (utilizzata anche internamente) è senza dubbio la libreria Anti-XSS che da pochi giorni è stata resa disponibile in versione beta. E' possibile scaricare Anti-XSS 3.0 (download e source code) con il nuovo motore "Security Runtim Engine" e la libreria per l'analisi statica di codice .NET dal nome : CAT.NET (32 bit e 64 bit ) .

Anti-XSS 3.0 (disponibile su codeplex con licenza MS-PL)è una encoding library per aiutare gli sviluppatori ASP.NET a mitigare i rischi legati ai molteplici attacchi di tipo Cross-Site Scripting (XSS). A differenza di molte altre librerie Anti-XSS 3.0 utilizza la tecnica della white list o del principio di inclusione (definisce tutti i caratteri validi ed effettua l'encoding di tutto il resto) a differenza dell'approccio della black-list che esclude a priori i caratteri pericolosi permettendo tutto il resto. La lista di tutti i caratteri ammessi e relative lingue supportate è disponibilie all'interno dell' Help della libreria.

La nuova versione del Microsoft comprende le seguenti novità :

  • An expanded white list that supports more languages
  • Performance improvements
  • Performance data sheets (in the online help)
  • Support for Shift_JIS encoding for mobile browsers
  • A sample application
  • Security Runtime Engine (SRE) HTTP module

Ovviamente il solo uso di una libreria non può risolvere tutti i problemi di Cross-Site Scripting e tanto meno di sicurezza. La libreria non può sostituire un processo strutturato come il SDL (Security Development LifeCycle) e le attività di Threat Modeling. Detto questo, come esplicitato nell'help, i passi per utilizzare correttamente la libreria all'interno di applicazioni ASP.NET sono:

  1. Determinare tutti i punti in cui la nostra applicazione genera dei dati di output.
  2. Su questa analisi verificare quando tale output è prodotto da untrusted input (anche indiretti o a cascata) come ad esempio inpunt utente,Cookies,DB,Query String,variabili di sessioni,ecc...
  3. Determinare il tipo di encoding che si vuole utilizzare.
  4. Fare l'encoding dell'output.

questo da un punto di vista del processo. Da un punto di vista operativo aggiungiamo la reference agli assembly AntiXSSLibrary.dll e AntiXSSModule.dll  e nel Web.Config referenziamo il modulo

<!-- Esempio di configurazione con IIS 6.0 e 7.0 in compatibility mode --><httpModules>
<add name="AntiXssModule" type="Microsoft.Security.Application.SecurityRuntimeEngine.AntiXssModule"/>
</httpModules>

<!-- Esempio di configurazione con 7.0 nativo -->

<system.WebServer>
<modules>
<httpModules> <add name="AntiXssModule" type="Microsoft.Security.Application.SecurityRuntimeEngine.AntiXssModule"/> </httpModules>
</modules>
</system.WebServer>

e creiamo il file antixssmodule.config tramite l'utility ConfigGen.exe oppure copiamo il seguente file:

antixssmodule.config

<Configuration>
  <ControlEncodingContexts>
<ControlEncodingContext FullClassName="System.Web.UI.Page" PropertyName="Title" EncodingContext="Html" />
<ControlEncodingContext FullClassName="System.Web.UI.WebControls.Label" PropertyName="Text" EncodingContext="Html" />
<ControlEncodingContext FullClassName="System.Web.UI.WebControls.CheckBox" PropertyName="Text" EncodingContext="Html" />
</ControlEncodingContexts>
<DoubleEncodingFilter Enabled="True" />
<EncodeDerivedControls Enabled="True" />
<MarkAntiXssOutput Enabled="False" Color="Yellow"/>
</Configuration>

In questo modo abbiamo configurato e attivato anche il SRE (Security Runtime Engine) che fa un override delle impostazioni di encoding del framework .NET per avere una maggiore protezione senza dover modificare il codice applicativo.

A questo punto siamo pronti per poter utilizzare la libreria Anti-XSS direttamente dal nostro codice sorgente:

image

Anti-XSS mette a disposizione alcuni metodi interessanti : HtmlEncode e HtmlAttributeEncode per lavorare con input di tipo HTML, XmlEncode,XmlEncodeAttribute per codice XML, UrlEncode per la gestione delle URL ed infine JavaScriptEncode e VisualBasicScriptEncode a seconda del linguaggio di scripting utilizzato.

Quindi, ad esempio la potenziale vulnerabilità XSS della seguente riga di codice:

Literal1.Text = ?<hr size='[untrusted input here]'></hr>?;

può essere mitigata con:

Literal1.Text = ?<hr size='+Microsoft.Security.Application.AntiXss.HtmlAttributeEncode([untrusted input here])+'></hr>?;

Questa versione esce anche con uno strumento veramente interessante : l' Anti-XSS Test Harness, ovvero una console app che ci permette di fare dei test di vulnerabilità e di performance sull'uso della liberia Anti-XSS. Su questo argomento estremamente importante però voglio dedicare un post ad-hoc!!

--Mario