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

Java Discussion :

Limiter l'utilisation d'un programme Java certains postes


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Points : 27
    Points
    27
    Par défaut Limiter l'utilisation d'un programme Java certains postes
    Bonjour à vous,

    Dans la cadre d'un projet, je dois limiter (on m'impose..) l'utilisation de notre programme Java à un ou plusieurs postes identifiés. Je pense que je peux identifier les postes via leurs adresses Mac ou même les numéros de série des volumes.

    Mais la question que je me pose est comment, au final, ne pas avoir une validation qui soit une simple évaluation d'un booléen dans ma main class..
    Si c'est pour regarder dans le byte code et juste changer le test, toutes les vérifications d'identité possibles deviennent alors inutiles.

    C'était pour savoir si vous aviez quelques idées à ce sujet ou des pistes à suivre.


    Merci à vous

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Si c'est un programme qui se suffit à lui-même en local sur la machine, il n'y a aucune solution miracle. Ta solution sera forcément contournable. Tu dois réfléchir à une solution en adéquation avec ce qui est à protéger. Tu ne mettras pas le même degré de protection sur une simple calculatrice ou sur une interface qui se connecte sur un compte bancaire.

    Par contre, si ton programme à besoin d'un serveur distant, il y a des possibilités simple et relativement efficace. Par exemple restreindre l'accès à des IP.

    Il faut bien avoir à l'esprit qu'une protection sur un logiciel sera toujours contournable. C'est une question de temps.

  3. #3
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Ce n'est pas tout-à-fait vrai, tu peux envisager une authentification du support matériel via l'attestation d'un Trusted Platform Module, mais si c'est dans le cadre d'un projet d'études c'est sans doute un investissement démesuré. De plus, c'est une technologie qui sent un peu le soufre, à mon avis.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Mais la question que je me pose est comment, au final, ne pas avoir une validation qui soit une simple évaluation d'un booléen dans ma main class..
    Si c'est pour regarder dans le byte code et juste changer le test, toutes les vérifications d'identité possibles deviennent alors inutiles.
    Il existe deux techniques.

    La première est de rendre le debuggage fastidueux, en multipliant les tests et en perdant celui qui tente de tracer ta fonction. Soit par obfuscation, soit en ajoutant de la complexité. Après c'est juste une question de temps.

    La seconde est de déporter complètement le code de vérification dans un endroit sécurisé et bien sûr de rendre inutilisable le programme java sans cette validation à distance.


    Quoi qu'il en soit il faut définir dans un premier temps un niveau acceptable de sécurité et le type de population qui va utiliser le logiciel.

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Citation Envoyé par Eusebius Voir le message
    Ce n'est pas tout-à-fait vrai, tu peux envisager une authentification du support matériel via l'attestation d'un Trusted Platform Module, mais si c'est dans le cadre d'un projet d'études c'est sans doute un investissement démesuré. De plus, c'est une technologie qui sent un peu le soufre, à mon avis.
    Ca n'empechera pas un attaquant de prendre votre application, supprimer dedans les tests relatifs au TPM et la faire tourner sans la moindre validation. Encore une fois, ce système ne sert que si vous avez à communique ravec l'extérieur (l'extérieur se rendra compte qu'on est pas passé par le TPM)

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Points : 27
    Points
    27
    Par défaut
    Malheureusement, l'application n'utilise pas de serveur distant et se suffit à elle même. De plus, elle utilise un réseau privé ce qui ne me permet pas de mettre à disposition un serveur de validation quelque part.

    On me demande aussi d'obsfuquer le code source (il va falloir que je passe un peu de temps là dessus parce qu'entre l'introspection et le JNI, je sens que ça va me poser des problèmes).

    Concernant le temps (mis pour casser ces protections), je ne pense pas avoir à faire à des acharnés. Il faut principalement que je puisse montrer à ceux qui essaieraient de dévier le soft voient qu'il a été prévu que ça ne soit pas fait.

    Et oui, le TPM semble un investissement un peu lourd, surtout qu'il se peut que je n'ai pas accès à la configuration du matériel utilisé pour faire tourner la machine.

  7. #7
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Ca n'empechera pas un attaquant de prendre votre application, supprimer dedans les tests relatifs au TPM et la faire tourner sans la moindre validation. Encore une fois, ce système ne sert que si vous avez à communique ravec l'extérieur (l'extérieur se rendra compte qu'on est pas passé par le TPM)
    C'est vrai, sauf si par exemple on travaille sur des données scellées par le TPM. Enfin bref, c'est une digression, ce n'est pas une solution intéressante ici.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Tu peux chiffrer une portion vitale du code. La clé de déchiffrement ne s'obtennant qu'avec la présence intègre du code en mémoire associé à la bonne machine.
    En utilisant un algorithme moderne comme AES, il sera impossible de lire ce code sans la clé.

    L'attaquant qui veux faire tourner l'applicatif sur un poste non prévu ne poura pas reconstituer la clé et encore moins le code manquant.

    Il devra connaitre les elements propres a un poste valide et donc avoir une complicité d'un utilisateur habilité.

    Cela implique d'avoir une version du code protégé par poste.

  9. #9
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    A mon avis, la seule methode valable consiste à crypter des données necessaires au fonctionnement du programme et à utiliser un dispositif quelconque (par exemple la mac) pour recuperer la clé qui permet de decrypter (par exemple via une BDD). Mais si tout est en local, ca tiendra pas longtemps sans obsfusquation (et meme avec, ca ne tiendra pas beaucoup plus)...

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    ca ne tiendra pas beaucoup plus)...
    Si cela peut tenir très longtemps s'il n'y a pas complicité avec quelqu'un qui a accès a un poste autorisé.

    Si une clé est composé d'information secrête propre a un poste protégé et d'une signature propre au code de l'application. Même avec le code source chargé d'appliquer cet algorithme, le code source protégé est illisible.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Points : 27
    Points
    27
    Par défaut
    Merci bien pour toutes ces indications.
    Je vais pouvoir m'en inspirer.

    Bonne continuation à tous

  12. #12
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2011
    Messages : 2
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Jimmy_ Voir le message
    Tu peux chiffrer une portion vitale du code. La clé de déchiffrement ne s'obtennant qu'avec la présence intègre du code en mémoire associé à la bonne machine.
    Ca m'a l'air super ! mais comment on fait ? Est ce que tu aurais un tuto ou un exemple de code ?

    J'ai vu sur le site officiel, que depuis la version 1.4 le SDK embarque des librairies permettant de faire les cryptage AES... mais de là à crypter toute une partie du code et la décrypté à la lecture ... je ne vois vraiement pas comment faire

    Si vous pouvez me donner quelques pistes ca serait cool !

    Merci

    lien : http://java.sun.com/developer/techni...ES/AES_v1.html

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quel JDK utiliser avec un programme JAVA
    Par l_informaticien dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 02/05/2013, 19h18
  2. [WD10] Limiter d'utiliser l'application sur un seul poste
    Par alimohamed1 dans le forum WinDev
    Réponses: 10
    Dernier message: 02/02/2013, 19h08
  3. Limiter l'utilisation d'un logiciel java
    Par Neilime dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 05/11/2008, 15h20
  4. Limiter les acces d'un programme Java
    Par Darkdaemons dans le forum Sécurité
    Réponses: 2
    Dernier message: 23/04/2007, 16h48
  5. Limiter l'utilisation CPU d'un programme sous debian
    Par programmerPhil dans le forum Administration système
    Réponses: 3
    Dernier message: 28/03/2006, 16h07

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