Il Conto di Wirth.

In questi giorni sto vivendo uno strano fenomeno. E’ una cosa che vivo sul lavoro, quindi non posso dire tutto, ma il succo e’ questo: ogni tanto dal managgggement mi arriva la richiesta di un’opinione di massima (espressa in Powerpoint – ma non piu’ di cinque slide, senno’ si confondono ) su idee venute a clienti. “Clienti” nel mio caso sono un mercato di 27 telco, piu’ una serie di provider di servizi online.

Le slide di questo mese si intitolano qualcosa come “Secure Network Architecture for XYZ/SSL”. Ho messo XYZ perche’ le stesse slide (che invece di parlare del protocollo parlano degli endpoint) sono uscite per : “SIP/SSL”, “RCS/SSL”, “HTTP/SSL” , “SMTP/SSL”, “MM7/SSL”, “MM3/SSL”, “IMAP4/SSL”, “LDAP/SSL”, “Diameter/SSL” e diversi altri. Sempre le stesse.

E’ assai difficile spiegare al manager cosa dire. Nel senso che quando il cliente ci fa la richiesta “vogliamo criptare tutto! Tutto! Tuttissimooo! Mi si cripti la moglie! La figlia! Il cane!” pensa che “criptazione” sia il segreto della sicurezza. Le mie slide, uguali per tutti i protocolli, dicono sempre la stessa cosa “la criptazione ti puo’ aiutare, ma senza una protezione degli endpoint non vai da nessuna parte“. Che e’ la frase meno discussa tra tutte quelle dette nelle interviste  di Snowden.
Il guaio e’ che “protezione degli endpoint” e’ un concetto difficile da spiegare. perche’ mai le mie slide parlano di “mettere al sicuro” qualcosa che si suppone capace di “mettere al sicuro”? Al manager della mia azienda, che deve poi spiegarlo al cliente finale, ho semplicemente detto qualcosa di questo tipo:

Quando TU ti chiedi come mettere al sicuro i tuoi soldi, probabilmente ti rispondi “li porto in banca” e hai risolto il problema. Ovviamente, dentro la banca qualcuno si chiede “come mettiamo al sicuro i soldi?”, e il problema e’ piu’ grande. Allo stesso modo, tu stesso mentre porti i soldi in banca sei vulnerabile. Ecco, criptare e’ come decidere di portare i soldi in banca: proteggere l’endpoint  e’ come essere la banca, e chiedersi anche se qualcuno non potrebbe rapinare il cliente mentre ci porta i soldi.

Perche’ queste mie slide sono cosi’ gettonate? Beh, per una ragione: dopo la storia di Snowden, telco e provider di servizi cloud (o di servizi it in genere) stanno perdendo miliardi. Manager che fanno un viaggetto in un hotel in montagna per riunirsi a discutere sulla neve dove prima usavano servizi di videoconferenza, manager che si incontrano per scambiarsi chiavette USB anziche’ spedirsele (e uno ci e’ rimasto DAVVERO male quando gli parlai di virus per chip USB! ) , insomma, un panico. E una perdita di soldi.
Ovviamente stanno cercando di rilanciare, cosi’ oggi sentite parlare di crittazione di qui, crittazione di la’ , di SSL e certificati come se piovessero. Che e’ una cazzata fatta per rifarsi una verginita’: a pochi importa che Microsoft costruisca un cloud criptato: con sistemi operativi noti per soffrire di piu’ di 80.000 virus diversi, sai che cavolo me ne frega se mi cripti il trasporto, quando gli endpoint sono dei colabrodi?
Il guaio e’ che gli endpoint sono stati scritti male. E quindi, la loro sicurezza sara’ sempre in dubbio.
Qui bisogna fare qualche passo indietro nel mondo dell’ IT. Anni fa, era molto in voga un certo Niklaus Wirth. Egli era un sostenitore del software ben scritto da programmatori ben preparati e quindi ben pagati, che scrivessero con cura, metodo, pensando moldo, e che quindi scrivessero buon codice.http://en.wikipedia.org/wiki/Niklaus_Wirth

Il problema dell’approccio di Wirth era che non piaceva alle case produttrici. Mentre Wirth pensava di rilasciare SOLO e COMUNQUE software che fosse migliore possibile, alle case produttrici  americane, come Apple e  Microsoft, piaceva di piu’ rilasciare software che fosse “appena abbastanza buono da stare sul mercato”.
In seguito al rilascio sul mercato, e DOPO aver incassato i soldi,  al massimo si sarebbe provveduto    a correggere i bachi. Il risultato fu la marea di porcherie che uscirono , a cominciare con il Windows 95 zoppo , cieco e mezzo sordo rilasciato per fermare l’ultima versione di Warp di IBM precedendola, e tutta una serie di altre porcherie programmate in fretta da Microsoft, Apple & compagnia bella. Non voglio ricordare le “bombe” di MacOs 7 per pura pieta’, prima che qualcuno si ringalluzzisca contro Windows 95.
A quei tempi, ovviamente pochi PC erano collegati ad internet e quindi il solo problema di sicurezza per gli utenti erano i virus, che viaggiavano di solito via BBS o sui dischietti copiati. Quindi, il problema della sicurezza era assolutamente sottostimato, al punto che in quel periodo su IRC vi davano tranquillamente liste di server SMTP aperti che potevate usare per inviare posta elettronica: ho detto tutto.
Cosi’, il software veniva scritto in maniera insicura, se non peggiore. Quando si porto’ questo concetto su internet e si inizio’ a scrivere del codice che girasse in rete, la sicurezza era TOTALMENTE ignorata: il sito web doveva essere su in tempo. Anni fa, mi fu chiesto di fare “hardening” di un’installazione corposa di apache. Tra le altre cose, installai un modulo, mod_security2, che arrivava con un 70.000 attacchi noti riconosciuti e mappati.
In tutta l’installazione enterprise, non c’era UN SOLO software che reggesse quella semplice misura. mod_security2 rilevava problemi in una chiamata su 3: header splitting, SQL injection nel body o negli header, porcherie insicure come se piovessero.
La batteria di apache che dovevo “indurire” copriva tutti i servizi online di una telco, in tutto una cinquantina. NESSUNO sopravviveva a un semplice mod_security2 con installazione DI BASE. Non parlo di sonde IDS o di cose sofisticate. Parlo di un semplice mod_security2.
Come reagivano i manager e i clienti? Cosi’:

  1. Non ci hanno mai attaccati. Abbiamo problemi di sicurezza?
  2. Prima si manda in produzione il prodotto, POI semmai si pensa alla sicurezza, se serve.
  3. Dobbiamo andare in produzione col sito, e lei mi rallenta il progetto.
  4. La sicurezza del software non era nel capitolato (fornitore).
  5. Cambiare questo software ci costerebbe troppo, e non ci hanno mai attaccati.
  6. Lei sta insinuando che la mia azienda scrive codice insicuro? E come mai nessuno ha mai bucato il sito?
Insomma, NESSUNO scriveva software sicuro, e la situazione si e’ stratificata sino ad ora.
Codice scritto per Windows 95 A, che poi e’ rimasto come scheletro in Windows 95 B, che poi e’ sopravvissuto su Windows 95 C, e poi su Windows 98 A, e quindi su Windows 98 B, e poi Windows 2000. E siccome gli piaceva lo hanno tenuto nel service pack di office che poi lo installavano su Windows XP SP1, e cosi’ via.E ad ogni nuova release, per la fretta di annunciare, annunciare, annunciare un prodotto e buttarlo sul mercato prima possibile, nuovi strati di scheletri si aggiungevano ai precedenti scheletri. Quando oggi installate mezza dozzina di DVD per avere un pacchetto office, vi state trascinando dietro tutte le porcherie scritte e rilasciate “abbastanza in fretta da stare sul mercato prima dei concorrenti”.

Non che su Apple le cose andassero tanto meglio, BTW: a peggiorare tutto contribuiva anche una proliferazione incontrollata di AppleScript , sotto forma di programmini simpatici e gratis, dati in pasto ad una popolazione che non aveva idea di cosa fosse uno script.
E nemmeno su linux le cose andavano tanto meglio, se pensiamo a LAMP: una situazione assurda in cui, senza nessun layer di separazione, avevate sullo stesso server il frontend, il backend ed il secure backend coi dati. E un interprete PHP che… lasciamo perdere.
Sopra tutta questa caterva di software scritto male, ci stava ovviamente NSA. E oggi che NSA diventa un problema, ALLORA si scopre che possiamo prendere due colabrodi, collegarli con una connessione SSL, e siamo al sicuro. Wow.
Questo e’ il conto che pagate per aver deriso Wirth.
Adesso stormi di cocainomani con la borsa di pelle e la cravatta si presenteranno davanti alle porte di ogni azienda , e diranno “criptazione, criptazione, noi vendiamo criptazione”, oppure “donne! e’ arrivato l’arrotino! l’ombrellaio! openssl!” . Ma sapete che cazzo ve ne fate di un trasporto criptato, quando i vostri endpoint sono NUDI?
Puo’ essere sicurezza? Ovviamente NO: anzi, una FALSA sensazione di sicurezza e’ ancora peggio di una ONESTA percezione di insicurezza. Preferisco allora quelli che si incontrano al pub e si scambiano una chiavetta USB.
Adesso, su 27 telco conosciute come clienti, 26 ci chiedono di criptare tutto, dalla voce agli sms. Aha. Quindi, secondo voi, avete cellulari su cui installate decine e decine di applicazioni di dubbia origine, quasi nessuno ha un antivirus sul cellulare (che lo rallentaaaaa) e secondo voi criptando la voce nessuno vi sente?
AH, AH, AH!  (Rido di voi e mi bullo della vostra dabbenaggine).
Allora adesso arriva Google e dice che da adesso criptera’ tutto. Arriva Kim Dot Com che dice che adesso cripta tutto. Arriva Microsoft e mi dice che nel suo datacenter cripteranno tutto. UAZ, UAZ, UAZ.Peccato che tutto questo si basi su un middleware uscito prima che uscisse il concorrente, “con qualche compromesso sulla qualita’”, peccato che tutto questo si basi su librerie uscite  con la stessa fretta  ,quando non, come nel mondo OSS, ancora in “beta” (ma una beta “sicura” eh, che la usa il mondo! Mica una beta del cazzo) , software fornito “AS IS” , e porcheriole varie.

Oggi siete (siamo) seduti su una montagna di software insicuro e mal sviluppato, e pretendiamo di diventare sicuri perche’ da adesso si cripta.Palle.

La sicurezza degli endpoint, cioe’ dei computer e dei cellulari, e’ semplicemente ridicola per via della fretta di uscire con la nuova release, col nuovo modello, col nuovo annuncio. Gli smartphone sono dei colabrodi.
La rete LTE sta venendo implementata in fretta e furia, e se un tempo lo stack SS7 offriva una certa garanzia, le aziende di cellulari hanno sfornato cellulari a milioni, costringendo le telco ad implementare in fretta e furia. Risultato? Attaccare i GRX , e la rete e’ imbarazzante.Mi hanno chiesto una breve review delle reti mobili da cui posso accedere da qui, solo per farsi un’idea di come sia la situazione.

Ed e’ un disastro.

Un nostro cliente danese ha il GPRS in chiaro. Idem per il nostro cliente italiano. In quasi tutta europa, se mi collego con un APN per gli MMS, riesco a raggiungere la porta dell’ MMSC IN CHIARO.
Quasi tutte le telco usano dei domini ad hoc per gli apparati GPRS. Spesso si usa mnc<qualcosa>.pcc<qualcosa>.gprs . Siccome li risolvono solo i LORO DNS interni, allora va bene.
Sono privati, vero?Bellissimo. Peccato che…. se ci colleghiamo con un normale dongle e andiamo in GPRS:

#host -t ANY gprs.
gprs has SOA record BLABLABLA (censuro per pieta’ e per i loro avvocati)
gprs has address BLABLABLA
gprs name server BLABLABLA
e qui siamo ancora al GPRS. Non che 3G sia stato implementato meglio: la furiosa gara a buttare miliardi di telefoni sul mercato
non voglio parlare di TEID in sequenza numerica crescente, per cui se mi collego dopo di te conosco bene o male il tuo TEID,  e quindi posso fare spoofing del context , e posso mandare pacchetti GTP a nome tuo ad un mio GGSN (tipo openGGSN)  per ridirigermi il traffico. Se qualcuno di voi sapesse quanto facile sia mandare un messaggio GTP2 con dati di charging dentro, che produrranno un CDR (valido come prova in tribunale) a vostro carico, forse non usereste piu’ un cellulare. Si, avete capito bene: CHIUNQUE puo’. visto che non esiste autenticazione nei flussi GTP, e non esistono filtri, generare un pacchetto GTP2 con informazioni di charging, e funzionera’: il proxy stesso generera’ un CDR dove c’e’ scritto che ieri sera voi eravate a caltanissetta e stavate chiamando un mafioso.

Tutto questo deriva sempre da questo: ad un certo punto ha vinto l’idea di “TTM”, Time To Market.

Il TTM ha superato in priorita’ OGNI aspetto della buona programmazione. Se inizialmente il problema era la stabilita’ dei sistemi, che andavano sovente in crash, oggi il secondo aspetto presenta il conto: ogni sistema e’ insicuro, con la sola eccezione di quelli militari e di alcuni tra quelli delle banche, ma solo perche’ sono FISICAMENTE separati dal resto.

Ora, immagino che Wirth se la stia ridendo tra i baffi.
Dopo aver predicato per anni che programmare pensando al time to market e sviluppare linguaggi di programmazione avendo in mente SOLO il TTM era sbagliato, adesso il mondo si trova improvvisamente a lavorare, ed occorreranno una decina di anni per rimediare al disastro, per rendere sicuro tutto lo stack.
Pensiamo ad Apple, che ha rilasciato cellulari LTE quando nessuno stack del mondo era ancora pronto e ha forzato le telco a mettere su in fretta le proprie reti. Bella operazione: la POTENZA di Apple vince. Era NECESSARIO il Time to Market. Ahahaha. Bello: adesso ditemi una cosa. Secondo voi, una rete LTE implementata in fretta e furia per accontentare milioni di farlocchi pronti a dormire in tenda per un cellulare, ancora prima che si finisse di implementare e TESTARE lo standard stesso, PUO’ ESSERE SICURA?
Ma adesso avete tutti paura della sicurezza. E dite adesso, criptiamo, criptiamo, criptiamo? E a che cazzo serve, di grazia, quando non avete alcuna protezione sugli endpoint?
Quando avete sistemi operativi sviluppati cosi’ male da soffrire di decine di migliaia di virus(1)  , dopo che i programmatori degli ultimi 15 anni hanno passato piu’ tempo ad imparare nuovi linguaggi/paradigmi di programmazione (sviluppati per adorare il dio TTM)  piuttosto che studiare meglio quelli esistenti, oggi il mondo scopre che ha un catastrofico problema di sicurezza.Credo che C++  e AdA95 siano stati gli ultimi linguaggi ad essere costruiti con qualche idea di qualita’ del codice e sicurezza del codice. In tutti i linguaggi venuti dopo, con poche eccezioni quali Erlang, tutto e’ stato pensato sempre per avere un migliore Time To Market. Risultato? Software che magari sono scritti bene, ma poggiano su uno stack di altro software scritto a cazzo, solo per uscire prima dei concorrenti. Un disastro.

E tutti , tutti, pensano di risolverlo con la crittazione.
Tra uno-due anni Google, Microsoft, Yahoo, Apple, Samsung, diranno “ehi, adesso e’ tutto criptato! siete al sicuro!” e tutti ricomincieranno a fidarsi dei cloud, dei computer, e tanta gente che produce silicio per accelerare la crittazione cenera’ ad aragoste.
Poi, tra tre anni, arrivera’ la brutta sorpresa: il prossimo Snowden vi rivelera’ che non e’ servito ad un cazzo di niente perche’ l’endpoint security e’ mancata completamente. E allora forse vi ricorderete di un tizio svizzero, un certo Wirth, che vi aveva avvisato: per avere programmi migliori non servono linguaggi di programmazione migliori , non servono nuovi paradigmi per la programmazione.
Serve scrivere programmi migliori.

Esattamente quello che e’ mancato, e che ci ha portati a questo punto.

Uriel
(1) Non mi tirate fuori il numero di dispositivi come scusa. Android ha superato in numero di dispositivi windows, ma il conto dei virus noti e’ molto diverso.