Question

Je développe un composant serveur qui servira les demandes d'un client intégré, qui est sous mon contrôle.

En ce moment, tout est bêta et la sécurité fonctionne comme ceci:

  1. client envoie le nom d'utilisateur / mot de passe sur https.

  2. serveur renvoie jeton d'accès.

  3. client fait de nouvelles demandes sur http avec le jeton d'accès dans un en-tête personnalisé.

Ceci est très bien pour une démo, mais il a quelques problèmes qui doivent être fixés avant de le relâcher:

  • Tout le monde peut copier une demande de login, l'envoyer à nouveau et obtenir un jeton d'accès arrière. Comme certains utilisateurs ont répondu ce n'est pas un problème car il va sur https. Mon erreur.

  • Tout le monde peut écouter et obtenir une clé d'accès juste en inspectant les en-têtes de demande.

Je peux penser à un chiffrement à clé symétrique, avec un horodatage pour que je puisse rejeter les demandes en double, mais je me demandais s'il y a quelques bonnes pratiques bien connues pour ce scénario (qui semble un peu commun).

Merci beaucoup pour l'aperçu.

PS:. J'utilise Java pour le serveur et le client est codé en C ++, juste au cas

Était-ce utile?

La solution

Je ne suis pas la première partie, si la demande de connexion est https, comment peut-on copier juste?

En ce qui concerne la deuxième partie, t Ce scénario de session hijacking assez standard. Voir cette question. Bien sûr, vous n'avez pas les options navigateur intégré ici, mais l'idée de base est le même -. Soit envoyer le jeton que sur une connexion sécurisée quand il importe, ou d'une certaine façon d'associer le jeton avec le dispositif d'envoi

Dans un navigateur, essentiellement tout ce que vous avez est l'adresse IP (qui est pas très bon), mais dans votre cas, vous pouvez être en mesure d'exprimer quelque chose de spécifique au sujet de votre appareil que vous validez contre la demande pour assurer la même ISN jeton « t être utilisé ailleurs.

Edit: Vous pourriez avoir de la chance ici et être en mesure de se prononcer sur l'adresse IP derrière le changement des procurations, et utiliser effectivement à cette fin

.

Mais à la fin de la journée, il est beaucoup plus sûr à utiliser https à partir d'une bibliothèque bien connue et passé en revue plutôt que d'essayer de rouler votre propre ici. Je me rends compte que https est une surcharge, mais vos propres modèles a de grands risques autour de manquer des choses évidentes qu'un attaquant peut exploiter.

Autres conseils

question d'abord, pour obtenir là-bas: si vous êtes concerné assez sur le client imitateur malfaisant accès, pourquoi ne pas procéder à la conversation via HTTPS? La performance minimale a frappé suffisamment important pour cette application qu'il ne vaut pas la couche de sécurité?

En second lieu, comment quelqu'un peut rejouer la demande de connexion? Si je ne me trompe pas, qui a lieu sur HTTPS; si la connexion est correctement configuré, HTTPS empêche les attaques par rejeu en utilisant nonces une seule fois (voir ).

L'une des recommandations communes est - utiliser https

https homme dans l'attaque du milieu de côté en utilisant https pour toute la session doit être suffisamment fiable. Vous ne devez même pas à vous soucier de jetons d'accès -. Https prend en charge pour vous

En utilisant http pour les demandes supplémentaires semble présenter certaines vulnérabilités. Maintenant tout le monde avec un renifleur de réseau peut intercepter votre trafic voler le jeton et usurper vos demandes. vous pouvez construire une protection pour l'empêcher - le cryptage jeton, utiliser des jetons une fois, etc., mais ce faisant, vous serez recréez https.

Pour en revenir à l'homme https dans l'attaque moyenne - elle est basée sur la capacité de quelqu'un à s'insérer entre votre serveur et votre client et entonnoir vos demandes par leur code. Il est tout faisable à savoir dans le cas où l'attaquant a accès au réseau physique. Le problème tel attaquant devra faire face est qu'il ne sera pas en mesure de vous donner une bonne numérique certificate - il ne possède pas la clé privée utilisée pour signer. Lorsque https est accessible via un navigateur, le navigateur vous donne un avertissement mais peut vous laisser passer à la page.

Dans votre cas, il est votre client qui communique avec le serveur. Et vous pouvez vous assurer que toutes les validations appropriées du certificat sont en place. Si vous faites cela, vous devriez être bien

Modifier

Détacher Yishai - oui certains frais généraux est impliqué, principalement CPU, mais si cette surcharge supplémentaire pousse votre serveur par dessus bord, vous avez de plus gros problèmes avec votre application

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top