Pourquoi avons-nous besoin de l’épinglage de certificat (certificate pinning)?

Pourquoi HTTPS est-il insuffisant pour assurer la confidentialité, l'intégrité et l'authenticité du canal de communication entre une application mobile et le serveur API ?

Lors que HTTPS assure la confidentialité, l'intégrité et l'authenticité dans le canal de communication entre une application mobile et le serveur API, l'épinglage de certificat (certificate pinning) aide à protéger ces garanties contre toute compromission :

1. Pour améliorer encore la sécurité des hypothèses basées sur la confiance

L'émission de certificats non vérifiés par les autorités de certification (CA) racine et intermédiaires pourrait permettre à un attaquant d'intercepter tout trafic crypté TLS vers ce domaine s'il est capable d'intercepter le canal ou d'usurper le DNS pour ce faire.

Cela est possible car les appareils mobiles sont préinstallés avec un magasin de confiance (trust store) de certificats racine. Les connexions TLS sont considérées comme fiables s'il existe une chaîne de confiance vers l'un de ces certificats d'autorité de certification racine. Cela signifie que si l’une des autorités de certification est compromise ou émet des certificats de manière incorrecte, la confiance est rompue et entachée, comme le montrent les célèbres cas de DigiNotar, GlobalSign et Comodo. En d’autres termes, la sécurité TLS non épinglée n’est aussi forte que l’autorité de certification la plus faible incluse dans le magasin de confiance de l’appareil.

2. Pour améliorer encore la sécurité des applications contre l'ingénierie inverse

Un attaquant peut contrôler à la fois son accès au réseau et l’appareil sur lequel il installe l’application. Si l'application n'utilise pas l'épinglage, il est alors relativement facile d'installer un certificat supplémentaire dans le magasin de confiance système de l'appareil, leur permettant d'intercepter le trafic API à l'aide d'un outil proxy. Cela leur permet d'extraire tous les secrets de l'application (tels que les clés API) et la structure des appels API du canal et de les utiliser pour créer un script pour usurper l'identité de l'application. Même si le code de l’application est obscurci ou renforcé, ce style d’ingénierie inverse peut toujours être utilisé.

L'épinglage peut rendre cette approche d'ingénierie inverse beaucoup plus difficile, ce qui en fait une étape importante dans l'amélioration de la sécurité de l'application. Cependant, il est toujours possible de briser l'épinglage lorsqu'un attaquant contrôle un appareil rooté ou jailbreaké, comme indiqué dans « Est-il possible de contourner l'épinglage de certificat ».