web-dev-qa-db-fra.com

Quel rôle joue la synchronisation d'horloge dans la communication SSL

Nous avons récemment implémenté la sécurité WS Trust sur SSL pour nos communications client/serveur. Notre application est utilisée par des milliers de nos clients, répartis dans le monde entier. L'un des problèmes que nous avons eu par le passé avec les communications sécurisées est que les clients avec des horloges non synchronisées ont des difficultés à se connecter, ce qui entraîne des appels et de la frustration chez les clients. Malheureusement, la réaction qui a provoqué dans le passé est de simplement désactiver cette vérification ou simplement d'augmenter le décalage d'horloge acceptable à des quantités presque infinies.

Je ne veux pas que la sécurité de notre système soit compromise, ni déclencher un afflux de plaintes de clients qui n'ont pas leurs horloges étroitement synchronisées avec l'heure de nos serveurs (qui sont synchronisés avec l'heure Internet). Pour éviter que le contrôle de synchronisation ne soit effectivement désactivé, je dois d'abord être en mesure d'expliquer à mes responsables pourquoi c'est une mauvaise idée et pourquoi les avantages de la synchronisation d'horloge l'emportent sur le coût des plaintes des clients ou de la confusion.

  1. Quel rôle la synchronisation d'horloge joue-t-elle dans les communications SSL et quels types de vulnérabilités la désactiver introduit-elle?
  2. Quelle est généralement considérée comme la plage maximale acceptable pour la synchronisation d'horloge dans les applications sécurisées destinées aux clients?
24
mclark1129

En SSL, les horloges sont utilisées pour validation du certificat. Le client doit s'assurer qu'il parle au bon serveur; pour cela, le client va valider le certificat du serveur. La validation implique de vérifier beaucoup de choses; deux d'entre elles impliquent des horloges:

  • Le certificat du serveur (et tous les certificats CA impliqués) doit inclure l'heure actuelle dans leur plage de validité. Chaque certificat en tant que champs notBefore et notAfter; l'heure actuelle doit se situer entre ces deux dates.

  • Le client est censé obtenir l'état de révocation de chaque certificat, en obtenant (et en validant) une CRL (Certificate Revocation List) auprès des émetteurs appropriés (le CALIFORNIE). Une CRL est considérée comme acceptable si (en particulier) elle n'est "pas trop ancienne": encore une fois, la CRL a un champ thisUpdate qui indique quand elle a été produite, et un champ nextUpdate qui plus- ou moins sert de date d'expiration pour la liste de révocation de certificats.

Si l'horloge du client est désactivée, cela interrompra l'une ou les deux de ces fonctionnalités. Par exemple, le certificat du serveur sera considéré comme "expiré depuis longtemps" ou "pas encore utilisable", ce qui entraînera un rejet.

Accepter que l'horloge du client soit désactivée signifie que le client est modifié pour ne pas tenir compte des dates dans les certificats et la liste de révocation de certificats. La conséquence ultime pour la sécurité est que si un attaquant réussit à voler la clé privée d'un serveur, alors cet attaquant pourra se faire passer pour ce serveur pour toujours. Le point de révocation est d'avoir une méthode vérifiée pour se remettre d'un tel compromis; et le point d'expiration du certificat est d'empêcher la CRL de croître indéfiniment. Si les clients ne tiennent pas compte de la révocation et/ou de l'expiration, la conséquence brute est que une fois qu'un compromis se produit, alors vous êtes condamné pour toujours . Ce qui est généralement considéré comme une mauvaise chose.

Sur une note plus claire, c'est un problème pour les clients, pas pour le serveur. Si vous utilisez le serveur, c'est le travail du client, pas le vôtre, pour valider votre certificat correctement. Si le client insiste vraiment pour faire des choses de façon non sécurisée et être vulnérable, alors vous ne pouvez pas vraiment l'empêcher, du moins pas techniquement (vous pouvez faire des choses contractuellement: si l'incompétence du client permet une violation, le le client doit payer pour cela).

Sur une note similaire, si les clients peuvent parler à votre serveur, ils sont connectés à une sorte de réseau, ce qui signifie que synchronisation de l'heure sur Internet est une possibilité. Exiger une horloge précise est difficile pour certains appareils intégrés, mais cela ne devrait pas l'être pour les ordinateurs en réseau (y compris les smartphones).

24
Thomas Pornin

Version simple (pour les gestionnaires): les synchronisations temporelles peuvent empêcher les attaques de relecture. Sans eux, quelqu'un pourrait enregistrer les paquets envoyés entre le client et le serveur, décrypter, modifier les données, puis renvoyer le flux de paquets et personne ne serait plus sage. Mais, comme le déchiffrement prend du temps, un horodatage (validé des deux côtés) peut indiquer que le flux est une "relecture".

Peut-être pourriez-vous envisager un délai plus long pour votre entreprise/application? Au lieu d'une fenêtre étroite, vous pourriez réaliser un certain avantage en élargissant la fenêtre. Cela devrait être analysé pour son impact complet sur vos systèmes, bien sûr.

4
schroeder