Programmazione Sicura

Slides:



Advertisements
Presentazioni simili
INFORMATICA Altre Istruzioni di I/O
Advertisements

La sicurezza dei sistemi informatici
Introduzione al linguaggio C
Unità D2 Database nel web. Obiettivi Comprendere il concetto di interfaccia utente Comprendere la struttura e i livelli che compongono unapplicazione.
Webb.it 2002 Fabio Busatto Linux Startup: configurazione sicura post installazione
Sistema di gestione flussi documentali
INTERNET FIREWALL Bastion host Laura Ricci.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
SC che operano su processi
Connessione con MySQL.
Amministrazione di una rete con Active Directory.
Università La Sapienza Web programming e programmazione multimediale 1 Web Programming e comunicazione multimediale Lezione 10: PHP.
Amministrazione di una rete con Active Directory
Interfaccia del file system
Posix Capabilities POSIX STANDARD SEZIONE IMPORTANTE.
Programmazione Procedurale in Linguaggio C++
Anno Accademico Corso di Informatica Informatica per Scienze Biologiche e Biotecnologie Anno Accademico
Sicurezza della Base di Dati
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Threads: Sistemi Operativi I Corso di Laurea in Ingegneria Informatica
Sistemi operativi II Esercizi d'esame
Struttura dei sistemi operativi (panoramica)
File System NTFS 5.0 Disco: unità fisica di memorizzazione
Security Enhanced Linux (Selinux) A cura di : De Pascale Filippo 1.
CAPITOLO 4 LINGUAGGIO JAVA: COSTRUTTI DI BASE. ALFABETO Java adotta la codifica standard Unicode della società Unicode, Inc. (ftp://ftp.unicode.org) definito.
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
TCP_Wrapper Le richieste per un determinato servizio (ad. es. telnet, ftp, rsh, etc.) vengono soddisfatte soltanto se lindirizzo IP del richiedente rientra.
Organizzazione della Memoria (Unix) Text contiene le istruzioni in linguaggio macchina del codice eseguibile, può essere condiviso in caso di processi.
A.A. 2010/2011Ambienti di Programmazione per il Software di Base1 (Es. – 6) Ambienti di Programmazione per il Software di Base Le Stringhe in C Input.
1 File System ed Input/Output UNIX Implementazione del File System Caratteristiche del File System Unix/Linux System Call relative al File System Linput/output.
1 LINUX: struttura generale The layers of a UNIX system. User Interface.
Steganografia Un esempio pratico. Il formato TAR Possiamo pensare ad un archivio TAR come ad un contenitore di file. Per ogni file nellarchivio viene.
Gruppo Directory Services Rapporto dell'attivita' svolta - Marzo 2000.
Fabrizio Grossi Verifica delle attività. L'operato degli amministratori di sistema deve essere oggetto, con cadenza almeno annuale, di un'attività
Corso Drupal 2013 Andrea Dori
1 Scheduling in Windows 2000 Un thread entra in modalità kernel e chiama lo scheduler quando: Si blocca su un oggetto di sincronizzazione (semaforo, mutex,
G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione X Ingresso/Uscita di Interi Programmazione di Calcolatori: Ingresso/Uscita 1.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e stringhe Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
BIOINFO3 - Lezione 321 ACCESSO REMOTO AL SERVER SIBILLA Attraverso Internet è possibile accedere al server sibilla.cribi.unipd.it. Potrete così effettuare.
BIOINFO3 - Lezione 201 Come in ogni corso di introduzione ad un linguaggio di programmazione, proviamo a scrivere lormai celebre primo programma di prova.
Configurazione di una rete Windows
Amministrazione della rete: web server Apache
1 Amministrazione del sistema Creazione degli account al sistema. Comandi per la gestione degli utenti File per la gestione degli utenti, password shadow.
Installazione Come tecnico, si potrebbe aver necessità di effettuare una installazione pulita di un sistema operativo. L'esecuzione di una installazione.
A cura di: Huber Roberto, Zaharulko Nicola, Debernardi Daniele.
PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose.
File di log: importanza e analisi Seconda parte Yvette ‘vodka’ Agostini Valerio ‘Hypo’ Verde
Virtualization by Security A novel antivirus for personal computers Università degli Studi di Bergamo Corso di Laurea Specialistica In Ingegneria Informatica.
Formattazione, Partizioni e dischi
DAmb Sergio Lovrinich 28 Settembre Descrizione Questo Software si propone di eseguire una Analisi del Codice Sorgente, mettendo a disposizione Strumenti.
Introduzione a Javascript
1 Il file system di Unix Caratteristiche generali dei FS comunemente usati da Unix/Linux.
STAGE INVERNALE 2005 GESTIONE DI SISTEMI DI SICUREZZA INFORMATICA. A CURA DI: MARIO MASCIARELLI STUDENTI: DAMIANO PITOLLI FABIO NARDELLA.
Francesco M. Taurino 1 NESSUS IL Security Scanner.
1 SC che operano su processi Getpid, fork, exec, wait, waitpid, exit, dup, dup2.
1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( )
1 Amministrazione dei processi nel sistema operativo Unix (Bach: the Design of the Unix Operating System (cap: 6, 7, 8)
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
1 Chiamate di sistema Introduzione Errori : perror() Chiamate che lavorano su file.
Operatori di incremento e decremento
Ancora sulla shell. Shell e comandi La shell e' un programma che interpreta i comandi dell'utente. I comandi possono essere dati da terminale, oppure.
PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 28 Gennaio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.
Reti di calcolatori e sicurezza “Configurare il web-server Apache” a cura di Luca Sozio.
Sistemi operativi di rete Ing. A. Stile – Ing. L. Marchesano – 1/18.
1 System Call che operano su processi Getpid, fork, exec, wait, waitpid, exit, dup, dup2.
Cloud SIA V anno.
I FIREWALL. COSA SONO I FIREWALL? LAN MONDO ESTERNO UN FIREWALL E’ UN SISTEMA CHE SUPPORTA UNA POLITICA DI CONTROLLO DEGLI ACCESSI FRA DUE RETI (POLITICHE.
LA SICUREZZA INFORMATICA MATTEO BUDASSI 1°B MATTEO BUDASSI 1°B ANNO SCOLASTICO 2014/2015.
La gestione della rete e dei server. Lista delle attività  Organizzare la rete  Configurare i servizi di base  Creare gli utenti e i gruppi  Condividere.
Transcript della presentazione:

Programmazione Sicura A cura di Orlando Bassotto

Roadmap L'importanza della protezione del codice Panoramica generale sui rischi Validazione dell'input Azioni di prevenzione Conclusione Risorse

L'importante e' proteggersi

Cosa proteggere? Applicazioni per il trattamento di dati sensibili Applicazioni amministrative (Utilizzate da root o Administrator) Servizi di rete (Daemons, servizi, non escludendo CGI) Applicazioni con elevazione di privilegi (SUID)

Pitfall comuni Incuria nell'analisi del codice da parte dello sviluppatore stesso Mancanza di auditing del codice (dovuti a costi e tempi di sviluppo) Trasporto dei dati insicuro Fattori esterni Noncuranza da parte dell'amministratore di sistema Noncuranza da parte degli utenti

L'ambiente UNIX

L'ambiente UNIX Presenta una forma di autenticazione basata su login e password. Utilizza una tipologia di controllo DAC, basata su permessi di lettura, scrittura, esecuzione distinti tra utente, gruppo e altro. Ogni utente ha un user id ed un group id numerico, puo' appartenere a piu' gruppi. Permette l'elevazione dei privilegi utilizzando lo SUID bit sull'eseguibile.

L'ambiente UNIX Caratteristiche dei processi UNIX Identificati mediante un PID (Process Identifier) Privilegi di esecuzione mediante UID e GID. Limitazione nell'uso delle risorse Parametri di scheduling (priorita', policy di scheduling, etc) Root del filesystem (ambiente chrooted) Permessi creazione file mediante umask Variabili d'ambiente

L'ambiente UNIX Ogni processo ha una set di credenziali che descrivono i suoi privilegi RUID, RGID: UID e GID dell'utente che esegue il processo EUID, EGID: UID e GID effettivi per ogni controllo di privilegio SUID, SGID: UID e GID salvati, utilizzati per effettuare l'elevazione di privilegi. FSUID, FSGID: UID e GID utilizzati per i controlli su filesystem. (Solo Linux)

SUID: Perche'? Alcune applicazioni necessitano di particolari privilegi per poter compiere azioni che come utenti 'regolari' non possono eseguire. L'applicazione dovrebbe switchare dal suo RUID al SUID impostato solo per il tempo strettamente necessario per poi perdere definitivamente i privilegi. L'acquisizione e la perdita di privilegi e' un fattore fondamentale dal punto della sicurezza.

Rischi Penetrazione nel sistema Sottrazione, modifica o distruzione di informazioni riservate Utilizzo illecito del sistema Distributed Denial of Service Infezione da parte di virus

Validazione dell'input

Cosa validare? Parametri da linea di comando Variabili d'ambiente File descriptors Contenuto dei file Input da applicazioni WEB (specialmente CGI) Encoding dei caratteri (UTF-8, etc)

Parametri da linea di comando Vettore degli argomenti non totalmente trustable Buffer overflow Format string o bad parsing Boundary check

Variabili d'ambiente Variabili di inizializzazione (es. LD_PRELOAD) Variabili global-scope (es. IFS, PATH)

File descriptors Controllo dei file descriptors ereditati dai processi figli. Dirottamento dell'output di un programma (es. stdout dirottato su /etc/passwd)

Contenuto dei file Ulteriore minaccia della corretta interpretazione dell'input Stessi problemi inerenti alla validazione dei parametri da riga di comando

Input da applicazioni WEB Decoding dell'URI Corretta interpretazione degli headers Corretta interpretazione logica degli argomenti Encoding dei caratteri

Encoding dei caratteri Sequenze non valide Codifica Unicode/ISO10646 Multibyte strings Piu' codifiche possibili per la stessa sequenza di caratteri

Azioni di prevenzione

Azioni di prevenzione Corretta gestione dei dati sensibili Ordine e tipo delle variabili locali (es. array nello stack) Variabili signed ed unsigned Funzioni di copia boundary checked (es. snprintf al posto di sprintf, strncpy al posto di strcpy, etc)

Azioni di prevenzione Mantenimento dei privilegi fino a che strettamente necessari Utilizzo di funzioni o librerie error-proof Sistemi di protezione compile-time StackGuard come patch di gcc Propolice come preparser dei sorgenti Lint come sistema di prevenzione da errori generici

Auditing del codice Errori concettuali Errori di implementazione Errori 'umani' Ricerca di vulnerabilita' successive alla stesura del codice

Conclusioni

Conclusioni Non dare niente per scontato, entrare in un'ottica paranoica. Analizzare come vulnerabilita' note siano state exploitate. Pensare ai possibili contesti di utilizzo del programma. Limitare l'uso di risorse il piu' possibile. Negare per default e concedere solo cio' che e' ammesso. Fare attenzioni alle possibili race-conditions. Meglio un controllo in piu' che uno in meno.

Risorse Sikurezza - http://sikurezza.org Mailing List - devel@sikurezza.org Security Focus - http://www.securityfocus.com Open Web Application Security Project - http://www.owasp.org Secure Programming for Linux and Unix HOWTO di David A. Wheeler

Ringraziamenti Yvette Agostini (vodka@s0ftpj.org) Marco Valleri (naga@blackhats.it) Fabio Pietrosanti (naif@blackhats.it) Stefano Zanero (stefano.zanero@s0ftpj.org) Fabio Busatto (fabio.busatto@sikurezza.org) Andrea Cocito (blackye@break.net)

Riferimenti Orlando Bassotto nextie@s0ftpj.org