lunedì 23 gennaio 2012

CAPTCHA rottura con gli esseri umani automatizzati

Siamo tutti familiarità con diritto CAPTCHA? Quella fortezza impenetrabile di personaggi folli ondulata che solo un essere umano reale può decifrare. Mentre tendono a guidare noi un po 'noci, che fanno in realtà forniscono una preziosa funzione in quanto impediscono l'automazione delle richieste nei confronti dei servizi on-line. Per esempio, non è possibile da soli ottenere un account Google senza prima avvolgendo la testa attorno a ciò che sulla terra, questo si dice:
CAPTCHA prima di creare un account Google
Perché Google fa? Bene, una volta che ti sei creato un account Google ora avete GMail e G + e ogni sorta di altre piattaforme che potrebbero essere utilizzate per eseguire tali nefaste attività la generazione di spam, distribuzione di malware o la creazione di false identità. Una volta che è possibile automatizzare questo, queste attività possono essere eseguite in massa.
Si tratta di un accordo simile con Western Union :
CAPTCHA Western Union
E 'facile immaginare che essere in grado di creare automaticamente gli account presso un istituto finanziario potrebbe aprire la porta ad ogni sorta di imbrogli monetaria. E se siete già stati in grado di creare un account GMail, hai tutto il necessario per iniziare a dosaggio la creazione di identità alla Western Union.
Così CAPTCHA impedisce tutto questo, giusto? Solo gli esseri umani possono violare il codice e completare i processi di iscrizione, giusto? Ma cosa succederebbe se potessimo automatizzare gli esseri umani, voglio dire che se potessimo prendere CAPTCHA e risolverli a un ritmo tale che questi processi di registrazione potrebbe essere facilmente automatizzato?Ebbene si scopre che può e che vi costerà solo un paio di dollari.

CAPTCHA commodity risolvere con Antigate

L'ispirazione per questo post risale a un pezzo che ho letto recentemente dal famoso scrittore di sicurezza Brian Krebs sul Sweatshops virtuale Sconfiggere Bot-o-Non Test .Nell'articolo, Brian parla di come risolvere i CAPTCHA viene esternalizzata dagli spammer per servizi in mercati a basso costo che utilizzano le persone reali a sfornare attraverso un gran numero di il testo offuscato per una frazione di centesimo di volta in volta, si parla fino a $ 1 per 1.000 CAPTCHA. Proprio così, un decimo di un centesimo per risolvere un CAPTCHA. Il servizio è di consumo tramite un API che significa concettualmente script automatici degli spammer 'può semplicemente passare il CAPTCHA off e ottenere una risposta rapida che contiene il testo vero e proprio, che possono poi essere utilizzati nei loro sforzi di spamming.
L'articolo parla KolotiBablo.com che si rivolge a coloro che desiderano unirsi al team di elite cracker CAPTCHA. Sono una squadra impressionante guardare troppo:
Cracker KolotiBablo.com CAPTCHA
Personalmente, se fossi uno spammer, sarei confortato dal sapere che i miei cracker CAPTCHA sono stati ornati in giacca e cravatta e alla supervisione di un supervisore attraente in un abito pantaloni. Ma sto divagando.
Ho pensato che sarebbe interessante prendere in realtà di questo servizio e vedere quanto efficiente in outsourcing fessurazione CAPTCHA può essere. Mentre KolotiBablo.com potrebbe essere la coalface per sarebbero cracker CAPTCHA, se vogliamo utilizzare il servizio fessurazione abbiamo bisogno di firmare con Antigate oltre a antigate.com (entrambi scappare stessa sottorete):
Schermata di benvenuto di Antigate
Antigate offre una struttura di prezzo molto attraente con posible pagamento in un numero di differenti formati più diffusi. Tuttavia, è importante notare che il servizio non può essere utilizzato per operazioni di spam perché lo generano "butthurt". Non ero del tutto sicuro di cosa questo significasse, ma dopo che usare Google ho deciso che probabilmente era meglio non partecipare alla butthurting e sarebbe più sicuro solo di costruire la mia app piccolo test, invece.
La registrazione è molto simile la registrazione per ogni vecchio servizio:
Registrazione per Antigate
In effetti è così tanto come molti servizi di registrazione comune che non c'è SSL. E non come password complesse. E mi manda indietro la mia bella stringa generata 1Password folle di personaggi:
Antigate non consentire una password sicura
Password attenuato un po ', tutto sembra essere ok, penso:
Russo messaggio repsonse dopo la registrazione con Antigate
Una volta effettuato l'accesso, tutto sembra piuttosto semplice con una bella opzioni di avvio rapido. Quello che volevo veramente fare era scrivere il mio codice, che è fortunatamente una delle opzioni:
Opzioni per il servizio Antigate consumo di
Wow, hanno anche avuto un mercato! Magari un'altra volta, per ora voglio solo cominciare a risolvere CAPTCHA. Guardando l'API, il processo va in fondo così:
  1. Invia la chiave di CAPTCHA e API tramite una richiesta HTTP POST
  2. Una risposta viene restituito con un ID
  3. Attendere 10 secondi, quindi inviare il ID di nuovo in un'altra richiesta
  4. Una risposta sia con il testo risolto o lo stato "non pronto" viene rinviato
  5. Se non è pronto, attendere 5 secondi per poi chiedere lo stato di nuovo (risciacquo, schiuma, ripetere)
Sembra un caso d'uso molto buono per polling lungo . Non importa, l'API è semplice, la cosa interessante sarà il tasso di successo conseguito.
Prima di passare al punto cruciale di questo post - in realtà "rottura" CAPTCHA - c'è un altro utile servizio fornito da Antigate e questa è la possibilità di ottenere un rapido controllo sanitario sullo stato degli operatori. In realtà, è possibile caricare da soli , senza l'autenticazione e si dovrebbe vedere qualcosa di simile a questa:
Stato attuale degli operatori Antigate
Ha senso molto di più quando si vede l'XML sottostante la fonte:
< RISPOSTA >
  < attesa > 50 </ attesa >
  < Carico > 86,53 </ carico >
  < minbid > 0,001 </ minbid >
  < averageRecognitionTime > 16,175225206526 </ averageRecognitionTime >
</ RISPOSTA >
Questo rende molto conveniente per capire quando per caricare il servizio con le richieste per risolvere CAPTCHA. Ne riparleremo più avanti.

Costruire un sito CAPTCHA permesso di rompere

Naturalmente niente di tutto questo sta andando essere molto interessante se non abbiamo un sito CAPTCHA abilitati ad iniziare rottura. Per evitare il butthurting, ho creato un sito web ASP.NET MCV 3 e afferrò il Web Helper Biblioteca da Microsoft. Gli helper web rendono molto semplice far cadere un CAPTCHA in qualsiasi pagina e quindi convalidare l'invio.
In realtà, è un reCAPTCHA implementazione e la distinzione è importante, acquisito da Google qualche anno fa, reCAPTCHA è progettato per contribuire alla digitalizzazione dei libri di testo in modo da questo esercizio è di andare a rendere il mondo un posto un po 'meglio con si spera che ulteriori informazioni disponibili a più persone. In più c'è il fatto che Google serve circa 200 milioni di essi ogni giorno quindi è un bene di alto profilo dell'attuazione e riflessivo di quanto servizio Antigate è probabilmente usati per risolvere già.
Passando, ho costruito una forma tipica di registro come segue:
Obiettivo del sito modulo di registrazione
Ciò che è veramente importante qui è come il CAPTCHA rende in HTML, abbiamo bisogno di capire questo al fine di scaricare in realtà l'immagine di Google, inviarlo a Antigate poi presentare i valori di forma corretta con la registrazione. Tenete a mente che tutto ciò che stiamo per vedere è facilmente disponibile nel codice HTML di un sito attuazione CAPTCHA.
Prendendo il modulo di registrazione dall'alto, il CAPTCHA è incorporata tramite il seguente markup:
< script di tipo = "text / javascript">
   va r R ecaptchaOptions = {"t eme ": "R ed ", "l ang ": "e n ", "t abindex ": 0};
 </ script di >
<script src="http://www.google.com/recaptcha/api/challenge?
  k=6Le2hMwSAAAAAPhhj00SFHjaniz3zLnV0nDLThq9"
  type="text/javascript"></script>
< noscript >
  <iframe frameborder="0" height="300px" 
    src="http://www.google.com/recaptcha/api/noscript?
    k=6Le2hMwSAAAAAPhhj00SFHjaniz3zLnV0nDLThq9" width="500px"></iframe>
  < br />
  < br />
  < textarea cols = "40" name = "recaptcha_challenge_field" file = "3"> </ textarea >
  < Ingresso nome = "recaptcha_response_field" tipo = "hidden" 
    value = "manual_challenge" />
</ noscript >
Il modo più semplice per guardare a questo è quello di concentrarsi sul contenuto nel tag <noscript> che è quello che sta per essere analizzato se il browser non supporta JavaScript (o ha spento). Questo ci salva da trattare con tutta la logica del file di script esterni che altrimenti usati per inserire l'immagine CAPTCHA nella maggior parte dei browser.
Il bit importante è la fonte iframe che è dove l'immagine verrà incorporato. In questo caso, è possibile vedere il percorso è http://www.google.com/recaptcha/api/noscript?k=6Le2hMwSAAAAAPhhj00SFHjaniz3zLnV0nDLThq9
Questa pagina ti rendono una implementazione di base CAPTCHA - ricordate che questo è quello previsto per la gente senza JavaScript:
CAPTCHA contenuti della iframe contenuto in un form
L'immagine CAPTCHA è diverso da quello precedente in forma, come abbiamo caricato l'iframe due volte che l'ha causato per aggiornare, una volta quando abbiamo caricato la pagina di registrazione che poi di nuovo quando ho caricato l'iframe separatamente per catturare lo schermo di cui sopra. Quando ho automatizzare questo nella prossima sezione che viene caricato solo una volta.
Ispezionare il sorgente della pagina iframe, possiamo facilmente trovare l'immagine CAPTCHA incorporato nel codice:
<img width="300" height="57" alt="" src="image?
c=03AHJ_VusH0z9XlyEjm8c2Qm6sl9DhDD_fWq7R-tpRlwhF0KeLy2m8nZBM-
T7AOpGn6UCLd0M7fITJZ2RJ0pgHVt2PrchJwp3VoaKwcJMAK7_BhQdxIPidUT5-
nAUIF7GRDD3vrjs2CXLfw7byQMJa9gDNy9CSvhiSuw">
E naturalmente siamo in grado di estrarre l'URL reale dell'immagine stessa. Questo è il punto di esercizio come questo è il ragazzo che dobbiamo mandare a Antigate:
http://www.google.com/recaptcha/api/image?c=03AHJ_VusH0z9XlyEjm8c2Qm6sl9DhDD_fWq7R-tpRlwhF0KeLy2m8nZBM-T7AOpGn6UCLd0M7fITJZ2RJ0pgHVt2PrchJwp3VoaKwcJMAK7_BhQdxIPidUT5-nAUIF7GRDD3vrjs2CXLfw7byQMJa9gDNy9CSvhiSuw
L'ultima cosa che dobbiamo sapere è come costruire l'invio del form al sito di destinazione.Ovviamente questo include valori quali il nome e l'indirizzo con il CAPTCHA risolto, ma c'è un po 'più ad esso che quello. Diamo un'occhiata a ciò che viene presentato dal guardare la richiesta HTTP con Fiddler :
Campi modulo inviato al sito di destinazione
Quello che vediamo qui è un gruppo di campi in cui ho appena inserito "aaa" e poi due campi CAPTCHA correlati: una sfida e una risposta. La sfida è semplicemente il parametro di stringa di query da l'immagine CAPTCHA sopra e la risposta è ovviamente il CAPTCHA risolto. Ora sappiamo tutto quello che serve per costruire il cracker CAPTCHA.

Costruire il cracker CAPTCHA

Antigate cercare di essere utile qui e fornire un piccolo esempio di C # per iniziare. Ho finito per riscrivere lo stesso sia per brevità e per garantire ho capito esattamente che cosa stava succedendo. In più, naturalmente, ha bisogno in realtà di automatizzare l'invio del form nella nostra applicazione CAPTCHA abilitato che è naturalmente un requisito su misura.
Ho finito con una console app che fa questo:
Schema Sequnce di come CAPTCHA sarà aggirato
In breve:
  1. Richiedere la pagina di registrazione dal sito di destinazione
  2. Richiedi la fonte iframe usati per inserire l'immagine CAPTCHA
  3. Richiedi l'immagine CAPTCHA utilizzati nel sito e salvarlo in locale
  4. Invia il CAPTCHA al servizio Antigate
  5. Antigate assegna il CAPTCHA di un operatore umano che risolve allora e lo rimanda indietro a loro
  6. Attendere 10 secondi, poi controllare con Antigate per il testo CAPTCHA (ripetere ogni 5 secondi, fino a risolvere)
  7. Invia una registrazione al sito di destinazione con i campi compilati (che ho appena definito un set statico di dati di esempio) più la sfida CAPTCHA e testo risolto
Dopo tutto questo è completo, ho anche aggiunto qualche registrazione perché voglio monitorare le cose come velocità e tasso di successo più la durata di ogni fase del processo.Il successo del processo è determinato dalla risposta del modulo di presentazione, ovviamente se si ottiene il diritto CAPTCHA stai per ricevere un corpo di risposta molto diverso se si sbaglia.
Questo è tutto - è davvero così semplice. Ma questo non è un servizio gratuito così avremo bisogno di un po di credito prima di procedere.

Rabbocco del conto Antigate

L'ultima cosa che dobbiamo fare prima la rottura grave CAPTCHA inizia è quello di mettere dei soldi sul conto Antigate. Fanno le cose piuttosto facili, delegando i bit finanziari off diAvangate che vendono codici di ricarica per i diversi valori:
L'acquisto di ricariche per il servizio Antigate
Avangate è una bella fama e-rivenditore di prodotti software che di solito significa che si sta acquistando numeri di licenza. Nel corso sul loro sito, la (attualmente) dollaro australiano forte significa che stiamo cercando a 96 centesimi per rompere 1.000 CAPTCHA. Nizza:
Acquisto Avangate Pagina
Il pagamento avviene tramite PayPal e sono andato eseguire la stessa procedura di autorizzazione dopo che sono stato rimandato Avangate:
Ricevuta per l'acquisto di 1 dollaro vale la pena di Antigate fessurazione CAPTCHA
Poco dopo e il codice è comodamente tramite e-mail:
Chiave di attivazione per il servizio ° Antigate
E ... siamo attivo e funzionante:
Topup successo del servizio Antigate
A destra, ora davvero interessante po comincia.

Rottura CAPTCHA

Diciamo la rincorsa! Ho aggiunto un po 'di verbosità di uscita che è stata molto utile durante il processo di compilazione:
Esecuzione del cracker di CAPTCHA
Qui possiamo vedere il percorso di origine iframe seguita dal percorso immagine CAPTCHA e poi la stringa di query estratte da esso (si ricordi, questa è la sfida che dobbiamo presentare con la forma). L'immagine viene quindi salvata in locale, sottoposti a Antigate e una risposta con l'ID restituito, che in questo caso è 42244161. Si può vedere il processo poi dorme per 10 secondi, seguita da un totale di tre richieste, ogni cinque secondi di distanza, fino a quando una risposta viene restituito con il testo "mungo odatesp". Questo è il primo momento "Wow!"; Un essere umano da qualche parte ha effettivamente risolto questo e lo ha inviato di nuovo a me!
Ma naturalmente la vera prova del successo è ancora una volta il modulo viene inviato. La seconda riga di testo ultima mostra questo è tornato su "Ok" in modo che il modulo ha effettivamente restituito un corpo di risposta coerente con una registrazione. Infine, l'intero processo ha preso poco più di 27 secondi e il cracker CAPTCHA anche registrato con successo il processo:
Voce del registro dopo automatizzando la registrazione
In questo caso qui, perché ho anche controllare il sito web abbiamo presentato l'iscrizione alla posso fare un test di integrità e assicurarsi che la registrazione è stata effettivamente presentata:
Registrazione nuovo utente nel database
Sì, guarda a destra! Questo ha tutti i dati di esempio ho configurato il cracker CAPTCHA di inviare e CreateDate sul record cade subito dopo la CaptchaCompleteDate nel registro. Così là lo avete - successo elusione programmatica CAPTCHA utilizzando un essere umano automatizzato. Il problema è che, 27 secondi non è esattamente vesciche. Ma c'è un modo migliore per guadagnarsi da prestazioni ed è qualcosa che i programmatori hanno conosciuto per molto tempo: il multithreading.

Utilizzando il modello multithread esseri umani

Che cosa succede se cominciamo multithreading gli umani? Voglio dire piuttosto che correre su una singola istanza del cracker CAPTCHA, che ne dite, per esempio, 30 casi in contemporanea? Naturalmente il successo di questo modello dipende dalla disponibilità di 30 operatori che sono in grado di lavorare contemporaneamente su ciò che è in sostanza un processo sequenziale (un operatore non può risolvere uno CAPTCHA alla volta). Ma, come abbiamo visto in precedenza, non è raro avere 50 operatori a portata di mano.
Così ho realizzato un "multithreading dei poveri" e sparò il 30 istanze separate della console cracker di CAPTCHA:
30 istanze di cracker CAPTCHA in esecuzione contemporaneamente
Ho lasciato questa corsa per 20 minuti poi analizzato i risultati che, come ci si aspetterebbe, mostrano una velocità molto più alta:
CAPTCHA rotto al minuto (30 thread)
Un totale di 1.230 CAPTCHA sono stati mandati a Antigate e solo 77 non sono stati risolti correttamente quindi causando il processo di registrazione a fallire. Questo è un tasso di successo del 94%:
Tasso di successo di CAPTCHA risolti
Ma anche se multithread, il processo di soluzione dei CAPTCHA era ancora un enorme collo di bottiglia in automazione iscrizioni:
Grafico a barre in pila mostrano crepe CAPTCHA consumano una grande quantità di tempo
Infatti i numeri si ruppe a 420ms dall'inizio alla quale l'immagine CAPTCHA era pronto per l'invio fuori poi 26 secondi per ottenere effettivamente una risposta indietro con il CAPTCHA risolti seguito da 199ms di sottoporlo al modulo di registrazione con gli altri campi.Chiaramente CAPTCHA mette ancora una intaccare in maniera significativa la durata complessiva del processo, che è quasi il 98% del processo di totale sottomissione è masticare lassù.
Ma naturalmente è possibile eseguire le discussioni pressoché illimitata (a seconda delle persone a disposizione) e la linea di fondo è che sono stato in grado di rompere il processo di CAPTCHA e di automatizzare le registrazioni al ritmo di uno per ogni 0,98 secondi e con un tasso di successo del 94% . Questo ha veramente bene e ha dimostrato che l'intento di CAPTCHA può infatti essere sconfitto semplicemente automatizzando l'uomo.

Riassunto

Devo ammettere, mi sento un po 'dispiaciuto per la gente seduta lì all'infinito la soluzione di un flusso senza fine di CAPTCHA, francamente, un solo drive me un po' i dadi! Ma quello che doveva essere ancora peggio - e ho bisogno di prendere qualche colpa qui - è che durante il test ho continuato a sottoporre il CAPTCHA stesso più e più e più volte. Posso immaginare il povero operatore seduto lì a pensare "WTF è questo tizio già facendo?" Poi di nuovo, forse hanno fatto qualche soldo veloce perché riconoscendo al tempo stesso modello e diventa ancora più efficiente.
Quando ho ricevuto lo script in esecuzione, non potevo fare a meno di accenderlo più e più volte. Francamente, ho trovato un po 'mindboggling pensare che ogni volta che ho eseguito, che dolorosamente ottuso CAPTCHA poco volava di tutto il mondo e di essere risolto da qualcuno per cui 0,001 dollari è stato uno sforzo utile e il risultato efficiente consegnato torna da me nel giro di pochi di secondi. C'è qualcosa di bello l'efficienza con cui questo accade.
Naturalmente l'altra questione solleva tutto questo è la legalità di un servizio come Antigate.Da un lato, sono solo la conversione di bitmap a caso al testo, che in sé e per sé, è probabilmente un grosso problema. Ma può anche essere un grosso problema nello stesso modo che Napster e Megaupload ha permesso di condividere file, ma potrebbe scendere al implicita (o presunte) intenzioni del servizio. Alla fine della giornata, antigate.com si attesti ad un IP in Florida così assumedly se uscissero fallo abbastanza di legge, l'azione che abbiamo visto con Megaupload scorsa settimana non sarebbe troppo difficile, voglio dire, non è a loro piace ' re secreto via in più buio più profondo dell'Europa dell'Est o nulla.
L'altra cosa da notare è che Antigate non sono solo i ragazzi là fuori che forniscono questo servizio; Death By CAPTCHA offre un servizio molto simile così come bypass CAPTCHA eCAPTCHA beat , questo non è esattamente territorio innovativa. Poi la disponibilità di tutti questi servizi potrebbe rendere molto facile stare in piedi un "cluster umani" modello in cui si ripete il processo che ho passato sopra simultaneamente attraverso molteplici servizi di conseguenza aumentando notevolmente la velocità.
Ora, naturalmente, niente di tutto questo è in realtà rompendo l'attuazione CAPTCHA, la santità della parola deformata è stata mantenuta e anzi ha preso reale gli esseri umani vivono per la loro risoluzione in testo normale. Ma ciò che questo esercizio si dimostrano è che l'affermazione che CAPTCHA impedisce l'automazione è semplicemente sbagliato, tutto quello che serve è per una parte della automazione per essere spostato da computer per l'uomo. Considerate questo contro la definizione di Wikipedia e sarebbe giusto dire che questo esercizio ha minato la premessa stessa sicurezza su cui è costruito CAPTACH:
La base del sistema di CAPTCHA è quello di impedire l'accesso automatico a un sistema da programmi informatici o "bot"
E 'una posizione strana per avvolgere il post su, voglio dire che siamo talmente abituati a mettere le nostre emozioni, i PC ad alta efficienza al lavoro per salvare noi umani dal lavoro esercizi intensivi. Ma ciò che questo post ci mostra è che a volte abbiamo bisogno di invertire il processo e invece automatizzare l' uomo nella misura in cui possono effettuare ad alti livelli di efficienza. Ci vuole solo alcuni orchestrazione intelligente e abbastanza che gli esseri umani sono disposti a fare il lavoro a buon mercato sufficiente a rendere l'esercizio economicamente conveniente.

Nessun commento:

Posta un commento