Ftp: user, pass, ip apparaissent dans binaire...
Résolu
LezardMoo
Messages postés
614
Statut
Membre
-
[Dal] Messages postés 6373 Statut Contributeur -
[Dal] Messages postés 6373 Statut Contributeur -
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
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:
- Ftp: user, pass, ip apparaissent dans binaire...
- Core ftp - Télécharger - Téléchargement & Transfert
- Typsoft ftp server - Télécharger - Téléchargement & Transfert
- Filezilla ftp - Télécharger - Téléchargement & Transfert
- Ftp voyager - Télécharger - Téléchargement & Transfert
- Ftp //192.168.l.2121 - Forum Linksys
5 réponses
'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
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
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,
La question est donc : En quoi cela te gêne que l'on voie les identifiants de ton ftp ?
Cdlt,
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 ?
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 ?
"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.
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.
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
https://curl.se/docs/manpage.html#--libcurl
Dal
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
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.
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.
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
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
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
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
Sinon pour le coup du fichier de config je n'ai pas compris. comment ca je ne dois pas le distribuer ?
"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.
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.
#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);
}