Differenze tra le versioni di "Progetto della sicurezza di rete/2006-2007"

Da WikiDsy.
(char)
(HMW #6)
Riga 294: Riga 294:
 
* Scrivere un programma C che, sfruttando uno shellcode appropriato, mandi in esecuzione una shell, attraverso il buffer overflow della variabile smashed così definita:
 
* 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() {
+
void main() {
 
+
char smashed[38]
char smashed[38]
+
 
+
ecc. ecc.
ecc. ecc.
+
}
 
 
}
 
  
 
* N.B: la dimensione di smashed non può essere modificata!
 
* N.B: la dimensione di smashed non può essere modificata!
 
* Consegnare entro domenica 26 novembre 2006 alle h:24.00
 
* Consegnare entro domenica 26 novembre 2006 alle h:24.00

Versione delle 12:43, 20 nov 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

  • Prove su 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