<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Security &amp; Architecture : XSS</title><link>http://blogs.msdn.com/mariofontana/archive/tags/XSS/default.aspx</link><description>Tags: XSS</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Anti-XSS 3.0 e il nuovo motore SRE - Security Runtime Engine</title><link>http://blogs.msdn.com/mariofontana/archive/2008/12/18/anti-xss-3-0-e-il-nuovo-motore-sre-security-runtime-engine.aspx</link><pubDate>Thu, 18 Dec 2008 11:55:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9235333</guid><dc:creator>mfontana</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mariofontana/comments/9235333.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mariofontana/commentrss.aspx?PostID=9235333</wfw:commentRss><description>&lt;p&gt;Credo non sia necessario ricordare quanti problemi abbiano dato e stiano dando le varie declinazioni degli attacchi XSS (&lt;strong&gt;Cross Site Scripting&lt;/strong&gt;). Per questo motivo &amp;#232; essenziale conoscere sia alcune tecniche di programmazione che permattano di evitare gli errori pi&amp;#249; 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) &amp;#232; senza dubbio la libreria &lt;strong&gt;Anti-XSS&lt;/strong&gt; che da pochi giorni &amp;#232; stata resa disponibile in versione beta. E' possibile scaricare &lt;strong&gt;Anti-XSS 3.0&lt;/strong&gt; (&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=051ee83c-5ccf-48ed-8463-02f56a6bfc09&amp;amp;displaylang=en"&gt;download&lt;/a&gt; e &lt;a href="http://www.codeplex.com/AntiXSS/Release/ProjectReleases.aspx?ReleaseId=20333"&gt;source code&lt;/a&gt;) con il nuovo motore &amp;quot;&lt;em&gt;Security Runtim Engine&lt;/em&gt;&amp;quot; e la libreria per l'analisi statica di codice .NET dal nome : &lt;strong&gt;CAT.NET (&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=0178e2ef-9da8-445e-9348-c93f24cc9f9d&amp;amp;displaylang=en"&gt;32 bit &lt;/a&gt;e &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=e0052bba-2d50-4214-b65b-37e5ef44f146&amp;amp;displaylang=en"&gt;64 bit &lt;/a&gt;)&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Anti-XSS 3.0 &lt;/strong&gt;(disponibile su codeplex con licenza MS-PL)&lt;strong&gt; &lt;/strong&gt;&amp;#232; 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 &amp;#232; disponibilie all'interno dell' Help della libreria.&lt;/p&gt;  &lt;p&gt;La nuova versione del Microsoft comprende le seguenti novit&amp;#224; :&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;An expanded white list that supports more languages &lt;/li&gt;    &lt;li&gt;Performance improvements &lt;/li&gt;    &lt;li&gt;Performance data sheets (in the online help) &lt;/li&gt;    &lt;li&gt;Support for Shift_JIS encoding for mobile browsers &lt;/li&gt;    &lt;li&gt;A sample application &lt;/li&gt;    &lt;li&gt;Security Runtime Engine (SRE) HTTP module &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Ovviamente il solo uso di una libreria non pu&amp;#242; risolvere tutti i problemi di Cross-Site Scripting e tanto meno di sicurezza. La libreria non pu&amp;#242; sostituire un processo strutturato come il SDL (Security Development LifeCycle) e le attivit&amp;#224; di Threat Modeling. Detto questo, come esplicitato nell'help, i passi per utilizzare correttamente la libreria all'interno di applicazioni ASP.NET sono:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Determinare tutti i punti in cui la nostra applicazione genera dei dati di output. &lt;/li&gt;    &lt;li&gt;Su questa analisi verificare quando tale output &amp;#232; prodotto da untrusted input (anche indiretti o a cascata) come ad esempio inpunt utente,Cookies,DB,Query String,variabili di sessioni,ecc... &lt;/li&gt;    &lt;li&gt;Determinare il tipo di encoding che si vuole utilizzare. &lt;/li&gt;    &lt;li&gt;Fare l'encoding dell'output. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;questo da un punto di vista del processo. Da un punto di vista operativo aggiungiamo la reference agli assembly &lt;em&gt;AntiXSSLibrary.dll&lt;/em&gt; e &lt;em&gt;AntiXSSModule.dll&lt;/em&gt;&amp;#160; e nel &lt;em&gt;Web.Config &lt;/em&gt;referenziamo il modulo&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;&amp;lt;!-- Esempio di configurazione con IIS 6.0 e 7.0 in compatibility mode --&amp;gt;&amp;lt;httpModules&amp;gt;       &lt;br /&gt; &amp;lt;add name=&amp;quot;AntiXssModule&amp;quot; type=&amp;quot;Microsoft.Security.Application.SecurityRuntimeEngine.AntiXssModule&amp;quot;/&amp;gt;        &lt;br /&gt;&amp;lt;/httpModules&amp;gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;  &lt;p&gt;&amp;lt;!-- Esempio di configurazione con 7.0 nativo --&amp;gt;    &lt;br /&gt;&lt;em&gt;     &lt;br /&gt;&lt;strong&gt;&amp;lt;system.WebServer&amp;gt;        &lt;br /&gt;&amp;#160; &amp;lt;modules&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;httpModules&amp;gt; &amp;lt;add name=&amp;quot;AntiXssModule&amp;quot; type=&amp;quot;Microsoft.Security.Application.SecurityRuntimeEngine.AntiXssModule&amp;quot;/&amp;gt; &amp;lt;/httpModules&amp;gt;         &lt;br /&gt;&amp;#160; &amp;lt;/modules&amp;gt;         &lt;br /&gt;&amp;lt;/system.WebServer&amp;gt; &lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;e creiamo il file &lt;em&gt;antixssmodule.config &lt;/em&gt;tramite l'utility &lt;strong&gt;ConfigGen.exe &lt;/strong&gt;oppure copiamo il seguente file:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;antixssmodule.config&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;&amp;lt;Configuration&amp;gt;       &lt;br /&gt;&amp;#160; &lt;/strong&gt;&lt;/em&gt;&lt;em&gt;&lt;strong&gt;&amp;lt;ControlEncodingContexts&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ControlEncodingContext FullClassName=&amp;quot;System.Web.UI.Page&amp;quot; PropertyName=&amp;quot;Title&amp;quot; EncodingContext=&amp;quot;Html&amp;quot; /&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ControlEncodingContext FullClassName=&amp;quot;System.Web.UI.WebControls.Label&amp;quot; PropertyName=&amp;quot;Text&amp;quot; EncodingContext=&amp;quot;Html&amp;quot; /&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ControlEncodingContext FullClassName=&amp;quot;System.Web.UI.WebControls.CheckBox&amp;quot; PropertyName=&amp;quot;Text&amp;quot; EncodingContext=&amp;quot;Html&amp;quot; /&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/ControlEncodingContexts&amp;gt;        &lt;br /&gt;&amp;#160; &amp;lt;DoubleEncodingFilter Enabled=&amp;quot;True&amp;quot; /&amp;gt;        &lt;br /&gt;&amp;#160; &amp;lt;EncodeDerivedControls Enabled=&amp;quot;True&amp;quot; /&amp;gt;        &lt;br /&gt;&amp;#160; &amp;lt;MarkAntiXssOutput Enabled=&amp;quot;False&amp;quot; Color=&amp;quot;Yellow&amp;quot;/&amp;gt;        &lt;br /&gt;&lt;em&gt;&lt;strong&gt;&amp;lt;/Configuration&amp;gt;&lt;/strong&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;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.&lt;/p&gt;  &lt;p&gt;A questo punto siamo pronti per poter utilizzare la libreria Anti-XSS direttamente dal nostro codice sorgente: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/Ant.0eilnuovomotoreSRESecurityRuntimeEng_C42E/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="199" alt="image" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/Ant.0eilnuovomotoreSRESecurityRuntimeEng_C42E/image_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Anti-XSS mette a disposizione alcuni metodi interessanti : &lt;em&gt;HtmlEncode &lt;/em&gt;e &lt;em&gt;HtmlAttributeEncode &lt;/em&gt;per lavorare con input di tipo HTML, &lt;em&gt;XmlEncode&lt;/em&gt;,&lt;em&gt;XmlEncodeAttribute &lt;/em&gt;per codice XML, &lt;em&gt;UrlEncode &lt;/em&gt;per la gestione delle URL ed infine &lt;em&gt;JavaScriptEncode &lt;/em&gt;e &lt;em&gt;VisualBasicScriptEncode &lt;/em&gt;a seconda del linguaggio di scripting utilizzato.&lt;/p&gt;  &lt;p&gt;Quindi, ad esempio la potenziale vulnerabilit&amp;#224; XSS della seguente riga di codice:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Literal1.Text = ?&amp;lt;hr size='[untrusted input here]'&amp;gt;&amp;lt;/hr&amp;gt;?;       &lt;br /&gt;&lt;/strong&gt;&lt;/em&gt;    &lt;br /&gt;pu&amp;#242; essere mitigata con:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Literal1.Text = ?&amp;lt;hr size='+Microsoft.Security.Application.AntiXss.HtmlAttributeEncode([untrusted input here])+'&amp;gt;&amp;lt;/hr&amp;gt;?;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Questa versione esce anche con uno strumento veramente interessante : l' &lt;strong&gt;Anti-XSS Test Harness&lt;/strong&gt;, ovvero una console app che ci permette di fare dei test di vulnerabilit&amp;#224; e di performance sull'uso della liberia Anti-XSS. Su questo argomento estremamente importante per&amp;#242; voglio dedicare un post ad-hoc!!&lt;/p&gt;  &lt;p&gt;--Mario&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9235333" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Sicurezza/default.aspx">Sicurezza</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/SDL/default.aspx">SDL</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/XSS/default.aspx">XSS</category></item></channel></rss>