La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Programmazione Sicura

Presentazioni simili


Presentazione sul tema: "Programmazione Sicura"— Transcript della presentazione:

1 Programmazione Sicura
A cura di Orlando Bassotto

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

3 L'importante e' proteggersi

4 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)

5 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

6 L'ambiente UNIX

7 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.

8 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

9 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)

10 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.

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

12 Validazione dell'input

13 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)

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

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

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

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

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

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

20 Azioni di prevenzione

21 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)

22 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

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

24 Conclusioni

25 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.

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

27 Ringraziamenti Yvette Agostini (vodka@s0ftpj.org)
Marco Valleri Fabio Pietrosanti Stefano Zanero Fabio Busatto Andrea Cocito

28 Riferimenti Orlando Bassotto


Scaricare ppt "Programmazione Sicura"

Presentazioni simili


Annunci Google