Vulnerabilità delle condizioni della gara nelle applicazioni Web

Vulnerabilità delle condizioni della gara nelle applicazioni Web
Quando è necessaria un'applicazione Web configurata per gestire le funzioni in una sequenza fissa per eseguire due o più operazioni contemporaneamente, si verifica un attacco di condizione di gara. Questa tecnica sfrutta un ritardo tra quando viene introdotto un servizio e quando si verifica un controllo di sicurezza. Questo attacco può essere effettuato in entrambi i due modi, sulla base di applicazioni multithread: intrusione sostenuta da processi non attendibili e intrusioni sostenute da un processo affidabile che potrebbe avere lo stesso ed uguale diritti.

Processi diversi possono interagire tra loro senza misure adeguate. Questi attacchi sono anche noti come Attacco di controllo, Attacco di tempo d'uso o attacchi TOC/TOU. Le vulnerabilità delle condizioni della gara sono lì in primo luogo a causa di errori di programmazione di base che gli sviluppatori di solito creano e questi fallimenti si sono dimostrati costosi. Le entità dannose hanno sfruttato le condizioni di razza per molti scopi dannosi, io.e., dall'ottenere voucher gratuiti a derubare denaro da conti online e società di investimento.

Supponiamo che due thread di esecuzione parallela tengano di aumentare il valore di una variabile globale di 5. Alla fine, quindi, la variabile globale avrebbe un valore di 10. Tuttavia, se tutti i thread eseguono contemporaneamente, l'esecuzione può essere sbagliata senza blocchi di risorse o sincronizzazione. Quando il primo thread sta facendo alcune manipolazioni a quella variabile globale, il secondo thread la legge e inizia a fare altre manipolazioni. In questo caso, il valore finale non sarebbe come previsto.

Ciò si verifica poiché l'effetto di una risoluzione del thread dipende dall'esito dell'altro. Quando i due thread vengono eseguiti contemporaneamente, ci saranno conseguenze indesiderate.

Scope degli attacchi delle condizioni di gara:

Immagina che qualcosa di un po 'più critico sia eseguito dai due thread dell'esempio sopra, come scambiare denaro tra i conti bancari. Per inviare correttamente il denaro, il programma dovrà eseguire queste attività in questa sequenza; Controlla se c'è abbastanza saldo nel conto del mittente, aggiungi denaro al conto del destinatario e quindi deduci dal conto del mittente. Ma se si inviano contemporaneamente due richieste, potresti essere in grado di attivare una condizione in cui la sequenza di esecuzione del thread cambia. In una situazione come questa, finirai con un importo diverso dal previsto.

La vulnerabilità delle condizioni della gara è stata trovata da Egor Homakov sul sito web di Starbucks. Ha scoperto un modo per creare una quantità infinita di credito sui buoni regalo Starbucks gratuitamente utilizzando browser diversi con biscotti diversi.

L'importante attacco di crollo è un esempio di vulnerabilità delle condizioni di gara. Nell'attacco di crollo, la debolezza è attivata dall'elaborazione parallela del recupero dei dati dalla memoria e dall'autenticazione del fatto che un utente sia permesso o meno di accedere alla memoria. Questo difetto consente a uno strumento di evitare controlli di privilegio standard che separano il meccanismo di attacco dall'accesso ai dati del sistema operativo. Questa scappatoia si traduce nel consentire qualsiasi processo non autorizzato per visualizzare i dati e le informazioni da qualsiasi altro indirizzo connesso allo stato di progresso attuale nella memoria. Nel processo di esecuzione difettosa, le informazioni da un indirizzo non approvato saranno spesso rapidamente impilate nella cache della CPU, da cui le informazioni possono essere recuperate.

Scenari di attacco della vita reale:

Inviando numerose richieste al server Web continuamente, è possibile cercare e manipolare le condizioni di gara nelle applicazioni Web. Se vuoi vedere se puoi prelevare o meno più denaro di quello che hai nel tuo conto bancario, utilizzando la funzione Curl, è possibile inviare contemporaneamente diverse richieste di prelievo al server.

Curl (prelevare 50000) e (prelevare 50000) e (prelevare 50000) e (prelevare 50000) e (prelevare 50000) e (prelevare 50000)

Più richieste si presentano in un breve periodo di tempo, maggiori sono le possibilità che il tuo attacco funzioni.

Inoltre, se si invia richieste di follow-up asincrone, seguirai un utente più volte invece di inviare una risposta all'errore. IO.e., Se aggiungi un'intestazione falsa contenente %s durante la caduta di richieste utilizzando Turbo Intruder e incolla il seguente codice Python:

Def FollowReqs (Target, Word list):
motore = requestEngine (endpoint = target.Endpoint,
ConcurrentConnections = 40,
RichiediPerConnection = 100,
Pipeline = false
)
per i in gamma (40):
motore.coda (target.req, str (i), gate = 'controlla')
motore.OpenGate ('Check')
motore.Completo (timeout = 60)
Def Responsendle (req, interessante):
tavolo.Aggiungi (req)

Vedrai un pulsante di attacco. Dopo averlo premuto, l'intruso turbo presenta 40 query e scansiona i codici di stato. Se vedi più risposte con lo stato generato 201, questo indica più volte che hai seguito la persona.

Esiste una vulnerabilità delle condizioni di gara in cui è possibile accedere a più console offerte agli account gratuiti. La maggior parte dei siti Web che forniscono console gratuite hanno account gratuiti, pacchetti standard e premium. Gli account gratuiti forniscono solo 2 o 3 console per utente. Per interrompere questo limite e utilizzare console illimitate, intromettersi la richiesta GET utilizzando i payload NULL più volte, come 100 o 200. E poi eliminare una delle console manualmente dall'interfaccia utente mentre i thread sono in esecuzione.

Conclusione:

Come mezzo per minare i controlli di accesso, sono incluse le condizioni di gara. Qualsiasi programma dipendente dai meccanismi di controllo dell'accesso può essere vulnerabile. Il più delle volte, sui siti Web degli istituti finanziari, gli hacker sfruttano le condizioni di gara. Dal momento che potrebbe portare a prestazioni finanziarie illimitate per l'hacker se una condizione di gara potesse essere scoperta su una caratteristica vitale come prelievo di contanti, trasferimento di denaro o pagamento con carta di credito. Le piattaforme di e-commerce, i videogiochi e i servizi di voto online sono altre tecnologie ad alto rischio. L'implementazione della concorrenza sicura è il segreto per evitare le condizioni di corsa. E puoi anche usare i blocchi delle risorse. Ci sarà anche una funzionalità di blocco integrata per i linguaggi di programmazione con abilità di concorrenza che aiutano a prevenire tali condizioni. Inoltre, seguendo gli standard di codifica sicuri, i.e., Il concetto e il codice di auditing meno privilegiati diminuiranno le possibilità di violazione del programma.