Sécuriser un accès socket ?

a marqué ce sujet comme résolu.

Salut,

Je fais tourner un process sur des clients. Au démarrage de celui-ci, le process doit se connecter à mon serveur via un socket, pour que le serveur l’enregistre dans une base de donnée. Je voudrais protéger ma BDD pour que cette action ne soit faite exclusivement par le process qui tourne (afin d’éviter que mes données puissent être corrompues, ou qu’il soit possible d’ajouter une infinité d’entrées).

Bon le truc c’est que mon serveur est un hidden service et que je ne peux pas ban IP. Vous auriez une méthode qui pourrait permettre ce genre de chose ? Le problème c’est que je ne peux absolument pas stocker un mot de passe ou une operation de hashing dans le binaire du client car on pourrait les retrouver et s’en servir pour accéder à la base.

En fait je vois pas véritablement de solution logique à ce problème. Des idées ? Merci :)

Salut,

Oui en TCP, tout ce qu’il y a de plus standard. Je voudrais que mon binaire client soit le seul à pouvoir se connecter au serveur. En fait je voudrais qu’il ne soit pas possible de recréer un programme via reverse-engineering qui puisse légalement se connecter au serveur (autre que le miens).

En fait je voudrais qu’il ne soit pas possible de recréer un programme via reverse-engineering qui puisse légalement se connecter au serveur (autre que le miens).

Je suis une quiche en droit, mais il me semble que c’est déjà le cas non ? Pour ton client, si tu n’acceptes qu’une seule connexion active côté serveur, tu n’en auras qu’une seule active.

En fait je voudrais qu’il ne soit pas possible de recréer un programme via reverse-engineering qui puisse légalement se connecter au serveur (autre que le miens).

Je suis une quiche en droit, mais il me semble que c’est déjà le cas non ? Pour ton client, si tu n’acceptes qu’une seule connexion active côté serveur, tu n’en auras qu’une seule active.

unidan

Non haha rien à voir avec le droit :D

Légalement de mon point de vue à moi, pour je sois disposé à le détecter comme "illégal". Le soucis c’est que mon nombre de clients m’est inconnu. En fait j’essaie de trouver une solution pour "fingerprinter" ou signer mon binaire de telle sorte que lui seul puisse se connecter et que l’artifice qu’il utilise ne soit pas identifiable en reverse-engineering ..

Pas possible. Si tu veux arriver à tel résultat, il te faut une authentification de tes utilisateurs. Donc il faut que tu leur délivres un moyen de s’authentifier, par exemple en créant un compte chez toi.

EDIT : et même comme ça, tu n’auras aucune garantie qu’un utilisateur ne reverse pas ton exécutable pour se connecter à sa sauce sur ton serveur. Mais au moins, s’il commence à vouloir péter des trucs, tu sauras qui c’est et tu peux lui révoquer son accès.

Approximation simple : le code qui est chez l’utilisateur, même produit par toi à la base, veut ta mort, ne lui fait jamais confiance.

Pas possible. Si tu veux arriver à tel résultat, il te faut une authentification de tes utilisateurs. Donc il faut que tu leur délivres un moyen de s’authentifier, par exemple en créant un compte chez toi.

EDIT : et même comme ça, tu n’auras aucune garantie qu’un utilisateur ne reverse pas ton exécutable pour se connecter à sa sauce sur ton serveur. Mais au moins, s’il commence à vouloir péter des trucs, tu sauras qui c’est et tu peux lui révoquer son accès.

Ksass`Peuk

Merci de la réponse, c’est bien ce dont je me doutais.

Pour expliciter un poil plus mon problème je vais définir un peu plus ma problématique. En fait je m’en tape des "comptes utilisateurs". J’essaie juste de créer un botnetlike de zombies (à des fins didactiques ofc). On part donc du principe que la victime a exécuté un .exe sur son windows. Un fois infecté le client doit consulter régulièrement une page web sur un hidden server web. Il lit donc cette page pour y trouver les instructions qu’il doit suivre (il récupère ses instructions en déchiffrant la page avec sa propre clée privée -son instruction a été chiffrée avec sa clé publique), et exécute ladite instruction (ouvre un reverse shell, download & execute un programme, se connecte à tel serveur etc.).

Le soucis c’est que pour pouvoir communiquer avec mes clients je dois être sur de ne pas me faire honeypot ou qu’on puisse saturer ma base de zombies (et ma bande passante) et se connectant à l’infini sur mon serveur de premier contact en fait.

Bon après coup je pourrais toujours back up la base saine car le seul risque ici c’est d’avoir des clients qui n’en sont pas vraiment.

je vais peut être simplement me tourner vers une fonction de hashing bien balèze à usage unique pour que ça soit bien long à reverse.

Merci en tout cas :D

… et se connectant à l’infini sur mon serveur de premier contact en fait.

Falquiero

Si le serveur n’est nécessaire qu’au premier contact, tu peux faire éventuellement deux choses pour rendre l’ensemble plus difficile à abattre :

  • demander à ton malware de supprimer son code de connexion après avoir reçu ses instructions avec pas mal d’obfuscation pour qu’il soit dur de savoir ce qui s’est passé,
  • depuis le serveur, tu peux traceroute un envoi vers le malware et enregistrer le point d’arrivée du paquet pour ne plus autoriser de nouvelle connexion quand le malware a reçu ses instructions*.

* et pour protéger le réseau en cas d’attaque réussie sur ton serveur tu hash les points en question.

C’est loin d’être parfait mais je pense que ça peut déjà être plus chiant à faire tomber.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte