di Cristian Randieri
Introduzione alla quarta ed ultima parte dell’articolo
Con questa quarta parte, si conclude la trattazione del dispositivo RECS 101 con un argomento di rilevante importanza: “il problema della sicurezza per i web server embedded”.
La sicurezza è un aspetto molto importante e da non trascurare nei sistemi di controllo specie se sono gestiti tramite la rete Internet. Se da un lato la rete Internet offre grandi flessibilità a livello di condivisione di risorse e di gestione da remoto, dall’altro è sicuramente un ambiente non sicuro, poiché chiunque può connettersi ad essa. Il web ha il potere di aumentare la produttività di chiunque, tuttavia come per ogni tecnologia o attività di gruppo oltre alle straordinarie attività occorre considerarne i rischi. Generalmente gli attacchi ad un sistema di controllo remoto si possono classificare mediante l’individuazione dei punti deboli del sistema che s’intende esaminare.
In generale si possono individuare quattro categorie:
• Vulnerabilità dei dati.
• Vulnerabilità del software.
• Vulnerabilità del sistema fisico.
• Vulnerabilità delle trasmissioni.
Per difendersi da questi attacchi, ci si deve attendere che ogni potenziale intruso possa sfruttare queste vulnerabilità per accedere ai dati e quindi potenzialmente danneggiare il sistema. Ad esempio, la connessione di un sistema di controllo su internet può aprire delle falle nei sistemi di sicurezza e tali falle possono essere utilizzate da utenti non autorizzati per accedere o manipolarne le funzionalità. Gli intrusi potrebbero anche invalidare il server Internet del sistema di controllo, modificandone i file in esso memorizzati (ad esempio i file che contengono le informazioni sulle User-ID e Password degli utenti del sistema). I potenziali Hacker potrebbero inserire nel sistema dei virus e altri programmi distruttivi auto-replicanti in grado di danneggiare o disabilitare completamente il sistema. Possiamo classificare gli attacchi provenienti da internet nelle seguenti categorie:
Attacchi da password: Gli intrusi cercano di entrare nel sistema immettendo un codice di Login ed una password, provando varie volte sino a trovarne una funzionante [1]. Normalmente vengono adoperati dei software in grado di utilizzare variegati dizionari che provano di continuo diverse combinazioni sino a quando non trovano quella vincente che permette di far accedere al sistema. Ad esempio i sistemi Unix sono particolarmente vulnerabili ad attacchi di questo tipo, poiché, UNIX non blocca l’accesso degli utenti dopo un determinato numero di tentativi falliti, cosa che normalmente avviene nella maggior parte degli altri sistemi operativi.
Attacchi alla sicurezza della rete e dei pacchetti: Poiché ogni pacchetto trasmesso in Internet può attraversare un gran numero di nodi prima di giungere a destinazione, gli hacker possono utilizzare appositi strumenti denominati “racket sniffer” per intercettare i pacchetti inoltrati nella rete (inclusi i pacchetti di login e trasmissione dei dati). I più comuni attacchi ai pacchetti sono precursori degli attacchi al protocollo IP. Per iniziare un attacco sniffing, un hacker per prima cosa va alla ricerca di una User ID e di una password di un utente legittimo utilizzandola per accedere alla rete distribuita. Dopo essersi intruso nella rete l’hacker osserva e copia le trasmissioni dei pacchetti e tenta di raccogliere quante più informazioni possibili sulla rete.
Attacchi al protocollo IP: Si concentra sull’indirizzamento dei pacchetti che il protocollo IP utilizza per le trasmissioni. Un attacco di questo tipo prevede due fasi. Nella prima si cerca di determinare l’indirizzo IP del server, generalmente mettendosi in ascolto dei pacchetti Internet, provando a specificare in ordine vari numeri di host oppure connettendosi al sito mediante un browser web e osservando l’indirizzo IP nella barra di stato. Poiché l’hacker sa che gli altri computer della rete condividono una parte del dell’indirizzo IP del server, cercherà di simulare un indirizzo IP che gli consenta di scavalcare il router e di accedere al sistema, come se fosse un utente interno. Dopo che l’hacker avrà iniziato a trovare gli indirizzi della rete, inizierà anche a controllare i numeri di sequenza dei pacchetti che si trasmettono tali computer. In seguito, dopo aver controllato le trasmissioni della rete, l’hacker cercherà di prevedere il prossimo numero di sequenza che verrà generato dal server e quindi fornirà un proprio pacchetto con tale numero di sequenza inserendosi fra il server e l’utente. Poiché l’hacker ha già l’indirizzo IP del server, può in realtà generare pacchetti con i numeri di sequenza corretti e indirizzi IP che gli consentono di intercettare le trasmissioni con l’utente. Dopo che l’hacker ha avuto accesso al sistema tramite la previsione di un numero di sequenza, può accedere alle informazioni che il sistema di comunicazione trasmette al server, inclusi i files di password, nomi, login, dati riservati e ogni altra informazioni trasmessa in rete. In generale un hacker utilizza la previsione del numero di sequenza come preparativo per l’attacco vero e proprio al server oppure come base per l’attacco di un altro server della rete.
Hyperlink Spoofing: È un tipo d’attacco che gli hacker sferrato contro computer che comunicano utilizzando il protocollo HTTP [2]. Gli hacker possono dunque sferrare attacchi anche al protocollo di autenticazione di server SSL (Secure Socket Layer) utilizzato per la creazione di browser e server Web sicuri, come i prodotti Microsoft e Netscape. Un attacco di questo tipo prevede che un hacker fungendo da intermediario convinca il browser a connettersi a un server fittizio presentando al browser l’aspetto di una sessione sicura. Un hacker intermediario è un hacker che s’inserisce nel flusso dei pacchetti che scorrono fra un client ed un server. In questo modo l’hacker convince l’utente a rilevare determinate informazioni quali ad esempio User ID e Password o altre informazioni riservate che saranno memorizzate nel server fittizio. Un alto rischio di Hyperlink spoofing accade se l’utente preleva ed esegue dal server fittizio applet Java pericolosi, credendo che tali applet siano forniti da un server sicuro e che debbano pertanto essere considerati sicuri. L’attacco Hyperlink spoofing rende palese un difetto nel modo in cui, la maggior parte dei browser, impiega i certificati digitali per rendere sicure le sessioni. L’attacco spoofing tramite collegamenti ipertestuali non attacca la crittografia a basso livello o il funzionamento del protocollo SSL. Di conseguenza l’attacco può essere sferrato anche ad altre applicazioni garantite da un certificato, a seconda del modo in cui tali applicazioni impieghino i propri certificati. Il problema principale è che gli attacchi Hyperlink spoofing si basano sul fatto che il certificato SSL fornito contiene informazioni errate (ad esempio il nome del DNS). Quindi, nonostante gli indirizzi URL sembrino corretti e riflettendo l’attività dell’azienda che possiede il sito Web cui si fa riferimento, non sempre questo accade. Quando è registrato un dominio, le autorità Internet assicurano che il DNS non sia già stato registrato da altri ma non assicurano che non violi le leggi di copyright.
Web Spoofing: È un tipo d’attacco che prevede di creare una copia falsa ma convincente dell’intero sito Web [3]. Il sito Web ha tutto l’aspetto del sito vero e proprio, ovvero contiene le stesse pagine e gli stessi link del vero sito WEB, ma è completamente sotto il controllo dell’hacker. In un attacco di questo tipo, l’hacker può osservare o modificare tutti i dati che vanno dalla vittima al server del sito Web. Inoltre, l’hacker può controllare tutto il traffico di ritorno dal server Web alla sua vittima. In seguito l’hacker può impiegare vari tipi di attacco tra cui ad esempio lo sniffing e lo spoofing. Con lo sniffing l’hacker osserva passivamente il traffico della rete. Lo spoofing invece prevede un’attività di manipolazione in quanto l’hacker convince un host di essere un altro computer fidato e pertanto si prepara a ricevere varie informazioni. Ad esempio l’hacker può registrare i contenuti e le risposte che il server invia al client (User ID, password ecc.). L’hacker può eseguire un’attività di sorveglianza, anche se la vittima ritiene di trovarsi in una connessione sicura. Indipendentemente dal fatto che la connessione impieghi i metodi SSL o S-http, l’hacker sarà comunque in grado di ingannare l’utente. Si potrebbe pensare che sia difficile per l’hacker sostituirsi all’intero Web, ma sfortunatamente non è così. L’hacker non deve memorizzare l’intero contenuto del Web, poiché il Web è, per definizione, disponibile on-line. Quando il server dell’hacker deve fornire una falsa pagina, gli basta prelevarla e modificarla dal Web stesso.
POSSIBILI CONTROMISURE
Sebbene il mondo dell’informatica sia in continua evoluzione trovare dei rimedi che eliminino definitivamente tali problemi è molto difficile, tuttavia nel seguente paragrafo vogliamo presentare alcune soluzioni che adottate potrebbero essere un modo per fronteggiare queste problematiche. Rispecchiando lo schema precedente riportiamo di seguito le soluzioni possibili:
Attacchi da password: Nelle reti, l’intercettazione delle transazioni, rappresenta uno dei rischi più gravi che attualmente affligge i singoli utenti e le organizzazioni. Per proteggersi dall’intercettazione dei pacchetti è opportuno crittografare tutte le trasmissioni. I due tipi principali di crittografia sono: la crittografia a chiave semplice (o a chiave simmetrica) e quella a chiave pubblica (o a chiave asimmetrica). La crittografia a chiave semplice, utilizza un’unica chiave nota ai due capi della comunicazione che la usano per crittografare e decrittografare le informazioni. La crittografia a chiave pubblica, usa una chiave disponibile pubblicamente e una segreta conosciuta dall’utente. La maggior parte dei programmi normalmente utilizzati per eseguire la crittografia dei messaggi, seguono lo standard PEM (Privacy Enanched Mail) definito in dettaglio nelle RFC 1421, 1422,1423 e 1424. Gli algoritmi di crittografia più utilizzati sono l’algoritmo RSA (Rivest-Shamir- Adleman) e l’algoritmo Diffide- Hellman. Tali algoritmi possono quindi essere utilizzati per marcare in modo digitale le trasmissioni. Questa tecnica consente ai destinatari dei messaggi di verificare l’identità del mittente. Studi recenti hanno dimostrato che misurando accuratamente il tempo necessario per eseguire le operazioni sulla chiave privata, un hacker può dedurre gli esponenti fissi di Diffide-Hellman, i fattori delle chiavi RSA e dunque violare questi sistemi di crittografia. In termini realistici, il pericolo che qualcuno possa decodificare una trasmissione criptata, utilizzando un attacco di questo tipo, è solo leggermente inferiore rispetto al pericolo che qualcuno possa rubare la chiave privata dal disco fisso.
Attacchi alla sicurezza della rete e dei pacchetti: Gli attacchi sniffer su reti distribuite possono essere evitati utilizzando degli schemi di identificazione come il sistema delle password monouso o il sistema di autenticazione a ticket (come Kerberos [4]). Alcuni sistemi monouso forniscono agli utenti la prossima password nel momento in cui l’utente si connette dal sistema. Anche se sia le password monouso che gli schemi Kerberos possono rendere molto più difficile lo sniffing delle password su una rete non sicura, entrambi i metodi espongono al rischio di attacchi attivi se il canale dati non è criptato o codificato. Un attacco attivo al protocollo TCP/IP consente all’hacker di ridirezionare il canale TCP verso la propria macchina. Dopodiché l’hacker può by-passare la protezione che offre un sistema di password monouso o di autenticazione a ticket. La connessione TCP, diviene vulnerabile, a chiunque sia in possesso di uno sniffer di pacchetti TCP e di un generatore di pacchetti TCP posizionati sul percorso della connessione.
Attacchi al protocollo IP: Il modo più semplice per prevenire il sistema contro questo tipo di attacchi a previsione di numero di sequenza consiste nell’assicurarsi che il router, il firewall e ogni server del sistema abbiano attivato la protezione audit-trail. Un audit-trail è una registrazione cronologica delle attività di sistema, sufficiente per consentire la ricostruzione, la revisione e l’esame della sequenza di situazioni e di attività che hanno riguardato o che hanno condotto a un’operazione, una procedura o un evento in una transazione dal suo inizio ai suoi risultati finali. Utilizzando gli audit-trail, si può osservare quando un hacker tenta di attraversare il router e il firewall e quando tenta di accedere al server. Utilizzando uno dei programmi di servizio disponibili nel sistema operativo, si può richiedere che a seguito di un determinato numero di richieste di accesso negate venga prodotto un avvertimento. Si deve riconoscere che l’auditing e la manutenzione e l’osservazione degli audittrail non offrono una protezione “ a prova d’errore” contro gli attacchi al sistema. Se qualcuno esegue lo “spoofing” del sistema, ad esempio, l’operazione non potrà essere individuata dall’auditing. Se qualcuno ascolterà il sistema con uno sniffer, l’auditing probabilmente non si accorgerà di nulla poiché l’hacker non accede ai dati del server ma semplicemente osserva i dati in passaggio. Come tutti gli altri strumenti di prevenzione degli attacchi, l’auditingtrail, se utilizzato correttamente, è solo uno degli strumenti per un piano organico di sicurezza. L’auditing non può sostituire un firewall o uno screening router o una politica di sicurezza. Analogamente gli altri sistemi difensivi non possono sostituire l’auditing.
Hyperlink Spoofing: Se s’impiegano già applicazioni Web che fanno affidamento sull’autenticazione del server (ad esempio per il prelevamento di applet Java), l’unica soluzione praticabile consiste nel far partire il browser da una pagina sicura in modo che gli utenti possano fidarsi dei link iniziali e che un hacker non possa mai inviarli in luoghi sospetti Una pagina sicura è quella di cui si può verificare l’integrità e questo, in genere, significa che tale pagina deve essere un file HTML locale o una pagina su un server SSL. Se si desidera che il browser di un utente parta aprendo una pagina SSL, si deve inviare l’indirizzo URL di tale pagina tramite mezzi difficili o impossibili da intercettare (ad esempio un floppy o una lettera), altrimenti la pagina potrebbe diventare il punto di partenza per l’attacco che s’intende prevenire. Tutti i link contenuti in questa pagina dovrebbero inviare gli utenti su siti di provata affidabilità e preferibilmente tutti i link dovrebbero essere di tipo SSL.
L’affidabilità può basarsi sui seguenti criteri:
• Il sito deve essere condotto con criteri di sicurezza.
• Ovvero l’intero sito deve essere reso sicuro contro gli attacchi e l’intercettazione delle pagine.
• Il sito deve contenere link che conducono solo ad altri siti sicuri.
Web Spoofing: Questo genere d’attacchi è veramente pericoloso e in sostanza non è rilevabile. Le misure preventive che possono essere adottate si riassumono nei seguenti punti: • Disabilitare nel browser gli script in modo che l’hacker non possa nascondere l’evidenza dell’attacco; • Assicurarsi che la riga degli indirizzi del browser sia sempre visibile. • Fare attenzione all’indirizzo URL visualizzato dal browser, assicurandosi che punti sempre al server a cui si pensa di essere connessi. Questa strategia riduce fortemente i rischi di attacco anche se un hacker può comunque colpire un utente dalla rete, specialmente coloro che non si preoccupano di osservare strani comportamenti sulla riga degli indirizzi o della barra di stato. Con la disattivazione degli script si perderà qualche utile funzionalità, si potrà in ogni caso riattivarne l’uso, all’interno di siti fidati, per disattivarli, nuovamente, quando si lascia il sito fidato. La creazione di una soluzione a lungo termine è molto più difficile, poiché occorrerebbe modificare il codice del browser in modo tale che programma visualizzi sempre la riga dell’indirizzo offrendo una maggiore sicurezza così come la possibilità di rendere sicuro il browser contro modifiche esterne, ovvero fare in modo che i programmi Web non possano creare false barre di menù, false barre di stato ecc. Per le pagine che il browser preleva utilizzando una connessione sicura, una migliore indicazione di attivazione della connessione sicura potrebbe aiutare a garantire un’effettiva sicurezza dell’utente. Invece di indicare semplicemente l’attivazione di una connessione sicura, i browser potrebbero visualizzare con chiarezza il nome del server che ha completato tale connessione. Fondamentalmente ogni approccio al problema del Web-spoofing sembra essere affidato alla vigilanza dell’utente. Il fatto che un amministratore di sistema possa realisticamente attendersi questo tipo di vigilanza da tutti gli utenti della rete, pone seri dubbi.
I PRINCIPALI PROBLEMI DI SICUREZZA DEGLI APPLET JAVA
Anche se Java rappresenta un ambiente di programmazione relativamente sicuro, occorre considerare vari argomenti che aiutino a difendersi contro i problemi di sicurezza derivanti dall’impiego di Java. Poiché la JVM interpreta gli applet Java localmente, in genere gli applet consumano grandi quantità di risorse di sistema. Gli applet ostili o mal programmati possono consumare troppe risorse di sistema utilizzando la maggior parte della CPU o della memoria de computer. Quando un applet consuma troppe risorse, il computer può rallentare sino quasi a bloccarsi. Questo stato di blocco è il risultato di un attacco. Nelle prime implementazioni di Java (JDK 1.1.2) esisteva un bug nel verificatore di applet che consentiva a un applet prelevato su un client che si trova all’interno di un firewall di collegarsi a un determinato host al di là del firewall. Dopo la connessione, l’applet poteva trasmettere informazioni relative alla macchina client invece che informazioni relative al server proxy così come dovrebbe fare l’applet, aprendo la rete a un attacco spoofing.
In generale possiamo dire che il Java può soffrire di quattro tipi possibili di attacchi [5÷13]:
ARCHITETTURA DI SICUREZZA JAVA
In accordo a quanto riportato in letteratura [8], l’applet Verifier [9], è una parte del sistema run-time di java, che assicura che l’applet segua determinate regole di sicurezza. Per iniziare, l’applet verifier conferma che il file della classe segua le specifiche del linguaggio java. L’applet verifier non presume che il file della classe sia stato prodotto da un compilatore sicuro. Al contrario controlla nel file della classe l’esistenza di violazioni alle regole del linguaggio e altre restrizioni riguardanti lo spazio dei nomi e chiudere altre via di fuga, impiegabili per uscire dal file della classe. In particolare l’applet verifier assicura che:
• Il programma non provochi l’overflow o l’underflow dello stack.
• Il programma esegua accessi validi alla memoria e ai registri.
• I parametri di tutte le istruzioni bytecode siano corretti.
• Il programma non converta illegalmente i dati.
L’applet verifier svolge queste funzioni critiche analizzando le istruzioni contenute nel file dell’applet. Un browser Web utilizza un solo class loader che il browser attiva all’avvio, dopo questa fase il browser non può estendere, modificare o sostituire il caricatore di class. Gli applet non possono creare o far riferimento a un proprio class loader. L’applet verifier è indipendente dall’implementazione di riferimento Sun del compilatore java e dalle specifiche di alto livello del linguaggio Java. L’applet verifier esamina il bytecode generato dal compilatore java. La JVM si fida (e pertanto esegue) del byte code importato da internet solo dopo che tale bytecode ha passato l’analisi del verifier. Per passare al verifier il bytecode deve rispondere alla sintassi, alle firme degli oggetti, al formato del file della classe ed altre prevedibilità dello stack run-time definiti dall’implementazione. Gli applet sono eseguiti in condizioni di sicurezza relativamente stringenti. L’applet security manager è il meccanismo java che si occupa delle restrizioni sugli applet. Un browser ha un solo manager della sicurezza. L’applet security manager si inizializza all’avvio del browser e in seguito non può essere sostituito, modificato o esteso. Gli applet non possono creare o far riferimento a un proprio gestore della sicurezza. Per una descrizione più dettagliata dell’architettura di sicurezza Java si rimanda alle note bibliografiche [5÷13].
RECS 101 SECURITY
Come evidenziato in precedenza, RECS101, rappresenta un implementazione realistica di un web server integrato capace di gestire al suo interno la JVM. Il problema della sicurezza nel nostro caso presenta diversi vincoli non indifferenti che riguardano le scarse capacità di calcolo del dispositivo realizzato. Sicuramente è quasi impensabile poter implementare tutti i sistemi anti-intrusione presentati nei paragrafi precedenti. Nonostante ciò gioca a nostro favore il fatto che essendo un dispositivo non standard che non ha al suo interno un sistema operativo standard ciò permette di sfruttare le proprietà hardware del dispositivo.
Per essere più chiaro, i problemi per cui il dispositivo potrebbe essere vulnerabile, sono principalmente dovuti a:
• Possibile attacco alla password d’accesso al sistema.
• Attacchi al protocollo IP e alla sicurezza dei pacchetti.
• Hyperlink Spoofing.
• Web Spoofing.
Poiché la nostra applicazione si basa sulla JVM, abbiamo un livello di protezione base che comunque ci viene fornito dalla gestione delle Applet (come esposto precedentemente).
Le contromisure che abbiamo adottato per far fronte alle problematiche sopra esposte, sono le seguenti:
Possibile attacco alla password d’accesso al sistema. RECS 101 non integra al suo interno alcun Sistema di gestione delle chiavi sia esse pubbliche che private, trattandosi di un sistema embedded dedicato al controllo remoto di apparecchiature elettronico il suo utilizzo sarà sicuramente riservato ad una cerchia molto ristretta di utenti di conseguenza si può ipotizzare che gli utenti del sistema possano essere definiti a priori. Ciò implica che il firmware del sistema deve essere programmato in modo tale da inserire tutti i possibili utenti del sistema. La gestione del database delle password ed user ID è effettuata mediante l’applet Java Stessa che andrà a leggere un file crittografato posto all’interno del file system di RECS 101.
Attacchi al protocollo IP e alla sicurezza dei pacchetti. Un attacco di questo tipo viene in qualche moto ridotto mediante la crittografia del pacchetto contente lo stato delle porte di I/O. Poiché come si è visto precedentemente le porte di I/O di RECS 101 sono codificate in un dato a 32 bit è possibile inserire un algoritmo di crittografia che possa proteggere il contenuto dei dati. Nel caso in cui RECS 101 venga utilizzato con una propria logica di controllo con operazioni di sniffing è pressoché impossibile risalire all’algoritmo di controllo del sistema poiché questo è contenuto all’interno dell’applet.
Hyperlink Spoofing & Web Spoofing. L’implementazione di un supporto SSL all’interno di RECS 101, per la sua complessità è pressoché impensabile. Di conseguenza un attacco Hyperlink Spoofing sarebbe possibile. Per evitare ciò si può pensare di adoperare due RECS 101 che lavorando in parallelo uno controlli gli stati dell’altro, in questo modo la probabilità che entrambi i sistemi vengano attaccati simultaneamente decresce di molto. Per quanto riguarda il Web Spoofing, si può pensare di disattivare il supporto Java in RECS 101, però il prezzo da pagare è la portabilità del dispositivo, nel senso che il dispositivo perderebbe tutte le proprietà inerenti l’accesso alle porte di I/O tramite interfaccia Web. Poiché RECS 101 supporta anche i Socket C è possibile scrivere delle applicazioni Client/Server in C che eseguite localmente in un PC possono attivare una connessione con quest’ultimo. In questo modo si risolvono tutti i possibili problemi di Hyperlink Spoofing e Web Spoofing.
Articolo pubblicato su Fare Elettronica N. 217/218 – Luglio/Agosto 2003 – Anno 19
FareElettronica è una delle riviste nazionali più importanti di elettronica ed applicazioni. Intellisystem Technologies nella persona dell’ Ing. Cristian Randieri ha avuto il piacere di pubblicare un articolo, suddiviso in quattro uscite, che descrive in maniera dettagliata e concisa il dispositivo RECS 101, illustrandone tutti gli aspetti tecnici in merito alla sua configurazione software ed hardware.
You must belogged in to post a comment.