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

C# Discussion :

Stocker une chaine de façon sécurisée en mémoire


Sujet :

C#

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Points : 152
    Points
    152
    Par défaut Stocker une chaine de façon sécurisée en mémoire
    Bonjour,

    Je possède 2 fichiers.exe, le premier qui n'est pas écrit en C# et dont je ne possède pas le code source et on ne souhaite pas me le donner. Le second est lancé par le premier avec des chaines de caractères en paramètres et affiche des informations à partir de ces chaines. Pour simplifier, à partir de ce second .exe on peut faire des trucs qui utilisent ces chaines de caractères.

    Sachant que ces chaines de caractères sont constituées d'un identifiant et d'un mot de passe et que les 2 choses ne peuvent être regroupées dans un seul et même .exe, je souhaite savoir comment stocker les chaines dans le second .exe et de manière sécurisée, mais qu'ensuite ça peut être réutilisé.

    Par exemple dans le premier .exe on saisit "hello" et "123456" dans 2 textbox, ça lance le second .exe avec ces chaînes en paramètre, ça affiche des choses en fonction du fait que la première chaine est "hello", puis ça doit utiliser hello (et pas une version chiffrée de hello sinon ça ne fonctionne pas) afin de faire d'autres choses.

    Cependant je m'inquiète sur une éventuelle interception des données dans le second .exe.

    Savez vous si on peut y faire quelque chose ?

    Merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 177
    Points : 5 738
    Points
    5 738
    Par défaut
    Le premier exe lance le deuxième avec comme paramètre un identifiant et un mot de passe en clair.

    A partir de ces informations, je peux te dire que tu ne pourra rien faire pour sécuriser le compte transmit.
    Dans le gestionnaire de tâche Windows tu peux facilement afficher la "Ligne de commande" complète d'un programme avec ses paramètres.

    Cela ne sert donc à rien de vouloir sécuriser en mémoire puisqu'il y à déjà un moyen bien plus simple de les trouver.

  3. #3
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 695
    Points
    10 695
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Alors juste pour info, il existe la classe SecureString qui permet justement de manipuler des informations "sensibles".

    Mais après, je suis du même avis que ericlm128, l'accès aux paramètres de lancement d'un processus se fait assez simplement... Donc, est-ce bien utile... je ne saurais le dire.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Points : 152
    Points
    152
    Par défaut
    Bonjour,

    Je vais en faire part aux personnes qui ont créé le premier .exe mais à mon avis si quelqu'un qui sait qu'on peut retrouver les paramètres utilisés en sachant le faire à distance, sait aussi installer un keylogger, donc ça revient +/- à la même chose.

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 177
    Points : 5 738
    Points
    5 738
    Par défaut
    en sachant le faire à distance
    Qui à parlé de remote ?

    Tu as raison, autant ne pas fermer ta voiture puisque si quelqu'un sait l'ouvrir de toute façon il saura aussi la démarré

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 654
    Points : 5 209
    Points
    5 209
    Par défaut
    Citation Envoyé par encoremoi21258
    Sachant que ces chaines de caractères sont constituées d'un identifiant et d'un mot de passe et que les 2 choses ne peuvent être regroupées dans un seul et même .exe, je souhaite savoir comment stocker les chaines dans le second .exe et de manière sécurisée, mais qu'ensuite ça peut être réutilisé.

    Par exemple dans le premier .exe on saisit "hello" et "123456" dans 2 textbox, ça lance le second .exe avec ces chaînes en paramètre, ça affiche des choses en fonction du fait que la première chaine est "hello", puis ça doit utiliser hello (et pas une version chiffrée de hello sinon ça ne fonctionne pas) afin de faire d'autres choses.
    Ce que je comprends dans ce que tu as écrit c'est que tu as une application qui te sert uniquement à entrer un login et un password et à les passer tels quels à une autre application. Je dis ça parce que nulle part tu ne parles de transformation de ces chaines par le premier exe, tu dis jute "ça lance le second exe avec ces chaines". Si je me contente de ce que tu as dis, le premier exe se sert absolument à rien.

    Encore plus bizarre, le premier exe (dont tu n'as pas les sources et par conséquent dont tu n'as aucune idée de ce qu'il fait) sais lancer ton programme à toi.
    J'en déduis que :
    - soit le chemin vers ton programme, et la façon dont ses paramètres sont passés, sont codés en dur dans cette première application (donc écrit spécifiquement pour tes besoins et je ne vois aucune raison de ne pas te fournir les sources)
    - soit tu dois toi même renseigner le chemin vers ton exe et ses paramètre dans l'IHM du premier exe (qui se contente de lancer le second et qui ne sert donc strictement à rien).

    Bref tout ça pour dire qu'il y a quelque chose que tu ne nous dis pas.
    Ou alors tu nous décrit une solution qui répond à ton besoin mais pas ton besoin réel.

    Pour résumer :
    - soit le premier exe ne sert à rien s'il se contente de passer en paramètre des informations que tu as saisis et dans ce cas autant gérer ta connexion via ton propre programme.
    - Soit le premier exe transforme ces données avant de les transmettre. Mais si tu sais traiter ce qu'il te transmet, c'est que tu sais comment est effectuée cette transformation. On en revient au même résultat, si tu sais faire ce que fait le premier exe, tu peux t'en passer et écrire ton propre lanceur pour transmettre ces données d'une autre manière pour que se soit plus sécurisé)

    Que fait exactement le premier exe ?

  7. #7
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 146
    Points : 7 388
    Points
    7 388
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par popo Voir le message
    Que fait exactement le premier exe ?
    J'imagine que ça peut être n'importe quoi...

    Dans Notepad++, si tu fais F5 ça démarre un programme (de ton choix) en passant le fichier en cours d'édition en paramètre.
    Dans la plupart des ERP et autres outils éditeurs il existe des mécanismes d'extension permettant de lancer n'importe quel EXE en passant des paramètres.

    En soit, je ne vois rien de surprenant dans la demande.

    Plusieurs pistes :
    - Si le premier programme utilise une base de données, alors tu peux stocker des informations dans une table, que tu récupérera dans ton second EXE
    - Si le premier programme permet de créer des fichiers de paramètres, alors de la même façon tu peux créer un fichier, lancer le second EXE qui va lire ce fichier puis le détruire pour ne pas laisser de trace
    - Si tu es capable de transformer la chaîne saisie dans le premier programme avant de la passer à ton EXE (avec un Javascript, un trigger SQL, etc.), tu peux mettre en place un système simple de protection des données. Le plus simple est le décallage de caractères : tu choisi un mot de passe "clé" (constant, connu des deux applications) et tu additionnes à chacune des lettres des données saisies de ton programme 1 caractère du mot de passe (et tu boucles sur chaque lettre du mot de passe).

    Sinon, je rejoint tout ce qui a été dit : sans possibilité de modifier le EXE initiale, tu ne pourras pas cacher de façon sécurisée les paramètres passés au second EXE. Mes propositions suffiront à décourager l'utilisateur Geek qui change lui-même le toner de la photocopieuse, mais ne vaudrons rien dans un milieu bancaire par exemple.
    On ne jouit bien que de ce qu’on partage.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2017
    Messages : 10
    Points : 14
    Points
    14
    Par défaut
    Salut, le soft va comparer le login et password dans une db ? si c'est le cas le mot de passe devrait être stocké sous forme hachée(enfin je l'espère ).

    si oui et que tu ne peux pas faire modifier le premier programme j'ai peut-être une solution qui pourrait protéger contre un gars un peu débrouille mais qui ne vaut rien face a un script. elle serait de tester la longueur de args et si elle est de 2(ce qui sera le cas si le 1er soft envoie que le couple login/passwd) ton soft récupere ses paramètres puis effectue une fonction de hachage (la même que celle utilisée dans la DB de préférence ) sur le paramètre mot de passe puis se relance avec en paramètres : login | le hash du mdp | n'importe quelle valeur tant qu'elle n'est pas nulle

    et a ce moment la si quelqun va regarder la "ligne de commande" de lancement de ton soft ils verront le hash (ce qui, si tu utilise une fonction de hachage décente (éviter le sha-1 !!) ne leur apportera pas grand chose

    si tu ne peux pas utiliser un hash pour une raison quelconque tu peux utiliser cette solution (encore une fois a ne pas considérer comme sécurisée car un pauvre script arrive a la déjouer):

    tu teste la longueur de args et quand elle est a 2 tu vas écrire le couple login/password sur un fichier (tu peux crypter les string pour un peu plus de sécurité) et se relancer avec un seul argument (je te laisse choisir le nom de l'argument, par exemple : "FROMFILE").
    si au lancement cet argument est détecté et qu'il est seul (longueur de args de 1) ton soft va récupérer le couple login password dans le fichier et va le supprimer. (il faut juste éviter de stocker le fichier sur le bureau ou dans documents sinon l'utilisateur va voir un fichier apparaitre et disparaitre a chaque lancement te ton soft)

    si les devs du premier soft peuvent modifier ce dernier demande leur d'envoyer directement le hash en paramètre et/ou d'envoyer les informations par SOAP (dans ce cas la il faudra ajuster le programme pour qu'il puisse recevoir des data par SOAP)



    en éspérant t'avoir aidé,

    LOGEANTO

  9. #9
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 695
    Points
    10 695
    Billets dans le blog
    21
    Par défaut
    Le problème qu'il y a dans le cas présent, c'est que la sécurité d'une application doit être prise en compte durant sa conception. Développer une application et ensuite s'intéresser à sa sécurité conduit généralement à des solutions bancales et peu fiable. Pire ! On peut avoir l'impression de la sécuriser et donc se croire protéger alors que la réalité est tout autre...

    C'est comme poser une porte blindée. On se croit protégé, mais si l'encadrement est en bois, alors ça ne sert à rien !
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  10. #10
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 586
    Points : 34 253
    Points
    34 253
    Par défaut
    Salut,

    pour reprendre ce qui a deja ete evoque, a un moment j'ai utilise une approche avec fichier .bat tampon, qui etait execute puis detruit une fois le soft lancé.

    J'aime l'analogie de Francois sur l'encadrement en bois. Reste a voir si les intrus seront armes d'une petite scie ou d'une marteau piqueur pour ouvrir la porte
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2017
    Messages : 10
    Points : 14
    Points
    14
    Par défaut
    Le problème qu'il y a dans le cas présent, c'est que la sécurité d'une application doit être prise en compte durant sa conception. Développer une application et ensuite s'intéresser à sa sécurité conduit généralement à des solutions bancales et peu fiable. Pire ! On peut avoir l'impression de la sécuriser et donc se croire protéger alors que la réalité est tout autre...

    C'est comme poser une porte blindée. On se croit protégé, mais si l'encadrement est en bois, alors ça ne sert à rien !
    Je suis tout a fais d'accord avec toi si les devs de la premiere app ne réecrivent pas la solution ce soft ne pourra jamais être considéré comme sur.
    mais mes solutions et celles de StringBuilder permettent de protéger le soft contre un "utilisateur++" qui voudrait avoir ces accès, mais n'offrent aucune protection contre des pirates un tant soit peu déterminé

  12. #12
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Points : 152
    Points
    152
    Par défaut
    Bonjour,

    Je suis étonné de voir que ma discussion a attiré autant de monde. En faite j'ai essayé de simplifier afin de ne pas faire un premier message de 30 lignes ce qui aurait fait que personne ne va le lire.

    En faite initialement je voulais juste savoir, si on marque l'identifiant et le mot de passe dans le premier .exe, qu'il lance le second avec id et mdp en paramètre et que le second fait les mises à jour puis lance le troisième à nouveau avec identifiant et mot de passe, forcément ils sont stockés dans le second, par exemple dans une class ou une variable globale. Et je voulais savoir si le fait de les avoir stockés ainsi est sécurisé. D'après ce que j'ai compris via vos messages, ce n'est jamais sécurisé si le mot de passe reste en clair après la saisie.

    En faite le premier .exe sert juste à vérifier si l'identifiant et le mot de passe qu'on a saisis existent. S'ils n'existent pas ou que l'un d'eux n'est pas valide, ça met un message d'erreur. Si la combinaison id/mdp existe, ça lance un second .exe qui se charge de mettre à jour les fichiers (environ 8000-9000 fichiers dans le dossier) et on peut aussi y intégrer une partie de la page d'un site. Une fois les fichiers à jour, on clique sur un bouton qui lance un troisième et dernier .exe et ce dernier .exe sert à jouer. C'est le fonctionnement par défaut à partir de ce qu'on m'a donné.

    Cependant le premier .exe qui sert juste à marquer l'identifiant et le mot de passe possède trois gros inconvénients selon moi, il ne permet de pas de détecter de multiples tentatives de connexion de la part d'une personne. Quelqu'un peut ainsi essayer de se connecter avec 500 mots de passe par minute pendant des mois sans que je le sache. Le .exe se ferme juste après 2 minutes mais rien empêche de le faire se relancer automatiquement. Le deuxième gros inconvénient est qu'en faite il communique de façon chiffrée avec un module placé sur le serveur, pas en sha1 j'espère mais là je me renseignerais. Et comme je n'ai ni le code du premier .exe ni celui du module, je ne sais pas si la chaîne de caractères est filtrée. Il n'y a jamais eu de soucis par rapport à ça mais j'ai vu que placer une apostrophe dans le champ d'identifiant provoque une erreur inscrite dans les logs du serveur ... On est limité à 20 caractères mais bon ...

    En faite ils ne veulent pas me donner le code du premier .exe car il contient le mécanisme de communication avec les modules du serveur et si je réutilise le mécanisme dans mon propre logiciel et que quelqu'un arrive à voir le code ou à trouver (attention je ne sais pas vraiment comment fonctionne une communication chiffrée) la clé de chiffrement, j'imagine que tout le monde serait très embêté vu que la même est utilisée ... sur tous les serveurs du jeu. Et en même temps rien ne leur permet de savoir si je ne vais pas utiliser le mécanisme de communication avec les modules du serveur afin d'utiliser le système sur d'autres serveurs et leur envoyer les informations de mon choix. Cela pourrait créer tellement de problèmes ...

    Donc, au lieu de simplement intercaler mon logiciel entre le .exe qui sert à se connecter et le troisième qui sert à jouer, je vais remplacer les 2 premiers par mon .exe et faire passer la vérification de l’existence de l'identifiant et du mot de passe via la connexion HHTPS, mon petit doigt me dit que c'est plus sécurisé que le truc en place par défaut pour communiquer avec le serveur de jeu. Je ne savais pas que via mon logiciel ne peut faire un post vers une page du site qui fera la vérification. Je pensais que le post ne peut se faire que de la page d'un site vers la page d'un site. Cela me permettra aussi de limiter le nombre d'essais et de filtrer la chaîne saisie. Reste à corriger le soucis du troisième .exe (celui qui sert à jouer) qui est lancé avec l'identifiant et le mot de passe initialement saisis dans le premier .exe mais ils lui sont passés en paramètre en clair ... Et comme dit par l'un des intervenants de la discussion ce n'est pas car quelqu'un qui sait faire ça sait surement placer un keylogger qu'il faut négliger les paramètres transmis en clair.

    A mon avis la sécurité a été négligée, ça a été créé à l'époque de Windows XP et depuis ils ne se sont pas adaptés à l'évolution de l'informatique. Et moi je me retrouve avec ça.

    Et oui les mots de passe ne sont pas stockés en clair, manquerait plus que ça ...

    Effectivement on doit s'occuper de la sécurité lors de la conception mais c'est délicat si les .exe ont été créés il y a 10 ans et ne se sont pas adaptés aux techniques de plus en plus sophistiquées des pirates.

    Je vous remercie pour ces messages très intéressants.

Discussions similaires

  1. Stocker des données de façon sécurisée
    Par rambc dans le forum Général Python
    Réponses: 6
    Dernier message: 15/07/2010, 15h00
  2. Recherche une chaine de façon recursive dans tout les fichiers d'un serveur.
    Par ben_ghost dans le forum Administration système
    Réponses: 3
    Dernier message: 21/07/2009, 12h54
  3. Réponses: 4
    Dernier message: 26/03/2008, 10h10
  4. Réponses: 2
    Dernier message: 24/10/2007, 14h32
  5. Stocker une chaine longue (SQLServer)
    Par sbeu dans le forum Bases de données
    Réponses: 2
    Dernier message: 06/09/2006, 12h41

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