Corso di Sicurezza Informatica. Sicurezza del software. Ing. Gianluca Caminiti

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

--- PREMESSE INTRODUZIONE. .:luxx:.


[1] Cross Site Scripting [2] Remote / Local File Inclusion [3] SQL Injection

Sicurezza Informatica: Tecniche di SQL INJECTION

Programmazione Web. Laboratorio 4: PHP e MySQL

PHP e MySQL. Scripting server-side per accesso a DB MySQL

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

Database e reti. Piero Gallo Pasquale Sirsi

DBMS (Data Base Management System)

19. LA PROGRAMMAZIONE LATO SERVER

Approfondimenti. Il controllo di SQL Injection nelle pagine ASP e ASP.NET. U.A. 5 - Database in rete con le pagine ASP e ASP.

Legenda: Vengono riportate qui brevi descrizioni di alcuni dei più noti e comuni tipi di vulnerabilità,in base al loro grado di pericolosità.

Il linguaggio SQL: query innestate

Esercitazione 8. Basi di dati e web

Corso Online Analista Programmatore Microsoft

SQL Injection The dark side of webapplication *** Siamo davvero certi che chi gestisce i nostri dati sensibili lo faccia in modo sicuro?

MySQL Database Management System

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

Lavorare con MySQL Parte Seconda.

Esempi pratici, risultati e contromisure consigliate. Massimo Biagiotti

Corso di Informatica. Prerequisiti. Modulo T3 B3 Programmazione lato server. Architettura client/server Conoscenze generali sui database

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

SITI-Reports. Progetto SITI. Manuale Utente. SITI-Reports. ABACO S.r.l.

Progetto di Basi di Dati e Multimidia Laboratorio Struttura dell applicazione web

CONCETTO DI ANNIDAMENTO

VIVAIO LAUDENSE RELAZIONE

GESTIONE RICHIESTE ESTENSIONE DI GARANZIA

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

Navigazione automatica e rilevazione di errori in applicazioni web

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

PHP ESSENTIALS #10. By WI400 Team. : database e sql

Indice generale. Capitolo 3 Introduzione a PHP...43 Sintassi e istruzioni di base Variabili, operatori e commenti Array...

Lezione 9. Applicazioni tradizionali

Corso di Informatica Modulo T3 B2 - Database in rete

GERARCHIE RICORSIVE - SQL SERVER 2008

Esercitazione sulle libpq - libreria C per PostgreSQL

Obiettivo dell esercitazione

MySQL Database Management System

Dispensa di database Access

Indice Configurazione di PHP Test dell ambiente di sviluppo 28

BASI DI DATI Cos è il PHP. Cos è il PHP. Esercitazione su PHP & MySQL

COME CREARE E COLLEGARSI AD UN DATABASE MICROSOFT SQL SERVER O SUN MYSQL

SOSEBI PAPERMAP2 MODULO WEB MANUALE DELL UTENTE

RELAZIONE SCRITTA RELATIVA AL PROGRAMMA DI GESTIONE SITO E-COMMERCE

OSSIF WEB. Manuale query builder

PHP. A. Lorenzi, R. Giupponi, D. Iovino LINGUAGGI WEB. LATO SERVER E MOBILE COMPUTING Atlas. Copyright Istituto Italiano Edizioni Atlas

RELAZIONE PROGETTO DATABASE GESTIONE BIBLIOTECA PERSONALE


Costruzione di Sit Web con PHP e MySQL. Lezione 7 - Esercitazione - Introduzione a MySQL: le tabelle, i tpi di dato, le query

Laboratorio di Tecnologie Web Laurea in Scienze e Tecnologie Multimediali

Elementi di Sicurezza e Privatezza Lezione 15 Web Security - Code Injection (1)

Come aggiungere il tuo sito.

Al giorno d oggi, i sistemi per la gestione di database

RenderCAD S.r.l. Formazione

Corso di Sicurezza Informatica. Sicurezza del software. Ing. Gianluca Caminiti

Università degli studi Roma Tre Dipartimento di informatica ed automazione. Tesi di laurea

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

SITI Catasto. Progetto SITI Catasto 1.0. Manuale Utente. SITI Analisi Catastale. ABACO S.r.l.

Corso Analista Programmatore Microsoft. Corso Analista Programmatore Microsoft Programma

Installazione & Configurazione Php e MySQL su Mac Os X. Php

La tecnologia ASP.NET e i database

Dott.ssa Adriana Pietramala. Dott.ssa Maria Vittoria Avolio

Scrivere uno script php che, dato un array associativo PERSONE le cui chiavi sono i

Architettura a tre livelli (1)

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE.

PHP E MYSQL CREAZIONE DI UN NUOVO DATABASE DAL PHPMYADMIN

Corso di Web Programming

Siti interattivi e dinamici. in poche pagine

Il Web-Service SDMX dell ISTAT

A. Lorenzi Pagine ASP

JDBC versione base. Le classi/interfacce principali di JDBC

Laboratorio di reti II: Problematiche di sicurezza delle reti

Lezione 8. Metadati, Viste e Trigger

Sicurezza delle applicazioni web: attacchi web

Uso delle basi di dati DBMS. Cos è un database. DataBase. Esempi di database

Sicurezza delle applicazioni web: attacchi web

Basi di Dati. S Q L Lezione 5

Introduzione a phpmyadmin

Concetti fondamentali dei database database Cos'è un database Principali database

ANNO SCOLASTICO: DISCIPLINA: INFORMATICA CLASSE: 5 SI INDIRIZZO: SISTEMI INFORMATIVI DOCENTI: TISO EMANUELE BARBARA SECCHI

Progetto LiberA. Studente/Relatore: Antonio Zambito Matricola: 124/1032 CdL: Informatica (0124) Prof.: Raffaele Montella

Corso sul linguaggio SQL

Applicazioni Web: meccanismi per il passaggio di informazioni tramite HTTP Corso di Applicazioni Telematiche

PROGETTAZIONE DI UN SITO WEB

MODULO 5 Appunti ACCESS - Basi di dati

Introduzione al corso

Progetto ittorario Anno scol

Guida all installazione di Easy

ITI M. FARADAY Programmazione modulare a.s

Presentazione Data Base

Progettazione Web Applicazioni client-server

Integrazione CRM- Remedy e CTI

Istruzioni SQL 1. Query di selezione 2 Istruzione SELECT 2 Istruzione SELECT DISTINCT 2 ORDER BY 3 WHERE 3 La condizione LIKE 4 BETWEEN AND 5

Una metodologia di progettazione di applicazioni web centrate sui dati

Guida a PHP. Primi esempi

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

ISTRUZIONI INSTALLAZIONE PMANGO

ACTIVE SERVICE PAGES E DATABASE: tecnologia ADO

Transcript:

Corso di Sicurezza Informatica Sicurezza del software Ing. Gianluca Caminiti

SQL Injection

Sommario Premessa sul funzionamento dei siti dinamici SQL Injection: Overview Scenari di attacco: Errata gestione dell input (mancato filtraggio o mancata gestione del tipo di dati) Strategie di attacco attacchi Blind Contromisure

Premessa: Siti Web Dinamici Interfaccia Web (lato client: HTML, Flash, Javascript) Linguaggio di programmazione orientato a web/database ( tipicamente lato server: PHP, ASP,.NET, JSP, ecc.) Database layer (lato server: MySQL, Oracle, SQL Server, ecc.)

Interfaccia verso il DB Il linguaggio di programmazione server-side permette di formulare queries in SQL, parametrizzabili mediante variabili tipicamente passate da un form HTML.

Esempi moduli HTML per ricercare nell archivio di un DB online (Amazon, IBS, ecc.) moduli per accesso a web-based email (login + password, es. Hotmail) moduli per inserimento di commenti sui siti (guestbook, forum, ecc.)

SQL Injection: Overview Tecnica che sfrutta una vulnerabilità presente nel linguaggio che funge da interfaccia al DB e/o nello strato del DB al fine di produrre un alterazione nella semantica del codice SQL inteso. Si fa in modo che l input dell utente contenga istruzioni SQL al fine di ottenere (lato server) una query differente da quella intesa dal programmatore.

Scenari tipici La vulnerabilità è presente quando si verifica una delle seguenti condizioni: L input inserito dall utente non è affatto o correttamente filtrato rispetto alle occorrenze di sequenze di escape (tipicamente presenza di apici). L input inserito dall utente non subisce verifiche sul tipo di dati e pertanto sono possibili esecuzioni inaspettate. Sono presenti errori di programmazione nel software del server di Database che consentono a utenti malicious di sfruttarne gli effetti per eseguire codice SQL arbitrario.

1. Sequenze di escape non filtrate correttamente un semplice modulo HTML per inserire username e password <form action='login.php' method='post'> Username: <input type='text' name='user' /> Password: <input type='password' name='pwd' /> <input type='submit' value='login' /> </form> I dati immessi sono passati al file login.php, rispettivamente nelle variabili $_POST['user'] e $_POST['pwd']. Una volta ricevuti questi dati, PHP esegue una query sul DB.

codice PHP <?php $query = "SELECT * FROM users WHERE user='".$_post['user']."' AND pwd='".$_post['pwd']. "'"; $sql = mysql_query($query,$db); //Se il numero di righe trovate > 0 allora i dati immessi sono corretti if(mysql_affected_rows($sql)>0) { //permette l'accesso alle pagine protette }?>

Esempio con input tipico L utente inserisce BillGates come user e Windows come password. La query sarà SELECT * FROM users WHERE user='billgates' AND pwd= 'Windows'

Esempio di attacco/1 L utente inserisce BillGates come user e ' OR user='billgates come password. La query sarà SELECT * FROM users WHERE user='billgates' AND pwd= '' OR user='billgates Quando funziona questo attacco?

Esempio di attacco/1 L utente inserisce BillGates come user e ' OR user='billgates come password. La query sarà SELECT * FROM users WHERE user='billgates' AND pwd= '' OR user='billgates L attacco funziona solo se esiste un utente BillGates

Esempio di attacco/2 Attacco blind: l utente inserisce x' OR 1=1 sia come user che come password. La query sarà SELECT * FROM users WHERE user='x' OR 1=1 AND pwd='x' OR 1=1 Qual è l effetto di questa query?

Esempio di attacco/2 Attacco blind: l utente inserisce x' OR 1=1 sia come user che come password. La query sarà SELECT * FROM users WHERE user='x' OR 1=1 AND pwd='x' OR 1=1 Il risultato non dipende dalla precedenza degli operatori: la condizione è sempre vera, ci si autenticherà come l utente rappresentato dalla prima tupla del DB (admin?)

Simulazione di Attacco

2. Scorretta gestione dei tipi di dati Attacco NON blind: si verifica quando mancano verifiche sui vincoli di tipo dei dati di input. Si pensi ad un modulo per la ricerca di prodotti in un catalogo in base al codice. $query = "SELECT * FROM data WHERE id=".$variabile_intera. ";" La variabile $variabile_intera è di tipo stringa, anche se il tipo di dati inteso per l input è int. L utente può inserire come id la stringa: 1; DROP TABLE data SELECT * FROM data WHERE id = 1; DROP TABLE data; Cosa succede se l utente inserisce come input 1; SELECT * FROM data?

Blind SQL Injection Per indovinare i nomi delle tabelle SELECT COUNT(*) FROM tabname (restituisce valori solo quando la tabella tabname esiste) Per indovinare i nomi dei campi delle tabelle SELECT x FROM users (con x che rappresenta il tentativo) Per indovinare i nomi degli utenti SELECT 1/0 FROM users WHERE username='ralph'

Contromisure Verificare bug ed exploit del sistema in uso fissare limitazioni sui diritti di accesso al DB filtrare opportunamente le sequenze di escape (ci sono funzioni appositamente definite nei linguaggi) whitelisting basate su espressioni regolari forzare la conversione di tipo delle variabili di input nel target desiderato (es. stringa int)