Fermer

avril 17, 2024

Empêcher l’attaque MITM par l’épinglage de clé publique SSL : Partie – 2

Empêcher l’attaque MITM par l’épinglage de clé publique SSL : Partie – 2


Dans ce blog, nous allons découvrir l’épinglage de clé publique et comment y parvenir avec URLSession. Avant cela, discutons brièvement Épinglage du certificat SSL.

L’épinglage SSL est une technique de sécurité utilisée dans les applications mobiles et Web pour garantir que le client communique uniquement avec les serveurs via un certificat SSL spécifique ou une clé publique, ce qui empêche les attaques de l’homme du milieu où un attaquant intercepte la communication entre le client et le client. serveur.

Comment fonctionne le MITM ?

Les pirates utilisent les attaques MITM pour accéder à des informations personnelles confidentielles en se faisant passer pour des utilisateurs ou des pages Web connus. Ils espionnent les réunions privées ou les données confidentielles des utilisateurs et extraient des informations utiles.

Instances réelles d’attaque MITM

Dans le blog précédent, nous avons effectué l’épinglage de certificats (Consultez ce lien pour en savoir plus.)voici les différences et les avantages :

Avantages:

  1. Épinglage du certificat : ajoutez un certificat SSL à votre ensemble d’applications et liez ce certificat à votre application.
  1. Épinglage de clé publique : Dans cette méthode d’épinglage, nous allons générer une clé publique, que nous allons utiliser dans notre application. Avec cette méthode, nous n’avons pas besoin de modifier le certificat s’il expire.

L’épinglage de certificat est facile à mettre en œuvre mais présente certaines limites :

  1. Lorsque le certificat expire, nous devons le mettre à jour, puis nous pouvons publier l’application avec la plus récente, ce qui entraîne moins de flexibilité lorsque nous l’utilisons.
  2. L’application ne fonctionnera pas lorsque le backend ou le serveur modifie le certificat de son côté, à moins que nous remplaçons le certificat par un nouveau.

Commençons:

Maintenant, nous allons télécharger le certificat à l’aide de la commande OpenSSL :

  1. Nous avons besoin d’une copie du certificat du serveur, isro.vercel.app. Nous allons maintenant utiliser le terminal à l’aide des commandes OpenSSL.
  2. Il est plus sûr d’utiliser l’épinglage de clé publique car cela n’affectera pas le fonctionnement de l’application en cas de changement du côté serveur jusqu’à ce que le serveur conserve la même clé publique.

Voyons ces étapes :

◙ Nous pouvons récupérer la clé publique du certificat local, qui a été téléchargée et sera incluse dans votre code sous forme de chaîne. L’application va comparer la clé publique distante, qui sera reçue lors d’une requête réseau au moment de l’exécution, avec la clé locale, qui est stockée quelque part dans le projet sous forme de chaîne.

◙ Utilisez cette commande pour télécharger ceci dans le bundle du projet.

openssl s_client -connect isro.vercel.app:443 -showcerts < /dev/null | openssl x509 -outform der > vercel.der

Utilisez la commande ci-dessus sur le terminal.

◙ Ensuite, nous devons créer .pem à partir du téléchargé vercel.der et convertissez-le en vercel_public_key.pem format en extrayant et en enregistrant sa clé publique. Utilisez les commandes ci-dessous pour le faire.

  openssl x509 -inform der -in vercel.der -pubkey -noout >  vercel_public_key.pem

Ou,

 openssl x509 -inform der -in vercel.cer -pubkey -noout > vercel_public_key.pem

◙ Après avoir enregistré le fichier .pem, générez un hachage et encodez-le en utilisant l’encodage base64. Ici, on peut utiliser cette commande, beaucoup plus simple à sauvegarder et plus lisible. Pour le hachage, je vais utiliser SHA256. Utilisez la commande ci-dessous pour générer le hachage

cat vercel_public_key.pem | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64

Utilisez la commande ci-dessus sur le terminal.

Votre clé publique ressemblera à ceci

u/joKCLcfT2khmv/jPpWcsbUx1mBQ1PY0QXYg5cHonE=

Ou,

Nous pouvons utiliser la commande ci-dessous pour effectuer tous ces processus en une seule commande (j’ai utilisé isro.vercel.app pour cet exemple de projet). Il générera le code de hachage du certificat, que nous utiliserons dans notre projet de démonstration.

openssl s_client -servername isro.vercel.app -connect  isro.vercel.app:443 | openssl x509 -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64

Utilisez la commande ci-dessus sur le terminal.

Nous sommes maintenant prêts avec une clé de hachage. Il est temps d’écrire du code maintenant. Mettez le code ci-dessous dans notre NetworkManagerWithPublicKey.swift classe.

Ici, clé publique locale est la clé de hachage que nous obtenons de notre certificat.

  1. Un tableau d’entiers non signés, qui indique l’algorithme et tous les paramètres d’algorithme avec lesquels la clé publique doit être utilisée, est représenté par rsa2048Asn1En-tête.
  2. Vérifions cette méthode ; nous avons utilisé la fonction OpenSSL-sdgst avec sha256 hachage pour créer nos hachages. Pour recréer les mêmes hachages dans notre code, le rsa2048Asn1En-tête des octets sont nécessaires.
  3. Cette fonction créera un hachage à partir des données reçues en utilisant le sha256 algorithme et renvoie la représentation codée en base64 du hachage.

Et maintenant, nous devons implémenter la fonction URLSessionDelegate. Veuillez consulter le code ci-dessous. Veuillez consulter les captures d’écran ci-jointes.

Résumé:

De nos jours, il est obligatoire d’implémenter SSL/TLS lors de la communication avec le serveur. Nous nous appuyons sur une chaîne de confiance pour vérifier l’identité du client ou du serveur, ce qui n’est pas suffisant ; Les attaques MITM (Man in the Middle) peuvent encore être possibles. Nous ajoutons donc une couche de protection en ajoutant un certificat ou une clé publique, qui est également nécessaire de l’autre côté. Nous avons appris comment extraire une clé de serveur et implémenter l’épinglage sur iOS.

J’ai écrit le code dans Rapide langue. N’hésitez pas à commenter ci-dessous pour toute question. Vous pouvez accéder au code complet sur GitHub. Vous pouvez vérifier cette URL :

Épinglage du certificat de la partie 1 : https://github.com/Vibhashkumar2022/SSLPinningUsingURLSession.

Épinglage de clé publique de la partie 2 : https://github.com/Vibhashkumar2022/MITM-Project-Part-2

Remarque : Le certificat ajouté dans mon référentiel peut expirer. Si vous ne parvenez pas à obtenir une réponse de l’API, recherchez le certificat et obtenez-en un nouveau en suivant les étapes ci-dessus.

VOUS TROUVEZ CECI UTILE ? PARTAGEZ-LE






Source link