Category: software

  • HTTPS e le applicazioni di terze parti: attenzione!

    “È sufficiente usare HTTPS per essere sicuri: protegge la comunicazione cifrando il traffico e usando certificati validati da CA riconosciute”.

    SBAGLIATO. Spesso si sente pronunciare questa frase, ma non è del tutto vero: ho recentemente letto con molta attenzione un paper presentato alla conferenza CCS 2012, una conferenza dedicata alla Computer Security. Il paper ha un titolo curioso: “The Most Dangerous Code in the World: Validating SSL Certificates in Non-Browser Software“.

    Si parla di HTTPS/SSL in contesti in cui è richiesta una comunicazione cifrata tra due sistemi (trasmissione di dati sensibili); distinguiamo due tecnologie lato end-user per accedere a sistemi HTTPS: un browser (accediamo, per esempio, ad un sito di e-commerce e facciamo il checkout in modalità protetta) oppure un’applicazione 3rd party (per esempio, lo stesso sito di e-commerce tramite un’app dedicata a smartphone/tablets).

    Bene: i browser non sono in discussione e non risentono dei problemi presentati nel paper. Invece, le libraries SSL (due nomi su tutti: OpenSSL e JSSE) che solitamente vengono utilizzate nei back-end o utilizzate dagli sviluppatori per costruire applicazioni che accedono a risorse tramite HTTPS soffrono di alcuni problemi che rendono l’intera comunicazione vulnerabile a diversi tipi di attacchi, come il famoso man-in-the-middle. In breve, il problema principale è il processo di validazione dei certificati SSL (solitamente: si risale la chain fino alla root CA). Se lato client non viene effettivamente fatta la validazione del certificato presentato dal server, il client è una facile preda! Questa non-validazione è causata da molteplici fattori:

    • pigrizia dei developers che, nell’utilizzare queste librerie, disabilitano controlli fondamentali durante la fase di sviluppo (perché si usano dei certificati self-signed) che poi dovrebbero essere riabilitati al go-live. Ma così non accade;
    • utilizzo sbagliato delle API che settano impostazioni non congruenti (setto il check per la verifica del certificato ma poi non ricordo/non so/non è specificato che devo leggere un’ulteriore return code per verificare se la validazione è andata a buon fine).

    Nel paper sono presenti alcuni esempi interessanti con tanto di codice reverse engineered.

    Quali sono i rimedi?

    • Come sviluppatori: configurare correttamente i parametri di validazione SSL della libreria che si usa, controllando anche i valori di ritorno della validazione se devono essere richiamati tramite un’ulteriore chiamata alle API della library utilizzata
    • Come sviluppatori: fare sempre un testing utilizzando certificati SSL non verificati.

    La lettura del paper è davvero molto interessante ed è vivamente consigliata per tutti quelli che hanno a che fare con lo sviluppo di applicazioni 3rd party che accedono a risorse esposte tramite HTTPS/SSL.

  • Monitorare le spese con Moneytrackin

    In un momento in cui il termine austerity fa capolino su tutte le testate giornalistiche, la tecnologia ci può venire in aiuto supportandoci nella gestione e nel monitoraggio delle spese che facciamo con i programmi di personal finance (il più famoso è sicuramente Microsoft Money, ormai dismesso da Microsoft).

    In poche parole, i software di personal finance permettono di effettuare due semplici operazioni:

    • registrare le entrate e le uscite che sosteniamo, categorizzando/taggando ogni spesa con una o più etichette: ad esempio, tutte le spese riguardanti l’automobile (benzina, tagliando, etc.) stanno sotto la categoria ‘automobile’.
    • visualizzare le spese sostenute, differenziando la dimensione su cui si vuole esplorare la spesa: tempo (giorni/mesi/anni) oppure etichetta/e (“quanto ho speso quest’anno per l’automobile?”)

    Il software di personal finance che ho scelto dopo un po’ di selezione è Moneytrackin. Si tratta di un software online (accedibile quindi da qualsiasi computer) che dispone anche di un’applicazione per iPhone (così posso registrare le spese anche quando non sono al computer). Ovviamente, l’utilizzo di Moneytrackin è gratuito e sicuro (protetto da https).

    Il punto di forza di Moneytrackin è proprio nella reportistica: è disponibile sia online che offline (si può generare un report da esportare in PDF) e permette di controllare ogni spesa che abbiamo sostenuto, differenziando le spese in base ai tag (etichette) che abbiamo impostato. Il più famoso software di questo tipo è Mint, disponibile tuttavia solo negli US (e la funzionalità più interessante è che, previa autorizzazione, si collega direttamente all’online banking del vostro conto in modo da risparmiarvi la fatica della fase di inserimento dei movimenti, lasciandovi il piacere di visualizzare i report).

    Ma qual è la vera utilità di questi software? La funzione dei software di finanza personale è senza dubbio quella di tenere monitorato le uscite (e le entrate), in modo da aiutarci a capire dove spendiamo (e dove guadagniamo). Personalmente utilizzo Moneytrackin da web (e su iPhone) da più di un anno e sono davvero molto soddisfatto.

  • Cercare un file dentro un backup di Time Machine

    Time Machine è il software di backup semi-automatico incluso in MacOSX; sono recentemente passato a Time Machine su consiglio di un amico, e devo assolutamente ringraziare entrambi: Time Machine mi ha salvato in ben 2 occasioni.

    Una funzionalità che però non ho trovato intuitiva è quella di ricerca di un file/directory per name dentro gli archivi di Time Machine. Per cercare un pattern, infatti, bisogna aprire Time Machine e scrivere ciò che si sta cercando nell’apposito riquadro del Finder, e poi precedere ad utilizzare lo slider temporale per andare più avanti (o indietro) nel tempo.

  • Installare ed utilizzare Mosh (mobile-shell) su Ubuntu e MacOSX

    Per le sessioni semi-perpetue di ssh che contraddistinguono il mio setup, utilizzo una combinazione di autossh e tmux/screen (wrappato da byobu). Ultimamente ho scoperto mobile-shell (Mosh): proveniente dal MIT, si tratta di un ssh killer perché, a differenza di ssh:

    • ristabilisce automaticamente la connessione dopo un certo timeout (problema risolto in precedenza da autossh);
    • utilizza un eco locale (addio lag ssh su connessioni lente!);
    • mosh e mosh-server possono essere avviati da utenti non privilegiati
    • supporta solo UTF-8!

    Da Ubuntu 12.04, mosh è presente nei repo ufficiali di Ubuntu (per le versioni precedenti, è presente anche un ppa). Per MacOSX, si può usare compilare il pacchetto usando homebrew o scaricare il dmg già pronto dal sito di riferimento.

    Provarlo è molto semplice: supponiamo di avere un server Linux e un client MacOSX. Installatelo su Linux tramite apt-get e scaricate il pkg per MacOSX. Una volta installato, per connettersi da MacOSX ho dovuto dichiarare un locale (ho scoperto che, sfortunatamente, MacOSX non dichiara alcun locale). Per cui, controllate il locale in uso sul server remoto e dichiarate lo stesso locale su MacOSX (eventualmente modificate anche il file rc relativo alla vostra shell di riferimento):

    michele@delta:~ % locale                                             
    LANG=
    LC_COLLATE="C"
    LC_CTYPE="C"
    LC_MESSAGES="C"
    LC_MONETARY="C"
    LC_NUMERIC="C"
    LC_TIME="C"
    LC_ALL=
    michele@delta:~ % export LANG="en_US.UTF-8"
    michele@delta:~ % mosh server
  • Installare Oracle JDK Java 7 su MacOSX

    Abbiamo già visto come installare la Oracle JDK 7 su Ubuntu (e Linux), ed oggi faremo la stessa cosa su MacOSX. Su OSX il processo è molto più semplice: basta infatti scaricare il dmg (l’unico disponibile per MacOSX, ovvero quello a 64bit) dall’indirizzo ufficiale di Oracle e procedere all’installazione (system-wide).

    Dopo l’installazione, aprite le Java Preferences.app (le trovate in /Applications) e trascinate Java SE 7 in cima alla lista.

    Chiudete, aprite un Terminal.app e digitate java -version. L’output che ne ottenete dovrebbe essere quello della nuova JVM come in figura.

    A titolo informativo, la JVM viene installata in

    /Library/Java/JavaVirtualMachines/1.7.0.jdk

    Tenetelo presente, vi servirà se dovrete impostare Eclipse (o qualche altro applicativo) per recuperare correttamente la JAVA_HOME della JVM appena installata [a breve arriverà un post a riguardo].

    Se volete invece affidarvi a OpenJDK (che è la reference implementation per Java 7), esistono dei pacchetti precompilati che potrete installare scaricandoli dal sito openjdk-osx-build.

  • Evitare riavvii e shutdown remoti su Ubuntu con molly-guard

    Non mi è mai capitato ma potrebbe essere molto utile ai sysadmin più distratti: molly-guard è un pacchetto presente su Ubuntu/Debian che vi permette di evitare un riavvio/shutdown di una macchina remota a cui siete collegati tramite ssh.

    Se, per esempio, tentate di eseguire uno shutdown di una macchina remota a cui siete collegati tramite ssh, molly-guard vi chiede di scrivere per intero l’hostname della macchina che volete riavviare/spegnere.

    Il pacchetto è incluso nei repository ed è molto semplice da installare (basta un apt-get) ed è davvero molto utile: ho provveduto ad installarlo su tutte le macchine che gestisco.

    Per i più curiosi, il nome molly-guard deriva da una “divertente” vicenda.

  • RescueTime: il modo migliore per visualizzare dove “spendiamo” il nostro tempo

    RescueTime: il modo migliore per visualizzare dove “spendiamo” il nostro tempo

    Ricordarsi dove si “spende” la maggior parte del proprio tempo al computer è un’attività davvero difficile, soprattutto per chi con i computer ci lavora! Proprio per questo motivo ci viene in aiuto RescueTime: una volta installato vi verrà proposto di installare un programma che se ne starà in background e che monitorerà non invasivamente quello che fate al vostro computer, per produrre poi un report delle attività che svolgete al vostro computer, contabilizzando le ore che spendete in ogni applicazione; il tutto, automaticamente!

    Una volta installato, RescueTime vi fa alcune semplici domande per capire quali sono, a vostro giudizio, i programmi che ritenete più produttivi e quali, invece, perdite di tempo. Ogni volta che RescueTime vi invierà un report delle vostre attività, con dei semplici e chiari grafici come quello qui sopra, vi dirà se siete stati produttivi o meno proprio secondo le regole che voi stessi avete dichiarato.

    Come funziona? Dopo un po’ di investigazione, ho scoperto che RescueTime memorizza solamente il titolo dell’applicazione in foreground e per quanto tempo viene utilizzata (per il browser: anche il sito visitato). Questi sono i dati memorizzati da RescueTime, per cui, se siete preoccupati per la vostra privacy, potete decidere in autonomia se installare RescueTime.

    In generale trovo RescueTime davvero utile, proprio perché mi aiuta a capire dove spendo la maggior parte del mio tempo e, nel caso in cui le attività siano distrazioni, a potermi meglio regolare in futuro. Inoltre, funziona anche come un pratico “cronometro” per progetti: spesso mi aiuta a capire qual è l’elapsed vero di un progetto a cui sto lavorando.

    RescueTime è gratuito nella versione base per Windows, Linux e MacOSX ed offre anche una versione a pagamento che vi offre informazioni ancora più dettagliate e alcune funzionalità per restare nella “zone” bloccando le attività che vi distraggono.

  • proctools: (pgrep, pkill): gli strumenti per operare sui processi

    Quando ci si trova davanti ad un terminale e si deve operare sui processi, si filtra l’output di ps auxw con grep (ed eventualmente con kill). Ad esempio:

    michele@delta:~ % ps auxw | grep -i yes [ 6:20PM]
    michele 92888 8.7 0.0 2434788 372 s002 S+ 6:20PM 0:00.52 yes
    michele 92914 0.0 0.0 2425580 296 s005 R+ 6:20PM 0:00.00 grep -i yes

    In alcuni casi, l’operazione più comune che segue la grep è quella di kill:

    michele@delta:~ % kill -9 92888 [ 6:20PM]
    michele@delta:~ % ps auxw | grep -i yes [ 6:21PM]
    michele 92934 0.0 0.0 2425480 244 s005 R+ 6:22PM 0:00.00 grep -i yes

    Gli autuori di proctools hanno pensato bene di introdurre 3 utility che ci possono venire incontro per questi casi:

    • pgrep <pattern>: effettua una ricerca all’interno dei processi attivi, ritorna il PID dei processi che matchano il pattern specificato come argomento:

      michele@delta:~ % pgrep yes [ 6:28PM]
      93026
      93053

    • pkill <pattern>: è l’equivalente di kill (quindi bisogna specificare il tipo di signal da passare al processo) ma applicato ai processi: assicuratevi di specificare un pattern univoco, perché tutti i processi che matchano il pattern riceveranno il kill:

      michele@delta:~ % pkill -9 yes [ 6:28PM]

    proctools (il pacchetto che contiene i due comandi citati) è (solitamente) installato di default su Linux (se non è così, cercate proctools tra i pkg della vostra distro). Su MacOSX, invece, va installato (ma scriverò un post a riguardo).
    L’utilizzo che ve ne ho descritto è basic: per ulteriori informazioni, vi rimando alla manpage.

  • Installare Java Development Kit 7 (JDK 7) su Ubuntu

    La tanto attesa versione 7 di Java è disponibile per Windows e per Linux: tra le funzionalità più importanti, sottolineo il supporto per i linguaggi dinamici e una maggiore velocità di esecuzione del codice interpretato.

    Per Ubuntu è disponibile un pacchetto ppa per avere Java 7. Per installarla è sufficiente aggiungere il ppa e installare il pacchetto corrispondente:

    sudo add-apt-repository ppa:webupd8team/java
    sudo apt-get update
    sudo mkdir -p /usr/lib/mozilla/plugins
    sudo apt-get install oracle-jdk7-installer

    Ed il gioco è fatto. Per controllare che abbiate installato correttamente la nuova versione di Java, lanciate un java -version e controllate che sia la 7. Se così non fosse, lanciate sudo update-alternatives --config java e scegliete la versione corretta di Java.

  • 10 cose da fare prima e dopo aver installato MacOSX Lion

    Dopo un po’ di tempo di assestamento, ho aggiornato il sistema operativo che utilizzo principalmente a MacOSX Lion 10.7 (attualmente giunto alla revision 3, 10.7.3). Visto che ho optato per un’installazione from scratch (dopo aver acquistato Lion su App Store, ho creato un DVD di backup utilizzando le innumerevoli guide di cui la rete è piena), ho dovuto riapplicare tutte le customizzazioni che ho applicato man mano che acquisivo confidenza con MacOSX. Facciamo un passo indietro: di cosa bisogna fare il backup prima di passare a Lion? Ecco alcune idee:

    • Le applicazioni installate su iTunes
    • La libreria di iTunes (audio, video, libri, audiolibri, podcast)
    • I contatti su AddressBook
    • La libreria fotografica di iPhoto (~/Pictures/) e/o di Picasa
    • Bookmarks ed estensioni di Chrome e Safari
    • Il folder dei Documenti (~/Documents)
    • Le chiavi private di ssh (~/.ssh/)
    • Una lista delle applicazioni installate (ls -l /Applications)
    • Le mail archiviate su Mail.app (~/Library/Mail)
    • Eventuali altre directory che avete creato nella vostra home (es. ~/Development)

    Una volta fatto il backup di tutte queste informazioni, possiamo avviare l’installazione di Lion. Ora, una volta ottenuta un’installazione pulita di Lion, non ci resta che re-importare tutte le nostre impostazioni e i nostri dati.

    Inoltre, avendo effettuato alcune customizzazioni, le dobbiamo riapplicare. Nel mio caso:

    • Nascondere l’icona che vi porta allo Store accanto ad ogni traccia di iTunes: defaults write com.apple.iTunes invertStoreLinks -bool YES
    • Mostrare il menu di debug in Safari: defaults write com.apple.safari IncludeDebugMenu -bool YES
    • Fare in modo che iTunes mostri una notifica sulla Dock della canzone che stiamo ascoltando: defaults write com.apple.dock itunes-notifications -bool TRUE
    • Disabilitare il restore dei documenti allo startup di Preview e QuickTime: defaults write com.apple.Preview NSQuitAlwaysKeepsWindows -bool false
      defaults write com.apple.QuickTimePlayerX NSQuitAlwaysKeepsWindows -bool false

    E abbiamo finito. Consiglio un riavvio e buon utilizzo di Lion!