Ftp: user, pass, ip apparaissent dans binaire...

Résolu/Fermé
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 - 6 juil. 2014 à 19:03
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 8 juil. 2014 à 21:00
Bonsoir tout le monde !!!

je suis entrain de créer un petit prog qui nécessite une connexion ftp, pour cela j'utilise libcurl. Aucun problème à part que si je fais un vim du binaire compilé je vois en clair le user le pass et l'ip du ftp... pas génial tout ca.

Sauriez vous comment je pourrais éviter ca ?

Merci d'avance
A voir également:

5 réponses

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
Modifié par gravgun le 6/07/2014 à 19:14
'lut, tu peux utiliser un truc style le cryptage XOR et décoder ton IP+mdp au lancement, mais une analyse de paquets ou un désassemblage révèlera tout aussi facilement le MDP.
C'est selon les circonstances... si tu redistribues le programme tu ne peux pas empêcher que IP+mdp circulent si tu veux garder les mêmes infos de connexion partout. Dans le cas où tu veux qu'on puisse changer cet IP+mdp, créé un/des fichier(s) de config que tu lis et utilises (et ne distribue pas ces fichiers de config).
from human import idiocy
del idiocy
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
6 juil. 2014 à 21:00
Merci, je vais voir pour le cryptage XOR, et sinon pour contrer l'analyse réseau de je pense passer une couche ssl. Pour le desassemblage, ya vraiment pas de solutions ? (bon je ne pense pas non plus que les clients vont allez s'amuser à désassembler leur outil de travail... quoi que... :) )

Sinon pour le coup du fichier de config je n'ai pas compris. comment ca je ne dois pas le distribuer ?
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
Modifié par gravgun le 6/07/2014 à 21:06
"je pense passer une couche ssl": bonne chance alors, implémenter du SSL c'est pas du gâteau (même avec OpenSSL & autres).
"pour le coup du fichier de config": Bah c'était au cas où les utilisateurs auraient pu entrer leur propres identifiants; tu aurais créé une/des fonction(s) pour lire un fichier de config qui contiendrait IP+username+mdp (que les utilisateurs peuvent modifier), mais toi tu n'aurais pas distribué le tien (avec ton mdp perso), évidemment.

Si la logique veut qu'on ne puisse pas cacher quelque chose là où on veut, c'est qu'il faut chercher à le cacher autre part.
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
6 juil. 2014 à 21:10
oui ok c'est bien ce que je pensais, donc non ca ne fonctionnera pas comme ca. Enfin pour l'instant en tout cas, si je ne trouve vraiment pas ce qui me plais, ca reste une bonne solution.
Maintenant je pense qu'avec XOR ca devrait suffir, le prog reste en interne.
Me reste plus qu'a trouver comment utiliser ca en C.
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
6 juil. 2014 à 21:12
Indice: (A xor B) xor B = A. L'opérateur xor en C c'est
^
.
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
Modifié par LezardMoo le 6/07/2014 à 23:41
#include "stdio.h"
#include <string.h>

int encode_decode(char *string, char *key){
int i;
printf("String :");
for(i=0; i<strlen(string); i++){
string[i]=string[i]^key[i];
}
printf("%s\n",string);
return 0;
}


int main(){
char chaine[100]="";
char key[100]="!@#$%^&*()_";
printf("Enter string to encode/decode:\n");
scanf("%s",&chaine);

printf("\nencode\n");
encode_decode(chaine,key);

printf("\ndecode\n");
encode_decode(chaine,key);
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
6 juil. 2014 à 20:10
Il faut se dire que si ton programme peut se connecter à ce ftp et que tu distribues ce programme, tu donnes les moyens de s'y connecter...

La question est donc : En quoi cela te gêne que l'on voie les identifiants de ton ftp ?

Cdlt,
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
6 juil. 2014 à 20:54
Merci,
dans le cadre d'une distribution justement, j'effectue certains transferts de fichier légitime mais le client ne doit pas connaitre les login et mot de passe.

En gros le client lance le programme qui travail tout seul

(question ftp, pass en clair sur le reseau, je sais je sais, je passerais une couche ssl dessus.)

Du coup je repose ma question, comment faire pour ne pas que ca se voit ?
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
Modifié par gravgun le 6/07/2014 à 20:58
"comment faire pour ne pas que ca se voit": bah tu peux pas, tout simplement. Il faut que le mdp soit transféré au serveur pour qu'il accepte la connexion, quoi qu'il en soit. Tu peux "retarder" l'extraction du MDP avec comme j'ai dit un décryptage lors de l'exécution, mais une analyse réseau donnera toujours le mot de passe.
Si tu peux créer des comptes sur le FTP en question, créé des comptes anonymes/"secondaires" avec un mot de passe qui n'est pas le tien.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
6 juil. 2014 à 21:29
le client ne doit pas connaitre les login et mot de passe.
Je répète. Ton programme contient les identifiants pour se connecter au serveur. Donc, si tu distribues ce programme, une personne malicieuse pourra forcément les récupérer.

Tu peux en effet le chiffrer et faire une procédure de déchiffrement à la volée. Mais on pourra quand même récupérer le mot de passe.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 7/07/2014 à 11:12
Bonjour à tous, et bonjour LezardMoo,

Le problème est ici que tu sembles dire que ton identifiant et mot de passe ftp vont être en dur dans le fichier exécutable et qu'ils seront utilisés, semble-t-il (mais ce n'est pas clair) pour plusieurs "clients".

Cela n'est pas une bonne pratique.

Tu devrais utiliser ton serveur ftp qui permet de créer des comptes utilisateurs personnels à chaque utilisateur, ainsi tu peux :

- savoir qui s'est connecté et quand et pour quoi faire, avec les logs du serveur,
- révoquer un accès dont la sécurité serait compromise, sans affecter le fonctionnement des autres accès,
- communiquer l'identifiant et le mot de passe à la personne qui le droit de l'utiliser.

Si tu veux faciliter la vie de l'utilisateur, tu peux préconfigurer son programme pour qu'il n'ait pas à saisir les identifiants et mots de passe. Tu fais une compilation pour chaque client, ou tu crées un fichier de paramétrage.

Mais le mieux est de communiquer les identifiants et mots de passe aux personnes concernées, et de responsabiliser l'utilisateur sur leur utilisation.

Pour la transmission, curl gère sftp. Je ne l'ai jamais utilisé personnellement.

Il te faut un serveur sftp.

La version curl en ligne de commande est utile pour faire des tests et vérifier que tout fonctionne comme tu l'attends. Ensuite, tu ajoutes l'option
--libcurl <file>
et cela te produit un code C fonctionnel qui réplique le fonctionnement de la ligne de commande que tu as mise au point, que tu peux utiliser dans tes programmes avec libcurl.

https://curl.se/docs/manpage.html#--libcurl


Dal
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
7 juil. 2014 à 11:27
Salut Dal,

Oui login et pass seront en dur, en fait, c'est pour de la sauvegarde interne du coup c'est déployé sur les machines des clients(internes du coup) et c'est censé etre invisible pour eux.
En gros, sauvegarde de données sur lesquelles ils travaillent mais interdit d'aller se connecter sur le ftp pour recup ou modifier le fichier.
Devoir dire au gens de se connecter et d'uploader eux meme me laisse penser que ca va etre fait pendant une semaine et après pour n'importe quelle raison ca ne sera plus respecté, on les connait les utilisateurs hein ^^ !

Pas mal pour curl, je ne connaissais pas, en meme temps je ne l'utilise jamais, à part la dans mon code.
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 7/07/2014 à 13:09
Et le ftp est interne aussi, ou il est chez toi ?

Je pense qu'on n'a pas une bonne vision de ce que tu fais et de tes contraintes pour te conseiller utilement.

En gros, sauvegarde de données sur lesquelles ils travaillent mais interdit d'aller se connecter sur le ftp pour recup ou modifier le fichier.

Si ton serveur ftp est suffisamment paramétrable, tu peux le configurer pour accepter les commande STOR, mais interdire les commandes RETR et d'autres qui te gêneraient (Proftpd permet ce genre de chose, par exemple). Tu interdiras efficacement la récupération. Par contre, si ton programme peut uploader des fichiers, il utilise STOR, et un utilisateur déterminé arrivera à étudier le fonctionnement du programme et à le reproduire (c'est ce que veut te faire comprendre fiddy., je pense).

Cela dit, pour de la sauvegarde, je préfère utiliser rsync en environnement Linux ou BSD. Cela ne copie que les fichiers modifiés, la transmission peut être compressée et chiffrée en utilisant le transport ssh, et les accès peuvent être gérés avec des certificats. C'est le serveur de sauvegarde qui déclenche les sauvegardes avec un cron (pas les machines sauvegardées), et les machines sauvegardées n'ont pas à avoir accès au serveur de sauvegarde. La machine à sauvegarder contient juste une clef publique correspondant à la clef privée stockée sur le serveur de sauvegarde, ce qui permet au serveur de sauvegarde d'accéder aux machines contenant les fichiers à sauvegarder.

Cela fonctionne avec un serveur ssh, et c'est mieux d'être en environnement de type Unix (même si tu as des serveurs ssh et des clients rsync pour Windows aussi).

Tu peux aussi attaquer avec rsync un share Windows (en le montant avec Samba) : https://www.thanassis.space/backup.html

Tu perds alors le bénéfice de l'usage de certificats, et tu es dépendant de ce que le mot de passe d'accès au share ne change pas, mais cela peut être plus simple à mettre en oeuvre en environnement Windows.


Dal
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
7 juil. 2014 à 15:09
Oui le serveur aussi est en interne.
Effectivement rsync pourrait etre pas mal aussi, les postes clients sont tous sous windows donc je n'y avait meme pas pensé ^^

Merci
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
Modifié par sambia39 le 7/07/2014 à 16:36
Je pense à une idée moins complexe si tu souhaites à ce que ton application ne divulgue pas les informations d'authentification de connexion entre ton client FTP et le serveur, tu peux soit te renseigner sur le FTPS et comment l'implémenter , ou tu te tourne vers une autre solution
où bien implémenter ton code de manière pas très conventionnel, "un système d'authentification qui va ressemblé au final à un proxy ftp".

C'est-à-dire, sur ta machine cliente, tu incite l'utilisateur à fournir un identifiant, adresse Mac( fournis au préalable ) où le nom du PC sur lequel il se trouve (cela te servira à savoir qui c'est loger et le rediriger sur son répertoire ou autres) vers un serveur qui fait office d'authentification un peu comme RADUS et c'est lui qui va par la suite va se chargé de faire tout le boulout ( ce connecter vers ton serveur FTP ) toute réponse passe par lui toute commande également, tu peux tout à fait mettre en plus un mécanisme de chiffrement simple de bout à bout vers le serveur d'authentification si tu le souhaites mais sérieusement, la manière sûr est d'utiliser un client FTPS qui va se connecter à ton serveur FTP.
à bientôt
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
8 juil. 2014 à 10:14
Bien vu ! En plus je voulais monter un RADIUS (parce que jamais encore utilisé) donc parfait si en plus j'en ai une utilité ^^
Je vais aussi regarder dans cette voie
Merci
0