Steganografia Un esempio pratico. Il formato TAR Possiamo pensare ad un archivio TAR come ad un contenitore di file. Per ogni file nellarchivio viene.

Slides:



Advertisements
Presentazioni simili
I File di testo in Pascal
Advertisements

Marco Barisione Estendere Python in C.
Programmazione con socket
File System Cos’è un File System File e Directory
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
1 System Call per Comunicazione tra Processi Pipe.
Università La Sapienza Web programming e programmazione multimediale 1 Web Programming e comunicazione multimediale Lezione 10: PHP.
Interfaccia del file system
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 2 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
File.
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Rappresentazione dellinformazione su calcolatore Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
Algoritmi e strutture dati
Introduzione agli stream e alle classi
Corso di Informatica per Giurisprudenza
Laboratorio 1: Usare Linux. File system Il file system è la componente del sistema operativo che si occupa della gestione di file e cartelle Con laccount.
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
Il linguaggio Fortran 90: 5. Formato di I/O e Files
Array Struttura numerate di dati. Memorizzare molti dati In informatica cè spesso bisogno di memorizzare ed elaborare un insieme costituito da molti dati.
PHP – Un’introduzione Linguaggi e Traduttori 2003 Facoltà di Economia
1 Implementazione di Linguaggi 2 Implementazione di Linguaggi 2 Federico Bernardi Type checking 2° parte Type checking 2° parte - Equivalenza di type expressions.
CAPITOLO 2 INTRODUZIONE AL LINGUAGGIO JAVA E ALL'AMBIENTE HOTJAVA.
1.1 Implementazione del file system Una possibile visualizzazione del file system di un sistema Unix.
Organizzazione della Memoria (Unix) Text contiene le istruzioni in linguaggio macchina del codice eseguibile, può essere condiviso in caso di processi.
Esercizio: Copiare un file in un nuovo file mediante le funzioni read e write.
1 File System ed Input/Output UNIX Implementazione del File System Caratteristiche del File System Unix/Linux System Call relative al File System Linput/output.
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
OPERAZIONI CON STRINGHE Le operazioni più interessanti da fare, per ora, con le stringhe sono: determinare la lunghezza della stringa, cioè quanti caratteri.
I File.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Dettagli e comandi avanzati Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Dettagli e comandi avanzati Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Sistemi Operativi - Introduzione 1 Informazioni utili Per avere una distribuzione linux sul proprio pc: 1.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Shell: uso avanzato e script Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Il problem-solving Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino.
GESTIONE DEI FILE Per poter mantenere disponibili i dati tra le diverse esecuzioni di un programma (persi-stenza dei dati) è necessario poterli archi-viare.
Corso di PHP.
Sistemi Operativi – La shell Salvatore Campagna Politecnico di Torino Dipartimento di Automatica.
File I record.
RAPPRESENTAZIONE DELL'INFORMAZIONE
File ad accesso casuale o random
CODIFICA Da flow-chart a C++.
Radix-Sort(A,d) // A[i] = cd...c2c1
Altri comandi avanzati Salvatore Campagna Politecnico di Torino Dipartimento di Automatica.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Input/output 1 Marco D. Santambrogio – Ver. aggiornata al 2 Dicembre 2013.
Esercizi su File e Liste
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Corso JAVA Lezione n° 12 Istituto Statale di Istruzione Superiore “F. Enriques”
Codifica dei dati in un elaboratore elettronico
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Programmazione in linguaggio C
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
1 Il file system di Unix Caratteristiche generali dei FS comunemente usati da Unix/Linux.
Variabili Numeriche –Interi (byte, short, int, long): complemento a 2 –A virgola mobile (float, double): IEEE 745 Alfanumeriche –Carattere (char): Unicode.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
File binari Accesso a file con record di lunghezza costante Struct Persona { Int id; Char nome[50];// nome e cognome Double stipendio; }; Persona dipendente;
1 Informatica Generale Alessandra Di Pierro Ricevimento: Giovedì ore presso Dipartimento di Informatica, Via Buonarroti,
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 8 Aprile 2015.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 26 Marzo 2014.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
1 File System ed Input/Output UNIX Caratteristiche del FS Unix Implementazione Il file system di Linux Organizzazione dell’ I/O.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
Codici prefissi Un codice prefisso è un codice in cui nessuna parola codice è prefisso (parte iniziale) di un’altra Ogni codice a lunghezza fissa è ovviamente.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 28 Ottobre 2014.
“ Pseudocodice ” Un programma per computer lavorerà su in insieme di “ variabili ” contenenti i dati del problema, soluzioni intermedie, soluzioni finali.
Files in C++ Motivazioni Un programma in esecuzione legge (sequenzialmente) una sequenza di caratteri prodotti "al volo" dall'utente (tramite tastiera)
Steganografia in un file di testo Corso di Sicurezza dei sistemi informatici Prof. Giuseppe Mastronardi Anno Accademico 2006/07.
Transcript della presentazione:

Steganografia Un esempio pratico

Il formato TAR Possiamo pensare ad un archivio TAR come ad un contenitore di file. Per ogni file nellarchivio viene memorizzato: –il contenuto del file –informazioni aggiuntive (nome file, permessi, ecc.) Possiamo usare alcuni byte delle informazioni aggiuntive per memorizzare un messaggio steganografato.

Informazioni aggiuntive Per ogni file presente nellarchivio sono presenti le seguenti informazioni: nome permessi user id, user name group id, group name dimensione tempo dellultima modifica altre informazioni per gestire file non regolari (es. link, device, ecc.)

Il campo mtime Il campo mtime, di 36 bit, memorizza la data dellultima modifica al file. 36 bit Essa è codificata come il numero di secondi trascorsi dalle ore 0:00 del 01/01/1970. Possiamo usare gli ultimi 8 bit per memorizzare un byte di informazione. La data originale è distorta al più di 255 secondi, ovvero 4 minuti e 15 secondi.

Codifica di un messaggio Dato un messaggio lungo n byte, lo codifichiamo su n+4 byte. I primi 4 byte rappresentano la lunghezza del messaggio. I successivi n byte contengono il messaggio vero e proprio. Lunghezza massima di un messaggio: 4 Gb. Esempio: –messaggio = ciao –lunghezza = 4 –archivio di 9 file Nome mtime File1 xxxxxxx File2xxxxxxx File3xxxxxxx File4xxxxxxx File5xxxxxxx File6xxxxxxx File7xxxxxxx File8xxxxxxx File9xxxxxxx xx ciaociao F F xx

Codice sorgente - steganotar.py Scritto in Python 2.3 ( Perché Python? –Semplice –Portabile (Linux, Windows, Mac, ecc.) –Modulo standard per i file TAR Chi non conosce Python? –Sembra pseudocodice. In laboratorio è installato Python 1.5, perciò steganotar.py non funziona.

Codifica di un messaggio Data una stringa in input, dobbiamo produrre unaltra stringa così formata: –i primi 4 byte memorizzano la lunghezza, espressa in notazione big endian. –i successivi byte memorizzano il messaggio vero e proprio. La funzione struct.pack effettua la conversione tra intero a 32 bit e stringa di byte in big endian. def encode_message(data): length = struct.pack('!i', len(data)) return length + data

Decodifica di un messaggio Dato un messaggio codificato, dobbiamo decodificarlo per produrne una rappresentazione usabile. Prima di tutto leggiamo i primi 4 byte e li convertiamo in un intero a 32 bit (con la funzione struct.unpack). Ora che sappiamo la lunghezza, sappiamo quanti byte leggere per ottenere il messaggio originale. def decode_message(data): length = struct.unpack('!i', data[:4])[0] return data[4:4+length]

for index, filename in enumerate(files): tarinfo = tar.gettarinfo(filename) if index < len(data): char = data[index] tarinfo.mtime &= MASK tarinfo.mtime |= ord(char) tar.addfile(tarinfo, file(filename)) Creazione di un archivio Alcune variabili utilizzate: –data: messaggio gia` codificato (array di byte) –tar: oggetto che rappresenta l'archivio tar –files: lista di nomi di file da inserire nell'archivio –MASK = 0xFFFFFFF00

Lettura di un archivio def read_tar(filename): tar = tarfile.open(filename, 'r') data = [] for tarinfo in tar: # ottiene lultimo byte di mtime char = tarinfo.mtime & 0xFF data.append(chr(char)) tar.close() return ''.join(data)

Dimostrazione pratica tmp]$ ls prova file01 file02 file03 file04 file05 file06 file07 file08 file09 file10 file11 file12 file13 file14 file15 tmp]$ ls -l prova/file05 -rw-r--r-- 1 anto anto 0 dic 12 15:21 file05 tmp]$ steganotar.py --encode prova.tar prova/ Messaggio tmp]$ tar tvf prova.tar | grep file05 -rw-r--r-- anto/anto :22:53 prova/file05 tmp]$ steganotar.py --decode prova.tar Messaggio

Memorizzare un intero file Se dalla linea di comando non è specificato alcun messaggio, steganotar.py lo legge da standard input. Possiamo sfruttare questa caratteristica per steganografare file arbitrari in un archivio TAR. Esempio: creiamo un archivio che contiene i sorgenti del kernel di Linux: sono file, quindi possiamo memorizzare circa 14 Kb di informazioni. tmp]$ steganotar.py --encode linux.tar /usr/src/linux < \ Steganography.txt tmp]$ steganotar.py --decode linux.tar > Steganography2.txt tmp]$ diff Steganography.txt Steganography2.txt

Implementazioni alternative Abbiamo scelto di usare il campo mtime, ma potevamo anche scegliere diversamente. In particolare, i campi uid e gid non sono quasi mai utilizzati: i corrispettivi user name e group name hanno sempre la precedenza. I campi uid e gid ci avrebbero permesso di memorizzare 4 byte per ogni file nellarchivio. Purtroppo nella maggior parte dei file TAR i campi uid e gid hanno sempre lo stesso valore, per cui sarebbe facile scoprire che un file è steganografato.