posts - 644, comments - 2003, trackbacks - 137

My Links

News

Raffaele Rialdi website

Su questo sito si trovano i miei articoli, esempi, snippet, tools, etc.

Archives

Post Categories

Image Galleries

Blogs

Links

Esempio pratico di sviluppo insicuro: SubText

Non parlo di hack nel senso più comune del termine, ma il problema riguarda certamente l'Application Security.

Il fatto: In questi giorni ho "ricevuto" circa 60000 trackback su alcuni miei post del blog.

Il risultato: I post diventano non caricabili da browser perché la pagina è troppo lunga e il download durerebbe probabilmente ore. Apparentemente durante questi lunghi caricamenti la web application va in crash e IIS giustamente ricicla.

Tentativo di mitigazione da parte dell'utente: È inutile tentare di cancellare 10 post alla volta (questo è il massimo consentito nella pagina amministrativa di subtext) visti anche i tempi titanici di questa operazione. La sensazione è che vengano mandate 10 delete invece di una delete con una where sui 10 id, o meglio una semplice update della colonna delete per poi fare la vera cancellazione in un batch giornaliero.

Come avrebbe potuto aiutare l'applicazione di SDL in questo specifico caso? Tantissimo infatti per questo problema ogni singolo punto di SDL avrebbe aiutato a mitigare il problema. SDL si basa su quattro principi fondamentali:

  • Secure by Design. Un attacco sul trackback può portare a DoS (Denial Of Service). Le conseguenze dell'attacco sono tali da dover prevedere una mitigazione adeguata. Non è possibile ad esempio moderare i trackback.
  • Secure by Default. I trackback sono abilitati di default senza moderazione e senza filtro spam (che attualmente è bucato). Anche i commenti sono abilitati di default senza captcha ma è presente un filtro spam che sta facendo il suo lavoro.
  • Secure in Deployment. Non posso dirlo con certezza, ma sul mio blog che ha subito un upgrade da dottext ho visto impostazioni differenti sia rispetto ad una installazione nuova che ho fatto una mia macchina, sia rispetto alle vecchie impostazioni che avevo su dottext. Questo potrebbe essere un classico problema di problematiche legate al tipo di deployment. Non conoscendo i dettagli dell'installazione non posso riportare altro se non quello che vedo.
  • Communications. Prontezza e reazione alla vulnerabilità. Il problema lo aveva già avuto Lorenzo ma non è stato fatto nulla. In casi estremi una contromisura può essere semplicemente quella di fornire una query che disabiliti i trackback su tutti i blog, avvisando ovviamente gli utenti del potenziale pericolo.

SDL non fornisce solo dei punti in cui architetto, sviluppatore, tester, e resto del team sono coinvolti nel strutturare l'applicazione in modo sicuro. SDL indica anche una via pragmatica che usa come strumento principale il threat modeling.

Il threat modeling è un modo per far crescere l'applicazione evitando principalmente problemi di design. Senza dilungarmi su concetti di cui ho già parlato tante volte, il nuovo modello di threat modeling prevede una semplificazione sulla quantificazione delle minacce dal vecchio DREAD in Probabilità e Impatto. Il rischio è il prodotto di questi due fattori. Altro concetto importante del nuovo modello è la nuova categorizzazione delle minacce da STRIDE a Confidentiality, Integrity e Availability.

Per quanto concerne questo caso specifico, SubText è soggetto a problemi di Availability in quanto alcuni post non possono essere più caricati. Il rischio associato è passato da mediamente probabile ad altamente probabile da quando si sono verificati dei casi (vedi Lorenzo) ed ha un Impatto massimo (tre su una scala 1-3).

SDL quindi indica precisamente quali siano i problemi e fornisce anche una valutazione oggettiva di rischio da cui il team avrebbe dovuto prendere delle decisioni secondo la scala dei valori assegnati. SDL non prescrive di fixare tutti i problemi ma lascia la discrezione al team di sviluppo che può valutare proprio grazie alla graduatoria oggettiva del rischio a cui sta andando incontro.

Il threat modeling in realtà può fare molto di più di questo. Il nuovo modello permette l'analisi dal punto di vista del defender che ha una conoscenza profonda di tutta l'architettura e dei potenziali punti di attacco. Il defender è in grado di fare molto di più rispetto ai problemi che ho elencato che sono solo la punta dell'iceberg.

Print | posted on sabato 17 novembre 2007 15:10 |

Feedback

Gravatar

# re: Esempio pratico di sviluppo insicuro: SubText

Il Trackback è il classico caso di servizio pensato senza minimamente validare problematiche di sicurezza, DoS, etc...
E' un servizio utilissimo, io ad esempio Mighell l'ho conosciuto così... (siamo proprio due nerd se ci penso... :-D), ma forse, è il caso di ripensarlo profondamente.
Un po' come le CommentAPI, e fondamentalmente buona parte del Web 2.0.

Quando David Chappel parlava della differenza tra WS-* e REST uno dei punti fondamentali era proprio quello: WS-* è stato pensato da gente ben dentro lo sviluppo enterprise e con chiare e ripetute analisi sulle vulnerabilità, mentre REST è un approccio ideato e sponsorizzato da gente convinta che con una GET e una POST si possa cambiare il mondo.
So che non c'entra nulla col problema specifico, ma è l'approccio utilizzato da chi ha ideato i protocolli che è fondamentalmente bacato.

Certo, il tool (SubText in questo caso) può fare molto, ma probabilmente la soluzione applicabile (come ad esempio a protocolli come SMTP) è solo un palliativo.
17/11/2007 15:30 | Lorenzo Barbieri
Gravatar

# re: Esempio pratico di sviluppo insicuro: SubText

Condivido e il paragone calza alla perfezione perché i grossi problemi nascono proprio per motivi architetturali.

Strategie per mitigare il problema ce ne sono tante e come SDL prevede ne vanno applicate il più possibile per costruire una difesa solida:
- la moderazione per cui prima della pubblicazione è necessaria l'approvazione specifica. Naturalmente questo non toglie 60000 post da cancellare ma evita il DoS sui post.
- I 60000 post sono mitigabili impedendo di postare dallo stesso IP sotto certi intervalli di tempo e con un massimale ragionevole (per esempio 500 post al giorno dallo stesso IP).
- Infine altra soluzione è quella di fornire un'interfaccia adeguata che permetta di cancellare più di 10 post alla volta e impiegando meno di 13 secondi come sta avvenendo ora!
17/11/2007 16:45 | Raffaele Rialdi
Gravatar

# re: Esempio pratico di sviluppo insicuro: SubText

Grazie per i commenti autorevoli :)
Ciò nonostante, se lo scopo fosse stato quello di aiutare a migliorare il prodotto (in questo caso Subtext), forse sarebbe stato meglio mandare una mail alla ML di subtext o scrivere un post sul forum perchè non è detto che gli sviluppatori di un prodotto OS leggano tutti i blog del mondo :)
Inoltre "mi pare" che i trackback siano disabilitati per default su una nuova installazione, e nel caso siano abilitati, si può usare Akismet, che per qualche motivo non ha rilavato correttamente questo nuova modalità di trackback spammosi.

E in ogni, se hai altri suggerimenti, ben felice di ascoltarli
17/11/2007 17:42 | simone
Gravatar

# re: Esempio pratico di sviluppo insicuro: SubText

Simone, il problema lo conosci anche tu visto che l'hai bloggato e considerato che fai parte del team di SubText il mio sarebbe solo stato un "duplicate bug".

Lo scopo del mio post è solo quello di mostrare un esempio pratico per sottolineare l'importanza di pensare e implementare una architettura con la sicurezza in testa. Insomma di far capire che Application Security è qualcosa che non riguarda solo banche, nasa o applicazioni che trattano dati super-segreti, ma deve essere applicata a tutte le applicazioni.

Per quanto riguarda il mio problema specifico ho provato a usare Akismet, ma ne sono arrivati altri 10000 e quindi ho dovuto chiudere i trackback. Stessa esperienza che ha fatto anche Lorenzo.

Se posso aiutare in altro modo lo faccio volentieri ma non saprei come. Le debolezze più evidenti ho provato ad elencarle nel post, ma una analisi più esaustiva la può fare solo chi conosce bene architettura e codice. Il nuovo modello di threat modeling nasce proprio dall'esigenza di guardare al problema dal punto di vista del defender proprio perché ha più informazioni di chi attacca.
17/11/2007 18:04 | Raffaele Rialdi
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET