X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=prog_internet%2Fprog_internet_09.xhtml;fp=prog_internet%2Fprog_internet_09.xhtml;h=0000000000000000000000000000000000000000;hb=0a552a95e70324a04e9d06bd30ac5bc96b2a58b5;hp=d2166a902196b4a797703d9ae924fe03f3306c39;hpb=171bd61f3e4cf06638c6a90fdc053efbec9623ff;p=hacks%2FsimpleWebSlides.git diff --git a/prog_internet/prog_internet_09.xhtml b/prog_internet/prog_internet_09.xhtml deleted file mode 100644 index d2166a9..0000000 --- a/prog_internet/prog_internet_09.xhtml +++ /dev/null @@ -1,500 +0,0 @@ - - - - - Notions de sécurité sur le Web - - - - - - - - - - - - - - - - - - - - -
-

Programmation Internet

-

Cours 9

-
kn@lri.fr
- http://www.lri.fr/~kn -
- -

Faiblesses d'HTTP

- -
-

Disclaimer

- -

Ça ne va pas faire de vous des hackers, - juste vous sensibiliser aux problèmes de sécurité… -

-
- -
-

Élements de cryptographie (1)

-

Alice et Bob veulent échanger des données - confidentielles.

-
    -
  1. 1. Chiffrement symétrique: -
      -
    • - Ils se mettent d'accord sur une clé commune -
    • -
    • Alice chiffre son message avec la clé et - l'envoie à Bob
    • -
    • Bob déchiffre le message avec la clé -
    • -
    -

    - Non sûr (Alice et Bob doivent se mettre d'accord sur une clé en - « clair », par email par exemple) ou non pratique - (ils doivent se rencontrer physiquement pour échanger la - clé).
    - Efficace: on peut implanter plusieurs algorithmes - de chiffrements en utilisant uniquement des opérations - logiques de bases - (AND, OR, XOR). Il est facile de - les implanter sur des puces dédiées (cartes de crédit, - processeurs mobiles). Ils sont « sûrs » tant que la clé - reste secrète. -

    -
  2. -
-
-
-

Élements de cryptographie (2)

-

Alice et Bob veulent échanger des données - confidentielles.

-
    -
  1. 2.  Chiffrement assymétrique: -
      -
    • Bob crée une clé - publique KBpub - et une clé - secrète KBpriv, telle - que
      - ∀msg, KBpriv(KBpub(msg)) - = KBpub(KBpriv(msg)) - = msg -
      - Bob diffuse sa clé publique (sur sa page Web - par exemple, ou dans un annuaire de clé) et garde sa clé - privée secrète. -
    • -
    • Alice chiffre son message m avec la clé - publique de Bob - (KBpub(m)) et l'envoie à Bob -
    • -
    • Bob - déchiffre le message avec sa clé - privée: KBpriv(KBpub(m))=m -
    • -
    -

    - Sûr et pratique (Bob a généré une paire de clé, et a - déposé la clé publique sur une page Web)
    - Peu efficace: repose sur des problèmes - mathématiques difficiles (factorisation de grands entiers, - courbes eliptiques sur les corps finis). Chiffrer et - déchiffrer un message n'est pas réaliste pour des grands - messages (vidéo en streaming, requêtes Web, …). -

    -
  2. -
-
-
-

Élements de cryptographie (3)

-

On combine les deux méthodes. (Alice envoie un message à Bob)

- -

Ceci est à la base de protocoles tels que HTTPS

-
- -
-

Éléments de cryptographie (4)

-

Le chiffrement assymétrique permet aussi d'avoir la - preuve que quelqu'un est bien Bob!

- -

Comment garantir que la personne qui a généré - les clés au départ est bien Bob ? -

-
- -
-

HTTP: protocole texte « en clair »

-

HTTP est un protocole texte, les données ne sont - pas chiffrées (cf. TP3) et sans identification

- -
-
-

Espionnage de connexion

-

Alice représente le client, Bob le serveur et Eve (Eavesdropper) - l'attaquante

-

On suppose que Eve est root sur la - machine. Il suffit de lire les paquets qui transitent par la - carte réseau (tcpdump sous Linux). -

- -

Ce problème touche tous les protocoles en clair: HTTP, POP, - IMAP, FTP, …. Il peut être résolu grace au chiffrement - de toute la connexion.

-
-
-

Attaque Man in the middle

-

Mallory se place entre Alice (cliente) et Bob (banque), par exemple au - moyen d'un e-mail frauduleux en HTML:

-
  1. L'émail contient: - - - Bonjour, - veuillez vous connecter à votre banque en cliquant ici: - www.bob.com - -]]> -
  2. -
  3. Alice, insouciante, clique sur le lien -

    - A M B -
    -
  4. -
  5. Mallory peut retransmettre les requêtes entre Bob et - Alice, en les modifiant au passage. Le problème est causé - par un manque d'authentification (Mallory n'a pas a - prouver à Alice qu'il est Bob) -
  6. -
-
-
-

Solution: HTTPS

-

HTTP Secure

-
  1. Respose sur de la cryptographie assymétrique (pour - l'authentification et le partage de clé) et symétrique (pour le - chiffrement de connexion)
  2. -
  3. Permet d'authentifier les correspondants et de protéger - les données -
  4. -
  5. Suppose l'existence de tiers de confiance Alice - et Bob font confiance à Trent (Trusted Third - Party)
  6. -
-

Bob possède des clés publiques et privées - (KBpub - et KBpriv), Trent possède des clés - publiques et privées (KTpub - et KTpriv) -

-
-
-

HTTPS (détail du protocole)

-

Bob et Trent se rencontrent. Trent signe - la clé publique de Bob en calculant -

- SB=KTpriv(KBpub) -
- Comme Trent utilise sa clé privée on sait que seul - Trent a pu générer cette signature. De plus, Trent - a rencontré Bob donc il certifie que la - clé KBpub appartient bien à - quelqu'un nommé Bob. -

-
    -
  1. Alice (client) veut se connecter à Bob. Bob fournit sa - clé publique KBpub et la - signature SB
  2. -
  3. Alice contacte Trent (en qui elle a confiance) et récupère sa clé - publique KTpub. Elle déchiffre la - signature: KTpub(SB) - et vérifie qu'elle retombe bien sur la clé publique de Bob. -
  4. -
  5. Elle peut alors choisir une clé symétrique, la chiffrer - avec KBpub et entammer une - communication chiffrée et authentifiée avec - Bob.
  6. -
-
-
-

Tiers de confiance

-

Les tiers de confiance sont des entités (états, associations, - compagnies privées) qui se chargent de vérifier les clés - publiques d'autres entitées. C'est une - vérification physique (documents administratifs, …). -

-
ssl -
-

Cette erreur s'affiche quand une signature n'est pas conforme - ou n'a pas pu être vérifiée

-
- -
-

Tiers de confiance

-

Attaques contre les authorités de certifications - (tiers de confiance): difficiles, mais pas impossible. Certains - tiers de confiance sont douteux (états voyous, compagnie - piratées dont les clées privées sont compromises,…)
- Attaques d'implémentation (plus probables) : on - exploite un bug dans le code des serveurs web ou des - navigateurs
- Autres faiblesses: HTTPS est en « haut » dans la pile - IP (application). On peut donc avoir connaissance du nombre de - paquet échangés, des adresses IP des participants, la taille - et la fréquence des paquets… (même si on n'en connait pas le - contenu). Cela permet certaines attaques statisties ou de deni - de service. -

-
-

Confidentialité, traîtement des cookies

-
-

Traçage par cookies

-

Normalement, un cookie ne peut être - lu que que par le site émetteur (cf. cours 8). But:

-
    -
  1. Empêcher un tiers de lire des données personnelles - (ok)
  2. -
  3. Empêcher un tiers de savoir quels sites ont été visités - (pas ok)
  4. -
-
    -
  1. Un site B utilise des publicités pour se rémunérer. Le - site marchand M fournit du code HTML: - <script src="http://marchand.com/pub.js"/> -
  2. -
  3. A visite le site B. Le - code pub.js peut alors faire les choses suivantes: -
      -
    1. Scanner le contenu de la page de B. Possible car le - script est « inclus » dans une page fournie par B
    2. -
    3. Se connecter - àhttp://marchand.com/collecte.php et - passer en paramètre post ou get le - contenu de la récolte
    4. -
    5. http://marchand.com peut alors stocker un - cookie valide pour son domaine avec le contenu de - la récolte d'information -
    6. -
    -
  4. -
  5. - Lorsque A visite le site marchand M, ce dernier - relit son cookie et fait des propositions ciblées. -
  6. - -
-
-
-

Solutions

- -

Nouveau standard du W3C en préparation pour signifier à un - site qu'on ne souhaite pas être suivi (méthode « volontariste - » qui suppose que les sites commerciaux sont gentils et - respectent le protocole)

-
-
-

Sécurité des cookies de session

-

On a vu que les sessions PHP (vrai aussi pour les autres - langages côté serveur) stockent dans un cookie un identifiant - unique. Que se passe-t-il si on vole ce cookie ? (démo) -

-

Pas d'autre solution que de faire confiance - au root (solutions partielles basées sur le chiffrement - des disques dur) -

-
-

Attaques par injection de code

-
-

Injection de code Javascript/HTML

-

Vulnérabilité: on exploite le fait qu'un site utilise - directement les entrées fournies par l'utilisateur.
- Exemple: commentaires sur un blog. -

-
    -
  1. Une page Web utilise un formulaire pour permettre de - poster des commentaires sur un blog: - - Commentaire:
    - ]]><textarea rows="20" cols="60" name="zonetexte"/> - -]]>
    -
  2. -
  3. Un bout de code PHP écrit le commentaire sur la page: - echo "Commentaire #$i: <p>"; - echo $_POST["zonetexte"]; - echo "</p>"; - -
  4. - - -
-
-
-

Injection de code Javascript/HTML

- Problème tout ce qui est dans la zone de texte est copié - dans la page HTML de chaque client qui consulte la page - et interprété par son navigateur: - Debut du commentaire - <script type="text/javascript"> - ... //code javascript malicieux - </script> - Fin du commentaire - -
-
-

Injection de code PHP

-

Problème lié à l'utilisation de la fonction - eval(command) - command est une chaîne de caractères - considérée comme étant du code PHP et eval exécute - cette chaîne: -

- - echo eval ("1 + 2 * 3"); // affiche 7 - echo eval ('$x = 4;'); // définit la variable $x - echo $x; // affiche 4 - -

Il ne faut jamais donner une chaine de caractère de - l'utilisateur comme argument à eval (sauf durant le - TP 9)

-
-
-

Solutions

- -
-
-

Injection de code SQL

-

SQL: language de requête permettant d'interroger des bases de - données. Utilisation classique depuis PHP (on suppose un - formulaire qui met dans le champ "nom" le nom d'un - étudiant): -

- - $Q = "SELECT * FROM STUDENTS WHERE "; - $Q = $Q . "(NAME = '" . $_POST["nom"] . "');"; - mysql_query($Q); - -

Si l'utilisateur donne comme nom « Toto », la requête envoyée - à la base est:

- SELECT * FROM STUDENTS WHERE (NAME = 'Toto'); -

Affiche toutes les lignes de la table STUDENTS pour - lesquel le nom est Toto

-
-
-

Jusqu'au jour où …

-

©xkcd
- -

- SELECT * FROM STUDENTS WHERE (NAME ='Robert'); - DROP TABLE STUDENTS; --');' - - -
-
-

Ou bien…

-
- -
-
- -