Auditing di codice sorgente open-source ai fini della sicurezza

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Auditing di codice sorgente open-source ai fini della sicurezza"

Transcript

1 UNIVERSITÀ DEGLI STUDI DI MILANO-BICOCCA Facoltà di Scienze Matematiche, Fisiche e Naturali Corso di Laurea in Informatica Auditing di codice sorgente open-source ai fini della sicurezza Prof. Flavio De Paoli Dott. Claudio Ferretti Relazione della prova finale di: Marco Moioli Matricola: Anno Accademico 2001/2002

2 Indice Indice... I Introduzione Introduzione al problema della sicurezza L'importanza del processo di auditing del codice La difficoltà del processo di auditing Tipi di vulnerabilità rilevabili dal processo di auditing del codice I vantaggi dell'open Source nei riguardi della sicurezza Risorse utilizzate I Buffer Overflow Introduzione al problema Definizione di buffer...12 o Organizzazione della memoria di un processo...12 o Lo stack o La regione dello stack o Esempi di buffer overflow o Sfruttare i buffer overflow o Un caso di codice vulnerabile o Come attaccare un programma o L'exploit o Ottimizzare lo shellcode

3 3 Come difendersi dai Buffer Overflow Evitare i buffer overflow programmazione ottimale Evitare i buffer overflow funzioni sicure Evitare i buffer overflow allocazione dinamica del buffer Evitare i buffer overflow librerie sicure Evitare i buffer overflow ulteriori soluzioni Evitare i buffer overflow considerazioni finali Rsync Cos'è Rsync Perché è stato scelto Rsync per il processo di auditing del codice Strumenti di analisi L algoritmo di Rsync Storia dei bugs di Rsync Discussione della patch Boon Cos è Boon Perchè usare Boon Perchè è stato scelto Boon Risultati dell applicazione di Boon a bof1.c e bof4.c Risultati dell'applicazione di Boon a format.c e format2.c Risultati dell applicazione di Boon a Rsync Esempio di output di Boon Conclusioni su Boon Strumenti alternativi a Boon Conclusioni e Prospettive Conclusioni Prospettive Bibliografia

4 Introduzione Il presente lavoro di tesi ha avuto lo scopo di analizzare il problema della sicurezza dei sistemi informatici. A tal fine è stato fatto un ampio lavoro di conoscenza dei principali metodi per la protezione dei sistemi informatici e delle informazioni in essi contenute. Si è anche svolto un lavoro di conoscenza sulle principali tecniche usate per violare i sistemi informatici e le relative contromisure possibili. Si è inoltre svolto un lavoro di auditing del codice al fine di studiare degli errori noti presenti nel codice di un programma (Rsync) e si è svolta la ricerca di nuovi possibili errori che inficiassero la sicurezza del programma. A tal fine è stato usato uno strumento di navigazione del codice prodotto dal team di sviluppo Doxygen. Infine, è stato studiato ed installato uno strumento sperimentale di rilevazione di possibili errori nel codice sorgente di un programma (strumento Boon prodotto dai laboratori Bell in collaborazione con l università di Berkley) e lo si è provato sul programma Rsync per vederne i risultati. 4

5 5

6 1.1 Introduzione al problema della sicurezza In principio, i sistemi informatici sono stati creati e sviluppati principalmente allo scopo di eseguire calcoli matematici ad una velocità e con un efficienza che la mente umana non è in grado di raggiungere. Ben presto, però, i calcolatori hanno assunto anche la funzione sia di immagazzinatori di dati che di strumenti tramite i quali scambiarsi informazioni. Immensi e dispersivi archivi cartacei sono stati digitalizzati e adesso risiedono in piccoli ed efficienti database elettronici cui è possibile avere l accesso da terminali situati in qualsiasi parte della Terra. Alcune delle informazioni contenute nelle banche dati (c/c bancari, documenti aziendali riservati, segreti militari ecc.) non possono essere disponibili per chiunque. Questo ha portato alla necessità di restringere il campo di coloro che possono accedere a questi dati, soprattutto oggi che i sistemi informatici sono sempre più connessi tra loro tramite reti che permettono la violazione da remoto. Sono varie le tipologie di coloro che attentano alla sicurezza dei sistemi, perché varie sono le motivazioni che li spingono: noia, curiosità, desiderio di rivalsa, ricerca di fama, spionaggio. Al dilà delle varie motivazioni che possono spingere una persona a cercare di accedere a risorse non sue, l aspetto da sottolineare è che i computer e i loro software sono molto vulnerabili a diversi tipi di attacchi volti a violarne la sicurezza. Questo problema è dato dal fatto che solo ora il mondo dell informatica sta prendendo veramente coscienza del problema e solo ora si stanno cominciando ad attuare le opportune contromisure. Molto del software oggi in circolazione è stato scritto con un linguaggio, il C, che ha al suo interno delle funzioni molto usate che possono provocare buffer overflow e permettere ad un attaccante di sfruttare queste vulnerabilità per impadronirsi della macchina. Le soluzioni a questo problema sono date da nuove chiamate di funzione sicure che svolgono lo stesso lavoro delle vecchie non sicure. Oppure la soluzione è data dal programmare con i nuovi linguaggi di programmazione che attuano controlli volti a prevenire la possibilità di buffer overflow (phyton, java, ecc..). 6

7 1.2 L importanza del processo di auditing del codice: Fare l auditing del codice significa esplorare, revisionare, capire del codice già esistente. Perché i programmatori dovrebbero voler esaminare il codice sorgente di un programma? La maggior parte delle volte il motivo è che essi ne traggono un proprio vantaggio: - Hanno trovato un software Open Source utile ai loro propositi e vogliono migliorarlo o modificarlo per adattarlo alle loro specifiche necessità. - A volte invece, il codice sorgente viene controllato solo per assicurarsi che sia in grado di soddisfare alcuni bisogni, anche se non c è nessuna intenzione di modificarlo. Ad esempio le aziende che richiedono elevati livelli di sicurezza, potrebbero svolgere l Audit del codice come parte delle procedure di revisione della sicurezza. Di solito si entra nel merito del codice sorgente quando occorre cambiarvi qualcosa. Sfortunatamente, ciò non significa che se ne ottiene una revisione in chiave sicurezza dagli esperti del settore: la gran parte dei programmatori affrontano i sorgenti per inserirvi nuove funzioni, senza per questo avere competenze specifiche sulla sicurezza. Molti tecnici, ad esempio, conoscono i rischi connessi agli Overflow dei Buffer e le funzioni che vanno evitate. Ma molti di essi non sono abbastanza esperti in materia da evitare i problemi al di là di quelli che sono stati loro segnalati. E quando si passa in aree più rischiose di quelle indotte dai Buffer Overflow, i problemi peggiorano. Ad esempio, mentre l impiego della crittografia è molto comune, può succedere che i programmatori la utilizzino in modo non corretto minando così la sicurezza dell intero sistema. Un altro fenomeno ricorrente è l impiego di metodi di crittografia troppo deboli e facilmente superabili, mentre spesso lo scambio di chiavi tra programmi avviene utilizzando modalità assolutamente poco sicure. 7

8 1.3 La difficoltà del processo di auditing: Controllare la sicurezza del codice sorgente è veramente complesso: perfino i più esperti possono sbagliare. Un buon esempio di ciò è offerto dal famoso Server FTP Open Source wu-ftpd. Negli ultimi due anni,nel suo codice sono stati individuati numerosi problemi di Buffer Overflow, alcuni dei quali quasi impercettibili. La maggior parte di questi problemi erano presenti da anni, malgrado il codice fosse stato analizzato diverse volte sia dagli Hacker che dai revisori della sicurezza. Wu-ftpd è stato usato come piattaforma per lo studio delle tecniche di individuazione delle vulnerabilità. Nessuna di queste tecniche ha segnalato la presenza dei problemi scoperti in seguito. E soprattutto nei sorgenti complessi che è molto difficile identificare dei Bug. Il codice di wu-ftpd è composto da meno di linee, però perfino in un software così piccolo si sono trovati numerosi Bug rimasti a lungo nascosti. 1.4 Tipi di vulnerabilità rilevabili dal processo di auditing del codice: Buffer Overflow: La classe di vulnerabilità che può essere rilevata più facilmente durante il processo di auditing del codice è quella dei buffer overflow. Tale bug ha l obiettivo di provocare il riempimento e la tracimazione di un buffer allocato in maniera finita. Questo può portare a sovra scrivere l indirizzo di ritorno (IP) e a far puntare lo stack ad un area di memoria decisa in modo arbitrario dall attaccante contenente del codice in linguaggio assembly atto a richiedere al computer dei comandi che l attaccante non avrebbe i privilegi per richiedere (tipo una shell remota con privilegi di root). Race Condition: Si definiscono race condition tutte quelle situazioni in cui processi diversi operano su una risorsa comune, ed in cui il risultato viene a dipendere dall'ordine in cui essi effettuano le loro operazioni. Il caso tipico è quello di un'operazione che viene eseguita da un processo in più passi, e può essere compromessa dall'intervento di un altro processo che accede alla stessa risorsa quando ancora non tutti i passi sono stati completati. Dato che in un sistema multitasking ogni processo può essere interrotto in qualunque momento per farne subentrare un'altro in esecuzione, niente può assicurare un preciso 8

9 ordine di esecuzione fra processi diversi o che una sezione di un programma possa essere eseguita senza interruzioni da parte di altri. Queste situazioni comportano pertanto errori estremamente subdoli e difficili da tracciare, in quanto nella maggior parte dei casi tutto funzionerà regolarmente, e solo occasionalmente si avranno degli errori. Per questo occorre essere ben consapevoli di queste problematiche, e del fatto che l'unico modo per evitarle è quello di riconoscerle come tali e prendere gli adeguati provvedimenti per far sì che non si verifichino. Casi tipici di race condition si hanno quando diversi processi accedono allo stesso file, o nell'accesso a meccanismi di intercomunicazione come la memoria condivisa. In questi casi, se non si dispone della possibilità di eseguire atomicamente le operazioni necessarie, occorre che quelle parti di codice in cui si compiono le operazioni sulle risorse condivise (le cosiddette sezioni critiche) del programma, siano opportunamente protette da meccanismi di sincronizzazione. Format String: Durante la seconda metà dell anno 2000, è stata scoperta una nuova classe di vulnerabilità conosciuta come format string vulnerabilities. Questo ha portato all individuazione, in tutti i tipi di programmi, di una miriade di nuovi bug exploitabili. Questo tipo di vulnerabilità interessa tutte le classi di programmi, dalla piccola utilità di sistema alla grande applicazione per i server. La generica classe di format string vulnerability può essere vista come un problema di canale. Questo tipo di vulnerabilità può sussistere se due differenti tipi di chanali di informazione sono combinati tra di loro in un unico canale, e speciali caratteri di escape o sequenze di caratteri sono usate per distinguere quale canale è attivo ad un certo momento. In molti casi un canale è un data channel, il quale è solamente copiato senza essere controllato, questo viene fatto poichè l altro canale è un canale di controllo. Se un attaccante è capace di fornire nel data channel un input capace di essere interpretato dalla macchina al dilà dei controlli dell altro canale, allora questo può risultare pericoloso per la sicurezza del sistema. Per esempio: ho un array chiamato prova[20] di venti byte. Applico una sprintf (prova, s) dove s è una stringa fornita dall utente. 9

10 Se un utente inserisce come stringa %30d questo comando riserverà in memoria spazio per 30 byte provocando un overflow del buffer prova di 10 byte! Se l attaccante è così bravo da trovare il punto dello stack dove viene mantenuto l Istruction Pointer, potrà sovrascriverlo e farlo puntare ad una locazione di memoria (di solito la cima dello stack) dove egli avrà posto del codice arbitrario capace di chiedere servizi che l attaccante non avrebbe il permesso di chiedere. 1.5 I vantaggi dell Open Source nei riguardi della sicurezza: Contrariamente a quanto alcuni possano pensare, i progetti sviluppati con Software Open Source possono risultare molto più sicuri di quelli sviluppati con un sistema Closet Source. I critici del Software Open Source potrebbero dire che fornire il codice sorgente rende più facile il lavoro di coloro che vogliono attaccare i sistemi. Rendendo disponibile solo il codice in formato binario, si eleva il grado di difficoltà così da indurre i meno determinati a guardare altrove. Ma come ci stanno dimostrando i numerosi buchi rilevati nel Software pacchettizzato, coloro i quali vogliono attaccare il sistema possono farlo anche senza codice sorgente; ci vuole solo più tempo. Dal punto di vista della sicurezza, i vantaggi di mettere i sorgenti a disposizione di tutti sono maggiori dei benefici che ne possono ricavare i Cracker. Tra i vantaggi dell Open Source c è anche il fatto che, poiché il codice viene pubblicato, i programmatori pongono maggiore attenzione in ciò che fanno, così da evitare di trovarsi in imbarazzo per aver rilasciato codice di scarsa qualità. In secondo lugo, la disponibilità del codice, permette che la sua analisi e la revisione degli errori vengano svolte da varie persone e gruppi di lavoro. Da parte dell intera comunità degli sviluppatori c è molta attenzione a far sì che del nuovo codice non comprometta la sicurezza di un intera distribuzione di Linux. 1.6 Risorse utilizzate: Il lavoro di conoscenza delle problematiche riguardanti la sicurezza è stato svolto con l ausilio di materiale preso da testi e da siti internet. 10

11 I testi letti hanno nomi altisonanti quali: Hacker l attacco o Hacker proofing. Questi libri hanno dato una panoramica sul problema della sicurezza in generale trattando sia delle problematiche riguardante le vulnerabilità del codice, sia quelle riguardanti i metodi di scansione delle porte di comunicazione o la creazione di virus. Per la parte relativa all auditing del codice, si è provveduto a reperire risorse dalla rete internet. Sono stati trovati tutorial sui buffer overflow, manuali sulle principali chiamate non sicure in C e molto altro ancora. I principali siti visitati sono stati: Security focus: questo sito racchiude notizie sulla scoperta di nuove vulnerabilità e notizie sul mondo della sicurezza in generale. Inoltre possiede un enorme database di tutorial e saggi su ogni aspetto della sicurezza. Possiede svariate mailing lists relative al problema sicurezza. Infine ha al suo interno il famoso database di vulnerabilità bugtraq che ha al suo interno gli avvisi di ogni vulnerabilità (resa nota al mondo) presente in un certo software. Ad ogni avviso di vulnerabilità è associato un identificativo e tutte le informazioni necessarie quali una discussione del problema e le possibili soluzioni. Cert: Il centro di coordinamento Cert è un istituto di esperti di sicurezza di internet situato nell istituto di software engineering, una fondazione di ricerca e sviluppo patrocinata dall università Carnegie Mellon di Pittsburgh. Il sito è simile a quello di Security focus e sono stati trovati molti documenti intressanti. Shields Up!: Sito creato dal famoso esperto di sicurezza Steve Gibson. In questo sito si possono trovare molte informazioni sulle vulnerabilità dei sistemi operativi. E inoltre possibile fare una prova del proprio grado in penetrabilità, usando un servizio che ricerca possibili accessi al pc sfruttabili dagli hackers. Phrack: Questo sito contiene tutti i numeri della rivista Phrack fondata nel lontano Nella rivista in questione vengono trattati tutti gli argomenti relativi alla sicurezza. 2600hertz.net: Sito molto completo che tratta gli aspetti della sicurezza informatica in quasi tutti i suoi aspetti. 11

12 Siti Underground: Sono stati visitati una moltitudine di siti che oltre a parlare delle tecniche di hackeraggio, ne fornivano anche i tool. Alcuni di questi siti sono stati chiusi nel lasso di tempo tra l inizio dello stage e la sua conclusione. Mailing list: A parte le mailing list di bugtraq, ho trovato molto utile la mailing list in italiano di sikurezza.org. 12

13 I Buffer Overflow 2.1 Introduzione al problema: Uno degli aspetti più rilevanti del problema sicurezza riguarda i buffer overflow, tecnica che può essere sfruttata da un attacker per modificare parte dello stato interno di un programma quando il programmatore non abbia posto particolare attenzione all aspetto della sicurezza. Riuscire a modificare la normale esecuzione di un processo significa anche avere la possibilità di eseguire codice arbitrario e, al limite, impadronirsi della macchina da remoto. Per comprendere ed applicare questa tecnica è necessario aver ben chiari i concetti di gestione della memoria e di linguaggio assemby. Gli esempi di seguito riportati sono stati implementati su un architettura Intel Definizione di buffer: Un buffer è un blocco contiguo di memoria che contiene più istanze dello stesso tipo di dato. In C un buffer viene normalmente associato ad un array. L overflow di un buffer consiste nel riempire oltre il limite tale buffer. 2.3 Organizzazione della memoria di un processo: Per capire come funzionano i buffer sullo stack occorre sapere come è organizzato un processo in memoria. I processi sono divisi in tre regioni: testo, dati e stack. La regione testo è fissata e contiene il codice del programma ed è a sola lettura. Qualsiasi tentativo di scrittura in questa regione provoca una violazione di segmento. La regione dati contiene i dati inizializzati e non. Le variabili statiche vengono memorizzate in questa regione. 13

14 Figura Lo stack: Lo stack è un area di memoria contigua in modalità Last in First Out (Lifo). Le due operazioni principali sono push (aggiunge un elemento in cima allo stack) e pop (rimuove un elemento dalla cima dello stack). 2.5 La regione dello stack: Uno stack è un blocco contiguo di memoria contenente dati. Un registro chiamato stack pointer (SP) punta sempre alla cima dello stack. La base dello stack è a un indirizzo fissato. La sua dimensione è adattata dinamicamente dal kernel al momento dell avvio. La CPU implementa le funzioni push e pop. Lo stack consiste di un insieme di segmenti logici (stack frame) che vengono inseriti nello stack quando viene chiamata una funzione ed eliminati quando la funzione ritorna. Uno stack frame contiene i parametri della funzione, le sue variabili locali, i dati necessari per ripristinare il precedente stack frame, incluso l indirizzo dell istruzione successiva alla chiamata (contenuto nell instruction pointer o IP). A seconda dell implementazione, lo stack cresce verso l alto o verso il basso. Nella tecnologia Intel si assume che cresca verso indirizzi bassi. In aggiunta allo stack pointer, che punta alla cima dello stack (indirizzi numericamente più bassi), è spesso conveniente avere un frame pointer (FP), chiamato anche base pointer (BP) che punta ad una fissata locazione in un frame. Principalmente, le variabili locali possono essere riferite specificando il loro offset dall SP, ma non appena viene inserita o 14

15 rimossa una word dallo stack, questi offset cambiano mentre riferendoci al FP tali offset restano fissi per l intera vita della funzione. La prima cosa che una procedura deve fare quando è chiamata è salvare l FP precedente in modo da poter essere ripristinato all uscita dalla procedura stessa. Poi copia l SP nell FP per creare il nuovo FP, e sposta l SP verso indirizzi di memoria più bassi per riservare spazio per le variabili locali. 2.6 Esempi di buffer overflow: Supponiamo venga scritta una funzione come la seguente e consideriamo un architettura semplificata con word di 1 byte: f ( ciao ); void f (char *s) { char buffer [4]; strcpy (buffer, s); } Questo codice non fa altro che copiare la stringa di caratteri ciao nel buffer di 4 caratteri buffer allocato sullo stack. 15

16 Figura 2. All uscita dalla funzione chiamata, vengono recuperati il Frame Pointer (FP) e l Istruction Pointer (IP) dallo stack e ripristinati nei rispettivi registri in modo da far proseguire l esecuzione del programma principale con l istruzione successiva alla chiamata di f. Se si volesse provocare un buffer overflow, basterebbe scrivere: f ( aabcdeeeefff ); void f (char *s) { char buffer [4]; strcpy (buffer, s); } 16

17 Siccome la funzione strcpy non prevede alcun controllo sulla dimensione del parametro passato, la stringa aabcdeeeefff è stata accettata nonostante la sua lunghezza (12 caratteri) fosse maggiore della capacità del buffer (4 caratteri). Questo provoca l overflow e l conseguente sovrascrittura del FP, IP e del puntatore a *s. All uscita dalla funzione quindi, l IP non conterrà più il corretto valore di ritorno ma bensì il valore 0x65 (che è il corrispettivo ASCII della lettere e ). Il flusso di esecuzione del programma verrà quindi deviato verso questo nuovo indirizzo. Una volta che la funzione chiamata termina, il processore tenterà di eseguire l istruzione contenuta all indirizzo indicato dall IP, incorrendo pertanto in uno di questi casi: - Il numero esadecimale finito nell IP rappresenta un indirizzo che va fuori dall intero spazio di memoria dedicato al processo; in tal caso si genera un segmentation fault. - Il numero esadecimale finito nell IP rappresenta un indirizzo valido per il processo in esecuzione; in tal caso si ha un malfunzionamento del programma. 2.7 Sfruttare i buffer overflow: Quello che è possibile fare è quindi la possibilità di riferirsi ad un indirizzo di memoria scelto che permetta di eseguire codice arbitrario voluto dall attacker. In tal modo si riesce ad avere l accesso ed il controllo di una macchina senza essere in possesso di nessuna shell o account sulla stessa, ovvero si ottiene quello che viene chiamato un exploit da remoto. Poiché la sezione testo è a sola lettura, l unico posto dove porre il proprio codice da far eseguire è proprio il buffer stesso, fermo restando che il buffer abbia dimensione sufficiente a contenere il codice. Il vero problema sta nel riuscire ad indirizzare l IP all inizio del buffer perché è proprio a partire da quel punto che l attacker vorrà posizionare il suo programma; bisognerà quindi pensare a realizzare la stringa da copiare nel buffer in modo che contenga nella parte iniziale il codice del programma da exploitare ed in seguito l indirizzo di allocazione del buffer che dovrà andare a sovrascrivere l IP. 2.8 Un caso di codice vulnerabile: 17

18 Consideriamo il seguente programma: Figura 3. Il codice in questione presenta tutte le caratteristiche necessarie per tentare di realizzare un attacco, ovvero contiene una funzione che accetta come parametro una stringa fornita dell utente e la copia nel buffer b, senza controllare che la dimensione di b (80 byte) sia sufficiente a contenerla interamente. Ovviamente, eseguendo il programma passando come parametro una stringa di lunghezza non maggiore di 80 caratteri, si ottiene il risultato previsto di copiare una stringa nell altra e di visualizzare l indirizzo del buffer, ma i limiti di questo programma emergono subito se la stringa passata ha dimensioni maggiori. 18

19 Figura 4. La stringa di 100 caratteri A passata come parametro, fa in modo che il programma riceva un segnale di tipo SIGSGV (Signal Segmentation Violation) e quindi blocchi la sua esecuzione a causa di una violazione di segmento. Questo accade quando un processo tenta di accedere ad un indirizzo di memoria non valido. Questo accade perchè il testo in eccesso viene ugualmente riversato nello stack, anche oltre la fine del buffer, con il risultato che sia il FP che l IP vengono soprascritti entrambi con dei caratteri A (0x41). Nell IP troveremo quindi 0x che non è un indirizzo valido, quindi viene generato il SIGSEGV. 2.9 Come attaccare il programma: Trovato il punto in cui viene memorizzato l IP, bisogna sapere cosa scriverci per fare in modo di dirottare l esecuzione del programma e poter eseguire il codice di attacco. Si deve di conseguenza decidere dove posizionare tale codice. La soluzione più semplice ed immediata è quella di memorizzarlo proprio nel nostro buffer, vista l impossibilità di utilizzare l area di testo a causa della limitazione a sola lettura a cui è sottoposta. 19

20 Supponiamo di voler visualizzare il contenuto della directory corrente (comando /bin/ls ). Per poterlo fare basta mandare in esecuzione il seguente codice: Figura 5. Per eseguirlo è necessario scrivere nell IP l indirizzo che punta all inizio del buffer. Tuttavia non possiamo sapere a priori dove verrà allocato in memoria il nostro buffer al momento dell esecuzione del programma; quindi dobbiamo escogitare un modo per farcelo dire a run-time: per questo motivo ci torna utile visualizzarlo con la printf in bof.c L exploit: Lo strumento che consente di sfruttare la vulnerabilità di bof1.c realizzando l exploit è quindi un programma (exp1.c) tale da permettere di costruire una stringa opportuna da passargli che contenga il giusto indirizzo IP. La stringa, sovradimensionata a 100 byte, viene composta copiando lo shellcode all inizio e un indirizzo fornito dall attacker come parametro all offset calcolato. Nel nostro caso, la funzione f decrementa lo stack di 88 bytes (vedi immagine) perchè 80 sono necessari al buffer, mentre gli altri 8 derivano da un problema di allineamento: visto che lo stack, di default, viene allineato dal compilatore a 4 word, quando vengono inseriti i valori dei registri FP e IP, che occupano 1 word ciascuno, il compilatore aggiunge automaticamente 2 ulteriori word di allineamento per arrivare a 4. 20

21 Figura 6. Figura 7. Per stabilire il parametro da passare basterà eseguire una prima volta exp1 con un indirizzo volutamente non valido in modo da provocare il segmentation fault; bof1 svelerà 21

22 comunque l indirizzo del buffer grazie alla printf. Rieseguendo pertanto exp1 con il parametro ottenuto realizzeremo l exploit. Figura 8. Come si vede dall immagine, si è riuscito ad eseguire la /bin/ls grazie ad un buffer owerflow; tuttavia l attacker non si limiterà a curiosare, ma con la stessa tecnica potrebbe ad esempio eseguire /bin/sh ottenendo quindi una shell ed impadronendosi della macchina. 22

23 Figura Ottimizzare la shellcode: Nel codice fin qui presentato è stato, volutamente, tralasciato un particolare non irrilevante ai fini pratici: quando abbiamo parlato di come trovare l indirizzo della stringa abbiamo fatto l ipotesi di riuscire a deviare l IP all inizio del buffer in modo da arrivare alla JMP che innescherà tutto il resto della shellcode, ma abbiamo anche detto che non sappiamo dove verrà allocato il nostro buffer. Si pone quindi il problema di riuscire a sovrascrivere l IP con l indirizzo della JMP. Ovviamente si potrebbe procedere per tentativi, ma individuare con esattezza un indirizzo preciso costituisce un procedimento non efficiente e probabilmente non efficace. Quello che si fa di solito, è riempire di NOP la parte iniziale del buffer. La NOP è un istruzione che non fa letteralmente niente (NO Operation) se non di sprecare un ciclo di fetch e di passare all istruzione successiva. Supponiamo che dopo una prima NOP ce ne sia un altra; che succede? Ancora una volta nulla, ovvero si passa nuovamente all istruzione successiva e così via. La NOP ha anche il vantaggio di occupare un solo byte. Risulta allora evidente che se abbiamo 100 NOP iniziali, il nostro algoritmo che prevedeva di azzeccare l indirizzo nella 23

24 JMP per attivare la shellcode, vede incrementare la probabilità di riuscirci di un fattore 100, dal momento che basta imbattersi in una qualsiasi NOP per far proseguire l esecuzione via via con tutte le restanti ed arrivare fino alla JMP. Figura 10. Esistono tuttavia dei casi in cui questa soluzione non è praticabile: se il buffer è troppo piccolo per contenere l intero codice di attacco, è necessario indirizzarsi verso un atra zona di memoria come, ad esempio, l heap o l area dati. Metodi di attacco alternativi, comprendono i casi in cui l attacker non miri ad eseguire un codice personale ma a lanciare porzioni di programmi o librerie già presenti in memoria in modo da farli risultare dannosi. 24

25 Come difendersi dai Buffer Overflow 3.1 Evitare i buffer overflow - programmazione ottimale: La soluzione più immediata e sicura consiste nell inserire controlli sulle dimensioni dei parametri inseriti dall utente, in modo da assicurarsi che non si verifichino overflow; i bof infatti sono possibili in quanto non viene effettuato un controllo sulla quantità di bytes inseriti nei buffer stessi; se la quantità di dati eccede la dimensione del buffer e non esiste alcun controllo che lo rilevi, si rende possibile un overflow; quindi una soddisfacente soluzione sarà sicuramente quella di implementare, nel codice stesso del programma, le istruzioni di controllo necessarie. Prendiamo ad esempio il vulnerabile bof1.c considerato in precedenza e cerchiamo di modificarlo ponendo un controllo sulla stringa passata in input: Figura 1. A tal fine modificheremo il main in modo da rifiutare una stringa di dimensioni maggiori del buffer b dove verrà copiata, cioè 80 caratteri; questo si ottiene nel seguente modo:... 25

26 int main (int argc, char **argv) { if (!argv[1]) exit(1); if ((strlen(argv[1])>80)) { printf ( Parametro troppo grande. \n ); printf ( Inserire un parametro inferiore a 80 caratteri. \n ); exit(1); }... Il programma modificato sarà il seguente: Figura 2. 26

27 Se si prova a compilarlo ed eseguirlo con un parametro di dimensioni eccessive, si noterà come previsto che il programma uscirà senza far niente se non visualizzare il relativo messaggio di errore; Figura 3. Bof2.c è quindi ora sicuro! Questo tipo di soluzione è senz altro ciò che ogni attento programmatore dovrebbe fare tutte le volte che si presenta un caso simile con rischio di buffer overflow. 3.2 Evitare i buffer overflow funzioni sicure : Non è comunque sempre necessario inserire dei controlli a basso livello di questo tipo. Esistono infatti delle funzioni che possono sostituire altre che non si preoccupano di verificare le dimensioni dei dati su cui lavorano. Nel codice di esempio bof1.c il problema è dato dal fatto che la funzione strcpy (b,s) non controlla che le dimensioni del buffer b allocato sullo stack siano sufficienti a contenere l intera stringa s ed esegue ugualmente la copia della stringa continuando a scrivere sullo stack fuori dallo spazio allocato. 27

28 Esiste una funzione chiamata strncpy() che oltre ad implementare le funzionalità di strcpy, impone un limite massimo alle dimensioni della stringa. Se la stringa eccede il limite massimo (passato come terzo parametro alla funzione), la stringa verrà troncata e poi copiata nel buffer. Figura 4. Se si prova adesso ad eseguire il codice con un numero di caratteri maggiori del buffer si otterà: 28

29 Figura 5. Possiamo vedere che questa volta non si è verificato un segmentation fault perchè è stata copiata la stringa troncata all ottantesimo carattere, quindi non è stato scritto nulla al di fuori del buffer. Ci sono però dei problemi legati all'utilizzo di funzioni come strncpy() : 1. API non intuitiva, che induce non pochi errori in fase di sviluppo: l'utilizzo di queste funzioni infatti richiede che il programmatore sia particolarmente attento al corretto passaggio di tutti i parametri che possono variare in quantità e posizione rispetto alla funzione primitiva; 2. Uso incoerente del parametro che indica lunghezza/dimensione (per strncpy() si tratta di sizeof(dest) per strncat() di sizeof(dest)-1); 3. Difficolta' nell'accorgersi di un troncamento avvenuto (per strncpy() si deve controllare con strlen(dest), per strncat() bisogna tenere copia del vecchio valore di dest); 4. Strncpy() non termina in ogni caso con NULL la stringa di destinazione (questo avviene se la stringa di origine eccede in lunghezza quella di destinazione; in questo modo saranno copiati solo i bytes specificati dal parametro sulla dimensione senza terminare con NULL), quindi il programmatore si deve preoccupare di 29

30 impostare a NULL l'ultimo byte manualmente nel caso in cui strlen(sorgente) >=sizeof(destinazione); 5. Strncpy() ha performance pessime (dipendentemente dalla CPU, strncpy() e` dalle 3 alle 5 volte piu' lento di strcpy(); questo perche' lo spazio in eccesso viene posto esplicitamente a '\0'). Un' alternativa efficace a queste funzioni è rappresentata da strlcpy() e strlcat() che offrono un' interfaccia più intuitiva: size_t strlcpy (char *dst, const char *src, size_t size); size_t strlcat (char *dst, const char *src, size_t size); Entrambe occupano per intero il buffer di destinazione (non solo per la lunghezza della stringa da copiare come in strncpy()), garantiscono la terminazione della stringa con NULL e restituiscono la lunghezza totale della stringa che è loro intenzione creare, ovvero la dimensione della stringa di destinazione se questa non viene troncata a causa di un buffer non abbastanza grande da contenerla. In questo modo è facile verificare un eventuale troncamento controllando semplicemente il valore restituito (se (valore restituito >= dimensione buffer) troncamento). Inoltre sono performanti poiché nessuna di loro imposta il buffer di destinazione eccedente con NULL all'infuori di quello necessario a terminare la stringa stessa. Un eventuale problema può essere dato dal fatto che strlcpy() e strlcat() non vengono però installate di default in molti sistemi Unix-like, cosa peraltro risolvibile includendole nello stesso programma sorgente data la loro dimensione ridotta. Peccato che tali soluzioni di modifica al codice non siano sempre di facile applicazione: basta infatti pensare che gli attuali programmi sono costituiti da una grossa mole di codice che causa un oneroso lavoro di analisi; d altronde anche il numero di applicazioni correntemente usate è in continua crescita e pertanto il numero di programmi che andrebbero rianalizzati in profondità a partire da zero è sempre maggiore. E' allora comprensibile perché è necessario ricercare altri tipi di soluzione. 3.3 Evitare i buffer overflow allocazione dinamica del buffer: 30

31 Strncpy() e simili sono un esempio di buffer allocato staticamente, ovvero una volta allocato la sua dimensione resta fissa. l'alternativa può essere quella di riallocarlo dinamicamente in modo da ridimensionarlo a seconda delle esigenze. Supponiamo ad esempio di inserire volutamente la solita stringa eccedente: se il buffer è allocato dinamicamente si ottiene il risultato di espanderne le dimensioni in maniera tale da poter memorizzare l'intera stringa, a meno che non si raggiunga la condizione estrema di esaurimento di memoria, evitando così la situazione di overflow. Purtroppo l'allocazione dinamica può provocare un esaurimento di memoria anche in punti nel programma non soggetti a bof, quindi qualsiasi allocazione di memoria può fallire. Anche nel caso in cui non si arrivi subito ad esaurire la memoria questo tipo di allocazione necessita di un numero maggiore di accessi alla memoria virtuale rispetto all'allocazione statica proprio per la minore efficienza nell'allocazione stessa, per cui risulta relativamente facile imbattersi nel cosiddetto fenomeno di "trashing" ovvero una situazione in cui la macchina spreca la maggior parte del tempo a scambiare informazioni tra disco e memoria. 3.4 Evitare i buffer overflow librerie sicure : Le soluzioni di libreria consistono essenzialmente nell'utilizzo di funzioni che facciano un corretto bound-checking ed una riallocazione dinamica di stringhe in analogia con quanto avviene con molti altri linguaggi come Perl o Ada95 che è capace di localizzare e prevenire bof. Arash Baratloo, Timothy Tsai, e Navjot Singh (della Lucent Technologies) hanno sviluppato Libsafe, una semplice libreria caricata dinamicamente che contiene le versioni modificate di funzioni di libreria standard del C vulnerabili (es. strcpy()). Questo è un altro modo per aumentare il nostro grado di protezione, ma bisogna tener conto che il problema non viene risolto definitivamente poiché Libsafe protegge solo un insieme ristretto di funzioni con risaputi problemi di bof e comunque non assicura una protezione nel caso in cui il codice scritto dal programmatore sia affetto da bof. 3.5 Evitare i buffer overflow ulteriori soluzioni: 31

32 Oltre a tutto quanto visto finora si può ovviare al bof in numerosi altri modi. Qui di seguito riportiamo un breve accenno ad altre tecniche tra quelle più usate: - Evitare di lasciare programmi che accettano parametri passati in ingresso con diritto di esecuzione a utenti qualsiasi; tali programmi,se non immunizzati dal bof, permettono un attacco poiché rendono possibile l input della shellcode voluta. - Rendere la sezione dati e stack non eseguibili; questa soluzione è facilmente implementabile a livello di stack poiché non causa perdite di prestazioni e non richiede né cambiamenti né ricompilazione dei programmi (tranne che in alcuni casi particolari). Purtroppo la situazione non è così semplice per la sezione dati visto che marcando tale sezione come non eseguibile si và incontro a problemi di compatibilità e, anche se fosse possibile risolverli, si potrebbe comunque attaccare non più inserendo del codice esterno ma corrompendo solamente i puntatori in modo da eseguire parti di codice pericolose presenti nel programma stesso o nelle librerie. - Introdurre nel compilatore tecniche che permettano controlli "lightweight" sull'integrità dell'indirizzo di ritorno. - Utilizzo di programmi opportuni come StackGuard che rileva e impedisce gli attacchi sullo stack proteggendo l'ip da alterazioni. StackGuard dispone una word di controllo dopo l'ip quando una funzione viene chiamata; se la word suddetta risulta modificata all'uscita dalla funzione significa che é stato tentato un attacco, quindi StackGuard lo segnala in syslog e interrompe l'esecuzione; la maggiore limitazione è che la protezione è però fornita solo per intrusioni nello stack che purtroppo non solo le uniche (ad esempio è possibile attaccare anche l'heap). Oltretutto è stato recentemente dimostrato che nonostante l'uso di questo programma o affini (es. StackShield) lo stack resta comunque passibile di bof. - Introdurre speciali controlli sui valori degli argomenti passati alle system calls. - Uso del DTE (Domain and Type Enforcement): tecnologia di controllo di accesso che associa uno specifico dominio ad ogni processo in esecuzione ed un tipo per ogni oggetto (es. oggetto=file, tipo=txt) in modo che a run-time un sottosistema DTE del kernel prende un dominio del processo e lo confronta con il tipo di ogni file o con il dominio di ogni altro processo nel quale tenta di accedere, dopodiché nega l'operazione se il confronto ha negato l'autorizzazione alla richiesta d'accesso. Lo svantaggio principale del DTE consiste in una profonda modifica al kernel e comunque richiede l'utilizzo di 20 system call aggiuntive. 32

33 3.6 Evitare i buffer overflow considerazioni finali: Da ciò che abbiamo visto si evince facilmente che non esiste purtroppo una soluzione definitiva al problema, se non quella di una programmazione attenta ai minimi particolari che in molti casi non è possibile attuare per la sua difficoltà di applicazione. Di conseguenza il problema necessita, per la sua risoluzione, di scelte oculate prese di caso in caso a seconda delle esigenze, in modo che i relativi svantaggi che introducono non vadano ad alterare il resto delle caratteristiche del programma. 33

34 Rsync 4.1 Cos è Rsync: Rsync è un programma open source, sviluppato per piattaforma Unix, creato per essere un veloce sistema di trasferimento file. Questo programma si basa sull algoritmo rsync il quale provvede ad implementare un metodo veramente veloce per sincronizzare i file remoti. L algoritmo riesce a determinare le differenze esistenti tra due file da sincronizzare, in modo che sia sufficiente trasferire solo le differenze, risparmiando così tempo. Alcune opzioni di rsync sono: - Può aggiornare intere directory e filesystems. - Opzionalmente preserva i link simbolici, gli hard links, i file ownership, i permessi. - Non richiede speciali privilegi per essere installato. - La pipelining interna riduce le latenze nel caso di file multipli. - Possono essere usate per il trasporto ssh, rsh o le direct sockets. - Supporta la funzione anonymous rsync che è ideale per il mirroring. 4.2 Perché è stato scelto Rsync per il processo di auditing del codice: Per l analisi è stato scelto questo software perché: - E un programma open source (e quindi comprensivo di codice sorgente) - E un programma noto usato da un utenza molto vasta e quindi era più probabile che eventuali bug fossero noti in modo da poter essere studiati. - E un programma di dimensioni medie adatto ad essere analizzato nel corso dei tre mesi dello stage. (Analizzare un programma come ad esempio Mozilla non sarebbe stato possibile in un così breve periodo di tempo). - E un programma utilizzato per lo scambio di dati tra computer connessi in rete e quindi si presta ad attacchi di tipo remoto. 4.3 Strumenti di analisi: 34

35 Rsync è stato scritto in linguaggio C standard. Per l analisi del suo codice è stato molto utile uno strumento di navigazione del codice chiamato Doxygen, il quale è un sistema di documentazione per C++, C, Java, IDL e vari tipi di PHP estesi. Esso genera, da un insieme di file sorgenti documentati, una documentazione on-line che può essere esplorata tramite un browser (in HTML) e/o un manuale off-line. Figura L algoritmo di Rsync: Ipotizziamo di avere due computer A e B connessi tramite una connessione con banda di bassa ampiezza e alta latenza. Al momento di iniziare il trasferimento abbiamo un file con ai bytes in A e un file con bi bytes in B. Assumiamo che 0 <= i < n e che ogni file sia lungo n bytes. Lo scopo dell algoritmo è per B quello di ricevere da A una copia del file. La struttura basilare di un algoritmo di aggiornamento remoto sarà: 35

36 - B manda delle informazioni S basate su bi ad A - A compara queste informazioni con ai e manda delle informazioni D a B. - B costruisce il nuovo file usando bi, S e D. Il problema è adesso sapere che cosa deve contenere S, come A può usare S per compararlo con ai e come B può ricostruire ai. Anche con questa semplice schematizzazione appare subito chiaro che l algoritmo richiede delle basi probabilistiche per essere utile. Le informazioni S che B manda a A dovranno essere in quantitativo molto minore del file completo in modo da avere un incremento di velocità di trasferimento significativo. Questo significa che S non può identificare unicamente tutti i possibili files bi il che significa che l algoritmo deve avere una bassa probabilità di fallimento. Un implementazione semplice: Un esempio di una forma veramente semplice dell algoritmo è: - B divide bi in N blocchi di uguale dimensione b j e calcola una firma Sj per ogni blocco. Questa firma è inviata ad A. - A divide ai in N blocchi a k e calcola S k per ogni blocco. - A cerca delle corrispondenze tra Sj e S k per ogni k. - Per ogni k, A manda a B ogni numero di blocco j in Sj che ha una corrispondenza con S k o manda un blocco letterale a k. - B costruisce ai usando i blocchi bi o i blocchi letterali ai. Questo algoritmo è veramente semplice e raggiunge molti degli obbiettivi del nostro algoritmo di aggiornamento remoto, ma non è usabile in pratica. Il problema è che A può trovare solo le corrispondenze che sono ai confini dei blocchi. Se il file in A è lo stesso che in B eccetto che un byte che è stato inserito all inizio del file, allora non si troverà nessuna corrispondenza di blocchi e l intero file verrà trasferito. La soluzione al problema: 36

37 Noi possiamo risolvere questo problema facendo si che A generi una firma non per ogni confine di blocchi ma per ogni byte. Quando A compara la firma ad ogni byte con ogni firma Sj nei blocchi bi sarà capace di trovare le corrispondenze???. Questo permette ai cambiamenti di lunghezza arbitraria di essere rilevati e trattati. Questo funzionerebbe, ma non è praticabile a causa dei costi di computazione di ogni firma per ogni possibile block. Si potrebbe rendere l algoritmo computazionalmente flessibile creando un algoritmo di firma molto veloce da calcolare ma questo è difficile da ottenere senza rendere la firma troppo debole. Una firma debole renderebbe l algoritmo inusabile. Per esempio, la firma potrebbe essere solo i primi 4 byte di ogni blocco. Questo sarebbe molto facile da calcolare ma l algoritmo fallirebbe nel produrre il giusto risultato quando due differenti blocchi avessero i loro primi 4 byte in comune. Due firme: La soluzione (che è poi la chiave dell algoritmo di rsync) è quella non di usare una singola firma per blocco, ma bensì due. La prima firma necessita di essere molto leggera da calcolare per tutti gli offset di byte e la seconda necessita di avere una probabilità di collisione veramente bassa. La seconda costosa firma necessita di essere calcolata da A all offset di byte dove la firma poco costosa ha una corrispondenza con una poco costosa firma di B. Se chiamiamo le due firme R e H l algoritmo diventa: 1. B divide bi in N blocchi di uguale dimensione bj e calcola le firme Rj e Hj per ogni blocco. Le firme sono spedite ad A. 2. Per ogni offset di byte i in ai, A calcola Ri nel blocco partendo da i. 3. A compara Rj per ogni Rj ricevuto da B. 4. Per ogni j dove R j ha una corrispondenza Rj, A calcola H i e lo confronta con Hj. 5. Se H i ha una corrispondenza Hj allora A manda un token a B indicante una corrispondenza fra blocchi e indicante quali blocchi hanno una corrispondenza. Altrimenti A manda un byte letterale a B. 6. B riceve i byte letterali e i token da A e li usa per costruire ai. Perché questo algoritmo sia efficiente abbiamo bisogno delle seguenti condizioni: - La firma R deve essere poco costosa da calcolare ad ogni offset di byte in un file. - La firma H deve avere una probabilità di collisione random veramente piccola. 37

38 - A necessita di effettuare le corrispondenze fra tutte le firme di blocchi ricevute da B in modo efficiente, e questo necessita di essere svolto per ogni offset di byte. 4.5 Storia dei bugs di Rsync: Rsync è giuto oramai alla verione Durante la sua evoluzione ha subito diversi cambiamenti e diversi suoi errori sono stati corretti. Fino ad ora, sono solo due i bug scoperti che potenzialmente potevano minare la sicurezza del sistema. Il primo a cui è stato assegnato il bugtraq id 3958 da Security Focus. Le versioni vulnerabili sono quelle dalla alla Questo bug è stato scoperto da Sebastian Krahmer, ricercatore dell università tedesca Postdam e sviluppatore della distribuzione Linux Suse. In alcune circostanze un valore signed è usato come indice di un array e questo porta alla possibilità di scrivere dei byte NULL in locazioni arbitrarie della memoria. Lo sfruttamento di questa vulnerabilità può condurre alla corruzione dello stack e possibilmente all'esecuzione del codice arbitrario come l'utente root. Nessun exploit è stato fino ad ora pubblicato per sfruttare questa vulnerabilità. La soluzione per questa vulnerabilità è data dall'aggiornamento del tool alla versione o superiore. Allo scopo di studiare i cambiamenti apportati al programma si è provveduto a confrontare due versioni di Rsync: la (vulnerabile) e la (contenente la pach). Chiaramente le differenze tra le due versioni non si limitano alla sola soluzione del problema riscontrato da Sebastian Krahmer, quindi è stato necessario studiare il codice al fine di separare i cambiamenti relativi alla risoluzione della vulnerabilità da quelli relativi a nuove funzionalità del programma. 4.6 Discussione della patch: Una vera e propria patch che risolva il problema riscontrato da Sebastian Krahmer non esiste. 38

39 La soluzione alla falla è stata implementata nelle versioni successive del programma. Quindi si sono dovute cercare i cambiamenti apportati relativi a questo problema tra tutti i cambiamenti e aggiunte effettuate nelle versioni successive di Rsync. Le modifiche relative al problema in esame coinvolgono 7 files del programma. Qui sotto è riportato il codice di una funzione rappresentativa del problema riscontrato e della sua soluzione. Le altre modifiche sono molto simili a quelle applicate per questa funzione. Figura 2 Il cambiamento intressa le due variabili l1 e l2 definite alla riga 470. Nella versione vulnerabile esse vengono definite di tipo int, mentre nella versione non vulnerabile esse vengono dichiarate unsigned int. 39

40 Il motivo per cui è stata apportata questa modifica è che utilizzando numeri molto grandi si potrebbe ingannare l'aritmetica e generare abusi dei buffer. Ad esempio, in condizioni normali, usando numeri da 16 bit il range di numeri va da 0 a 65mila circa. Dichiarando una variabile int si ha che i primi 32 k sono positivi mentre i rimanenti vengono considerati negativi in quanto vanno oltre il dominio. Quindi se io riuscissi ad immettere in l1 e/o l2 di tipo int un numero molto grande, come 65mila per esempio, esso manderebbe in crisi l'aritmetica e verrebbe considerato come circa. Il problema sta sicuramente nel confronto che viene effettuato alla riga 488. Infatti viene fatto un controllo in modo da verificare se l2 è maggiore o uguale a MAXPATHLEN l1. Se il numero in l2 è per errore un numero negativo, sicuramente il confronto darà esito negativo. Security Focus avverte che non esistono exploit conosciuti che sfruttano questa vulnerabilità. Anche ad una prima analisi del codice sembra che l'utente non possa in alcun modo alterare le variabili l1 e l2 in modo da provocare la vulnerabilità di cui abbiamo parlato. Questo quindi sembra essere un caso di vulnerabilità più teorica che pratica. 40

Allocazione dinamica della memoria - riepilogo

Allocazione dinamica della memoria - riepilogo Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica In breve Storage duration Allocazione dinamica della

Dettagli

Introduzione alla programmazione in C

Introduzione alla programmazione in C Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale

Dettagli

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6 Appunti di Calcolatori Elettronici Esecuzione di istruzioni in parallelo Introduzione... 1 Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD...

Dettagli

Guida Compilazione Piani di Studio on-line

Guida Compilazione Piani di Studio on-line Guida Compilazione Piani di Studio on-line SIA (Sistemi Informativi d Ateneo) Visualizzazione e presentazione piani di studio ordinamento 509 e 270 Università della Calabria (Unità organizzativa complessa-

Dettagli

Esercizi su. Funzioni

Esercizi su. Funzioni Esercizi su Funzioni ๒ Varie Tracce extra Sul sito del corso ๓ Esercizi funz_max.cc funz_fattoriale.cc ๔ Documentazione Il codice va documentato (commentato) Leggibilità Riduzione degli errori Manutenibilità

Dettagli

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo. DALLE PESATE ALL ARITMETICA FINITA IN BASE 2 Si è trovato, partendo da un problema concreto, che con la base 2, utilizzando alcune potenze della base, operando con solo addizioni, posso ottenere tutti

Dettagli

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini. Algoritmi di routing dinamici (pag.89) UdA2_L5 Nelle moderne reti si usano algoritmi dinamici, che si adattano automaticamente ai cambiamenti della rete. Questi algoritmi non sono eseguiti solo all'avvio

Dettagli

Sistema operativo: Gestione della memoria

Sistema operativo: Gestione della memoria Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Sistema operativo: Gestione della memoria La presente dispensa e

Dettagli

Consiglio regionale della Toscana. Regole per il corretto funzionamento della posta elettronica

Consiglio regionale della Toscana. Regole per il corretto funzionamento della posta elettronica Consiglio regionale della Toscana Regole per il corretto funzionamento della posta elettronica A cura dell Ufficio Informatica Maggio 2006 Indice 1. Regole di utilizzo della posta elettronica... 3 2. Controllo

Dettagli

I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo

I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo I Thread 1 Consideriamo due processi che devono lavorare sugli stessi dati. Come possono fare, se ogni processo ha la propria area dati (ossia, gli spazi di indirizzamento dei due processi sono separati)?

Dettagli

Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino

Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino Il Sistema Operativo Il Sistema Operativo è uno strato software che: opera direttamente sull hardware; isola dai dettagli dell architettura hardware; fornisce un insieme di funzionalità di alto livello.

Dettagli

Gestione della memoria centrale

Gestione della memoria centrale Gestione della memoria centrale Un programma per essere eseguito deve risiedere in memoria principale e lo stesso vale per i dati su cui esso opera In un sistema multitasking molti processi vengono eseguiti

Dettagli

Sistemi Operativi. 5 Gestione della memoria

Sistemi Operativi. 5 Gestione della memoria Gestione della memoria Compiti del gestore della memoria: Tenere traccia di quali parti della memoria sono libere e quali occupate. Allocare memoria ai processi che ne hanno bisogno. Deallocare la memoria

Dettagli

FONDAMENTI di INFORMATICA L. Mezzalira

FONDAMENTI di INFORMATICA L. Mezzalira FONDAMENTI di INFORMATICA L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software

Dettagli

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI Indice 1 Le frazioni algebriche 1.1 Il minimo comune multiplo e il Massimo Comun Divisore fra polinomi........ 1. Le frazioni algebriche....................................

Dettagli

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE 1/6 MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE Per prima cosa si ringrazia per aver scelto ImmobiPhone e per aver dato fiducia al suo autore. Il presente documento istruisce l'utilizzatore sull'uso del programma

Dettagli

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

Dettagli

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14. Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14. Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14 Pietro Frasca Lezione 11 Martedì 12-11-2013 1 Tecniche di allocazione mediante free list Generalmente,

Dettagli

Servizi Remoti. Servizi Remoti. TeamPortal Servizi Remoti

Servizi Remoti. Servizi Remoti. TeamPortal Servizi Remoti 20120300 INDICE 1. Introduzione... 3 2. Consultazione... 4 2.1 Consultazione Server Fidati... 4 2.2 Consultazione Servizi Client... 5 2.3 Consultazione Stato richieste... 5 3. Amministrazione... 6 3.1

Dettagli

Soluzione dell esercizio del 2 Febbraio 2004

Soluzione dell esercizio del 2 Febbraio 2004 Soluzione dell esercizio del 2 Febbraio 2004 1. Casi d uso I casi d uso sono riportati in Figura 1. Figura 1: Diagramma dei casi d uso. E evidenziato un sotto caso di uso. 2. Modello concettuale Osserviamo

Dettagli

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014)

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014) Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014) Il software per gli esami ICON può essere eseguito su qualunque computer dotato di Java Virtual Machine aggiornata.

Dettagli

1) GESTIONE DELLE POSTAZIONI REMOTE

1) GESTIONE DELLE POSTAZIONI REMOTE IMPORTAZIONE ESPORTAZIONE DATI VIA FTP Per FTP ( FILE TRANSFER PROTOCOL) si intende il protocollo di internet che permette di trasferire documenti di qualsiasi tipo tra siti differenti. Per l utilizzo

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T2 3-Compilatori e interpreti 1 Prerequisiti Principi di programmazione Utilizzo di un compilatore 2 1 Introduzione Una volta progettato un algoritmo codificato in un linguaggio

Dettagli

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. D. Talia - UNICAL. Sistemi Operativi 9.1

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. D. Talia - UNICAL. Sistemi Operativi 9.1 IMPLEMENTAZIONE DEL FILE SYSTEM 9.1 Implementazione del File System Struttura del File System Implementazione Implementazione delle Directory Metodi di Allocazione Gestione dello spazio libero Efficienza

Dettagli

Manuale Utente Albo Pretorio GA

Manuale Utente Albo Pretorio GA Manuale Utente Albo Pretorio GA IDENTIFICATIVO DOCUMENTO MU_ALBOPRETORIO-GA_1.4 Versione 1.4 Data edizione 04.04.2013 1 TABELLA DELLE VERSIONI Versione Data Paragrafo Descrizione delle modifiche apportate

Dettagli

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine

Dettagli

LA TRASMISSIONE DELLE INFORMAZIONI QUARTA PARTE 1

LA TRASMISSIONE DELLE INFORMAZIONI QUARTA PARTE 1 LA TRASMISSIONE DELLE INFORMAZIONI QUARTA PARTE 1 I CODICI 1 IL CODICE BCD 1 Somma in BCD 2 Sottrazione BCD 5 IL CODICE ECCESSO 3 20 La trasmissione delle informazioni Quarta Parte I codici Il codice BCD

Dettagli

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0 Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice

Dettagli

Determinare la grandezza della sottorete

Determinare la grandezza della sottorete Determinare la grandezza della sottorete Ogni rete IP possiede due indirizzi non assegnabili direttamente agli host l indirizzo della rete a cui appartiene e l'indirizzo di broadcast. Quando si creano

Dettagli

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. Implementazione del File System. Struttura del File System. Implementazione

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. Implementazione del File System. Struttura del File System. Implementazione IMPLEMENTAZIONE DEL FILE SYSTEM 9.1 Implementazione del File System Struttura del File System Implementazione Implementazione delle Directory Metodi di Allocazione Gestione dello spazio libero Efficienza

Dettagli

Scuola Digitale. Manuale utente. Copyright 2014, Axios Italia

Scuola Digitale. Manuale utente. Copyright 2014, Axios Italia Scuola Digitale Manuale utente Copyright 2014, Axios Italia 1 SOMMARIO SOMMARIO... 2 Accesso al pannello di controllo di Scuola Digitale... 3 Amministrazione trasparente... 4 Premessa... 4 Codice HTML

Dettagli

Che cosa è un VIRUS?

Che cosa è un VIRUS? Virus & Antivirus Virus Nella sicurezza informatica un virus è un software, appartenente alla categoria dei malware, che è in grado, una volta eseguito, di infettare dei file in modo da riprodursi facendo

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica per chimica industriale e chimica applicata e ambientale LEZIONE 4 - parte II La memoria 1 La memoriaparametri di caratterizzazione Un dato dispositivo di memoria è caratterizzato da : velocità di accesso,

Dettagli

Il memory manager. Gestione della memoria centrale

Il memory manager. Gestione della memoria centrale Il memory manager Gestione della memoria centrale La memoria La memoria RAM è un vettore molto grande di WORD cioè celle elementari a 16bit, 32bit, 64bit (2Byte, 4Byte, 8Byte) o altre misure a seconda

Dettagli

Protezione. Protezione. Protezione. Obiettivi della protezione

Protezione. Protezione. Protezione. Obiettivi della protezione Protezione Protezione La protezione riguarda i meccanismi per il controllo dell accesso alle risorse in un sistema di calcolo da parte degli utenti e dei processi. Meccanismi di imposizione fissati in

Dettagli

INSTALLAZIONE NUOVO CLIENT TUTTOTEL (04 Novembre 2014)

INSTALLAZIONE NUOVO CLIENT TUTTOTEL (04 Novembre 2014) INSTALLAZIONE NUOVO CLIENT TUTTOTEL (04 Novembre 2014) Se la Suite risulta già stata installata e quindi sono già presenti le configurazioni di seguito indicate, si prega di andare direttamente alla fine

Dettagli

lo 2 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000

lo 2 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000 Capittol lo 2 Visualizzazione 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000 Nel primo capitolo sono state analizzate le diverse componenti della finestra di Word 2000: barra del titolo, barra dei menu,

Dettagli

Manuale Utente Amministrazione Trasparente GA

Manuale Utente Amministrazione Trasparente GA Manuale Utente GA IDENTIFICATIVO DOCUMENTO MU_AMMINISTRAZIONETRASPARENTE-GA_1.0 Versione 1.0 Data edizione 03.05.2013 1 Albo Pretorio On Line TABELLA DELLE VERSIONI Versione Data Paragrafo Descrizione

Dettagli

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione.

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione. Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione. Compito fondamentale di un S.O. è infatti la gestione dell

Dettagli

SISTEMI OPERATIVI. Prof. Enrico Terrone A. S: 2008/09

SISTEMI OPERATIVI. Prof. Enrico Terrone A. S: 2008/09 SISTEMI OPERATIVI Prof. Enrico Terrone A. S: 2008/09 Che cos è il sistema operativo Il sistema operativo (SO) è il software che gestisce e rende accessibili (sia ai programmatori e ai programmi, sia agli

Dettagli

Server Galileo. http://galileo.dmi.unict.it/

Server Galileo. http://galileo.dmi.unict.it/ Server Galileo http://galileo.dmi.unict.it/ Gestione progetti Wiki Subversion Iscrizione a Galileo Per registrarsi è sufficiente iscriversi da questa pagina: https://galileo.dmi.unict.it/iscrizioni/ L'account

Dettagli

Strutturazione logica dei dati: i file

Strutturazione logica dei dati: i file Strutturazione logica dei dati: i file Informazioni più complesse possono essere composte a partire da informazioni elementari Esempio di una banca: supponiamo di voler mantenere all'interno di un computer

Dettagli

Approccio stratificato

Approccio stratificato Approccio stratificato Il sistema operativo è suddiviso in strati (livelli), ciascuno costruito sopra quelli inferiori. Il livello più basso (strato 0) è l hardware, il più alto (strato N) è l interfaccia

Dettagli

Registratori di Cassa

Registratori di Cassa modulo Registratori di Cassa Interfacciamento con Registratore di Cassa RCH Nucleo@light GDO BREVE GUIDA ( su logiche di funzionamento e modalità d uso ) www.impresa24.ilsole24ore.com 1 Sommario Introduzione...

Dettagli

Banca dati Professioniste in rete per le P.A. Guida all uso per le Professioniste

Banca dati Professioniste in rete per le P.A. Guida all uso per le Professioniste Banca dati Professioniste in rete per le P.A. Guida all uso per le Professioniste versione 2.1 24/09/2015 aggiornamenti: 23-set-2015; 24-set-2015 Autore: Francesco Brunetta (http://www.francescobrunetta.it/)

Dettagli

Traduzione e adattamento a cura di Gylas per Giochi Rari

Traduzione e adattamento a cura di Gylas per Giochi Rari Traduzione e adattamento a cura di Gylas per Giochi Rari Versione 1.0 Luglio 2001 NOTA. La presente traduzione non sostituisce in alcun modo il regolamento originale del gioco; il presente documento è

Dettagli

Creare una Rete Locale Lezione n. 1

Creare una Rete Locale Lezione n. 1 Le Reti Locali Introduzione Le Reti Locali indicate anche come LAN (Local Area Network), sono il punto d appoggio su cui si fonda la collaborazione nel lavoro in qualunque realtà, sia essa un azienda,

Dettagli

Guida alla configurazione della posta elettronica dell Ateneo di Ferrara sui più comuni programmi di posta

Guida alla configurazione della posta elettronica dell Ateneo di Ferrara sui più comuni programmi di posta Guida alla configurazione della posta elettronica dell Ateneo di Ferrara sui più comuni programmi di posta. Configurazione Account di posta dell Università di Ferrara con il Eudora email Eudora email può

Dettagli

Database. Si ringrazia Marco Bertini per le slides

Database. Si ringrazia Marco Bertini per le slides Database Si ringrazia Marco Bertini per le slides Obiettivo Concetti base dati e informazioni cos è un database terminologia Modelli organizzativi flat file database relazionali Principi e linee guida

Dettagli

Uso di base delle funzioni in Microsoft Excel

Uso di base delle funzioni in Microsoft Excel Uso di base delle funzioni in Microsoft Excel Le funzioni Una funzione è un operatore che applicato a uno o più argomenti (valori, siano essi numeri con virgola, numeri interi, stringhe di caratteri) restituisce

Dettagli

Pronto Esecuzione Attesa Terminazione

Pronto Esecuzione Attesa Terminazione Definizione Con il termine processo si indica una sequenza di azioni che il processore esegue Il programma invece, è una sequenza di azioni che il processore dovrà eseguire Il processo è quindi un programma

Dettagli

Dropbox di classe. É un servizio internet fornito gratuitamente (funzioni base).

Dropbox di classe. É un servizio internet fornito gratuitamente (funzioni base). Dropbox di classe Lo scopo del servizio Dropbox di classe è quello di far conoscere ai docenti del nostro istituto il funzionamento di un sistema di Cloud Storage, pronto e facile da usare, per esplorare

Dettagli

MODULO STAMPA BOLLETTINO PDF

MODULO STAMPA BOLLETTINO PDF MODULO STAMPA BOLLETTINO PDF MODULO STAMPA BOLLETTINO PDF pagina 2 di 7 INTRODUZIONE Il modulo STAMPA BOLLETTINO PDF è una applicazione stand-alone, sviluppata in linguaggio Java, che permette di produrre

Dettagli

Architetture Applicative

Architetture Applicative Alessandro Martinelli alessandro.martinelli@unipv.it 6 Marzo 2012 Architetture Architetture Applicative Introduzione Alcuni esempi di Architetture Applicative Architetture con più Applicazioni Architetture

Dettagli

File, Modifica, Visualizza, Strumenti, Messaggio

File, Modifica, Visualizza, Strumenti, Messaggio Guida installare account in Outlook Express Introduzione Questa guida riguarda di sicuro uno dei programmi maggiormente usati oggi: il client di posta elettronica. Tutti, ormai, siamo abituati a ricevere

Dettagli

Altri metodi di indicizzazione

Altri metodi di indicizzazione Organizzazione a indici su più livelli Altri metodi di indicizzazione Al crescere della dimensione del file l organizzazione sequenziale a indice diventa inefficiente: in lettura a causa del crescere del

Dettagli

Mac Application Manager 1.3 (SOLO PER TIGER)

Mac Application Manager 1.3 (SOLO PER TIGER) Mac Application Manager 1.3 (SOLO PER TIGER) MacApplicationManager ha lo scopo di raccogliere in maniera centralizzata le informazioni piu salienti dei nostri Mac in rete e di associare a ciascun Mac i

Dettagli

Questa guida è realizzata per spiegarvi e semplificarvi l utilizzo del nostro nuovo sito E Commerce dedicato ad Alternatori e Motorini di avviamento.

Questa guida è realizzata per spiegarvi e semplificarvi l utilizzo del nostro nuovo sito E Commerce dedicato ad Alternatori e Motorini di avviamento. Guida all uso del sito E Commerce Axial Questa guida è realizzata per spiegarvi e semplificarvi l utilizzo del nostro nuovo sito E Commerce dedicato ad Alternatori e Motorini di avviamento. Innanzitutto,

Dettagli

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise Manuale Amministratore Legalmail Enterprise Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise Pagina 2 di 16 Manuale Amministratore Legalmail Enterprise Introduzione a Legalmail Enterprise...3

Dettagli

Introduzione alla Progettazione per Componenti

Introduzione alla Progettazione per Componenti Introduzione alla Progettazione per Componenti Alessandro Martinelli 6 ottobre 2014 Obiettivo del Corso Il Progetto Software Reale Il Componente Software La Programmazione Ad Oggetti Fondamenti di Informatica

Dettagli

Nelle reti di calcolatori, le porte (traduzione impropria del termine. port inglese, che in realtà significa porto) sono lo strumento

Nelle reti di calcolatori, le porte (traduzione impropria del termine. port inglese, che in realtà significa porto) sono lo strumento I protocolli del livello di applicazione Porte Nelle reti di calcolatori, le porte (traduzione impropria del termine port inglese, che in realtà significa porto) sono lo strumento utilizzato per permettere

Dettagli

STAMPA DI UNA PAGINA SEMPLICE

STAMPA DI UNA PAGINA SEMPLICE Pagina 11 copiati nel proprio sistema (disco fisso o floppy). Questa operazione è detta download o scaricamento. Il modo più semplice per effettuare un download di un file (a meno che non sia specificato

Dettagli

INDIRIZZI IP ARCHITETTURA GENERALE DEGLI INDIRIZZI IP FORME DI INDIRIZZI IP CINQUE FORME DI INDIRIZZI IP

INDIRIZZI IP ARCHITETTURA GENERALE DEGLI INDIRIZZI IP FORME DI INDIRIZZI IP CINQUE FORME DI INDIRIZZI IP INDIRIZZI IP ARCHITETTURA GENERALE DEGLI INDIRIZZI IP Un indirizzo IP è composto da 32 bit. Generalmente, per convenienza, è presentato in decimale: 4 ottetti (bytes) separati da un punto. Ogni rete fisica

Dettagli

CERTIFICATI DIGITALI. Manuale Utente

CERTIFICATI DIGITALI. Manuale Utente CERTIFICATI DIGITALI Procedure di installazione, rimozione, archiviazione Manuale Utente versione 1.0 pag. 1 pag. 2 di30 Sommario CERTIFICATI DIGITALI...1 Manuale Utente...1 Sommario...2 Introduzione...3

Dettagli

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena daino@unisi.it

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena daino@unisi.it MODELLO CLIENT/SERVER Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena daino@unisi.it POSSIBILI STRUTTURE DEL SISTEMA INFORMATIVO La struttura di un sistema informativo

Dettagli

La VPN con il FRITZ!Box Parte I. La VPN con il FRITZ!Box Parte I

La VPN con il FRITZ!Box Parte I. La VPN con il FRITZ!Box Parte I La VPN con il FRITZ!Box Parte I 1 Introduzione In questa mini-guida illustreremo come realizzare un collegamento tramite VPN(Virtual Private Network) tra due FRITZ!Box, in modo da mettere in comunicazioni

Dettagli

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0 11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0 PAG. 2 DI 38 INDICE 1. PREMESSA 3 2. SCARICO DEL SOFTWARE 4 2.1 AMBIENTE WINDOWS 5 2.2 AMBIENTE MACINTOSH 6 2.3 AMBIENTE

Dettagli

Fabio Zanasi. 12 maggio 2010

Fabio Zanasi. 12 maggio 2010 Figura: 1 / 26 12 maggio 2010 Cos è? è un sistema di controllo delle versioni (version control system). è un software open-source per ambienti Unix, Windows, OS-X. è lo strumento ideale per gestire il

Dettagli

INFORMATICA 1 L. Mezzalira

INFORMATICA 1 L. Mezzalira INFORMATICA 1 L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software del modello

Dettagli

Manuale operatore per l utilizzo dell utente di dominio

Manuale operatore per l utilizzo dell utente di dominio Manuale operatore per l utilizzo dell utente di dominio Sommario Manuale operatore per l utilizzo dell utente di dominio... 1 1. Account personale di dominio... 2 2. Account generico di dominio... 2 3.

Dettagli

Coordinazione Distribuita

Coordinazione Distribuita Coordinazione Distribuita Ordinamento degli eventi Mutua esclusione Atomicità Controllo della Concorrenza 21.1 Introduzione Tutte le questioni relative alla concorrenza che si incontrano in sistemi centralizzati,

Dettagli

CAPITOLO 7 - SCAMBIO DI MESSAGGI

CAPITOLO 7 - SCAMBIO DI MESSAGGI CAPITOLO 7 - SCAMBIO DI MESSAGGI Lo scambio di messaggi è una forma di comunicazione nel quale un processo richiede al sistema operativo di mandare dei dati direttamente ad un altro processo. In alcuni

Dettagli

Capitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2.

Capitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2. Capitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2. Dichiarazione di dati: le direttive DS e DC...3 2.1 Direttiva DS...3 2.2

Dettagli

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0) PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0) (Da effettuare non prima del 01/01/2011) Le istruzioni si basano su un azienda che ha circa 1000 articoli, che utilizza l ultimo

Dettagli

Calcolatori Elettronici. La memoria gerarchica La memoria virtuale

Calcolatori Elettronici. La memoria gerarchica La memoria virtuale Calcolatori Elettronici La memoria gerarchica La memoria virtuale Come usare la memoria secondaria oltre che per conservare permanentemente dati e programmi Idea Tenere parte del codice in mem princ e

Dettagli

2010 Ing. Punzenberger COPA-DATA Srl. Tutti i diritti riservati.

2010 Ing. Punzenberger COPA-DATA Srl. Tutti i diritti riservati. 2010 Ing. Punzenberger COPA-DATA Srl Tutti i diritti riservati. Tutti i diritti riservati la distribuzione e la copia - indifferentemente dal metodo - può essere consentita esclusivamente dalla dittacopa-data.

Dettagli

Identità e autenticazione

Identità e autenticazione Identità e autenticazione Autenticazione con nome utente e password Nel campo della sicurezza informatica, si definisce autenticazione il processo tramite il quale un computer, un software o un utente,

Dettagli

MANUALE EDICOLA 04.05

MANUALE EDICOLA 04.05 MANUALE EDICOLA 04.05 Questo è il video che si presenta avviando il programma di Gestione Edicola. Questo primo video è relativo alle operazioni di carico. CARICO Nello schermo di carico, in alto a sinistra

Dettagli

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi Capitolo Terzo Primi passi con Microsoft Access Sommario: 1. Aprire e chiudere Microsoft Access. - 2. Aprire un database esistente. - 3. La barra multifunzione di Microsoft Access 2007. - 4. Creare e salvare

Dettagli

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; ESERCIZI 2 LABORATORIO Problema 1 Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; Chiede all'utente un numero e, tramite ricerca

Dettagli

Calcolo del Valore Attuale Netto (VAN)

Calcolo del Valore Attuale Netto (VAN) Calcolo del Valore Attuale Netto (VAN) Il calcolo del valore attuale netto (VAN) serve per determinare la redditività di un investimento. Si tratta di utilizzare un procedimento che può consentirci di

Dettagli

Introduzione al Linguaggio C

Introduzione al Linguaggio C Introduzione al Linguaggio C File I/O Daniele Pighin April 2009 Daniele Pighin Introduzione al Linguaggio C 1/15 Outline File e dati Accesso ai file File I/O Daniele Pighin Introduzione al Linguaggio C

Dettagli

MOCA. Modulo Candidatura. http://www.federscacchi.it/moca. moca@federscacchi.it. [Manuale versione 1.0 marzo 2013]

MOCA. Modulo Candidatura. http://www.federscacchi.it/moca. moca@federscacchi.it. [Manuale versione 1.0 marzo 2013] MOCA Modulo Candidatura http://www.federscacchi.it/moca moca@federscacchi.it [Manuale versione 1.0 marzo 2013] 1/12 MOCA in breve MOCA è una funzionalità del sito web della FSI che permette di inserire

Dettagli

Il sistema di I/O. Hardware di I/O Interfacce di I/O Software di I/O. Introduzione

Il sistema di I/O. Hardware di I/O Interfacce di I/O Software di I/O. Introduzione Il sistema di I/O Hardware di I/O Interfacce di I/O Software di I/O Introduzione 1 Sotto-sistema di I/O Insieme di metodi per controllare i dispositivi di I/O Obiettivo: Fornire ai processi utente un interfaccia

Dettagli

Guida alla registrazione on-line di un DataLogger

Guida alla registrazione on-line di un DataLogger NovaProject s.r.l. Guida alla registrazione on-line di un DataLogger Revisione 3.0 3/08/2010 Partita IVA / Codice Fiscale: 03034090542 pag. 1 di 17 Contenuti Il presente documento è una guida all accesso

Dettagli

ELENCO CLIENTI FORNITORI Patch1

ELENCO CLIENTI FORNITORI Patch1 ELENCO CLIENTI FORNITORI Patch1 Il pacchetto P15_200ElencoCF_Patch1.exe contiene una serie di aggiornamenti alla procedura di generazione del file contenente l. Download: 1) Assicurarsi di avere una versione

Dettagli

Complemento al corso di Fondamenti di Informatica I corsi di laurea in ingegneria, settore dell informazione Università la Sapienza Consorzio Nettuno

Complemento al corso di Fondamenti di Informatica I corsi di laurea in ingegneria, settore dell informazione Università la Sapienza Consorzio Nettuno Rappresentazione di numeri Complemento al corso di Fondamenti di Informatica I corsi di laurea in ingegneria, settore dell informazione Università la Sapienza Consorzio Nettuno Un numero e un entità teorica,

Dettagli

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti Capitolo 3 L applicazione Java Diagrammi ER Dopo le fasi di analisi, progettazione ed implementazione il software è stato compilato ed ora è pronto all uso; in questo capitolo mostreremo passo passo tutta

Dettagli

Manuale Terminal Manager 2.0

Manuale Terminal Manager 2.0 Manuale Terminal Manager 2.0 CREAZIONE / MODIFICA / CANCELLAZIONE TERMINALI Tramite il pulsante NUOVO possiamo aggiungere un terminale alla lista del nostro impianto. Comparirà una finestra che permette

Dettagli

Procedura SMS. Manuale Utente

Procedura SMS. Manuale Utente Procedura SMS Manuale Utente INDICE: 1 ACCESSO... 4 1.1 Messaggio di benvenuto... 4 2 UTENTI...4 2.1 Gestione utenti (utente di Livello 2)... 4 2.1.1 Creazione nuovo utente... 4 2.1.2 Modifica dati utente...

Dettagli

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico MANUALE MOODLE STUDENTI Accesso al Materiale Didattico 1 INDICE 1. INTRODUZIONE ALLA PIATTAFORMA MOODLE... 3 1.1. Corso Moodle... 4 2. ACCESSO ALLA PIATTAFORMA... 7 2.1. Accesso diretto alla piattaforma...

Dettagli

Il software impiegato su un computer si distingue in: Sistema Operativo Compilatori per produrre programmi

Il software impiegato su un computer si distingue in: Sistema Operativo Compilatori per produrre programmi Il Software Il software impiegato su un computer si distingue in: Software di sistema Sistema Operativo Compilatori per produrre programmi Software applicativo Elaborazione testi Fogli elettronici Basi

Dettagli

Calcolatori Elettronici A a.a. 2008/2009

Calcolatori Elettronici A a.a. 2008/2009 Calcolatori Elettronici A a.a. 2008/2009 PRESTAZIONI DEL CALCOLATORE Massimiliano Giacomin Due dimensioni Tempo di risposta (o tempo di esecuzione): il tempo totale impiegato per eseguire un task (include

Dettagli

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS CONTENUTI: CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS Creazione database vuoto Creazione tabella Inserimento dati A) Creazione di un database vuoto Avviamo il programma Microsoft Access. Dal menu

Dettagli

REGOLE PER L ESAME (agg.te settembre 2015)

REGOLE PER L ESAME (agg.te settembre 2015) Informatica e Programmazione (9 CFU) Ingegneria Meccanica e dei Materiali REGOLE PER L ESAME (agg.te settembre 2015) Modalità d esame (note generali) Per superare l esame, lo studente deve sostenere due

Dettagli

Introduzione alla Virtualizzazione

Introduzione alla Virtualizzazione Introduzione alla Virtualizzazione Dott. Luca Tasquier E-mail: luca.tasquier@unina2.it Virtualizzazione - 1 La virtualizzazione è una tecnologia software che sta cambiando il metodo d utilizzo delle risorse

Dettagli

Aggiornare applicazioni virtualizzate con App-V

Aggiornare applicazioni virtualizzate con App-V Aggiornare applicazioni virtualizzate con App-V di Nicola Ferrini MCT MCSA MCSE MCTS MCITP Introduzione Mantenere un infrastruttura virtuale basata su Application Virtualization aiuta a diminuire sensibilmente

Dettagli

RISOLUTORE AUTOMATICO PER SUDOKU

RISOLUTORE AUTOMATICO PER SUDOKU RISOLUTORE AUTOMATICO PER SUDOKU Progetto Prolog - Pierluigi Tresoldi 609618 INDICE 1.STORIA DEL SUDOKU 2.REGOLE DEL GIOCO 3.PROGRAMMAZIONE CON VINCOLI 4.COMANDI DEL PROGRAMMA 5.ESEMPI 1. STORIA DEL SUDOKU

Dettagli

Software relazione. Software di base Software applicativo. Hardware. Bios. Sistema operativo. Programmi applicativi

Software relazione. Software di base Software applicativo. Hardware. Bios. Sistema operativo. Programmi applicativi Software relazione Hardware Software di base Software applicativo Bios Sistema operativo Programmi applicativi Software di base Sistema operativo Bios Utility di sistema software Software applicativo Programmi

Dettagli

Manuale Servizio NEWSLETTER

Manuale Servizio NEWSLETTER Manuale Servizio NEWSLETTER Manuale Utente Newsletter MMU-05 REDAZIONE Revisione Redatto da Funzione Data Approvato da Funzione Data 00 Silvia Governatori Analista funzionale 28/01/2011 Lorenzo Bonelli

Dettagli