martedì 4 settembre 2012

Fissaggio DoS hash buona e giusta (e la rottura ASafaWeb)


Ricorda DoS hash ? Questo è stato molto intelligente che attacco ma altrettanto brutto piccolo che significa che se si formatta i parametri in un juuuuust richiesta palo destro si potrebbe abbattere un sito Web ASP.NET con una semplice richiesta singola. Bugger.
Questo fatto per una piuttosto sgradevole periodo di Natale e Capodanno per un certo numero di persone a Microsoft così come gli amministratori di sistema di tutto il mondo.Microsoft ha rilasciato un rapido il bollettino MS11-100 critica patch o in altre parole, la stop-cosa-tu sei-fare-e-install-it-RIGHT-NOW patch.
Ma non era davvero una patch di per sé, in quanto non è stato risolto la vulnerabilità sottostante, che era legato a collisioni hash. Invece, si è fermato a un utente malintenzionato di pubblicare più di 1.000 parametri del modulo a un sito web in modo pensare di più come una difesa preventiva, piuttosto che una correzione.
Ho anche avuto un po 'di punta in questo periodo perché volevo arrivare ASafaWeb scansione per la presenza della patch. Spesso gli sviluppatori non hanno visibilità diretta sul livello di patch delle infrastrutture sono in esecuzione su così ho voluto un mezzo di auto-valutazione. E 'stato troppo facile - tutto quello che dovevo fare era inviare 1.001 parametri di modulo e se il sito ha restituito un errore, la patch è stata installata. Se non avesse allora significava la richiesta è stata in fase di elaborazione e la patch non era presente. C'erano un paio di colpi di scena (come l'oggetto di richiesta la necessità di accedere in un app MVC per farlo funzionare), ma per la maggior parte, tutto è andato liscio.
Ora Microsoft ha fatto e rotto il mio scan - e non potrei essere più felice. Oggi ho eseguito tutti i miei test di integrazione ASafaWeb che controlla i risultati della scansione contro un certo numero di siti e di colpo la mia prova contro il sito ASafaWeb deliberatamente insicuro prova a notasafaweb.apphb.com stava fallendo. Mi riferisco alla prova di unità formale stava fallendo, perché prevede l'hash DoS scansione di passare (l'infrastruttura AppHarbor che gira su è stato patchato molto rapidamente), ma per qualche motivo l'hash DoS scansione è stata ora fallendo.
L'altra componente del test di integrazione che stava fallendo era che si attendeva la versione di ASP.NET del sito web per essere 4.0.30319.272 ancora stava tornando come 4.0.30319.17929. Questo è il numero di versione si torna in fondo una traccia dello stack e comprende l'ultimo segmento di cifre (la versione restituito nella X-aspnet-Version intestazione non). Coincidenza? Io credo di no, ed ecco perché:
Hashtable e Dictionary nel 4,5 utilizzare randomizzato algoritmo hash se si utilizza StringComparer.
Questa è una notizia molto buona perché quello che Levi sta dicendo è che l'implementazione sottostante hash è stato risolto quindi non c'è più bisogno di smettere di eccessivi posti i parametri del modulo nella loro tracce. Buon per l'ecosistema ASP.NET, non così buono per le prove ASafaWeb!
Che cosa questo significa è che ora rilevare il rischio di hash DoS è più difficile, molto più difficile. Ma non è impossibile e mi piacerebbe condividere il processo che ho appena implementato in ASafaWeb. Il motivo principale che voglio condividere questo è che mi piacerebbe che la gente fare dei buchi in essa e dimmi dove può essere migliorato.
Il fatto è che ora ci sono molte condizioni che devono essere valutati e anche in questo caso, ci sono molte circostanze che porteranno a risultati inconcludenti. Eppure, ecco cosa sta succedendo:
Albero decisionale per la rilevazione di hash protezione DoS
Qui ci sono alcune ipotesi fondamentali che non possono essere immediatamente chiaro:
  1. ASP.NET 4.5 è sicuro. Una volta che vediamo la versione 4.0.30319.17929 presentare sappiamo che la protezione hash DoS è integrato direttamente nel nucleo. Il problema è che si può solo rilevare questo se una traccia dello stack può essere causato o da un gestore Trace.axd accesso.
  2. ASP.NET 4 su IIS 8 è sicuro. Questo è semplicemente a causa del punto precedente;. NET 4,5 fornito con IIS 8. , Mentre altri 4 contro 4.5 non può essere rilevato dalla intestazione di risposta da solo, 4.x può essere come può la versione di IIS (a meno che non sono stati deliberatamente offuscato).
L'obiettivo è quello di cercare di minimizzare i risultati che rientrano nella categoria "inconcludenti", nessun rischio è grande, il rischio è grande anche confermato (almeno dal punto di vista di precisione), ma ci sono ancora molte situazioni che provocano un risultato inconcludente . Per esempio:
  1. Non conoscendo la versione di. NET il sito è in esecuzione e non essere in grado di causare un errore inviando vars forma troppi.
  2. Non ricevendo una risposta valida quando si postano le vars modulo ("metodo non consentito" risposta, timeout, risposta vuota, ecc)
  3. Il sito non è moduli web e la pubblicazione dei vars non causa un errore (potrebbe essere MVC e l'oggetto della richiesta è in uso)
Probabilmente ci sono altri che dovrebbero prendere in considerazione o potrebbe applicarsi per migliorare il sistema e mi piacerebbe sentire questo feedback. Se si conosce il modo per aggirare ASP.NET e può vedere i fori o miglioramenti in questo, per favore fatemi sapere. Per ora, l'approccio di cui sopra è stato implementato quindi sentitevi liberi di andare e provare a asafaweb.com .

Nessun commento:

Posta un commento