IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Authenticité d'une connection [sockets]


Sujet :

Linux

  1. #1
    Membre du Club Avatar de Array
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 210
    Points : 55
    Points
    55
    Par défaut Authenticité d'une connection [sockets]
    Bonjour,

    Je fais en ce moment un serveur qui envoie des "serial numbers" (un numéro unique d'identification, abrégé ici "uid") à un client afin de reconnaître ce même client à sa prochaine visite...

    Le fait est que je SAIS quels IPs iront chercher ces uid (seule une liste d'IPs autorisés y auront accès) par conséquent je peux utiliser bloqeur d'autres tentatives venant d'autres addresses.

    Cependant, je ne voudrais pas qu'un scénario particulier se produise:
    une attaque visant le serveur, qui envoie un paquet "spoofé" (c'est à dire donc l'addresse de l'envoyeur a été modifiée dans l'entête du paquet) demandant une requête pour l'obtention d'un nouveau uid... en effet si cela se produisait, et que l'addresse corresponde à un des IPs autorisés, je pourrais bien me retrouver à gaspiller énormément de uids et même mon algorithme de génération pourrait potentiellement être découvert.
    Il me faut donc empêcher cela.

    Je me disais donc que le seul moyen d'être sûr que l'addresse distant soit bel et bien la bonne, je dois faire ces étapes
    1- Réception d'un paquet
    2- Envoie d'un paquet de confirmation à l'addresse distante
    3- L'addresse distante réplique...
    4- Réception du paquet de confirmation

    Voici mes questions:
    1- Est-ce que, lors de l'établissement d'une connection avec l'appel socket(), accept(), etc etc, ces étapes sont déjà faites d'avance (autrement dit est-ce que l'on est sûr de l'autheticité de l'addresse distante)?
    2- Avez vous une meilleure idée, plus sécuritaire, afin de palier ce problème?

    Merci beaucoup!

    Cordialement,
    Array

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 149
    Points : 28 116
    Points
    28 116
    Par défaut
    Bonjour,

    Lors de l'etablissement d'une connexion securisee, il y a plusieurs echanges qui sont faits - on parle par exemple de 3-way handshake.

    Un paquet spoofe seul ne permet pas d'etablir une connexion, car ton serveur va repondre a l'adresse spoofee, pas a l'emetteur.

    Ta seule crainte est le man-in-the-middle, et la, il est tres difficile de s'en premunir sans avoir un minimum de controle sur la machine cliente.

    Au fait, j'espere bien que tes connexions sont securisees avec SSL ?
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Membre du Club Avatar de Array
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 210
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    Au fait, j'espere bien que tes connexions sont securisees avec SSL ?
    Mhm en fait non :[]

    Pour être franc, c'est une implémentation qui nécessite vraiment d'être rapide dans l'établissement des connexions et des réponses, Le,voie des données etc etc.
    Donc... avant d'essayer je me disais... est-ce que SSL ralentit de beaucoup par rapport aux appels standards de l'OS?

    Je suis peu connaissant en ce qui a trait aux connexions sécurisées.

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 149
    Points : 28 116
    Points
    28 116
    Par défaut
    Citation Envoyé par Array Voir le message
    c'est une implémentation qui nécessite vraiment d'être rapide dans l'établissement des connexions et des réponses, L'envoie des données etc etc.
    Donc... avant d'essayer je me disais... est-ce que SSL ralentit de beaucoup par rapport aux appels standards de l'OS?
    Quel est le besoin :
    Temps acceptable pour une connexion ?
    Est-ce que la connexion peut rester ouverte en permanence, ou bien doit-elle etre refaite a chaque fois ?
    Est-ce que l'utilisation CPU est genante (sur un micro-controlleur par exemple) ?
    De quel niveau de securite avez-vous besoin ?

    A mon avis, tu ne verras memem pas la difference en chiffrant les donnees ou non, pour peu que tu aies des serveurs et pas des terminaux mobiles - et encore.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Avec de l'ARP spoofing on peut tout à fait se faire passer pour autre machine.

    Avec un serveur S et une machine pirate P voulant se faire passer pour un client légitime C, la machine P émet des réponses ARP qui disent "l'IP de C, elle correspond à mon adresse MAC". En plus de ça P met son interface en mode promiscuous.

    P envoie à S un paquet en mettant l'adresse IP de C en adresse source. Quand S répond, il émet un requête ARP pour connaître l'adresse MAC correspondant à l'adresse IP de C. Il reçoit une des réponses ARP "pirates" émises en permanence par par P. S envoie donc un paquet destiné à C, avec l'IP destination de C, mais l'adresse MAC destination de P. P reçoit la réponse et fait ce qu'il veut avec.

  6. #6
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 149
    Points : 28 116
    Points
    28 116
    Par défaut
    Pour l'ARP spoofing, il faut tout de meme etre sur le meme sous-reseau, donc c'est vite tres tres limitant (heureusement d'ailleurs).
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  7. #7
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Non pas du tout, il suffit de se faire passer pour la gateway et ça roule.

  8. #8
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 149
    Points : 28 116
    Points
    28 116
    Par défaut
    Vu qu'on ne peut pas connaitre la route empruntee par les paquets entre Source et Destination, et que celle-ci peut etre amenee a changer (en fonction de la charge par exemple), et que pour faire du ARP spoofing il faut emettre en continue, pour que ca fonctionne, il faut en pratique etre sur le reseau de S ou de D (pas forcement le meme sous-reseau, mais au moins sur le reseau de l'entreprise ou quelque chose comme ca).
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  9. #9
    Membre du Club Avatar de Array
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 210
    Points : 55
    Points
    55
    Par défaut
    @gangsoleil : Il n'y a pas de temps maximal de connexion, même si je privilégie, bien entendu, la philisophie "le plus rapide reste le mieux".

    L'implémentation est en fait une sorte de "plugin" apportant des fonctionnalités étendues à un serveur (nommé ici serveur A pour le distinguer de mon propre programme serveur) qui lui fait d'autres multiples tâches. Néanmoins, l'important, c'est que le client (celui se connectant à mon programme serveur, que je nommerai ici server B) tournera forcément sur une machine qui elle-même tourne un serveur A.

    Les machines clientes B sont en fait à nous. Elles sont sous notre contrôle total (virtualisées). Néanmoins, je crois que je vais aller avec l'approche SSL, car j'ai toujours préconisé "sécurité", à moins qu'avec ces nouvelles informations vous dites "non n'utilise pas SSL".
    Cependant, il est à noter qu'autour de quatre/cinq clients B et serveurs A peuvent tourner sur une même machine (chacun des clients B apportant des fonctionnalités à son propre serveur A) et connectant à un même IP correspondant au serveur B (il reste le même pour sa part).

    Le serveur B est multithread, il gère les connexions avec un socket, file d'attente de 1024, et les changements sur le socket sont auditionnés avec la fonction select(). Un thread pour les connexions, un pour le "processing" des données et un pour l'envoie des données.

    Le client du server B (le plugin en question), tant qu'à lui, est aussi multithread. Un thread pour la validation des signature existantes déjà captées sur les clients se connectant au serveur A, et un thread pour la génération et l'assignation de nouvelles signatures. Ces deux threads, pour remplir leuurs tâches se connectent évidemment au serveur B (i.e. pour la validation comme pour la génération).

    La connexion entre client B et serveur B peut effectivement être maintenue ouverte en permanence, je n'y vois pas d'inconvénient.

    Donc, à la lumière de ces faits, trouvez vous que SSL serait appropriée?
    En en passant, trouvez vous les principes (les threads et tout) bien échafaudés? Apporteriez-vous des modifications?

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/01/2012, 17h46
  2. Etablir une Connection Socket
    Par Popeye63 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 09/08/2007, 09h05
  3. [Proxy][Socket] Etablir une connection au travers d'un proxy
    Par groskek dans le forum Développement
    Réponses: 1
    Dernier message: 03/03/2006, 20h01
  4. Réponses: 12
    Dernier message: 21/02/2006, 11h47
  5. Envoyer un TPoint par une connection Socket ????
    Par jeldorak dans le forum C++Builder
    Réponses: 2
    Dernier message: 25/11/2002, 19h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo