it-swarm-eu.dev

Come e perché viene abusato del mio sito?

Possiedo un sito Web popolare che consente alle persone di inserire un numero di telefono e ottenere informazioni su quel numero di telefono, ad esempio il nome del gestore telefonico. È un servizio gratuito, ma ci costa denaro per ogni query, quindi mostriamo annunci sul sito per aiutarci a pagarlo. Per assicurarci che le persone non lo abusino, abbiamo un captcha e utilizziamo gli indirizzi IP per limitare il numero di query a 30 al mese.

Ma abbiamo visto comunque degli abusi; improvvisamente avremo scoppi di enormi quantità di query da tutti i diversi indirizzi IP che effettuano query (centinaia al minuto) e ottengono i captcha corretti. Quindi continuo a cambiare il captcha - ne ho provati uno con parole, equazioni matematiche, reCAPTCHA, ecc. Quando lo faccio, interrompe "l'attacco" per circa 24 ore e poi ricomincia.

Capisco che le persone possono usare l'OCR e altri metodi per aggirare i captcha, ma non capisco perché provengano da molti indirizzi IP diversi e non correlati.

Forse stanno falsificando gli indirizzi IP? In tal caso, non possono ottenere i risultati dalle query, giusto? In questo caso, forse l'obiettivo è cercare di farci del male finanziariamente, al contrario di loro semplicemente desiderare i dati?

Se non stanno falsificando gli indirizzi IP, forse hanno violato un numero enorme di computer diversi e stanno eseguendo query da loro? Questo non ha senso per me a causa del numero assoluto di indirizzi IP che stiamo vedendo (centinaia di transazioni al minuto con un massimo di 30 query per indirizzo IP, per lunghi periodi di tempo) e del fatto che questi dati davvero non è così prezioso.

Quindi sto cercando di capire la loro motivazione e il modo in cui stanno raggiungendo questo obiettivo, al fine di poter reagire in modo appropriato.

84
Marc

Problema interessante. Mi chiedo se una soluzione a questo problema potrebbe essere quella di forzare i browser Web dei tuoi utenti a risolvere un problema crittografico (utilizzando javascript in esecuzione nel loro browser Web) che è "difficile" da risolvere, ma "facile" da verificare per il tuo sito. Per "difficile" da risolvere, intendo un problema che richiederebbe circa 10 secondi per risolversi con le risorse di un normale desktop o laptop. Un problema simile al problema che i minatori di bitcoin risolvono quando vengono estratti nuovi blocchi, ma ovviamente su una scala molto più semplice.

I tuoi utenti legittimi non noterebbero la differenza, in quanto lo script cambia via mentre compilano il modulo sul tuo sito. Tuttavia, rallenterebbe considerevolmente gli autori di abusi e li costringerebbe ad allocare molte più risorse, costringendoli a rielaborare qualsiasi strumento che stanno utilizzando per automatizzare questi post sul tuo sito.

97
mti2935

Come?

Aziende botnet e captcha in affitto.

Perché?

Qualcuno vuole i tuoi dati. È più economico rubarlo che acquistarlo.

Cosa fare?

Rubarlo è più economico, ma non gratuito. Costa "loro" (chiunque alla fine desideri i dati, non la botnet o la captcha farm) per fare questi attacchi. Rendi più costoso il tuo attacco rispetto ai dati.

  1. Identifica i modelli per identificare gli spammer.

  2. Restituisci dati legittimi, ma falsi agli spammer.

Dopo un certo numero di risposte valide, inizia a intercalare i dati falsi con i dati validi. Quindi devono adottare ulteriori misure per convalidare i tuoi dati. Quei passaggi extra costano soldi extra.

Se non lo convalidano, i loro dati sono meno utili, vale a dire vale meno. Potrebbero essere ancora in grado di usarlo o venderlo, ma è meno prezioso, quindi il costo per attaccarti è superiore al valore restituito.

34

Stai sbagliando CAPTCHA.

L'idea di CAPTCHA è di rendere difficile (leggi "quasi impossibile) per un computer risolverlo, ma è facile per un essere umano farlo. Se usi solo un'immagine statica, chiedi di digitare 4 ad esempio, un computer non avrà problemi a inserire ripetutamente 4 quando viene richiesto di farlo.

Invece, considera l'utilizzo di reCAPTCHA o tecnologie simili. Questi problemi sono già stati risolti e non è necessario reinventare la ruota, come dimostrato di seguito:

[Reinventing the Wheel]

CC-BY-NC 2.5, Randall Munroe, xkcd.com/2140/

22
MechMK1

Se riesci a mettere un semplice "digita il numero in questa immagine" CAPTCHA e tieni quel bastone per 24 ore, sai che il tuo nemico è un dilettante. Sai che questo tipo di dispositivo primitivo che coinvolge codice su misura li rallenterà per 24 ore. Questo potrebbe essere divertente :)

Farei ampio uso dei fogli di stile per nascondere le informazioni nel codice della pagina: in due sensi, prima nascondi i CAPTCHA e in secondo luogo nascondi le risposte informative. Con l'obiettivo di fuorviare sadicamente i raschiatori.

Scriverei un po 'di codice sul lato server per creare risposte false che sono credibili a prima vista, ma false in modi non facilmente confermabili. Inoltre, usa seeding casuale o MD5 per assicurarti che lo stesso input dia sempre la stessa risposta fasulla.

Ingannevole sui CAPTCHA:

Ad esempio, lascia l'ultimo sistema CAPTCHA che stavi utilizzando, ma usa i fogli di stile per nasconderlo. Segui con un CAPTCHA diverso, offuscato da Javascript; forse anche un altro reCaptcha con una chiave diversa.

Ora, il raschietto non si renderà conto che il primo CAPTCHA è soppresso con fogli di stile. Risolverà allegramente il CAPTCHA e restituirà la risposta con la chiave sbagliata. Gotcha . Tuttavia, proprio come crackare Enigma, non puoi rendere evidente che hai eliminato il codice; lo scraper deve continuare a credere che funzioni.

Ingannevole sulle risposte:

Presenta una risposta come di consueto, con un foglio di stile attorno. Il foglio di stile nasconde questo risultato alle persone normali; il raschietto ignora che questo foglio ha la proprietà "nascosta". La risposta che presenti qui è il falso. Presentare il risultato vero in seguito. Per i punti bonus, presenta i risultati in un grafico che lo rende non tracciabile. Prova a nascondere questo ovviamente.

Se hai i dati di telemetria (CAPTCHA errato) che questa è una query scartata, allora non preoccuparti nemmeno di acquistare il risultato della query dal tuo fornitore di servizi. Inserisci una sospensione (t + casuale) per l'intervallo di tempo tipico impiegato dal tuo fornitore di servizi, quindi rispedisci una risposta falsa.

Sembra normale

L'aggressore crederà che le cose stiano funzionando normalmente e controllando solo la riuscita della query, non qualità dei risultati. Per fortuna, il tuo aggressore non si sarà registrato quando ogni query è stata fatta , e sta semplicemente scaricando le risposte in un database. L'utente malintenzionato potrebbe impiegare molto tempo a rendersi conto che hai avvelenato i dati, a quel punto, l'intero database sarebbe corrotto, non avendo idea di quali voci siano valide e quali siano veleno (vedi l'importanza di rendere legittimi i dati falsi ?) Anche se l'attaccante ha timestampato ogni voce, che caccia di bug! Dover controllare manualmente più voci per ogni giorno per capire quando i dati sono andati male.

E un'altra cosa. Memorizza le risposte vere e, se una query botnet è nella cache, fornisci sempre la risposta corretta dalla cache. Quindi il raschietto, risoluzione dei problemi, colpirà il tuo vero sito Web con un browser e chiederà un numero di prova di 213-456-7890. Il nascondiglio funzionerà e questo si comporterà come una vera query, quindi calcolerai la risposta reale e la restituirai. Successivamente, il raschietto dirà alla botnet di chiedere 213-456-7890. Per vedere se il bot ottiene un risultato diverso. Rileverai la query del bot . Se ora dai una risposta falsa, il raschietto sa che la maschera è pronta e ripeterà la tua rilevazione. Quindi, poiché hai la vera risposta nella cache, dagli, anche nei campi nascosti. Ora, il raschietto è perplesso: la botnet sembra funzionare .


Perché e come

Ovviamente qualcuno trova preziosi i tuoi dati. Lo prenderebbero dalla tua fonte, ma non vogliono pagarlo, quindi ti stanno grattando.

  • È possibile che siano in realtà un sito Web della concorrenza che fa la stessa cosa che fai e che generano una query quando ne ottengono uno dal visitatore. In sostanza, si tratta di uno schema per utilizzare il tuo servizio ma pubblicare i loro annunci. Tu stesso ne conosci il valore. Puoi verificarlo facendo query oscure e diverse su ogni sito della concorrenza e vedere quali query compaiono nei tuoi registri.

Ci sono molti modi per risolvere i CAPTCHA. Nell'esempio di un sito Web della concorrenza che estrae i tuoi dati per i loro clienti, potrebbero semplicemente passare il tuo CAPTCHA ai loro clienti. Ci sono anche modi per indurre gli umani a fare CAPTCHA per te, come "risolvere i CAPTCHA per ottenere porno gratis" o offrendo un servizio non correlato che richiede i CAPTCHA per qualche motivo, come una bacheca anonima. Ogni volta che qualcuno pubblica messaggi, ti invia una query e ottiene il suo poster per risolvere il tuo CAPTCHA. C'è anche CAPTCHA che risolve essenzialmente la schiavitù nel terzo mondo.

Perché?
I dati relativi a numeri di telefono, nomi e indirizzi e-mail sono estremamente preziosi, sia nel mercato legale che in quello sotterraneo.

come?
Sembra che qualcuno stia usando una botnet per estrarre i dati da te. Ciò potrebbe significare connessioni da poche decine di IP sparsi a livello globale a migliaia di essi. Personalmente non ho idea di come stiano aggirando reCapchas, oltre all'utilizzo del lavoro manuale da siti che offrono servizi di risoluzione dei problemi. Tutto ciò costa loro denaro in un modo o nell'altro.

Soluzione?
Dichiarazione di non responsabilità: non sono un esperto di sicurezza.
Alcuni servizi gratuiti utilizzano un sistema di accodamento dopo un certo numero di query. Supponi di non voler sovraccaricare il tuo sistema, consenti un massimo di 30 richieste (o qualsiasi numero di richieste simultanee che il tuo sistema può facilmente gestire) in qualsiasi momento. Le richieste inserite quando la coda è piena riceve un messaggio che spiega che il server è occupato e devono riprovare in un secondo momento o vengono automaticamente messi in coda. Questa soluzione non è priva di problemi poiché i tuoi clienti legittimi a volte dovranno aspettare per essere serviti, specialmente durante le ore di punta o durante un attacco.

Hai detto che cambiare il tuo metodo capcha limita gli attacchi per un po '. Forse c'è un modo per alternare il metodo capcha per ogni visitatore con ogni richiesta in modo casuale? Per lo meno, l'attaccante dovrebbe riscrivere alcuni dei suoi metodi. Nel migliore dei casi i loro attacchi riusciti sono divisi per la quantità di diversi metodi che incorpori.

12
phLOx

La loro motivazione potrebbe semplicemente essere la creazione di un servizio simile e la necessità di disporre di dati. Il tuo servizio potrebbe essere una tale fonte di dati che hanno trovato e devono raschiare.

Hai provato a limitare le tue richieste? Dici che stai ricevendo centinaia al minuto (assumendo dallo stesso indirizzo/i IP), quindi non potresti registrare tali richieste, rilevare visitatori ripetuti entro un periodo di tempo ragionevole e quindi temporaneamente vietare l'IP per un periodo di tempo?

È inoltre possibile aggiungere elementi del modulo "honeypot" nel modulo. Gli elementi del modulo Honeypot sono nascosti agli utenti di geniune, ma sono compilati automaticamente dai robot. Qualsiasi richiesta con dati in quei campi viene automaticamente scartata e forse addirittura bandita.

3
Stephen Bailey

Non usare una soluzione captcha, sale tutte!

Dato che ne hai già diversi diversi in giro, perché non ruotarli (in modo casuale) su una base di 2 ore o addirittura per richiesta? Anche se teoricamente gli aggressori li hanno craccati tutti, la necessità di rilevare il tipo di captcha è di per sé un altro captcha da risolvere per i computer (pur non influenzando affatto gli umani).

Potresti anche includere domande stupide come captcha come "quale numero di telefono stai cercando di nuovo" ecc. Più cose casuali più difficile è farlo per i robot.

Soprattutto se si utilizzano diverse discipline (riconoscimento delle immagini, lettura dei numeri, matematica, conoscenza generale, ecc.) I botter avrebbero difficoltà a dare seguito.

E non devi superarli in astuzia, devi solo fare in modo che non valga più la pena.

Modifica: questo richiederebbe anche di lanciare regolarmente nuovi tipi di captcha

2
Hobbamok

Quindi sto cercando di capire la loro motivazione e il modo in cui stanno raggiungendo questo obiettivo, al fine di poter reagire in modo appropriato.

È anche possibile che i proxy vengano utilizzati per accedere al tuo servizio. Solo Google per open proxy list restituisce alcuni siti che presentano proxy aperti che possono essere utilizzati anche per mascherare l'indirizzo IP del client.

Suggerisco di registrare HTTP Header X-Forwarded-For e Via sul lato server per un po 'di tempo, quindi controlla se è plausibile che tali proxy vengano utilizzati per abusare del tuo sistema. X-Forwarded-For di solito contiene l'indirizzo IP del client, Via contiene gli IP dei proxy nella catena (se presenti). Tieni presente che l'utilizzo dei proxy in generale è legittimo, ma potrebbero esserci alcuni modelli interessanti, ad es. se vedi che gli stessi proxy vengono utilizzati più e più volte durante un periodo di attacco.

2
mottek

Non lo considero una risposta completa. Sto dicendo cosa farei in una situazione simile.

  1. Registra le query. C'è qualche modello nelle loro domande? ad esempio, Paese specifico o area specifica. Nel caso in cui stiano davvero usando i risultati, ci deve essere uno schema. In caso contrario, prenderei in considerazione il numero 2.

  2. Hai detto che cambiando tipo e tecnologia captcha, l'attacco si interrompe per circa 24 ore. Ho letto questo in questo modo:

    Quando combatto per 10 minuti di lavoro, danneggio l'avversario per 24 ore di lavoro.

    Quindi tutto ciò che devi fare è continuare a danneggiare le loro ore e persistere in quello. Rende stanco chiunque lo faccia e puoi essere sicuro che saranno i primi a smettere di combattere. le probabilità reali di vincita sono -> 1 - (10/1440)

    Questa non è una vera soluzione, piuttosto, è qualcosa che prenderei in considerazione prima di andare al numero 3.

    Ricorda, forse torneranno il mese prossimo o sei mesi dopo, ma ora sanno che stai costantemente combattendo, e sei tu quello che perde troppo poco.

    Potresti anche rendere la lotta per loro un po 'più difficile, ad esempio, più di 3 query in un giorno, richiede all'utente di inserire 2 tipi di captcha. dopo il decimo, il sistema registra ancora di più, in modo che il tuo vero visitatore non se ne accorgerebbe.

  3. Autorizzazione triste ma utilizza. Anche tu puoi facoltativamente rendere le prime n (n <10) query anonimamente disponibili, ma più di questo richiede il login.

1
FarhadGh

Ho sviluppato un modulo di contatto che gli abusatori hanno cercato di abusare da oltre un anno e hanno costantemente fallito.

Il mio approccio include una combinazione di:

  1. Dopo la convalida di ciascun campo richiesto, viene attivata una chiamata ajax che recupera un nuovo nome di campo generato casualmente da 32-48 caratteri che viene temporaneamente memorizzato in una tabella db di convalida del modulo. Quindi, quando il modulo viene inviato, un campo che arriva con un nome che non è stato generato dal server o che ha il nome del campo originale innesca la registrazione nell'indirizzo IP remoto del db e ciò che hanno inviato in relazione all'invio del modulo. Una volta modificato il nome del campo, qualsiasi invio con il nome del campo originale viene rilevato come abuso e trattato di conseguenza.
  2. Devono essere nella pagina in cui il modulo è attivo per almeno 1,3 secondi per campo richiesto e tutti i campi devono essere convalidati prima che la proprietà di disabilitazione del pulsante di invio venga rimossa e almeno il nome dell'input di invio venga modificato con un nuovo Ajax chiamata o un nome e/o valore ricevuto da una precedente chiamata a nome campo ajax. Il nome e il valore del pulsante devono corrispondere durante la convalida del modulo sul server o l'abuso viene rilevato e gestito di conseguenza.
  3. Registro tutti gli invii per db e contrassegnare l'abuso con un target DENY e una volta che hanno abusato del mio modulo, vengono bloccati in modo permanente anche dalla visita alla pagina del modulo e vengono reindirizzati direttamente a una risposta 403 dopo aver registrato la tentata visita.
  4. Durante una delle chiamate ajax a volte genererò casualmente un nuovo campo e valore che viene aggiunto al modulo prima dell'invio e deve essere presente oppure l'invio non verrà convalidato e verrà rilevato come abuso.
  5. Puoi includere i campi honeypot ma non nascondere l'oggetto campo che verrà rilevato. Nascondi un oggetto padre se hai intenzione di nascondere il campo. Puoi anche posizionarlo assolutamente e posizionarlo lontano dalla vista. Qualsiasi campo honeypot che arriva al server con un valore di qualsiasi tipo viene rilevato come abuso e trattato come tale.

Assicurati di registrare tutti gli invii in modo da poter monitorare i nuovi schemi volti a eludere la tua sicurezza.

1
Dan Stepaniak