Je possède un site Web populaire qui permet aux gens d'entrer un numéro de téléphone et de récupérer des informations sur ce numéro de téléphone, comme le nom de l'opérateur téléphonique. C'est un service gratuit, mais cela nous coûte de l'argent pour chaque requête, nous affichons donc des annonces sur le site pour aider à payer. Pour nous assurer que les gens n'en abusent pas, nous avons un captcha et utilisons les adresses IP pour limiter le nombre de requêtes à 30 par mois.
Mais nous avons quand même vu des abus; nous obtiendrons soudainement des rafales d'un grand nombre de requêtes de toutes les adresses IP différentes faisant des requêtes (des centaines par minute) et obtenant les captchas corrects. Je continue donc de changer le captcha - j'en ai essayé avec des mots, des équations mathématiques, reCAPTCHA, etc. Quand je fais cela, cela arrête "l'attaque" pendant environ 24 heures, puis recommence.
Je comprends que les gens peuvent utiliser l'OCR et d'autres méthodes pour contourner les captchas, mais je ne comprends pas pourquoi ils proviennent de nombreuses adresses IP différentes et sans rapport.
Peut-être qu'ils usurpent les adresses IP? Si c'est le cas, ils ne peuvent pas obtenir les résultats des requêtes, n'est-ce pas? Dans ce cas, le but est peut-être d'essayer de nous nuire financièrement, au lieu de simplement vouloir les données?
S'ils n'usurpent pas les adresses IP, ils ont peut-être piraté un grand nombre d'ordinateurs différents et exécutent des requêtes de leur part? Cela n'a pas de sens pour moi en raison du grand nombre d'adresses IP que nous voyons (des centaines de transactions par minute avec un maximum de 30 requêtes par adresse IP, pendant de longues périodes), et du fait que ces données ont vraiment n'est pas si précieux.
J'essaie donc de comprendre leur motivation ainsi que la façon dont ils y parviennent, afin de pouvoir riposter de manière appropriée.
Problème intéressant. Je me demande si une solution à ce problème pourrait être de forcer les navigateurs Web de vos utilisateurs à résoudre un problème de cryptographie (en utilisant javascript exécuté dans leur navigateur Web) qui est `` difficile '' à résoudre, mais `` facile '' pour votre site à vérifier. Par "difficile" à résoudre, j'entends un problème qui prendrait environ 10 secondes à résoudre avec les ressources d'un ordinateur de bureau ou d'un ordinateur portable typique. Un problème similaire au problème que les mineurs de bitcoin résolvent lorsque de nouveaux blocs sont extraits, mais bien sûr à une échelle beaucoup plus simple.
Vos utilisateurs légitimes ne remarqueraient pas la différence, car le script se détourne pendant qu'ils remplissent le formulaire sur votre site. Mais, cela ralentirait considérablement les abuseurs, les obligerait à allouer beaucoup plus de ressources et les forcerait à retravailler l'outil qu'ils utilisent pour automatiser ces publications sur votre site.
Fermes de botnet et captcha louées.
Quelqu'un veut vos données. Il est moins cher de le voler que de l'acheter.
Le voler est moins cher, mais pas gratuit. Cela coûte "à eux" (quiconque en fin de compte veut les données, pas la ferme de botnet ou de captcha) de faire ces attaques. Il est plus coûteux de vous attaquer que les données ne le valent.
Identifiez les modèles pour identifier les spammeurs.
Renvoyez des données légitimes, mais fausses, aux spammeurs.
Après un certain nombre de réponses valides, commencez à entrecouper des données fausses avec les données valides. Ensuite, ils doivent prendre des mesures supplémentaires pour valider vos données. Ces étapes supplémentaires coûtent de l'argent supplémentaire.
S'ils ne le valident pas, leurs données sont moins utiles, c'est-à-dire qu'elles valent moins. Ils peuvent toujours l'utiliser ou le vendre, mais cela a moins de valeur, donc le coût pour vous attaquer est encore plus élevé que la valeur retournée.
L'idée de CAPTCHA est de rendre difficile (lire "presque impossible) pour un ordinateur de le résoudre, mais facile pour un humain de le faire. Si vous n'utilisez qu'une seule image statique, demandez à taper 4
par exemple, un ordinateur n'aura aucun mal à saisir plusieurs fois 4
lorsque vous y êtes invité.
Envisagez plutôt d'utiliser reCAPTCHA ou des technologies similaires. Ces problèmes ont déjà été résolus et il n'est pas nécessaire de réinventer la roue, comme illustré ci-dessous:
Si vous pouvez mettre un simple CAPTCHA "tapez le numéro dans cette image" et avoir ce bâton pendant 24 heures, vous savez que votre ennemi est un amateur. Vous savez que ce type de dispositif primitif impliquant du code sur mesure les ralentira pendant 24 heures. Cela pourrait être amusant :)
Je ferais un usage intensif des feuilles de style pour masquer des informations dans le code de la page: dans deux sens, d'abord masquer les CAPTCHA, puis masquer les réponses informatives. Dans le but de tromper sadiquement les grattoirs.
J'écrirais un peu de code côté serveur pour créer de fausses réponses qui sont crédibles à première vue, mais bidon d'une manière pas facilement confirmée. De plus, utilisez l'amorçage aléatoire ou les MD5 pour vous assurer que la même entrée donne toujours la même réponse bidon.
Par exemple, laissez le dernier système CAPTCHA que vous utilisiez, mais utilisez des feuilles de style pour le masquer. Suivez avec un CAPTCHA différent, obscurci par Javascript; peut-être même un autre reCaptcha avec une clé différente.
Maintenant, le grattoir ne réalisera pas que le premier CAPTCHA est supprimé avec les feuilles de style. Il résoudra joyeusement le CAPTCHA et retournera la réponse avec la mauvaise clé. Gotcha . Cependant, tout comme le craquage d'Enigma, vous ne pouvez pas rendre évident que vous avez cassé le code; le grattoir doit continuer à croire qu'il fonctionne.
Présentez une réponse comme d'habitude, avec une feuille de style autour d'elle. La feuille de style cache ce résultat aux gens normaux; le grattoir ignore que cette feuille a la propriété "cachée". La réponse que vous présentez ici est la fausse. Présentez ensuite le vrai résultat. Pour les points bonus, présentez les résultats dans un graphique qui le rend indéchiffrable. Essayez de cacher cela bien sûr.
Si vous avez la télémétrie (résolu le mauvais CAPTCHA) qu'il s'agit d'une requête supprimée, alors ne vous embêtez même pas à acheter le résultat de cette requête auprès de votre fournisseur de services. Insérez un sommeil (t + aléatoire) pour la durée typique de votre fournisseur de services, puis renvoyez une fausse réponse.
L'attaquant croira que les choses fonctionnent normalement et ne vérifient que le succès des requêtes, et non la qualité des résultats. Avec de la chance, votre attaquant ne se sera pas connecté lorsque chaque requête a été effectuée , et il est simplement en train de vider les réponses dans une base de données. L'attaquant peut mettre un certain temps à se rendre compte que vous avez empoisonné les données, date à laquelle la base de données entière serait corrompue, n'ayant aucune idée des entrées valides et des poisons (voir l'importance de donner une apparence légitime aux fausses données). ?) Même si l'attaquant a horodaté chaque entrée, quelle chasse aux bogues! Devoir vérifier manuellement plusieurs entrées pour chaque jour pour savoir quand les données ont mal tourné.
Et encore une chose. Mettre en cache les vraies réponses, et si une requête de botnet est en cache, donnez toujours la bonne réponse du cache. Ainsi, le grattoir, dépannage, frappera votre site Web réel avec un navigateur et demandera un numéro de test de 213-456-7890. Le masquage fonctionnera et cela se comportera comme une vraie requête, vous calculerez donc la vraie réponse et la retournerez. Ensuite, le racleur dira au botnet de demander 213-456-7890. Pour voir si le bot obtient un résultat différent. Vous détecterez la requête du bot . Si vous donnez maintenant une fausse réponse, le grattoir sait que le gabarit est en place et répétera en cas de rupture de votre détection. Donc, puisque vous avez la vraie réponse dans le cache, donnez-la, même dans les champs cachés. Maintenant, le grattoir est perplexe: le botnet semble fonctionner .
De toute évidence, quelqu'un trouve vos données précieuses. Ils l'obtiendraient de votre source, mais ils ne veulent pas payer pour cela, alors ils vous grattent.
Il existe une multitude de façons de résoudre les CAPTCHA. Dans l'exemple d'un site Web concurrent tirant vos données pour leur client, ils peuvent simplement transmettre votre CAPTCHA à leurs clients. Il existe également des moyens d'inciter les humains à créer des CAPTCHA pour vous, comme "résoudre les CAPTCHA pour obtenir du porno gratuit", ou en offrant un service sans rapport qui nécessite des CAPTCHA pour une raison quelconque, comme un babillard anonyme. Chaque fois que quelqu'un poste, il vous envoie une requête et obtient son affiche pour résoudre votre CAPTCHA. Il y a aussi CAPTCHA qui résout essentiellement l'esclavage dans le tiers monde.
Pourquoi?
Les données relatives aux numéros de téléphone, noms et adresses e-mail sont extrêmement précieuses, tant sur le marché légal que clandestin.
Comment?
Il semble que quelqu'un utilise un botnet pour extraire vos données. Cela pourrait signifier des connexions entre quelques dizaines d'adresses IP dispersées dans le monde et des milliers d'entre elles. Personnellement, je n'ai aucune idée de la façon dont ils se déplacent sur reCapchas, à part l'utilisation du travail manuel à partir de sites offrant des services de résolution de capcha. Tout cela leur coûte de l'argent d'une manière ou d'une autre.
Solution?
Avis de non-responsabilité: je ne suis pas un expert en sécurité.
Certains services gratuits utilisent un système de mise en file d'attente après un certain nombre de requêtes. Supposons que vous ne souhaitiez pas surcharger votre système, vous autorisez un maximum de 30 demandes (ou le nombre de demandes simultanées que votre système peut facilement gérer) à la fois. Les demandes envoyées alors que la file d'attente est pleine reçoivent un message expliquant que le serveur est occupé et qu'elles doivent réessayer ultérieurement ou sont automatiquement mises en file d'attente. Cette solution n'est pas sans problème car vos clients légitimes devront parfois attendre d'être servis, notamment aux heures de pointe ou lors d'une attaque.
Vous avez mentionné que changer votre méthode capcha freine les attaques pendant un certain temps. Peut-être existe-t-il un moyen d'alterner la méthode capcha pour chaque visiteur avec chaque demande au hasard? À tout le moins, l'attaquant devrait réécrire certaines de ses méthodes. Dans le meilleur des cas, leurs attaques réussies sont divisées par le nombre de méthodes différentes que vous incorporez.
Leur motivation peut simplement être qu'ils construisent eux-mêmes un service similaire et ont besoin de données. Votre service pourrait être l'une de ces sources de données qu'ils ont trouvé et doivent gratter.
Avez-vous essayé de limiter le taux de vos demandes? Vous dites que vous obtenez des centaines par minute (en supposant à partir de la même adresse IP), alors ne pourriez-vous pas enregistrer ces demandes, détecter les visiteurs récurrents dans un délai raisonnable, puis interdire temporairement IP pour une période de temps?
Vous pouvez également ajouter des éléments de formulaire "pot de miel" dans votre formulaire. Les éléments du formulaire Honeypot sont cachés aux utilisateurs de geniune, mais sont remplis automatiquement par les bots. Toute demande contenant des données dans ces champs est automatiquement rejetée et peut-être même interdite.
N'utilisez pas une seule solution captcha, tilisez-les toutes!
Étant donné que vous en avez déjà plusieurs différents, pourquoi ne pas les faire pivoter (au hasard) sur une base de 2 heures ou même par demande? Même si les attaquants les ont théoriquement tous crackés, le fait qu'ils aient besoin de détecter le type de captcha est en soi un autre captcha à résoudre pour les ordinateurs (tout en n'affectant pas du tout les humains).
Peut-être aussi inclure des questions stupides comme captchas comme "quel numéro de téléphone recherchez-vous à nouveau", etc.
Surtout si vous utilisez différentes disciplines (reconnaissance d'image, lecture de nombres, mathématiques, connaissances générales, etc.), les embouteilleurs auraient du mal à assurer le suivi.
Et vous n'avez pas besoin de les surpasser parfaitement, il vous suffit de faire en sorte que cela ne vaille plus leur temps.
Edit: cela nécessiterait également d'ajouter régulièrement de nouveaux types de captcha
J'essaie donc de comprendre leur motivation ainsi que la façon dont ils y parviennent, afin de pouvoir riposter de manière appropriée.
Il est également possible que des procurations soient utilisées pour accéder à votre service. Juste google pour open proxy list
renvoie certains sites présentant des proxys ouverts qui pourraient également être utilisés pour masquer l'adresse IP du client.
Je suggère d'enregistrer l'en-tête HTTP X-Forwarded-For
et Via
côté serveur pendant un certain temps, puis vérifiez s'il est plausible que de tels proxys soient utilisés pour abuser de votre système. X-Forwarded-For
contient généralement l'adresse IP du client, Via
contient les IP des proxys de la chaîne (le cas échéant). Veuillez noter que l'utilisation de procurations en général est légitime, mais il peut y avoir des modèles intéressants, par exemple si vous voyez les mêmes proxys utilisés à plusieurs reprises au cours d'une période d'attaque.
Je ne considère pas cela comme une réponse complète. Je dis ce que je ferais dans une situation similaire.
Enregistrez les requêtes. Y a-t-il un modèle dans leurs requêtes? par exemple, Pays spécifique ou zone spécifique. Dans le cas où ils utilisent vraiment les résultats, il doit y avoir un modèle. Sinon, je considérerais le numéro 2.
Vous avez dit que lorsque vous modifiez le type et la technologie du captcha, l'attaque s'arrête pendant environ 24 heures. Je lis ceci de cette façon:
Quand je me bats pour 10 minutes de travail, j'endommage l'adversaire pour 24 heures de travail.
Donc, tout ce que vous devez faire, c'est continuer à endommager leurs heures et persister. Celui qui fait cela est fatigué et vous pouvez être sûr qu'il est le premier à arrêter de se battre. les chances réelles de gagner sont -> 1 - (10/1440)
Ce n'est pas une vraie solution, c'est plutôt quelque chose que je considérerais avant de passer au numéro 3.
Rappelez-vous, ils reviendront peut-être le mois prochain ou six mois plus tard, mais maintenant ils savent que vous vous battez constamment, et c'est vous qui perdez trop peu.
Vous pourriez même rendre les combats pour eux un peu plus difficiles, par exemple, plus de 3 requêtes en une journée, obligent l'utilisateur à entrer 2 types de captcha. après le 10, le système durcit encore plus, d'une manière que votre véritable visiteur ne comprendrait pas.
Triste mais utilisez l'autorisation. Même vous pouvez éventuellement rendre les premières n (n <10) requêtes disponibles de manière anonyme, mais plus que cela nécessite une connexion.
J'ai développé un formulaire de contact que les agresseurs tentent d'abuser depuis plus d'un an maintenant et ont toujours échoué.
Mon approche comprend une combinaison de:
Assurez-vous de consigner toutes les soumissions afin de pouvoir surveiller les nouveaux modèles destinés à contourner votre sécurité.