Question:
Les requêtes secrètes GET peuvent-elles être forcées brutalement?
Kargari
2018-06-19 09:57:36 UTC
view on stackexchange narkive permalink

Dites, j'ai sur mon serveur une page ou un dossier que je veux garder secret.

  example.com/fdsafdsafdsfdsfdsafdrewrew.html  

ou

  example.com/fdsafdsafdsfdsfdsafdrewrewaa34532543432/admin/index.html

Si la partie secrète du chemin est assez longue, puis-je supposer qu'il est sûr d'avoir une page ou une zone secrète et qu'il sera difficile de deviner ou de forcer brutalement?

Quels sont les problèmes avec cette approche en général?

Notez que je ne demande pas comment faire cela correctement, mais quels pourraient être les problèmes avec cette approche, le cas échéant.

à condition que vos machines soient sécurisées (https, bon wifi, etc.) et que vous ne liez jamais publiquement à l'URL secrète, alors une longue URL statique serait très difficile à deviner pour un étranger.
oh, et vous avez désactivé les listes de répertoires et les pages "d'erreur intelligente" qui suggèrent des chemins ...
Notez que cette pratique est considérée comme "assez bonne" par certains services Web bien établis tels que Google Docs (qui a une fonction de partage par lien) et Overleaf (un éditeur Latex en ligne collaboratif).
@FedericoPoloni: Google va probablement suivre les demandes en masse et éventuellement les bloquer.Sans cela en place, il devient plus susceptible de réussir par bruteforcing (par rapport à la longueur de l'URL bien sûr).
Certains sites Web le font, par exemple pour les liens de réinitialisation de mot de passe.Votre pari le plus sûr, si vous décidez d'aller dans cette voie, est de faire du secret un paramètre GET (donc `index.html? Secret = hjasdhasdhasdasd`) pour éviter la mise en cache et que les robots tombent accidentellement sur votre lien, et le rendent ** temporaire **
Les jetons @BgrWorker dans les liens de réinitialisation de mot de passe doivent être utilisés une seule fois et supprimés par la suite.Ce que OP demande est une valeur fixe qui peut être réutilisée, ce n'est pas exactement la même chose
Tant que le chemin n'a jamais été rendu public, ce serait assez difficile à deviner, mais il s'agit de la sécurité par l'obscurité, il n'y a donc rien de vraiment sécurisant l'URL.Mon conseil serait d'étendre un peu cela et de rendre le hachage de l'url dynamique, de sorte que tout ce que index.html a été frappé, ce serait sur un chemin différent, mais connu, plus facile à faire dans certains frameworks que d'autres.
si c'est sur https, ce n'est pas aussi grave que de passer un mot de passe, ou quelque chose qui peut également être utilisé à d'autres fins.
@FedericoPoloni Google Docs n'autorise-t-il pas l'accès à certains comptes, de sorte que d'autres ne peuvent pas y accéder même s'ils devinent l'URL?Et Overleaf V2 maintient le partage de lien désactivé par défaut.
@GoodDeeds Share-by-link est l'une des options de partage autorisées sur Google Docs.Vous pouvez également décider de partager sur des comptes spécifiques, mais c'est une chose différente.
C'est fondamentalement la sécurité par l'obscurité qui - en soi - n'est jamais suffisante.
@CompuChip Non, ce n'est pas le cas.Pas plus qu'un mot de passe n'est «la sécurité par l'obscurité» car tout le monde ne connaît pas le mot de passe.
@DrEval, j'ai peut-être mal compris la question à l'époque, mais ce que j'ai lu, c'est que OP veut juste obscurcir la page en rendant l'URL plus difficile à deviner plutôt que de la protéger correctement, par exemple.en utilisant un mot de passe.
@CompuChip Si l'URL est suffisamment sécurisée, elle "devient" le mot de passe.Ce n'est toujours pas sûr, car ce n'est pas un bon moyen de transmettre des mots de passe, mais ce n'est pas la sécurité par l'obscurité.
Si vous avez un document robots.txt qui peut donner des URL, mais si elles sont censées être secrètes, il est probable que vous ne les mettiez jamais dans robots.txt pour commencer.
Si quelqu'un peut consulter les journaux du serveur Web, il peut trouver toutes ces URL intéressantes.
Également lié: [Dans quelle mesure est-il improbable qu'un lien Google Doc soit deviné?] (Https://security.stackexchange.com/questions/29449/how-unlusted-is-it-that-a-google-doc-link-est-deviné)
Visitez ["la sécurité par l'obscurité est une mauvaise idée"] (https://stackoverflow.com/questions/533965/why-is-security-through-obscurity-a-bad-idea).
Huit réponses:
forest
2018-06-19 10:04:32 UTC
view on stackexchange narkive permalink

Vous demandez essentiellement s'il est sûr de passer des paramètres secrets dans une requête GET. Ceci est en fait classé comme une vulnérabilité. Il n'est pas possible de forcer brutalement une chaîne pseudo-aléatoire suffisamment longue, en supposant que le serveur renvoie simplement une réponse 404 statique chaque fois qu'un chemin invalide est spécifié, mais il existe de nombreux autres problèmes de sécurité en pratique qui en font une technique dangereuse:

  • Les logiciels de journalisation enregistrent souvent les requêtes GET en texte clair, mais pas en POST.

  • L'utilisation de GET rend le CSRF trivial * lors du traitement du contenu actif.

  • Les en-têtes des référents peuvent divulguer des valeurs secrètes à d'autres sites Web.

  • Historique du navigateur conservera les secrets passés dans les requêtes GET.

Votre deuxième exemple contient / admin / . Cela m'implique que la seule connaissance de ce chemin serait suffisante pour s'authentifier auprès du serveur dans un contexte administrateur. Ceci est très peu sûr et ne devrait plus être fait que /? Password = hunter2 , un faux pas majeur de sécurité Web.

Au lieu de cela, les secrets doivent être envoyés dans une requête POST. Si cela n'est pas possible ou si votre modèle de menace est exclusivement pour empêcher la force brute de l'URL (par exemple, les liens de réinitialisation de mot de passe qui sont rapidement invalidés après leur utilisation), alors cela devrait être sûr si cela est fait avec soin. Je n'ai connaissance d'aucune attaque par canal secondaire qui fournirait une méthode pour obtenir la chaîne plus rapidement que la force brute.

* Éviter les requêtes GET paramétrées n'empêche pas les attaques CSRF, ce qui est un idée fausse commune car il existe plusieurs façons d'abuser de la même manière POST (faux formulaires, etc.), mais transmettre des secrets dans GET facilite le CSRF.

* "[CSRF] (https://www.owasp.org/index.php/Cross-Site_Request_Forgery_ (CSRF)) devient un problème. En fait, utiliser uniquement POST pour les secrets atténue CSRF." * Comme expliqué dans votre OWASP liéarticle, cela n'empêche pas réellement CSRF.
Je dirais que cela ne rend vraiment les choses un peu plus difficiles dans certains cas, car JavaScript peut soumettre des formulaires d'origine croisée sans aucune interaction de l'utilisateur.Le montage est bon cependant.
Oui.Le seul moyen de le bloquer serait de rejeter les référents externes.
`Il n'est techniquement pas possible de forcer brutalement une chaîne aussi aléatoire,` -> pourquoi pas?
@Kargari Parce que le serveur ne vous dira pas à quel point vous êtes arrivé à deviner la chaîne.Si vous lui donnez la mauvaise chaîne, il renverra 404, que ce soit ou non 1 caractère désactivé ou 50 caractères désactivé.En tant que tel, vous devriez rechercher de manière exhaustive toutes les chaînes possibles jusqu'à ce que vous obteniez _exactly_ correctement.Quoi qu'il en soit, j'aurais probablement dû dire «pas faisable» plutôt que «pas possible».Je l'ai édité maintenant.
des attaques chronométrées peuvent cependant être possibles;Je doute que les serveurs Web et les systèmes d'exploitation utilisent des comparaisons à temps fixe lors de la vérification de l'existence de chemins!
@dn3s Je n'ai pas connaissance d'attaques pratiques par canal latéral contre les serveurs HTTP courants.
`le serveur ne vous dira pas à quel point vous êtes parvenu à deviner la chaîne.Si vous lui donnez la mauvaise chaîne, il renverra 404, que ce soit ou non 1 caractère désactivé ou 50 caractères désactivé.`-> bien sûr.c'est là que la force brute entre en jeu
@Kargari La force brute est très, très lente.Pour une chaîne alphanumérique de 30 caractères (c'est-à-dire a-z, A-Z et 0-9), vous avez 62 ^ 30 combinaisons possibles, ce qui est bien au-delà de ce qui est possible aujourd'hui.
Peut-être qu'@dn3s signifie que si le serveur compare caractère par caractère, il s'arrêtera à la première différence, permettant des attaques de synchronisation.Mais je pense que le décalage horaire est peut-être trop petit pour être mesuré.
Vous pouvez atténuer cette attaque de synchronisation en stockant un hachage de la chaîne aléatoire.Ainsi, l'heure vous dirait combien de caractères de la correspondance de hachage, mais ce n'est pas corrélé au nombre de caractères de la correspondance de chaîne d'origine.
c'était un peu obscur pour moi de mentionner et je n'ai pas pu trouver d'exemples de cela à partir d'une recherche rapide.Je suis curieux maintenant de savoir si c'est une chose ou non (ou simplement en général, quel genre d'informations de système de fichiers peuvent être extraites d'un serveur en utilisant des canaux latéraux de synchronisation).Je devrai peut-être poser une question à ce sujet!
Ce lien OWASP est mal interprété, ils font référence à des informations, un hachage d'url n'est pas une "information".C'est pourtant la sécurité par l'obscurité.
Quant à l'en-tête du referer, vous pouvez l'empêcher d'être envoyé [en ajoutant `rel =" noreferrer "` au lien] (https://stackoverflow.com/questions/5033300/stop-link-from-sending-referrer-à destination).
Si ce chemin obscur (non secret) est jamais accédé via http et non https, l'URI sera visible et éventuellement connecté sur tout système intervenant.De plus, s'il est jamais accédé sur un ordinateur partagé, il peut être récupérable dans l'historique du navigateur.Poser la question est une bonne chose, mais que OP demande quels sont les problèmes en premier lieu, implique que ce n'est probablement pas une bonne idée à faire, quelle que soit la forme que OP envisage de l'utiliser.
N'est-ce pas exactement ainsi que fonctionnent les "liens magiques"?
Bien que cela ne soit plus aussi applicable, je pense que les vulnérabilités ActiveX permettraient à la barre d'adresse de fuir si vous tapiez pour accéder à ce site directement à partir du site malveillant.
Source du pass `hunter2`: http://bash.org/?244321=
Selon la [Fiche de triche de sécurité OWASP REST] (https://www.owasp.org/index.php/REST_Security_Cheat_Sheet#Sensitive_information_in_HTTP_requests), vous ne devez pas transmettre de données sensibles dans les URL, mais vous pouvez le faire dans les en-têtes.
Alors, pourquoi Google l'utilise-t-il?
@enkryptor Google ne fait pas cela.L'envoi de requêtes de recherche via GET n'est pas la même chose que l'envoi de votre mot de passe via GET.
@forest qui parle d'envoyer des mots de passe?OP demande une sorte de lien secret, "une page secrète" dit-il.Pour moi, il ne s'agissait ni d'envoyer un mot de passe sur son compte, ni d'obtenir des privilèges ailleurs.C'est juste un lien secret.
@enkryptor Alors qu'entendez-vous par Google faisant cela?
Le partage de liens de @forest Google vous permet de donner accès à un document privé avec lien.Le lien lui-même devient un "mot de passe" pour ce document, jusqu'à ce que le propriétaire du document l'autorise
WoJ
2018-06-19 16:49:00 UTC
view on stackexchange narkive permalink

Il s'agit d'une approche courante pour partager des éléments publics limités à ceux qui connaissent l'URL. Un exemple est Google Docs:

enter image description here

La deuxième option, "Toute personne disposant du lien", crée un lien similaire au vôtre. Idem pour Google Photos, Dropbox, ...

  • L'avantage est que la diffusion du contenu est quelque peu limitée.
  • L'inconvénient est que cela quelque peu dépend avec qui vous partagez le lien, où il est publié, etc.

Une chose à considérer est la possibilité de l'invalider facilement (en modifier / régénérer le lien vers vos données)

Il s'agit également d'un mécanisme courant pour les liens de "désabonnement".
Cette réponse cite Google Docs, mais mentionne (à juste titre) que Docs ne crée pas le lien jusqu'à ce que le propriétaire décide de le partager.C'est différent du simple fait d'avoir un lien à partir du moment où le contenu est créé, comme dans le cas d'OP.Je ne peux pas forcer brutalement les documents privés d'un utilisateur arbitraire, seulement ceux pour lesquels il a intentionnellement créé des liens publics.
J'ajouterais également que Google a une connaissance approfondie de pratiquement tout le monde (ou du moins de tous les navigateurs; avoir ou non un compte Google n'a pas d'importance, tout le monde avec un navigateur a un compte interne avec Google) et ils peuvent l'utiliser en arrière-planlors de l'octroi ou du refus d'accès à un document disponible via le lien unique.La question est de savoir si le PO dispose de données et d'outils similaires.
@Pavel: Je ne suis pas sûr de comprendre.Qu'entendez-vous par "* tout le monde avec un navigateur a un compte interne avec Google *"?Et par * ils peuvent l'utiliser en arrière-plan pour accorder ou refuser l'accès à un document disponible via le lien unique *?
@WoJ Google suit activement les navigateurs et leurs utilisateurs (Analytics, Tag Managers, API, polices, reCaptcha, 8.8.8.8, etc. sont très utilisés sur le Web), de sorte que lorsque votre navigateur demande le document via l'URI unique, Google en sait déjà plusque vous aimeriez pour vous (bien sûr, le suivi de la vie d'un lien Docs unique fait partie de la même histoire).Cela permet de défier ou même de filtrer les joueurs fautifs.
@Pavel: ah oui, maintenant je comprends ce que tu veux dire.C'est vrai, et les mécanismes utilisés pour les utilisateurs d'empreintes digitales (non seulement par Google mais également par d'autres) sont assez puissants.Le simple fait que certains sites protégés par un mécanisme TOTP / HOTP (le F2A utilisé par Google Authenticator par exemple) puissent reconnaître un appareil entrant malgré le nettoyage des cookies est impressionnant.
Artelius
2018-06-19 17:37:40 UTC
view on stackexchange narkive permalink

Mauvaise idée. Plusieurs fois, j'ai vu une URL "secrète" obtenir très rapidement des appels de moteur de recherche, puis détectable par recherche sur le Web. Une fois, j'ai même vu quelqu'un configurer une copie d'un site Web réputé dans un sous-dossier de son domaine, le partager avec une personne, et bientôt il a reçu un e-mail l'avertissant que son domaine avait peut-être été compromis pour à des fins de phishing.

Comment est-ce arrivé? Dans ce dernier cas, le navigateur Web avait une fonction anti-hameçonnage intégrée qui envoyait les URL visitées aux services de détection de fraude. Dans les autres cas, le navigateur collectait peut-être des données de navigation et les envoyait à un moteur de recherche pour collecter les habitudes des utilisateurs.

Si vous faites cela , assurez-vous que votre fichier robots.txt ( ou headers / meta tags) est configuré pour dire aux moteurs de recherche de ne pas indexer le contenu.

Internet est un moyen merveilleux de rapprocher le monde, mais malheureusement, il donne à tout le monde un accès potentiellement permanent à tout ce que vous d'éternuer.

`moteurs pour ne pas indexer le contenu.` -> ne pas indexer ma page secrète en ajoutant son URL dans le fichier robots.txt?
** Ne mettez jamais de secrets dans `robots.txt`! ** La meilleure façon de s'assurer que ** tout le monde ** découvre votre page secrète est de l'ajouter au` robots.txt`, car alors tout ce qui doit êtrefait pour découvrir le secret est de regarder le `robots.txt`.
@Kargari Il n'y a aucune raison de mettre l'url de la * page secrète * réelle dans le fichier robots.txt.Un fichier robots est parfaitement capable d'interdire des hiérarchies de répertoires entiers.Si votre secret est dans /nocrawl/page/sdghskdfjgneowsvnoiernow.htm alors une directive "Disallow: / nocrawl" lui sera appliquée.
mais je n'ai pas de répertoire "'/ nocrawl" dans mon chemin et je ne veux pas l'ajouter à mes routes uniquement pour servir le but de robtots.txt!
@MosheKatz je vais le mettre là-dedans
Les robots d'exploration n'ont pas à obéir à `robots.txt`.Je soupçonne qu'il existe des programmes qui font le contraire: inspecter uniquement les choses qui ont été «cachées» par «robots.txt».
@Kargari "/ nocrawl" est un exemple et non une prescription.Veuillez [lire] (http://www.robotstxt.org/robotstxt.html) sur le fonctionnement des fichiers robots.txt avant d'essayer d'en utiliser un.
@Pharap Un robot d'exploration n'y arrivera que si l'URL est visible dans un espace public, auquel cas l'URL est de toute façon compromise.Cette réponse suggère que certains outils que les utilisateurs finaux pourraient utiliser pourraient bien faire des choses «utiles» qui exposent l'URL dans des lieux publics ou semi-publics.
* "le navigateur Web avait une fonction anti-phishing intégrée qui envoyait les URL visitées aux services de détection de fraude" * ... attendez, quoi?Pour que la fonction de détection de fraude puisse voir tous les documents Google ou tout ce que vous avez déjà «partagé par lien»?
La syntaxe iirc robots.txt vous permet de refuser tous les chemins / fichiers, puis d'autoriser spécifiquement les chemins et les fichiers.
Un peu lié: une fois, j'ai envoyé une URL _secret_ à quelqu'un par e-mail, pour constater que l'URL a été accédée avant d'ouvrir l'e-mail.Il s'avère qu'il a été accédé par la fonctionnalité "Aperçu des liens dans le courrier électronique" de Yahoo Mail au moment où je rédigeais le courrier électronique.L'agent utilisateur avait une URL "à propos de ...", et cette page recommandait d'utiliser le fichier robots.txt pour bloquer cet agent utilisateur.
Sjoerd
2018-06-19 11:55:15 UTC
view on stackexchange narkive permalink

Si la partie secrète du chemin est assez longue [...] il sera difficile de la deviner ou de la forcer brutalement?

Oui. Un attaquant devrait tout deviner pour le découvrir. Comme il existe de nombreuses possibilités, cela prendrait un temps irréalisable.

Quels sont les problèmes avec cette approche en général?

Le problème avec ceci est que les URL ne sont pas considérées comme secrètes, elles seront donc stockées dans le navigateur, dans les journaux et par tout proxy intermédiaire. De cette façon, votre URL "secrète" peut être exposée.

L'utilisation de GET rend le CSRF trivial lors du traitement du contenu actif.

Non. Dans une attaque CSRF, l'attaquant forge une requête spécifique. Lors de l'utilisation d'un secret dans l'URL, l'attaquant ne connaît même pas l'URL correcte vers laquelle falsifier la requête. Cela signifie que CSRF est impossible tant que l'URL est secrète.

Ce n'est pas un secret si la page est jonchée de «» partout.
De plus, si vous vous retrouvez avec des centaines de milliers d'URL secrètes valides dans cet espace de noms, vous augmentez de centaines de milliers le risque d'attaques par force brute trouvant QUELQUE CHOSE ...
Thomas
2018-06-21 19:29:07 UTC
view on stackexchange narkive permalink

Comme d'autres l'ont indiqué, ce n'est pas une bonne idée. Ces liens "secrets" utilisés pour se désabonner ou à des fins ponctuelles similaires sont généralement de courte durée et ne sont d'aucune utilité une fois qu'ils ont été utilisés une fois.

Ma première pensée en lisant cette question était que l'URL ne resterait pas secrète longtemps. Je pensais que Chrome (ou tout autre navigateur Web moderne) utiliserait peut-être les données de la ligne d'adresse pour initialiser une analyse. Il s'avère que non. Cependant, les chercheurs ont découvert que les plugins pouvaient encore déclencher une exploration:

Les résultats sont assez simples: Googlebot n'est jamais venu visiter l'une ou l'autre des pages du test.

dehors, deux personnes dans le test n'ont pas réellement désactivé leurs extensions, ce qui a entraîné des visites d'Open Site Explorer (quelqu'un avait installé et activé Mozbar) et Yandex (en raison d'une personne différente, bien que je ne sache pas sur quelle extension ils avaient installé et activé).

Cela signifie qu'une fois qu'un lien est utilisé, il peut être compromis par les extensions de navigateur. Et puis il n'est pas nécessaire de forcer quoi que ce soit.

Quel est le but de la création de ces liens? Qu'est-ce que vous essayez d'accomplir, OP? Je suis certain qu'il existe d'autres moyens d'y arriver ...

Mr. E
2018-06-19 21:24:26 UTC
view on stackexchange narkive permalink

Ce serait difficile à deviner / bruteforce mais d'autres moyens d'obtenir les chemins peuvent être possibles

Par exemple, l'URL peut être indexée par des services tels que google, bing, etc. votre URL "secrète" apparaît lorsqu'un utilisateur recherche votre page dans google. Il peut être résolu en configurant le fichier robots.txt , mais rappelez-vous que les indexeurs peuvent l'ignorer

Les liens dans l'application peuvent rediriger vers le chemin caché

Dans De plus, les machines du même réseau que l'utilisateur accédant à la page "secrète" ou au serveur web peuvent voir l'url, ainsi que chaque proxy intermédiaire et le FAI de l'utilisateur (ou VPN s'il en utilise un)

Enfin, l'URL peut être conservée dans le cache et / ou l'historique du navigateur et dans les journaux sur le serveur Web et les proxys

** Ne mettez jamais de secrets dans `robots.txt`! ** La meilleure façon de s'assurer que ** tout le monde ** découvre votre page secrète est de l'ajouter au` robots.txt`, car alors tout ce qui doit êtrefait pour découvrir le secret est de regarder le `robots.txt`.
@MosheKatz Je n'ai rien dit sur l'ajout du secret à `robots.txt`, mais en le configurant pour que vos pages ne soient pas indexées.Quelque chose comme `Disallow: /`
@MrE vous le savez peut-être, mais les gens qui liront votre réponse peuvent ne pas comprendre cela.
Gillian
2018-06-20 21:16:03 UTC
view on stackexchange narkive permalink

Les requêtes secrètes GET peuvent-elles être forcées brutalement?

Oui, c'est possible. Autant que n'importe quel type de demande sans mesures de sécurité appropriées.

Si la partie secrète du chemin est assez longue, puis-je supposer qu'il est sûr d'avoir une telle page ou zone secrète, et cela sera-t-il difficile à deviner ou à forcer brutalement?

Non, il n'est pas sûr d'avoir une telle page ou zone secrète. Oui, il sera difficile de le deviner ou de le forcer brutalement.

Quels sont les problèmes avec cette approche en général?

Contrairement aux requêtes POST, les requêtes GET peuvent être facilement trouvées dans l'historique du navigateur Web.

ViDiVe
2018-06-24 23:50:51 UTC
view on stackexchange narkive permalink

Je pense qu'il vaudra mieux mettre en œuvre un mot de passe OTP à usage unique ou automatique (vous déciderez ainsi qui peut accéder à la page) à envoyer par e-mail.

Dans un scénario manuel: - vous recevez la demande de email@example.com
- vous accordez l'accès à email@example.com
- le script crée le lien avec l'OTP
- le lien sera envoyé à email @ example.com
- lorsque l'utilisateur email@example.com visitera la page, l'OPT sera signalé et personne d'autre ne pourra réutiliser ce lien

bien sûr, ce système nécessite une base de données où stocker le champ email, OPT et drapeau autorisé



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 4.0 sous laquelle il est distribué.
Loading...