Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Protection logicielle

12 réponses
Avatar
Antoine
Salut,

Existe-t'il une solution cryptographique pour protéger du code ?
Je sais que c'est paradoxal, et donc normal qu'on n'a jamais vu de
protection qui fonctionnait..
Voilà, disons que ça me fait toujours marrer de voir les différentes
versions d'un logiciel: personal, pro, et "enterprise" avec des limites
arbitraires, et certainement pas plus de quelques octets de différence
entre eux.

AL.

2 réponses

1 2
Avatar
Jack
Francois Grieu wrote:
Antoine a écrit :

Existe-t'il une solution cryptographique pour protéger du code ?
[..pour faire..] différentes > versions d'un logiciel: personal,


> pro, et "enterprise" avec des limites arbitraires, et certainement
> pas plus de quelques octets de différence entre eux.

Mis à part les barrières d'ordre légal, les deux principales voies
techniques sont:

1) L'exécution du programme, ou d'une partie de celui-ci, dans un
environnement de confiance; par exemple, une carte à puce dans laquelle
certaines parties du code exécutable du programme sont en java card, et
non accessible à l'adversaire. Celui-ci peut seulement capter les
échanges entre le programme principal et l'environnement de confiance.
Il semble que les moins mauvaises techniques d'attaque sont de
comprendre ce que fait la fraction du programme s'exécutant dans
l'environnement de confiance, et de la réécrire; ou de compromettre
l'environnement de confiance.

2) L'"obfuscation" qui tente de rendre la décompilation et/ou la
modification du code exécutable difficile, bien qu'il s'exécute dans un
environnement ouvert type PC standard. Je ne crois pas que l'on sache
faire quelque chose qui corresponde aux critère cryptographiques normaux
(en particulier, algorithme d'"obfuscation" public) et qui soit vraiment
résistant, mais cela fonctionne en pratique comme stratégie de
retardement. L'augmentation de la taille du code des applications
déplace plutôt l'équilibre protection/attaque en faveur de la première.


Dans les deux cas, un obstacle pratique majeur est que c'est difficile à
automatiser d'une manière transparentes aux multiples outils en
constante évolution qui produisent du code exécutable, tout en
maintenant une protection efficace. Dans le premier cas, il y a en plus
le problème de commodité d'installation, et de rapport performance/cout,
de l'environnement de confiance.


François Grieu



Arf je pensais que la question était pour pc donc un environement de
confiance sur PC :D
Il est vrai que l'environnement de confiance est bien sauf que si il y a
necessite de sortie de l'environnement de confiance, dans ce cas cela ne
sert a rien: les attaques se porteront sur les echanges
espionnage/modifications des communications, pas sur l'algorithme protege

Par contre le fait de packer des executables est legerement different de
l'obfuscation:
- l'obfuscation s'applique surtout au code source et est utilise pour
les applications dont on peut retrouver l'integralite des sources avec
les fichiers compiles. Elle est utilise pour tout ce qui est
pseudo-compile Java et .Net Rien ne se passe à l'execution du programme

- le fait de packer un soft fait que le programme se decrypte avant ou
au fur et a mesure de son execution.
C est malheureusement une methode plus qu'utilisee dans les virus
Avatar
Francois Grieu
Jack a écrit :
Francois Grieu wrote:
Antoine a écrit :

Existe-t'il une solution cryptographique pour protéger du code ?
[..pour faire..] différentes > versions d'un logiciel: personal,


> pro, et "enterprise" avec des limites arbitraires, et certainement
> pas plus de quelques octets de différence entre eux.

Mis à part les barrières d'ordre légal, les deux principales voies
techniques sont:

1) L'exécution du programme, ou d'une partie de celui-ci, dans un
environnement de confiance; par exemple, une carte à puce dans
laquelle certaines parties du code exécutable du programme sont en
java card, et non accessible à l'adversaire. Celui-ci peut seulement
capter les échanges entre le programme principal et l'environnement de
confiance. Il semble que les moins mauvaises techniques d'attaque sont
de comprendre ce que fait la fraction du programme s'exécutant dans
l'environnement de confiance, et de la réécrire; ou de compromettre
l'environnement de confiance.

2) L'"obfuscation" qui tente de rendre la décompilation et/ou la
modification du code exécutable difficile, bien qu'il s'exécute dans
un environnement ouvert type PC standard. Je ne crois pas que l'on
sache faire quelque chose qui corresponde aux critère cryptographiques
normaux (en particulier, algorithme d'"obfuscation" public) et qui
soit vraiment résistant, mais cela fonctionne en pratique comme
stratégie de retardement. L'augmentation de la taille du code des
applications déplace plutôt l'équilibre protection/attaque en faveur
de la première.


Dans les deux cas, un obstacle pratique majeur est que c'est difficile
à automatiser d'une manière transparentes aux multiples outils en
constante évolution qui produisent du code exécutable, tout en
maintenant une protection efficace. Dans le premier cas, il y a en
plus le problème de commodité d'installation, et de rapport
performance/cout, de l'environnement de confiance.



Arf je pensais que la question était pour pc donc un environement de
confiance sur PC :D



Certains pensent sérieusement y parvenir, avec le Trusted Platform
Module. Pour ma part je pense que en ce qui concerne la confidentialité
des données dans la mémoire du PC, c'est une bataille perdue.

Il est vrai que l'environnement de confiance est bien sauf que si il y a
necessite de sortie de l'environnement de confiance, dans ce cas cela ne
sert a rien: les attaques se porteront sur les echanges
espionnage/modifications des communications, pas sur l'algorithme protege



Oui. Pour que ça marche bien il faut que ce qui a de la valeur reste
dans l'environnement de confiance (au moisn sosu forme non chiffrée. Ce
qui n'est pas facile à organiser. Mais dans de nombreux cas c'est possible.

Par contre le fait de packer des executables est legerement different de
l'obfuscation:
- l'obfuscation s'applique surtout au code source et est utilise pour
les applications dont on peut retrouver l'integralite des sources avec
les fichiers compiles. Elle est utilise pour tout ce qui est
pseudo-compile Java et .Net Rien ne se passe à l'execution du programme
- le fait de packer un soft fait que le programme se decrypte avant ou
au fur et a mesure de son execution.
C est malheureusement une methode plus qu'utilisee dans les virus



Le vocabulaire en la matière n'est pas très stable. J'ai en effet
utilisé "obfuscation" pour désigner un traitement visant à rendre
intelligible le code objet, alors qu'une autre acception (courante)
réserve ce terme à un traitement du source. Effectivement,
l'"obfuscation" de l'objet est la plus utilisée dans le contexte (mais
pas la seule).

Noter que le fait que le programme se décrypte avant exécution n'empêche
en théorie pas sa décompilation, sa compréhension et sa modification,
car il est concevable de capturer l'objet déchiffré. C'est juste plus
difficile, mais reste souvent automatisable.
D'ailleurs, en matière de virus, il y en a peu qui échappent à une
tentative résolue de détection automatique (c'est à dire, repérant le
code de déchiffrement du virus malgré les tentatives faites par son
concepteur de déguiser automatiquement le code du vecteur à chaque
transmission). Les tentatives des auteurs de virus en ce domaine
s'arrêtent le plus souvent quand il devient impossible de détecter le
virus par recherche d'une séquence fixe ou "grepable".


François Grieu
1 2