2010-08-24 15 views
0

En cas d'application Web, je peux comprendre qu'il n'y a aucune différence entre l'authentification du client et l'authentification de l'utilisateur; En ignorant XSS et d'autres exploits, le client Web est généré par le serveur/servlet. Mais supposons que vous ayez une application cliente Java parlant à l'application Java Server; Le serveur est associé à un certificat afin que le client puisse valider et vérifier si le serveur est approuvé. Maintenant, le client a aussi un certificat (client cert) pour que le serveur puisse vérifier s'il s'agit d'un client de confiance; Une fois cette authentification mutuelle effectuée, au lieu de présenter une boîte de dialogue de nom d'utilisateur/mot de passe à l'utilisateur, le certificat d'utilisateur (cert utilisateur) peut être transmis au serveur.Différence entre l'authentification de l'application client (client autonome java) et l'authentification de l'utilisateur

La question est de savoir s'il y a un avantage/une utilisation dans ce cas d'avoir un (client cert); Ou le certificat d'utilisateur suffira-t-il à lui seul à faire confiance au client?

Je sais que c'est une question évidente/mais ne peux pas créer une application client rouge? Ainsi, le client cert protègera contre ce scénario.

Répondre

1

Chaque fois que vous avez une application de serveur client, le serveur doit supposer que le client est compromis. Lorsqu'une authentification se produit (nom d'utilisateur/mot de passe, certificat, etc ... peu importe), le serveur doit accorder à l'utilisateur certaines autorisations pour utiliser les fonctionnalités du serveur. Chaque fois qu'une demande est faite au serveur, le serveur doit vérifier si l'utilisateur authentifié a l'autorisation d'effectuer cette action.

Faire confiance au client pour faire seulement des demandes autorisées vous ouvre aux attaques. Si vous vérifiez les autorisations sur le serveur et les entrées de nettoyage, vous n'avez pas à vous soucier de savoir si l'utilisateur utilise un client approuvé car même un client non autorisé ne pourra pas en faire plus que le client de confiance avec les mêmes informations d'authentification .

Ces principes s'appliquent, que vous utilisiez un client Web ou un client autonome. Même dans une application Web, je peux écrire un nouveau client et des données POST, utiliser des services RESTful, ou généralement parler au serveur Web et contourner complètement l'interface Web que vous me présentez.

+0

"même un client non fiable ne peut pas faire plus d'un client de confiance avec les mêmes informations d'authentification" Je suppose qu'il n'y a pas actuellement de mécanisme permettant au serveur de savoir si l'application cliente est compromise: Supposons que le client non fiable reçoive des données sensibles du serveur une session d'utilisateur de confiance. Puisque la signature de la méthode est la même et que les paramètres sont propres, le serveur enverra les données demandées. Rien n'empêche l'application de rouge d'utiliser ces données de manière incorrecte. Une chose que je peux penser est d'avoir un outil de vérification de l'intégrité. voir si l'application est compromise ?? –

+0

A fait quelques recherches dans le filet et a constaté que c'est une attaque commune - Excrept de - http://www.ucl.ac.uk/cert/nix_intrusion.pdf L'exemple le plus simple et classique de ceci est de remplacer/bin/login. 1. Obtenez une copie du code source dans/bin/login pour la version d'Unix 2. Modifiez le code source à/bin/login pour inclure un mot de passe «secret» qui vous permettra toujours de vous connecter en tant que root si vous entrez le mot de passe "backdoor". Cette porte dérobée ne créera pas non plus une entrée dans les fichiers journaux du système. Compilez le code source. ..... –

+0

Le fait est que vous pouvez faire confiance à un utilisateur en fonction des informations d'identification qu'il fournit, mais vous ne pouvez pas faire confiance à une application client, sauf si vous êtes dans un environnement fermé (environnement d'entreprise vraiment verrouillé). Le problème avec un vérificateur d'intégrité du côté client est qu'une application compromise pourrait fausser la vérification d'intégrité. Peu importe la complexité de la vérification de l'intégrité, si on lui donne assez de temps, une personne pourrait la contourner. – rancidfishbreath

0

Si un attaquant parvient à modifier d'une manière ou d'une autre l'application cliente, il peut utiliser la certification d'utilisateur valide pour accéder au serveur.

Le serveur doit vérifier l'application cliente, non pour le bien du serveur (nous supposons que le serveur vérifie si le client peut effectuer telle ou telle opération, mais pour s'assurer que le client n'est pas phishing par un faux client). Ensuite, le serveur peut proclamer que toutes les opérations effectuées par le client-1 sont effectuées via une application-client vérifiée (agent) de sorte qu'elles étaient réellement destinées par l'utilisateur.

+0

Je suppose que vous dites que nous devrions avoir à la fois le certificat client et le certificat d'utilisateur; Mais le serveur peut-il être sûr que le client n'est pas compromis .. veuillez voir mes commentaires aux messages ci-dessous - Merci –

+0

Oui, je le disais. Et c'est un bon point, peut-être que le serveur ne peut pas savoir si l'application cliente est compromise. Je ne sais pas de quels commentaires parlez-vous ... Je suppose que les commentaires sur @rancidfishbreath. – helios

+0

Les commentaires dont je parlais étaient ceux de rancidfishbreath answer –

0

Le certificat de l'application cliente (et sa clé privée) peut facilement être arraché de l'application et une application malveillante peut être créée. Les moyens de contrer cela sont (a) utiliser le certificat de l'utilisateur et laisser l'utilisateur le fournir quand nécessaire et (b) utiliser un cryptotoken USB pour stocker le certificat client et sa clé privée. Les cryptotokens ne laissent pas les clés privées pour que l'attaquant ne puisse pas les copier (bien qu'il puisse utiliser le jeton avec son application, s'il a un accès physique au jeton).

+0

Avez-vous vraiment besoin d'un certificat/clé privée pour créer une application rouge. Théâtralement, vous pouvez éditer le binaire client pour ajouter des instructions malveillantes? –

+0

Vous devrez alors identifier les menaces possibles. Essayez-vous d'identifier votre application client sur le serveur (assurez-vous que c'est votre client qui appelle le serveur) ou vous essayez de vous assurer que votre application n'est pas modifiée (encore une fois, dans quel but) ou ...? En fonction des dangers possibles, les solutions sont différentes. –

+0

oui notre exigence est de sécuriser à plusieurs couches; Je suppose que l'utilisation d'un certificat client est de garantir l'identité du client; Cependant, je suppose que le terme d'identité pour une application logicielle n'a de sens qu'en relation avec l'intégrité des données. Cependant, je crois que même sans vérification de l'intégrité des données, il y a une certaine valeur dans l'authentification des clients; –