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

Framework .NET Discussion :

Sécurité des assemblies : contrôler le chargement d'une DLL par un tiers ?


Sujet :

Framework .NET

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 55
    Points : 28
    Points
    28
    Par défaut Sécurité des assemblies : contrôler le chargement d'une DLL par un tiers ?
    Bonjour,

    Je me pose une question relative à la sécurité des assemblies.
    Actuellement, je travaille avec plusieurs assemblies (1 exe + des DLLs), dépendants les uns des autres (de façon arborescente je vous rassure).
    J'utilise la signature d'assemblies pour garantir l'intégrité des DLLs, elles ne peuvent être changées à l'insu de l'exe.
    Mais qu'est-ce qui empêcherait quelqu'un, par exemple, de prendre ces DLLs, et des les utiliser pour lui sans les modifier ? En fait, le code peut être utilisé très facilement, il n'est pas protégé ?
    À première vue, ce n'est pas choquant. Depuis des années, une bibliothèque peut être linkée par n'importe qui... par contre, sans documentation on ne s'en sortait pas. Alors que là, les assembly auto-descriptifs permettent de lister classes, méthodes, types, avec une facilité déconcertante.
    Bref, je me demande si l'on peut appliquer un traitement aux assemblies pour vérifier, par exemple, l'identité de l'assembly appelant (GetCallingAssembly...)

    Exemple : j'ai deux assemblies, A et B; et B est dépendant de A (il l'inclut dans le projet; recompiler A entraîne la recompilation de B)
    Problème : pour connaître l'identité de B, il faut le compiler; donc il faut compiler A avant. Et une fois connue l'identité de B, il faudrait modifier A pour l'y inclure, donc recompiler B, ce qui ferait changer son identité...

    Il y a une technique, ou pas ?

    +
    Chacha

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Obfuscator ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par Graffito Voir le message
    Obfuscator ?
    Alors je n'ai pas essayé pour plusieurs raison :
    -je ne l'ai pas (j'utilise Visual Studio Express)
    -je ne suis pas sur que çà marche avec mes Assemblies mixtes (requis pour s'interfacer facilement avec des libs comme QuickTime, openSSL...) : je suis en C++ managed /clr pas pure.
    -ça ne résout pas vraiment le problème, c'est un peu une "fausse solution". Enfin... dans mon idée où on pourrait utiliser la signature d'assemblies, non pas pour empêcher l'exploration des classes, mais pour empêcher leur chargement.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Graffito Voir le message
    Obfuscator ?
    ça ne touche pas aux interfaces publiques de l'assembly (noms des classes et membres publics), donc ça ne change rien au problème... c'est juste qu'en décompilant le code, avec Reflector par exemple, ça ne donnera rien de lisible

  5. #5
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    ça ne touche pas aux interfaces publiques de l'assembly (noms des classes et membres publics),
    Est-ce vrai pour tous les types d'obfuscator ?
    Voir : http://www.codewall.net/

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    Finalement, je me rends compte que je n'ai pas encore résolu proprement une première difficulté : comment intercepter le chargement d'un assembly ? Vu qu'une DLL ne peut pas avoir d'entry point...
    Je pourrais m'en sortir avec un object C++ statique, donc construit automatiquement, et dans le contructeur duquel je peux donc mettre du code, mais c'est un peu tiré par les cheveux. N'y-t-il pas une méthode statique de la class Assembly, ou d'un class loader, que l'on pourrait surcharger, et qui serait appelée automatiquement ?

    +
    Chacha

  7. #7
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Salut.

    A ma connaissance il n'y a rien de prévu au niveau du load des assembly.

    Par contre la technique la plus simple c'est de passer par une licence comme pour un composant. Voir la classe License et ses dérivés

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Graffito Voir le message
    Est-ce vrai pour tous les types d'obfuscator ?
    Oui, forcément : si les noms des classes publiques et de leurs membres publics sont changés, plus personne ne peut les utiliser (à moins de faire référence aux noms obfusqués... bon courage )

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par dev01 Voir le message
    A ma connaissance il n'y a rien de prévu au niveau du load des assembly.
    AppDomain.AssemblyLoad

    Mais bon, évidemment ça ne fonctionne que pour l'AppDomain courant...

  10. #10
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par dev01 Voir le message
    Par contre la technique la plus simple c'est de passer par une licence comme pour un composant. Voir la classe License et ses dérivés
    C'est fiable ce truc ? tout à l'air de tenir sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    license = LicenseManager.Validate(GetType(MyControl), Me)
    qui pourra donc être vue dans Reflector et pour ce qui est des StongName (qui sont peut être utilisés) j'ai déjà vu sur CodeProject un article sur comment le retirer ...

  11. #11
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Citation Envoyé par smyley Voir le message
    C'est fiable ce truc ? tout à l'air de tenir sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    license = LicenseManager.Validate(GetType(MyControl), Me)
    qui pourra donc être vue dans Reflector et pour ce qui est des StongName (qui sont peut être utilisés) j'ai déjà vu sur CodeProject un article sur comment le retirer ...
    Honnêtement? je l'ai jamais utilisé

    Mais les 3/4 des compos payant l'utilise et couplé à dotfuscator ça devrait largement tenir le coup.

Discussions similaires

  1. [WS 2008 R2] RDS : la couche de sécurité des services Terminal Server a détecté une erreur
    Par maxlpn dans le forum Windows Serveur
    Réponses: 14
    Dernier message: 29/04/2011, 11h40
  2. cacher des bouttons pendant le chargement d'une page
    Par jonnyboy dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 01/10/2007, 13h36
  3. Contexte de chargement d'une DLL
    Par Guillemot dans le forum Windows
    Réponses: 2
    Dernier message: 10/07/2005, 09h34
  4. Chargement d'une DLL et utilisation du multithread
    Par Maitre Kanter dans le forum Langage
    Réponses: 6
    Dernier message: 07/09/2004, 23h18
  5. Problème mémoire avec une dll par chargement dynamique
    Par widze19 dans le forum C++Builder
    Réponses: 6
    Dernier message: 15/12/2003, 13h20

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