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:
- Determinare tutti i punti in cui la nostra applicazione genera dei dati di output.
- 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...
- Determinare il tipo di encoding che si vuole utilizzare.
- 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:
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