Swappa : Uni / LPS - Mega Glossario
Creative Commons License

 :: LPS - Mega Glossario ::

Questa pagina è stata aggiunta GRAZIE agli appunti che AVETE INVIATO nel periodo di chiusura della sezione UniCrema!! 'È SERVITA A QUALCOSA, NO?!' ;)

Il glossario megagigante qui presente è una raccolta di definizioni di termini. Viene quindi buono sia come prontuario che come autotest per verificare le conoscenze. Si è scelto di rispettare l'ordine alfabetico. Nel caso due voci andassero meglio vicine, siete pregati di modificare la pagina in modo sensato (eg: Processi e Tipi di processo devono stare vicini, quindi rinomino la seconda voce Processi: tipi).

Affidabilità

Un software è affidabile se si comporta “come previsto”. Questa qualità può essere valutata matematicamente come la “probabilità di assenza di fallimenti in un dato intervallo di tempo”; inoltre, se le specifiche sono corrette, tutto il software corretto è affidabile, ma non vale il viceversa.

Analisi dei rischi

Ha l’obiettivo di identificare i rischi possibili sulla base dei requisiti di sicurezza stabiliti, e di valutare strategie per prevenirli o affrontarli (l’analisi dei rischi influisce sul processo di auditing). I rischi vanno classificati in base alla loro severità (è una classificazione context-sensitive importante per allocare risorse). E’ difficile comparare sistemi in termini di sicurezza, in quanto non esiste una metrica “assoluta” ma linee guida molto generali per la valutazione e la comparazione di sistemi sicuri.

Analisi di sicurezza (analisi e gestione dei rischi)

E’ importante per riuscire a bilanciare tra sicurezza e funzionalità: è indispensabile quindi per decidere quali obiettivi realizzare e quali proprietà e qualità garantire. L’analisi di sicurezza è un processo ortogonale al processo di sviluppo del software, è il suo modello di sviluppo ottimale, è quello a spirale.

Appropriato Error Handling

Molti sistemi vengono compromessi a causa di improprio trattamento di errori inaspettati.Una corretta pianificazione dell’error handling coinvolge:

Architettura sicura

Insieme dei principi d’alto livello e delle decisioni per la progettazione di sistemi da ritenersi sicuri.

Artifatti e Stakeholders

L’analisi di sicurezza comporta l’impiego di tutti gli artifatti (documenti dei requisiti, documenti dell’architettura e del design, modelli, ecc.), e degli stakeholder (utenti, clienti, ingegneri del software/della sicurezza, esperti di dominio) coinvolti come risorse per l’identificazione dei rischi.

Attacco

Un attacco ad un sistema è ogni atto malevolo contro un sistema o un complesso di sistemi. Nell’ambito di un attacco vanno distinti (fasi di un attacco):

Esempio di attacco: ATTACKER 

TARGET.

Attacco: tipi

In fase di:

Attacchi in fase di progettazione:

Difesa: usare intensivamente tecniche di encryption (in particolare autenticazione crittografica forte), ed usare session checksum e shared secrets come cookies (usare ssh invece che telnet, criptare i file usando utilities come PGP o Entrust).

  1. controllare se un file contiene comandi sicuri da eseguire;
  2. eseguirlo

Un utente malizioso potrebbbe sostituire il file tra i passi 1 e 2. Difesa: Comprende la differenza tra operazioni atomiche (indivisibili) e non-atomiche, ed evitare le ultime a meno che non si sia sicuri che non abbiano delle implicazioni non sicure. Se non si è sicuri che un’operazione sia atomica, assumere che non lo sia, ossia che il sistema operativo possa eseguirla in due o più passi interrompibili.

Difesa: come per il man-in-the-middle attack. In più, introdurre in ogni dialogo alcuni elementi (come un sequence identifier) che differiscano da sessione in sessione in modo da far fallire il byte-for-byte replay.

Difesa: come sistemista, attente configurazione della rete, e uso di “switched” network routers; come programmatore, massimizzare l’uso della crittografia.

attaccante può riuscire a prendere il controllo (o hijacking) di una connessione già stabilita. Esistono molti tool che sono stati scritti e distribuiti su Internet per implementare questo tipo di attacco. Difesa: E’ un attacco di rete da cui un’applicazione software riesce difficilmente a difendersi. La crittografia è di aiuto, e se un attento logging fornisce abbastanza informazioni sulla sessione, procedure operazionali possono essere in grado di rilevare un attacco di hijacking dopo che si è verificato.

Difesa: E’ difficile a livello di applicazione potersi difendere da questi tipi di attacchi alla rete. Tuttavia, l’applicazione potrebbe essere in grado di controbattere gli effetti dell’attacco ristabilendo la connessione interrotta.

Attacchi in fase di implementazione

modo sicuro sottostringhe di lunghezza specificata che possono essere contenute nel buffer.

furfante scriva all’interno dell’applicazione del codice speciale che consenta in seguito di bypassare il controllo d’accesso. Tali punti di accesso speciali sono detti back doors. Difesa: Adottare procedure di garanzia delle qualità che controllano la presenza di back doors sull’intero codice.

raccomanda il riuso di codice esistente, scritto da una specialista, che è stato opportunamente controllato, testato e mantenuto. Quando si scrive del codice, bisogna tener conto che è molto più sicuro controllare che ogni carattere di input compaia in una lista di caratteri “safe”, piuttosto che comparare ciascun carattere con quelli di una lista di caratteri “pericolosi”.

Attacchi in fase di operazione

un flusso di input ad alta-frequenza. In un attacco negazione-servizio su ampia-scala, l’attaccante può usare hosts su Internet precedentemente compromessi come piattaforme di passaggio per l’assalto. Difesa: Progettare il software e in particolare l’allocazione delle risorse in modo tale che l’applicazione faccia moderata richiesta di risorse del sistema (come spazio su disco o numero di file aperti). Quando si progettano grandi sistemi, prevedere il monitoraggio dell’utilizzo delle risorse, e un modo che consenta al sistema il trabocco di caricamente eccessivo (cioè il software non dovrebbe lamentarsi o morire nel caso in cui si esauriscano le risorse).

che conoscono o riescono ad indovinare queste informazioni. Difesa: Rimuovere gli accounts di default; controllare nuovamente dopo aver installato nuovo software o nuove versioni di software esistente (infatti scripts di installazione possono talvolta reinstallare questi tipi di accounts di default).

biometrici e smart cards.

Caso di studio Java SandBox

I principi su cui si basa l’architettura di java sono:

In JDK 1.0 le applet non possono accedere a risorse locali e vengono eseguite in un SendBox e le applicazioni possono fare tutto. In JDK 1.1 le applet firmate sono trattate come le applicazioni.In Java 2 le architettura sono piu sensibili e personalizzabili.

Ciclo di vita di un software

L’insieme di stadi in cui il sistema viene a trovarsi.

Ciclo di vulnerabilità

E’ una sequenza di eventi che si susseguono molto comunemente nel mondo della sicurezza: va dalla determinazione alla eliminazione di una vulnerabilità del software. E’ un ciclo ortogonale al ciclo di vita del software, e solitamente accade dopo la sua distribuzione. Sequenza di eventi:

  1. Viene scoperta una nuova vulnerabilità in un pezzo di software.
  2. I cattivi analizzano l’informazione e sfruttano la vulnerabilità per lanciare attacchi contro il sistema o la rete.
  3. I buoni cercano una soluzione al problema: analizzano la vulnerabilità, sviluppano una soluzione e la testano in un ambiente controllato, distribuiscono la soluzione.
  4. Se la vulnerabilità è seria, o gli attacchi sono gravi, anche i media ne danno pubblica informazione con catastrofiche conseguenze.
  5. La patch distribuita (spesso rilasciata come parte di update automatico), viene installata agli addetti.
  6. Tecnici della sicurezza analizzano frammenti di codice per scoprire vulnerabilità simili.

Complicazioni: Sistemi e reti vulnerabili raramente vengono riparate durante il ciclo di vita della vulnerabilità: la patch sono ricevute come parte di una versione aggiornata del software. Il software maligno rilasciato via Internet può sfruttare la vulnerabilità dei sistemi causando e propagando danni senza misura.

Common Criteria: limiti

La valutazione della sicurezza è un’attività molto più complessa dell’applicare un target di sicurezza ad un target di valutazione. I problemi di sicurezza sono context-sensitive, e quindi è difficile valutarli in base a criteri comuni. Inoltre, come molti standard, definiscono il “cosa” e non il “come”, mentre nel campo della sicurezza è fondamentale sapere come affrontare problemi di sicurezza e gestire i rischi.

Common Evaluation Methodology

Definisce le modalità di valutazione di un sistema in base a criteri comuni. Processo di valutazione:

  1. Wall Street produce un profilo di protezione per il firewall usato per proteggere le macchine che contengono informazioni finanziarie dei clienti;
  2. Il profilo viene valutato in base alle Common Evaluation Methodology per garantire che esso sia consistente e completo;
  3. Ottenuta la valutazione, il profilo viene pubblicato (target di sicurezza);
  4. Un vendor realizza una sua versione (target di valutazione) di firewall dotato del profilo di protezione definito da Wall Street;
  5. Il target di valutazione viene inviato ad un istituto accreditato per la valutazione rispetto al target di sicurezza:
    1. L’istituto applilca la Common Evaluatoin

Methodology per determinare in base ai common criteria se il target di valutazione soddisfa il target di sicurezza;

  1. Se la valutazione ha esito positivo, la documentazione di testing dell’istituto viene inviata al NAVLAP (National Voluntary Lavoratory Accreditation Program) per controllarne la correttezza;
  2. Se gli atti vengono approvati, il prodotto ottiene la certificazione di prodotto valutato in base ai common criteria.
Conoscere e rispettare la chain of trust

Non invocare programmi non fidati da programmi fidati(spesso violato quando un’applicazione invoca un comando di sistema per eseguire un’operazione).Un programma non deve delegare l’autorità di fare un’azione senza delegare anche la responsabilità di controllare se l’azione è appropriata.Un’applicazione rispetta la chain of trust se:valida tutto quello che riceve in input,non passa tasks a identità meno-fidate,emette informazioni tanto valide e sicure quanto quelle prodotte dalle altre risorse.

Correttezza

Un software è corretto se rispetta le specifiche di progetto. E’ una qualità assoluta in quanto non esiste il concetto di “grado di correttezza” e di “gravità di deviazione”, e in quanto specifiche sbagliate possono dipendere da requisiti incorretti o da errori nella conoscenza del dominio di applicazione. Se le specifiche sono espresse formalmente, la correttezza può essere definita formalmente, quindi può essere provata con un teorema (verifica), oppure valutata attraverso dei contro-esempi (testing).

Criteri di scelta di tecnologie sicure nei diversi ambiti

vantaggioso sacrificare un po’ di efficienza per altri vantaggi come sicurezza,affidabilità,ecc. Non tutti i linguaggi offrono lo stesso livello di sicurezza,infatti i programmi C tendono ad essere inaffidabili,in programmi interpretati(VB,Perl..)sono normalmente sicuri ma possono contenere codice errato mai eseguito,i programmi scritti in Java sono molto sicuri a spese dell’efficienza,della facilità con cui scrivere i programmi e introducono i rischi di sfruttare in modo improprio o insicuro l’information hiding del linguaggio(es.private) per la sicurezza. I vantaggi di Java per quanto riguarda la sicurezza sono:no buffer overflow e no errori di memoria, ha un controllo forte e statico dei tipi,ha bisogno di un framework per eseguire codice non fidato in un sendbox e dispone di librerie per la sicurezza.

Pro e contro: non possono essere dimenticate né perse ,richiedono HW costoso,sono uniche ma non segrete, non sono revocabili e problemi di privacy.

Documenti d’architettura

Un’architettura dovrebbe definire:organizzazione del programma,strategie di cambiamenti,decisione su acquisto vs sviluppo, principali strutture dati,algoritmi chiave,oggetti principali,funzionalità generica,processamento dell’errore(correttivo o determinativo),robustezza attiva o passiva e tolleranza ai guasti(fault tolerance).

Domande iniziali utili in fase di progettazione

pensiamo possa tentare di compromettere la sicurezza,qual è il punto più debole della nostra difesa;

successive che fanno affidamento sul SW per l’autenticazione,esistono librerie a livello superiore che potrebbero fornire input non affidabili,chi sono gli utenti legittimi,chi ha accesso al SW(sorgente o eseguibile),si prevede un aumento o diminuzione degli utenti in futuro,che impatto questo cambiamento avrebbe sulle assunzioni iniziali,qual è l’ambiente in cui il SW viene eseguito.

Efficienza

Un software è efficiente se usa intelligentemente le risorse di calcolo (ad es. memoria, tempo di processamento, metodi di comunicazione). Questa qualità può essere valutata attraverso analisi di complessità o la simulazione di scenari critici; può inoltre influenzare la scalabilità, in quanto: una soluzione che funziona in piccolo può non funzionare in grande; cambia la tecnologia; e può influenzare la facilità d’uso.

Evoluzione (come affrontarla)

L’idea di base è di disporre i processi incrementali e di poter avere un feedback (fondamentale per consentire controlli e cambiamenti anticipati) sugli incrementi.

Facilità di manutenzione

Facilità nel realizzare adattamenti o evoluzioni; agio nel corregere gli errori. Un software è facile da mantenere se:

Fallimento sicuro:Il principio di fault safely dice che in caso di fallimento un sistema deve terminare in una configurazione sicura(esempio:se fallisce il programma di una porta a chiusura elettronica la porta deve rimanere aperta)
Fasi di sviluppo

Le attività del processo sono organizzate in:

produce il RASD (Requirements Analysis and Specification Document). Il RASD deve permettere al cliente di verificare le caratteristiche specificate, e deve consentire al progettista di procedere allo sviluppo dell’architettura del software. Le proprietà richieste dal RASD sono precisione, compeltezza e consistenza, e dovrebbe includere un User Manual preliminare, e un System Test Plan, ovvero la definizione delle modalità di test del sistema. Nella fase di specifica occorre descrivere cosa fare e non come farlo, rispondendo alle 5 W (who, why, what, where, when). , progettazione (o design), impementazione e test dei moduli, integrazione e test del sistema, consegna, manutenibilità.

descrizione dell’architettura del software sia a livello globale che a livello dei singoli moduli. La fase di design produce il Design Document: definizione delle componenti (o moduli), relazioni tra le componenti, interazione tra le componenti. Gli obiettivi della progettazione sono lo sviluppo concorrente e la separazione delle responsabilità.

Graceful degradation

Quando si verifica un guasto il sistema non si ferma ma continua ad operare in modo ristretto o con funzionalità ridotte.

Identificazione delle assunzioni

E’ una fase molto critica della sicurezza.Esempio assunzioni sull’autenticazione:

Ingegnere della sicurezza

E’ una nuova figura professionale che si occupa di analisi di sicurezza ortogonalmente al processo di sviluppo; si richiede profonda conoscenza di sviluppo del software, e competenze di sicurezza.

Interoperabilità

Fa riferimento all’abilità di un sistema di coesistere e cooperare con altri sistemi.

Linguaggi per la specifica
Limite sulle risorse

Il principio di resource-consumption limitation dice che si devono usare le funzionalità che il SO fornisce per limitare il consumo di risorse del sistema.La limitazione del consumo di risorse deve essere combinata con un significativo ripristino da errore(error recovery).

Livello di fault tolerance

Per avere certificazione CERT un apparato deve: identificare le funzionalità critiche(uso delle 3 R):

Livello di sicurezza

Il grado di sicurezza richiesto è connesso al rischio ed al costo delle contromisure.Rendere l’applicazione il piu sicura possibile puo causare il fallimento della progettazione.Occorre identificare costi ed esplicitare possibili compromessi.

Livelli multipli di difesa

Fornire difesa in profonidità è meglio che affidarsi ad un’unica barriera(esempio:richiedere ad un utente di avere permessi appropriati e password prima di accedere ad un file)

Macchine a stati finiti

Una macchina a stati finiti(FSM) è una notazione formale che permette la rappresentazione astratta del comportamento del sistema.Le FSM hanno una rigorosa definizione matematica e una intuitiva rappresentazione grafica tramite diagrammi di stati.Si evince che le FSM modellano le configurazioni istantanee di un sistema tramite stati (nodi) e le operazioni del sistema tramite transizioni(archi).Le operazioni possono ricevere input (FSM di base) ed eventualmente produrre output(FSM estese).Sono utilizzate per modellare GUIs,protocolli di rete,applicazioni web,..Non tutti i requisiti pero possono essere specificati con una FSM,tra i quali requisiti real time,requisiti riguardanti performance,e requisiti riguardanti tipi di computazioni. Il modello FSM di un sistema non è unico.Una FSM è una tupla(S,I,δ) con S insieme finito di stati,I insieme finito di eventi di input e δ=S*I -> S : funzione di transizione.

Macchine a stati finiti con output

Macchina di Mealy se è una FSM che produce un output per ciascuna transizione;Macchina di Moore se è una FSM che produce un output per ciascun stato.La macchina di Mealy è una tupla(S,I,O,δ,γ) con S insieme finito di stati,I insieme finito di eventi di input,O insieme finito di eventi di output, δ=S*I  S : funzione di transizione, γ=S*I -> O funzione di output.Spesso è anche fissato lo stato iniziale s0 ∈ S.Una macchina di Moore è una tupla (S,I,O,δ,γ,F) con S insieme finito di stati,I insieme finito di eventi di input,O insieme finito di eventi di output, δ=S*I -> S : funzione di transizione, γ=S*I -> O funzione di output e F ⊆ S insieme di stati finali.Un evento di output puo anche essere una azione della macchina.E’ utile vedere una FSM di mealy come la tupla (S,I,O,T) con con S insieme finito di stati,I insieme finito di eventi di input,O insieme finito di eventi di output e T insieme finito di transizioni.Una transazione è una tupla(s,i,o,s’).

Macchine a stati finiti: limiti

E’ possibile rappresentare solo un numero finito di stati.La composizione di piu FSM è una FSM con K1*k2*... stati(crescita esponenziale).Per superare i limiti di composizionalità dell’FSM sono state definite opportune estensioni(tra cui le statecharts di UML) che sono dotate dei concetti di sottomacchina e permettono composizione sequenziale,composizione parallela e modularità.

Macchine a stati finiti: proprietà

-Minimalizzazione: una FSM è minimizzata (o ridotta) se non possiede coppie di stati equivalenti. Esistono algoritmi standard per minimizzare le FSM facendo collassare stati equivalenti in un unico stato;

transizione dello stato s con input i,per transazioni “implicitamente definite” bisogna aggiungere una loop transition con output null(s,i,null,s);per transazioni “indefinite per default” bisogna aggiungere un insieme di transizioni ((s,i,o,s’)|o€O,s’€S); per transazioni “proibite” l’input i non puo essere introdotto allo stato s,e la macchina non puo essere completamente specificata.

indipendenti dall’output.

univocamente stato iniziale e stato finale. Una sequenza di homing è anche una sequenza di sincronizzazione e non viceversa.

output.

Mantenere lo stato minimale

Stato = informazione che un programma deve tenere in memoria durante una transazione o una esecuzione di un comando.Il principio del minimal retained state dice che un programma deve tenere in memoria lo stato minimale cosi da rendere difficile ad un utente malizioso il poter modificare le variabili di stato o creare stati di programma non permessi,consentendo in tal modo azioni di programma anomale.

Misure di sicurezza adeguate all’utente

Il principio dell’accettabilità psicologica dice che è importante usare modelli mentali e paradigmi tratti dal mondo reale.Se le misure di sicurezza di un sistema sono cosi onerose ed irritanti che l’utente le evita la sicurezza del sistema è compromessa.

Modalità di attacco

Il come un attacker attacca un sistema, dipende spesso dal perchè e dalla competenza in materia di sicurezza del safecracker. Per rafforzare la sicurezza di un’applicazione è importante domandarsi cosa può accadere, e come può accadere.

Modelli di processo

Determinano l’organizzazione delle diverse fasi di sviluppo. I cicli di vita differiscono principalmente nel modo e nell’ordine con cui le attività sono realizzate. I modelli di ciclo di vita sono classificati in modelli a cascata, modelli evolutivi, e modelli a spirale.

Modelli a cascata (Waterfall)

Rappresenta lo standard per la produzione di sistemi informatici. L’output di ogni fase rappresenta l’input della fase successiva. Limiti: ne esistono molte varianti e ciascuna organiazzazione tende a definire il “proprio”; il modello implica il completamento di una fase prima di passare alla fase successiva; è un processo black box e non consente prototipazione; non tiene in considerazione il fatto che i requisiti cambiano (cambia il contesto e le specifiche potrebbero risultare sbagliate).

Modularizzazione

Il principio di modularizzazione dice di:suddividere la progettazione in moduli,definire con precisione i punti d’interfaccia tra moduli,limitare privilegi e risorse ai moduli che realmente ne necessitano.Funzioni che richiedono privilegi speciali vengono isolate e codificate in separati semplici moduli.

Monolicità di una applicazione:
Offuscamento delle informazioni

Il principio del non offuscamento dice che nascondere la modalità di funzionamento di un componente SW o il registro in cui è memorizzato un particolare parametro di policy è pericoloso.La segretezza non è affidabile come unico mezzo di difesa,ma puo essere utile per ingannare un attaccante.

Politica di sicurezza(policy)

E’ diversa da una architettura sicura. Stabilisce:

dati;

Portabilità

Un software è portabile se può funzionare su più piattaforme.

Principi di un’architettura sicura

I principi base per definire architetture sicure sono:

Privilegi adeguati

Un’applicazione necessita di adeguati privilegi e accessi per operare.Seguire il principio del minimo privilegio:per leggere un record non aprire il file con accesso anche in scrittura,per creare un file in una directory condivisa fare uso del “group access” o delle ACL.

Problema Y2K

Molti software gestivano le date memorizzando solo le ultime due cifre. Dall’anno 2000 questi sistemi andavano aggiornati in modo di gestire correttamente gli anni. Alla vigilia del capodanno 2000 c’era molto timore che potesse esserci qualche malfunzionamento che avrebbe potuto bloccare le attività più critiche e scatenare un effetto dominio. Non è accaduto nulla grazie alla “lezione del Y2K”. Due motivi principali hanno contribuito al successo dell’operazione Y2K:

  1. C’era una scadenza ben precisa, nota a tutti e non posticipabile.
  2. Presa di coscienza del problema, in quanto il problema era noto a tutti: una ditta che non avrebbe aggiornato il proprio sistema, sarebbe potuta essere responsabile oggettivamente; la popolazione e i media erano informati e preoccupati del problema.

Cosa si può imparare dal Y2K?

Processo

Rappresenta come realizziamo il prodotto. Esistono diversi modelli in cui organizzare le fasi di sviluppo. Le qualità del processo riguardano i metodi utilizzati per lo sviluppo del software. Le qualità del processo influiscono su quelle del prodotto. Le qualità sono:

Processo di produzione

La sequenza di operazioni che viene esguita per progettare, realizzare, consegnare e modificare un prodotto software.

Processi flessibili

Capaci di adattarsi ai cambiamenti, in particoalre ai cambiamenti dei requisiti e della specifica. Permettono il riciclo, ovvero modificare prima il progetto e poi cambiare il codice o applicare cambiamenti in maniera consistente in tutti i documenti. Un processo flessibile consente validazione e verifica. I processi flessibili esistono in molte forme:

rischi, sviluppo (specifica, design, codifica), e validazione. Ad ogni ciclo il costo aumenta, proprio come in una spirale. Questo modello ingloba prototipazione e approccio iterativo in quanto: inizia sviluppando un piccolo prototipo; continua seguendo un mini-processo waterfall, principalmente per raccogliere i requisiti; quindi, il primo prototipo è revisionato; nei loop successivi, il team di progetto realizza altri requisiti, design, implementazione e revisione; prima di iniziare un nuovo ciclo, fa l’analisi dei rischi; il mantenimento è semplicemente una forma di sviluppo continuo. Il modello a spirale è il modello di sviluppo ottimale per poter effettuare un’efficace analisi di sicurezza: prevede al suo interno la fase di analisi dei rischi, è flessibile, prevede un raffinamento successivo, e consente la validazione già nelle fasi iniziali con la possibilità di integrare soluzioni trovate a posteriori.

Prodotto

Rappresenta cosa realizziamo (software). Il prodotto software ha 3 caratteristiche principali:

  1. Intangibile: difficile da descrivere e valutare.
  2. Malleabile: può essere trasformato e dotato di nuove funzionalità.
  3. Human Intensive: non comporta nessun processo manifatturiero tradizionale.

Le qualità del prodotto riguardano il software stesso e sono sempre valutabili.

Progettare con in mente il nemico(Adversary principle)

Progettare il SW come se il nemico più astuto lo attaccherà,anticipando gli attacchi di avversari intelligenti,razionali e irrazionali e prevedendo le possibili solution.E’ impossibile progettare con in mente il nemico senza il realistico senso di cosa il nemico potrebbe voler attaccare del SW.

Qualità del software

Sono utili per la valutazione del software, e sono classificate in Esterne e Interne, strettamente connesse in quanto non è possibile ottenere le qualità esterne se il software non gode delle qualità interne.

soprattuto le funzionalità del prodotto. Alcune qualità esterne sono: correttezza, affidabilità, efficienza, usabilità, portabilità, interoperabilità, robustezza.

software. Alcune qualità interne sono: riusabilità, verificabilità, facilità di manutenzione.

Requisiti
Responsabilità individuali

Il principio di accountable individuals dice che un’architettura di successo deve garantire che gli individui siano responsabili delle proprie azioni.Questo principio richiede che ogni utente abbia ed usi un account personale,sia difficile per un utente spacciarsi per un altro,deve essere chiaramente stabilita la responsabilità della sicurezza delle risorse coinvolte.

Ricostruzione di eventi

Il principio di auditability dice che deve essere possibile ricostruire la sequenza di eventi che hanno condotto certe azioni chiave.Questo principio prevede che l’applicazione e il sistema di host creino e mantengano gli audit logs.

Riusabilità

Un software è riusabile se può essere usato, in tutto o in parte, per costruire nuovi sistemi.

Riuso di SW sicuro

Molte corporazioni di grandi dimensioni hanno politiche di riuso del codice e repository di codice certificato sicuro.Esperti di sicurezza dibattono da anni se è piu sicuro il SW di dominio pubblico(SW open source) oppure il SW proprietario(SW closed source). Non assumere che un programma od algoritmo sia sicuro da attacchi perché pubblicamente disponibile.

Robustezza

Un software è robusto se si comporta in modo ragionevole anche in circostanze non previste dalle specifiche di progetto (es.input incorretti, rotture di dischi, ecc.).

Semplicità di progettazione

Un principio base dell’ingegneria sicura è realizzare sistemi che siano piu semplici possibile.Sistemi semplici sono piu facili da progettare e testare.

Sicurezza

E’ una proprietà relativa e non assoluta del sistema; il suo significato è relativo al contesto di applicazione, e può essere definita rispondendo alla domanda: “sicurezza contro cosa e da chi?”. E’ una qualità che implica lo stabilire una policy di sicurezza. Un software sicuro, oltre alle qualità comuni a tutti i software, deve godere delle seguenti qualità (security goals):

Sicurezza e design

L’analisi di sicurezza nella fase di design consiste principalmente nell’identificare: come i dati passano da una componente all’altra; utenti, ruoli e diritti che sono esplicitamente dichiarati o implicitamente supposti dal design; ogni soluzione potenzialmente applicabile a problemi individuati; la relazione di trust di ciascuna componente. Il security plan va attuato in fase di design per essere effettivo.

Sicurezza ed implementazione

L’implementazione è una fase critica per la sicurezza perché molti attacchi sono possibili proprio a causa di fattori tecnici ed umani connessi alla fase di implementazione. Compito dell’ingegnere della sicurezza è quello di identificare le linee guida per la stesura del codice, ed effettuare il controllo del codice (code audit).

Sicurezza e requisiti

Nella definizione dei requisiti connessi alla sicurezza occorre identificare ciò che va protetto, da chi va protetto e per quanto tempo, e anche quanto vale mantenere certi dati protetti. I requisiti devono essere enunciati in modo chiaro e completo; il documento dei requisiti deve specificare cosa un sistema deve e non deve fare, ma anche perchè deve farlo.

Sicurezza e Specifica

Dai requisiti si ricava la specifica che deve anche integrare eventuali possibili soluzioni a rischi individuati. L’analisi di sicurezza continua in fase di specifica; è molto importante avere una specifica dettagliata (che descriva la reazione del sistema a circostanze critiche), formale (completa e non ambigua, ma anche chiara e comprensibile), ed eseguibile per avere un feed-back immediato. Se nuovi rischi sono individuati, vanno riflessi nei requisiti.

Sicurezza e testing

Per sistemi sicuri si distingue tra:

se il sistema fa ciò che si suppone debba fare in circostanze normali.

Smart cards: valutazione

Dal 2001 lo Smart Card Security User’s Group sta cercando di definire dei Common Criteria per la valutazione delle smart cards. Questo processo converge lentamente per due motivi:

  1. Esistono due profili per la sicurezza:
    • quello europeo, che mira maggiormente alla protezione fisica dei dati;
    • quello americano, che mira maggiormente alla protezione software e alla prevenzione di attacchi noti.
  2. La maggior parte degli enti che lavorano sulla sicurezza delle smart cards non sono interessati ai Common Criteria.
Specifica dei requisiti

La specifica dei requisiti è una descrizione completa e non ambigua dei requisiti.Si fa attraverso un’analisi iterativa e cooperativa del problema,richiede l’impiego di linguaggi formali o semiformali e il controllo della comprensione del problema che si era raggiunta.

Specifiche: proprietà

La descrizione informale di un sistema SW è data in termine di REQUISITI. I requisiti specificano cosa un sistema SW deve fare,e non come deve farlo.

Specifiche: Qualità
Standard per la sicurezza
TCP SYN FLOODS

Dall’analisi degli attacchi SYN flood del protocollo TCP,i seguenti principi di progettazione sono stati violati:progettare con in mente il nemico,garantire un adeguato livello di fault tolerance,il principio di graceful degradation,self- controllo del consumo di risorse.

Tecniche ingegneristiche

Le tecniche di sviluppo sono un fattore critico per la sicurezza del SW.Software sicuro richiede buona progettazione e buone tecniche di progettazione.Molti attacchi sono dovuti a mancanza di progettazione,debolezze umane e scarsa capacità di programmazione.Una buona architettura di sicurezza può eliminare o mitigare il primi 2 fattori ma non il terzo.

Test delle azioni contro la policy

Il principio di mediazione completa dice che occorre testare,passo per passo,ogni azione che è possibile tentare contro la policy.La mediazione completa è necessaria a garantire che le decisioni prese in un dato momento dal SW sono conformi al settaggio di sicurezza aggiornato del sistema.

UML

definisce una notazione grafica, un complesso di viste organizzate in diagrammi, una sintassi mediante meta-modello, una semantica descritta in prosa.

Usabilità

Facilità d’uso da parte dell’utente. E’ una qualità difficile da valutare in quanto molto soggettiva; comporta la definizione di expected user, e influisce molto sulle interfacce utente (visuale vs testuale).

Verificabilità

Possibilità di dimostrare a posteriori la correttezza o altre caratteristiche del software.


Torna alla pagina di LPS

(Printable View of http://www.swappa.it/wiki/Uni/LPS-Glossario)