Il processo software
Il processo definisce una cornice per un insieme di aree chiave (KPA Key Process Areas). Le KPA formano la base del controllo gestionale dei progetti software e stabiliscono il contesto in cui si applicano i metodi tecnici, si creano i prodotti intermedi (modelli, documenti, dati, resoconti, formulari e così via), si stabiliscono i punti di controllo (milestone), si garantisce la qualità e si governano in modo opportuno le modifiche .
La maggior parte dei modelli di ciclo di vita del software prevedono una scomposizione del processo di sviluppo in insiemi di attività simili (quando non addirittura identici). La maggior parte delle distinzioni fra diversi cicli di vita verte infatti su altri aspetti, quali:
• l’enfasi relativa che si attribuisce a ciascuna attività.
• l’individuazione degli attori specifici incaricati di ciascuna attività.
• l’ordine in cui le attività si svolgono.
Si istituisce un quadro di riferimento generale del processo, definendo un piccolo numero di attività portanti, comuni a qualsiasi progetto software, quale che sia la sua dimensione e complessità. Una serie di insiemi di compiti consente di adattare le attività portanti alle caratteristiche del progetto software e alle esigenze del team di progetto. Infine le attività ausiliarie (come la garanzia di qualità del software – SQA, la gestione delle configurazioni software e le misurazioni) si sovrappongono al modello di processo. Queste attività sono indipendenti dalle attività portanti e coprono l’intero arco del processo.
Negli ultimi anni si è molto insistito sulla maturità del processo. Il SEI (Software Engineering Institute) ha ideato un modello complessivo, fondato su un insieme di capacità corrispondenti a diversi gradi di maturità di processo di un’azienda. Per determinare il livello di maturità il SEI ricorre a un questionario e a uno schema valutativo a cinque livelli. Il voto finale corrisponde al grado di conformità a un modello di maturità delle capacità (CMM, Capacity Maturity Model), dove sono definite le attività richieste ad ogni livello.
I cinque livelli di maturità sono definiti come segue:
Livello 1: Iniziale. Il processo software è definito di volta in volta e in alcuni casi risulta confuso. Pochi processi sono definiti e la riuscita dipende dall’impegno individuale.
Livello 2: Ripetibile. Presenza di processi basilari di gestione dei progetti, volti a sorvegliare i costi, tempi e funzionalità. La disciplina di processo necessaria ha lo scopo di ripetere il successo di progetti precedenti per applicazioni simili.
Livello 3: Definito. Il processo software, sia per le attività di gestione sia per quelle di realizzazione, è documentato, conforme a uno standard e inserito in un processo software su scala aziendale. Ogni progetto adotta una versione documentata e approvata del processo aziendale per lo sviluppo e la manutenzione del software. Questo livello comprende tutte le caratteristiche definite per il livello 2.
Livello 4: Gestito. Si raccolgono misure dettagliate relative al processo software e alla qualità del prodotto. Sia il processo software sia i prodotti sono valutati quantitativamente e controllati mediante misure dettagliate. Questo livello comprende tutte le caratteristiche definite per il livello 3.
Livello 5: Ottimizzato. Il continuo miglioramento del processo è consentito dalla raccolta di dati quantitativi e dal collaudo di idee e tecnologie innovative. Questo livello comprende tutte le caratteristiche definite per il livello 4.
Il SEI ha associato a ogni livello di maturità alcune aree chiave di processo (KPA). Le KPA descrivono le funzioni (ad esempio pianificazione del progetto software, gestione dei requisiti) che devono essere presenti per garantire un certo livello. Ogni KPA è descritta rispetto alle seguenti caratteristiche.
• Scopi: gli scopi complessivi che la KPA deve raggiungere.
• Impegni: i requisiti (imposti dall’organizzazione) che si devono soddisfare per raggiungere gli scopi che comprovano l’intenzione di adeguarsi a questi ultimi.
• Capacità: tutto ciò che deve essere predisposto (tecnicamente e organizzativamente) per consentire il rispetto degli impegni.
• Attività: i compiti specifici necessari per assolvere la funzione della KPA.
• Metodi di sorveglianza della realizzazione: il metodo in cui verificare la correttezza della applicazione della KPA.
Nel modello di maturità sono definite 18 KPA (ciascuna descritta usando queste caratteristiche), assegnate a diversi livelli di maturità. Eccone l’elenco, ripartito fra i livelli.
Livello 2
• Gestione delle configurazioni software.
• Garanzia di qualità del software.
• Gestione dei sottocontratti per il software.
• Controllo e sorveglianza del progetto.
• Pianificazione del progetto.
• Gestione dei requisiti.
Livello 3
• Revisioni.
• Coordinamento dei gruppi.
• Ingegneria del prodotto software.
• Gestione integrata del software.
• Programmi di addestramento.
• Definizione del processo aziendale.
• Obiettivo primario del processo aziendale.
Livello 4
• Gestione della qualità software.
• Gestione quantitativa del processo.
Livello 5
• Gestione del cambiamento nel processo.
• Gestione del cambiamento tecnologico.
• Prevenzione dei difetti.
Ogni KPA è definita come una serie di pratiche chiave che contribuiscono a raggiungere lo scopo. Le pratiche chiave sono politiche, procedure e attività che si devono mettere in pratica prima che una KPA sia pienamente stabilita. Il SEI definisce così gli indicatori chiave: “quelle pratiche o componenti di pratiche chiave che meglio permettono di stabilire se gli scopi di una KPA sono stati raggiunti”. Per sondare l’esistenza o l’assenza di un indicatore chiave si ricorre ad opportune domande.
IL CMM tuttavia è stato abbandonato dal SEI in favore di un nuovo modello, il CMMI (Capacity Maturità Model Integration). Il CMM è stato sviluppato dal 1987 al 1997. Nel 2002 fu rilasciata la versione 1.1 del CMMI, seguita dalla 1.2 nell’agosto 2006. Il CMMI è un framework metodologico integrato di modelli CMM; si propone di integrare i molteplici modelli CMM sviluppati per settore e comparto industriale, al prezzo di una maggiore generalità.
Il CMMI / MOI è un modello che indica ventidue KPA strutturate su cinque livelli, ognuna con i propri obiettivi generici (Generic Goal) e specifici (Specific Goal). Gli obiettivi generici e specifici sono implementati da una sequenza temporale di attività generiche (Generic practice) e specifiche (specific practice), che hanno determinate tipologie di output (tipical work product).
A loro volta, le attività vengono in alcuni casi dettagliate in una sequenza di secondo livello di sub-attività generiche (generic sub-practice) e specifiche (specific sub-practice).
La generica azienda deve classificare i suoi processi secondo le Process Area indicate nel CMMI per condurre un’analisi dei gap fra la situazione attuale e il “to-be” indicato.
Il SEI ha rilasciato la certificazione CMMI ai processi di una ventina di aziende in tutto il mondo. Si tratta di aziende informatiche delle quali sono stati certificati i processi di ingegneria del software. In Italia ha ottenuto la cettificazione CMMI la sola IBM. Al momento non esistono autority indipendenti autorizzate a certificare i processi di altre aziende secondo il CMMI, e la valutazione è effettuata direttamente dal SEI.
L’elenco completo delle KPA di CMMI è il seguente:
CAR – Causal Analysis and Resolution
CM – Configuration Management
DAR – Decision Analysis and Resolution
IPM – Integrated Project Management +IPPD
MA – Measurement and Analysis
OID – Organizational Innovation and Deployment
OPD – Organizational Process Definition +IPPD
OPF – Organizational Process Focus
OPP – Organizational Process Performance
OT – Organizational Training
PI – Product Integration
PMC – Project Monitoring and Control
PP – Project Planning
PPQA – Process and Product Quality Assurance
QPM – Quantitative Project Management
RD – Requirements Development
REQM – Requirements Management
RSKM – Risk Management
SAM – Supplier Agreement Management
TS – Technical Solution
VAL – Validation
VER – Verification
Ipsec
Affinché dei calcolatori connessi in rete possano reciprocamente scambiarsi informazioni è necessario che gli stessi adottino lo stesso protocollo di comunicazione, che è oramai parte integrante di ogni sistema operativo. Il protocollo di comunicazione (in realtà sono più protocolli) utilizzato dai calcolatori di Internet è noto come TCP/IP (Transmission Control Protocol / Internet Protocol) ed è costituito da diversi protocolli fra cui UDP (User Datagram Protocol) + TCP + IP.
Per consentire la comunicazione tra due calcolatori il TCP/IP stabilisce un “canale” di comunicazione tra il calcolatore del mittente e quello del destinatario. Questo canale attraversa solitamente un numero imprecisato di altri calcolatori, che svolgono le funzioni di “smistatori” (router), il cui compito è quello di indirizzare le informazioni in transito verso il destinatario. La trasmissione di informazioni in Internet è analoga alla trasmissione di una lettera. Per prima cosa la corrispondenza raggiunge l’ufficio postale più vicino al mittente (smistatore di primo livello); questo provvede ad inviare la corrispondenza ad un ufficio centrale, che successivamente la rinvia ad uno o più smistatori intermedi, finché la corrispondenza non arriva all’ufficio postale più vicino al destinatario, dal quale un postino provvede alla consegna. Elemento peculiare del protocollo è che la trasmissione delle informazioni non deve necessariamente seguire sempre la stessa strada, anzi è probabile che due pacchetti dati raggiungano la destinazione seguendo strade diverse. Esistono quindi molti punti in cui l’informazione trasmessa può essere intercettata, letta ed eventualmente modificata. Questa operazione è facilitata dal fatto che le informazioni nell’ambito del protocollo TCP/IP viaggiano in chiaro. Questo rischio può comunque essere evitato operando opportune trasformazioni crittografiche sulle informazioni che devono essere trasmesse. Tali trasformazioni operano una serie di modifiche sul messaggio sino a renderlo illeggibile. Solo il destinatario del messaggio potrà risalire al contenuto originale del messaggio attraverso un’opportuna chiave. IPsec (IP Security) implementa la sicurezza attraverso la cifratura e l’autenticazione dei pacchetti IP. La sicurezza viene quindi fornita a livello rete.
IPsec nasce su iniziativa della Internet Engineering Task Force (IETF) e quindi come Internet Standard. Il progetto completo dell’IPsec definisce un’infrastruttura per fornire molteplici servizi, algoritmi e granularità. La ragione per avere molteplici servizi è che non tutti vogliono pagare il prezzo per avere tutti i servizi disponibili in ogni istante, quindi alcuni servizi vengono resi disponibili su richiesta. IPSEC consente di operare sui messaggi in uscita da un host, le seguenti operazioni:
1. Cifratura dei dati contenuti nei messaggi con appositi algoritmi di crittografia, al fine di consentire la lettura del contenuto originale del messaggio al solo destinatario del messaggio;
2. Autenticazione del mittente: al messaggio vengono aggiunte alcune informazioni supplementari che consentono di verificare l’esatta identità del mittente;
3. Integrità dei dati: al messaggio vengono aggiunte alcune informazioni supplementari che consentono di verificare in fase di ricezione se il contenuto del messaggio rispecchia il contenuto originale oppure se è stato modificato in fase di trasmissione [2].
Tutti questi servizi sono basati sulla crittografia a chiave simmetrica, in quanto le performance sono cruciali. La ragione per avere più algoritmi è data dal fatto che un algoritmo che oggi crediamo sicuro potrebbe essere forzato in futuro. Rendendo l’IPsec indipendente dall’algoritmo, l’infrastruttura può sopravvivere anche se un particolare algoritmo viene forzato. Prevedendo diverse granularità, infine, è possibile proteggere una singola connessione TCP, come tutto il traffico fra due host, oppure il traffico fra due router sicuri, o altre possibilità. Una “connessione” nel contesto deli’IPsec è chiamata SA (Security Association). Una SA è una connessione simplex fra due estremi e ha un identificatore di sicurezza associato. Se è necessario stabilire un traffico sicuro nelle due direzioni, saranno necessarie due SA. Gli identificatori di sicurezza sono trasportati da pacchetti che viaggiano su queste connessioni sicure, e vengono usati (all’anivo dei pacchetti sicuri) per la ricerca delle chiavi e di altre informazioni rilevanti.
Le specifiche tecniche di IPsec contengono due parti principali. La prima parte descrive due nuove intestazioni che possono essere aggiunte ai pacchetti per contenere l’identificatore di sicurezza, i dati di controllo dell’integrità e altre informazioni. L’altra parte, ISAKMP (Intemer Securily Association and Key Management Protocol) concerne lo scambio delle chiavi.
Non tratteremo ulteriormente ISAKMP, in quanto (1) è estremamente complesso, (2) il suo protocollo principale, IKE (Internet Key Exchange), contiene degli errori molto gravi e quindi probabilmente sarà essere rimpiazzato.
IPsec può essere utilizzato in una modalità scelta fra le due possibili. Nella modalità trasporto l’intestazione IPsec viene inserita subito dopo quella dell’IP. Il campo Protocol nell’intestazione IP è cambiato in modo da indicare che un’intestazione IPsec segue quella solita dell’IP (prima dell’intestazione TCP). L’intestazione IPsec contiene le informazioni di sicurezza: principalmente l’identificatore SA, un nuovo numero di sequenza, ed eventualmente un controllo d’integrità del campo payload. Nella modalità tunnel l’intero pacchetto IP. intestazione compresa, viene incapsulato nel corpo di un nuovo pacchetto IP con un’intestazione IP completamente diversa La modalità tunnel è utile quando il tunnel aniva in un posto diverso dalla sua destinazione finale. In alcune situazioni, il tunnel arriva a una macchina con un gateway sicuro, per esempio il firewall dell’azienda. Operando in questo modo, il firewall incapsula e decapsula i pacchetti che lo attraversano. Facendo terminare il tunnel su questa macchina sicura, le machine sulla LAN dell’azienda non devono essere a conoscenza dell’IPsec. Solo il firewall sarà a conoscenza del tunnel IPsec.
La modalità tunnel è utile anche nella situazione in cui si vuole aggregare un’insieme di connessioni TCP, per poi gestirle come un unico flusso cifrato. In questo modo si evita che un intruso possa avere informazioni sul traffico: per esempio chi sta mandando dei pacchetti, a chi li sta mandando e quanti ne sta inviando. Consideriamo il caso in cui, durante una crisi militare, il traffico fra il Pentagono e la Casa Bianca diminuisca di colpo. Simultaneamente, il traffico fra il Pentagono e alcune installazioni militari nelle Montagne Rocciose aumenta della stessa quantità di cui il primo è diminuito. Un intruso potrebbe trarre delle informazioni utili da questi dati. Lo studio della distribuzione del flusso dei pacchetti, anche se cifrati, è chiamato analisi del traffico. La modalità tunnel fornisce un modo per aggirare parzialmente questo tipo di analisi. Lo svantaggio della modalità tunnel è dato dal fatto che aggiunge delle ulteriori intestazioni IP ai pacchetti e quindi aumenta la dimensione del pacchetto in modo sostanziale.
Al contrario, la modalità trasporto non cambia di molto la grandezza del pacchetto. La prima ulteriore intestazione è detta AH (Authentication Header). AH garantisce il controllo dell’integrità e la sicurezza contro gli attacchi di ricezione, ma non la segretezza (cioè non ha cifratura). L’uso di AH nella modalità trasporto è illustrato nella figura seguente.
Nell’IPv.4, AH viene messo fra l’intestazione IP (incluse le eventuali opzioni) e l’intestazione TCP. Nelll’IPv6, AH è gestito come un’altra estensione dell’intestazione e trattata di conseguenza. in effetti, il suo formato è simile a quello di un’estensione standard dell’intestazione IPv6. Il campo payload può essere riempito fino a raggiungere una particolare lunghezza per facilitare l’algoritmo di autenticazione, come mostrato.

Header di autenticazione IPsec nella modalità trasporto per IPv4
Nell’intestazione AH, il campo Next header field serve per memorizzare il valore originale che aveva il campo IP Protocol prima di essere rimpiazzato con il valore 51. Quest’ultimo è usato per indicare che segue un’intestazione AH. Nella maggior parte dei casi, il valore sarà il codice per il TCP (6). IL campo Payload length contiene il numero di word a 32 bit nell’intestazione AH meno 2. il Security parameter index è l’identificatore della connessione. Viene inserito dal mittente per indicare un particolare record nel database del ricevente. Questo record contiene la chiave condivisa usata per questa connessione e altre informazioni sempre relative alla connessione. Il campo Sequence number viene usato per attribuire un numero a tutti i pacchetti inviati in un SA. A ogni pacchetto viene attribuito un numero univoco, incluse le ritrasmissioni.
In altre parole, un pacchetto ritrasmesso prende un numero di sequenza diverso dall’originale (anche se il suo numero di sequenza TCP è lo stesso). Lo scopo di questo campo è quello di evitare attacchi di tipo ripetizione. Questi numeri di sequenza non sono riutilizzati in circolo: se vengono usate tutte le 232 possibili combinazioni, dovrà essere stabilito un nuovo SA per poter continuare la comunicazione.
Infine abbiamo Authentication data, che è un campo a lunghezza variabile che contiene la firma digitale del payload. L’algoritmo di firma elettronica da utilizzare è negoziato quando viene stabilito l’SA. Di solito in questo stadio non viene usata la crittografia a chiave pubblica, perché i pacchetti devono essere elaborati in modo estremamente rapido, mentre tutti gli algoritmi a chiave pubblica conosciuti sono troppo lenti per questo compito. Per questo motivo IPsec è basato sulla crittografia a chiave simmatrica. II mittente e il destinatario stabiliscono una chiave comune prima d’instaurare la SA, che viene usata nel calcolo della firma. Un metodo semplice consiste nel calcolare l’hash sui contenuti del pacchetto e della chiave insieme. Ovviamente, la chiave condivisa non viene trasmessa. Uno schema di questo tipo è chiamato HMAC (Hashed Message Authentication Code). È molto più veloce da calcolare della strategia alternativa, che consiste nell’usare prima SHA-1 per poi passare elaborare il risultato con RSA.
L’intestazione AH non permette la cifratura dei dati, quindi è utile principalmente quando è necessario un controllo d’integrità ma non serve la sicurezza. Una funzione importante di AH è data dal fatto che il controllo d’integrità copre alcuni campi dell’intestazione P, in particolare quelli che non cambiano mentre il pacchetto viene trasmesso da router a router. Per esempio, il campo time to live cambia in ogni salto di router e quindi non può essere incluso nel controllo d’integrità. L’indirizzo IP della sorgente viene incluso nel controllo, in questo modo diventa impossibile per un intruso falsificare l’origine del pacchetto.
L’intestazione IPsec alternativa è ESP (Encapsulating Security Payload). Il suo uso, sia per la modalità trasporto sia per quella tunnel, viene mostrato nella figura seguente.

(a) ESP in modalità trasposto. (b) ESP in modalità tunnel
L’intestazione ESP consiste di due word a 32 bit, che costituiscono i campi security parameters index e sequence number, con funzioni analoghe a quanto abbiamo discusso per AH. Una terza word che di solito segue le prime due (ma che tecnicamente non è parte dell’intestazione) è initialization vector, usato per la cifratura dei dati. Se non viene usata la cifratura, questo campo è omesso.
ESP fornisce un controllo d’intregrità HMAC come AH, ma diversamente da quest’ultimo non lo include nell’intestazione; lo aggiunge invece in coda ai campo payload, come mostrato nella figura precedente. Utilizzare HMAC in coda al payload comporta dei vantaggi nelle implementazioni hardware. in questo caso, HMAC può essere calcolato mentre i bit sono trasmessi verso l’interfaccia di rete, e poi aggiunto alla fine: per lo stesso motivo Ethemet e altre LAN hanno il CRC dopo la fine dei dati, piuttosto che all’inizio. Con AH, invece, il pacchetto va messo in un buffer e la firma calcolata prima di poterlo trasmettere, pertanto questo modo di operare può avere l’effetto di ridurre il numero di pacchetti/sec che possono essere trasmessi.
ESP riesce a fare tutto quello che AH può fare, ha anche delle funzioni aggiuntive ed è più efficiente. La domanda a questo punto e: perché interessarsi ad AH? La risposta ha origini soprattutto storiche: in origine AH si occupava solo d’integrità e ESP solo di segretezza. Successivamente, l’integrità è stata aggiunta a ESP. A questo punto, però, le persone che avevano progettato AH non volevano vederlo morire dopo tutto il lavoro che avevano fatto. Il loro unico punto a favore è che AH controlla parte dell’intestazione IP, mentre ESP non lo fa, ma questo è un argomento debole. Un’altra giustificazione debole è che un prodotto che supporti AH ma non ESP potrebbe avere minori problemi a ottenere una licenza per l’export in quanto non presenta funzioni di cifratura. AH verrà probabilmente eliminato in un prossimo futuro [2].
Il punto di forza di IPSEC è quello di consentire l’esecuzione di tutte queste operazioni in maniera del tutto trasparente rispetto agli utenti e alle applicazioni. Questo significa che è sufficiente installare IPSEC su un host affinché lo stesso possa incominciare a cifrare/autenticare il traffico di rete generato. Nessuna modifica deve essere apportata alle applicazioni o ai servizi che operano sul calcolatore. Un altro aspetto importante è che IPSEC può operare indifferentemente sul traffico di rete generato da una qualunque applicazione senza distinzione alcuna.
I punti di debolezza del protocollo IPSEC possono invece essere così riassunti:
1. E’ uno standard giovane (la sua ultima formulazione risale al 1998) e quindi a oggi è implementato solo su alcune piattaforme (calcolatori e apparati di rete);
2. Le implementazioni dei vari fornitori non sono ancora del tutto compatibili quindi un messaggio IPSEC generato da un host A può non essere riconosciuto da un router o da un altro host B.
Tutto ciò induce ad una accurata valutazione per l’utilizzo di IPSEC su larga scala.
Un ultimo elemento da considerare nell’adozione di tale protocollo è il suo impatto sulle prestazioni del server. IPSEC infatti può appesantire notevolmente l’attività del microprocessore richiedendo continue operazioni di cifratura/decifratura. Nel caso quindi lo stesso debba essere impiegato in sistemi caratterizzati da un elevato traffico di rete si consiglia di valutare con attenzione l’impatto prestazionale
-
Recente
-
Link
-
Archivi
- Giugno 2008 (2)
- Febbraio 2008 (2)
- Gennaio 2008 (9)
-
Categorie
-
RSS
Ingressi RSS
Commenti RSS