Progetto della sicurezza di rete/2006-2007

Da WikiDsy.
Versione del 1 dic 2006 alle 09:06 di IuZ (discussione | contributi) (Lezione di Lunedì 20 novembre 2006)


News

Lezioni cancellate/spostate

La lezione di Lunedì 16 ottobre 2006 non si terrà, causa Lauree in aula Beta.

Appelli

[...]

Informazioni generali

Progetto della Sicurezza di Rete è un corso complementare per le Lauree Magistrali.

Docenti

Corsi di laurea

Modalità d'esame

  • Homeworks (quasi) settimanali (che costituiranno il 70% della valutazione)
  • Prova pratica di laboratorio (che costituirà il 30% della valutazione)

Prerequisiti al corso

  • Tanta voglia di impegnarsi e di studiare
  • Conoscenza di Linux
  • Conoscenza del linguaggio C
  • Conoscenze di Reti di Calcolatori

Orari e luogo delle lezioni

Orario di ricevimento studenti

  • Ricevimento su appuntamento tramite email
  • Stanza P115

Informazioni specifiche

Siti del corso

Forum del corso (non ufficiale)

Materiale didattico

Programma del corso

Testi

  • Nessun libro di testo è stato consigliato

Altro materiale consigliato

Link utili

Diario del corso

Lezione di Lunedì 02 ottobre 2006

HMW #1

  • Predisporre una relazione in formato elettronico che affronti a livello introduttivo i seguenti argomenti:
    • Che cos'è la sicurezza informatica
    • Definizione dei termini di riferimento: bug, security bug, vulnerabilità, exploit, fault, failure, safety, dependability
    • Breve storia dell'Hacking
    • Aspetti etici del computer hacking, full disclosure e responsible disclosure
    • Bibliografia di riferimento
  • Consegnare via email al Prof. entro Lunedì 16 ottobre 2006

Lezione di Lunedì 09 ottobre 2006

  • Sicurezza dei sistemi operativi
    • Cos'è un S.O.
  • Meccanismi di protezione
    • S.O. standard
    • S.O. trusted
      • Common Criteria, Standard ISO per la sicurezza informatica CC su en.wikipedia.org
      • Evaluation Assurance Level (EAL)
      • Selinux, esempio di trusted S.O.
  • Protezione del S.O.
    • Separazione fisica
    • Bit di stato
    • Controled invocation
  • Protezione di oggetti/soggetti del sistema da altri soggetti
    • Soggetti, Oggetti, Right
    • Protezione dei processi
    • Protezione della memoria
    • Paginazione, Segmentazione
    • Tagged architecture
    • Controllo degli accessi
    • Problematiche connesse
    • Matrice degli accessi
    • Controllo discrezionale e Controllo mandatorio
    • Access Control List (ACL)
    • Capability (directory)
    • Token (capability)
  • Auditing e Logging
    • Struttura di un sistema di audit
  • Ciclo di vulnerabilità
  • Severity di vulnerabilità
  • Politiche di disclosure
    • Responsible disclosure
  • Database vulnerabilità
    • Bugtraq
    • CVE - Common Vulnerabilities and Exposures

Lezione di Lunedì 23 ottobre 2006

HMW #2

  • Predisporre una relazione in formato elettronico sulla sicurezza dei sistemi operativi in cui:
    • Siano descritte le principali criticità legate alla sicurezza del S.O.
    • Siano descritte le principali protezioni che possono essere implementate a livello di sistema operativo, secondo TCSEC
    • Sia descritto come queste misure sono praticamente implementate in un sistema operativo reale a scelta.
  • Decodificare (con l'ausilio di un password cracker a scelta) il file delle password presente sul sito del corso e consegnare il listato del file decifrato. Lo studente che sarà riuscito a decifrare il maggior numero di password riceverà un bonus punti.
  • Consegna entro Lunedì 6 novembre 2006 alle ore 24.00.

Lezione di Lunedì 30 ottobre 2006

  • WINXP
    • Subjects and tokens
    • Security token
    • Oggetti
    • Security descriptor
    • Owner
    • DACL e ACE
    • Access rights
    • Generic permission
    • Access control entry
    • NULL DACL
    • Type e Object type
    • Inheritance
      • Inheritance Flags
    • ACE Inheritance
    • Inheritance ObjectType
  • Audit Logs in Unix
  • Audit in Windows
  • Assembler IA-32
    • Linguaggio Assembly
    • Processori 80x86
  • Memoria
  • Memory model
    • Flat
    • Segmentata
    • Real-address
  • Modalità CPU
    • Protected Mode
    • Real-address Mode
    • System Management Mode (SMM)
  • Registri del processore
  • Linguaggio Assembly
    • AT&T
    • DOS/Intel Syntax (Intel Assembler, NASM) [quello scelto per il corso]
      • Direttive
      • Istruzioni
      • Stack

HMW #3

  • Installare sul proprio PC l'assemblatore NASM ed il relativo ambiente di sviluppo
  • Studiare i primi due capitoli del libro su NASM
  • Le informazioni di riferimento compreso i manuali sono reperibili su:

Lezione di Lunedì 06 novembre 2006

  • Istruzioni NASM
    • Tipi di istruzioni
  • Debugging
  • Schema di un programma
  • Istruzioni di controllo
  • Salti

ClassWork #1

  • Scrivere un programma Assembler che chiede in input due numeri interi e stampa la loro somma, differenza, prodotto, quoziente e resto.
  • Predisporre il programma affinché durante la sua esecuzione stampi il contenuto delle locazioni di memoria che contengono i dati di input
  • Assmblare generando anche il corrispondente listato del compilato

HMW consigliato

  • Imparare ad usare il debugger C: gdb (sotto Linux)

HMW #4

  • Scrivere un programma assembler che carica un array di 10 numeri interi con segno e calcola:
    • la somma e il prodotto degli elementi di posizione pari
    • la differenza di quelli di posizione dispari
    • il quoziente e il resto tra il prodotto degli elementi di posizione pari e quelli di posizione dispari.
  • Scrivere un programma assembler che carica un array di 100 elementi interi senza segno con numeri casuali, li ordina e stampa sia l'array disordinato che quello ordinato (scegliere un algoritmo di ordinamento).
  • Consegna entro Domenica 12 novembre 2006 alle 24.00

Lezione di Lunedì 13 novembre 2006

  • Puntatori
  • Sottoprogrammi
  • Stack
  • Push e Pop
  • Call e Ret
  • Calling convention
  • Parametri via stack
  • Epilogo e Prologo
  • Variabili locali
  • Enter e Leave
  • External
  • Assembly e C
  • Convenzioni
  • Printf
  • Lea
  • Interrupt ed eccezioni
  • Syscall

ClassWork

  • Scrivere un programma assembler che legge 5 valori interi e stampa la loro somma, prodotto, il Max e il Min. Per l'effettuazione delle operazioni di I/O il programma deve usare due subroutine esterne che utilizzano le procedure scanf e printf del C.

HMW #5

(da inviare a: homework [ AT ] idea [ DOT ] sec [ DOT ] dico [ DOT ] unimi [ DOT ] it)

  • Scrivere un programma assembler che esegue la shell attraverso una chiamata di sistema diretta.
  • Scrivere un programma C che genera in output il codice binario del suddetto programma, usando il formato esadecimale.
  • Facoltativo: scrivere un programma assembly che usando come subroutine il programma precedente sia in grado di eseguire un qualunque comando di shell fornito in input.

Lezione di Lunedì 20 novembre 2006

ClassWork (da finire a casa)

  • Prove su shellcode
  • Correggere
void main() {
  int *ret;
  ret = (int *)&ret + 2;
  (*ret) = (int)shellcode;
}

HMW #6

  • Scrivere un programma C che, sfruttando uno shellcode appropriato, mandi in esecuzione una shell, attraverso il buffer overflow della variabile smashed così definita:
void main() {
char smashed[38]
ecc. ecc.
}
  • N.B: la dimensione di smashed non può essere modificata!
  • Consegnare entro domenica 26 novembre 2006 alle h:24.00

Lezione di Lunedì 27 novembre 2006

  • Exploit interno
  • Esempio programma vulnerabile
  • Memory Layout
  • Indirizzo di envpn
  • Trovare buffer overflow

HMW #7

  • Exploitare attraverso stack overflow il programma presente sul sito del corso ( http://security.dico.unimi.it/sicurezza0607/#spec ), in particolare:
    • Scrivere un exploit locale: assumendo cioè che il programma sia in esecuzione sulla propria macchina.
    • Scrivere un exploit remoto: assumendo cioè che il programma oggetto sia accessibile solo attraverso la rete.
  • Per ciascun exploit individuato deve anche essere consegnato:
    • un file README che contiene la descrizione dell'attacco oltre che le necessarie istruzioni per eseguire l'exploit
    • più alto è il numero di exploit individuati e più alto sarà il punteggio conseguito.
  • E' anche possibile che il programma non sia exploitabile, in locale o in remoto, in questo caso il file README dovrà contenere una spiegazione del perché il programma non è exploitabile con la tecnica del buffer overflow.
  • Consegnare entro domenica 10 dicembre 2006 alle h:24.00