Your web application seen from the hell's kitchen
Quando ho risposto al call for paper per il RubyDay ho voluto che il mio intervento avesse un titolo interessante. “Almeno il titolo”, mi sono detto.
Il prossimo Novembre, a Torino, mentre ci saranno molti brillanti sviluppatori amanti di Ruby, terrò un workshop di un’ora e mezza, stabilendo per me un record in durata, sulle fondamenta della sicurezza applicativa, vista da un attaccante.
Agli sviluppatori voglio tanto bene, ma quando guardando il loro codice, e succede anche a me con dawnscanner ad esempio, lo guardano con gli occhi dell’innamorato. L’applicazione web è, per il suo creatore, una sorta di obelisco che si staglia lucente nel deserto baciato dalla luce del primo Sole.
Riflessi color oro e brezza delicata sulla sommità della punta dove, come un baluardo dei regni di tolkeniana ispirazione, si staglia il vessillo di un regno fatato. Vessillo simbolo di forza, potenza e robustezza.
Tutti guardano a quest’applicazione web come ad un simbolo e ne hanno riverenza. Nessuno osa criticare o anche solo buttare una cartaccia o una foglia confezione del pan di via nei pressi di tale magnifica torre.
La realtà non è così. Internet è un postaccio. Sembra più un sobborgo di qualche città metropolitana dipinta in un romanzo sci-fy. Senza scomodare il deep web, la Rete che conosciamo è piena zeppa di individui che vogliono usare il codice online per le peggio cose.
Perché lo fanno / Perché dovrebbero farlo ? è la prima domanda che smonto durante gli incontri di awareness che tengo periodicamente. E’ un po’ come quando un bimbo innocente ti chiede perché c’è la guerra o perché le persone rubano. Motivazioni ce ne sono talmente tante e con fattori talmente complessi che, forse, la risposta più completa è una non risposta: “perché succede da sempre, e sempre succederà”.
Dalle fondamenta
Non si parte dall’hosting, dal server fisico o virtuale che fa girare il nostro codice. Si parte da prima. Si parte dal disegno dell’architettura, dalla progettazione.
La sicurezza è qualcosa che la si ottiene un pezzetto alla volta, immaginando la disposizione delle nostre componenti in campo, documentando i flussi dati, stabilendo quali le API esposte, quali le funzionalità offerte e descrivendo cosa mi aspetto in input e in output, a livello macro.
La documentazione, tutti la odiano, in pochi la fanno come dio comanda, ma è proprio la cosa dalla quale partire.
Agli strumenti
Una volta disegnato tutto su carta, ci possiamo divertire. Dobbiamo realizzare la nostra infrastruttura, scegliere i sistemi operativi, configurarli in modo sicuro, scegliere il web server, il framework applicativo, il dbms.
Poi possiamo iniziare gli sviluppi. Poi.
Se salti anche solo un punto, è come se tu stessi assemblando un’auto alla rinfusa, senza scegliere in modo armonico le varie componenti in relazione alla potenza del motore o alle prestazioni che vuoi ottenere. Il risultato sarà l’incapacità della tua applicazione a scalare e comunque la costruzione di un codice che non sarà resistente e che verrà giù al primo attacco. Che ci sarà, prima o poi.
Off by one
Questo sarà il mio talk in soldoni. Una camminata nella realizzazione di un’applicazione molto semplice come un portalino per todo list dove andremo a soffermarci volta per volta per capire cosa può fare un attaccante.
Speriamo bene. Vi aspetto al RubyDay.
Ah, bentornati dalle vacanze.
Enjoy it!
Vuoi aiutarmi a portare avanti il progetto Codice Insicuro con una donazione? Fantastico, allora non ti basta che premere il pulsante qui sotto.
Supporta il progetto