web-dev-qa-db-fra.com

Prévenir l'ingénierie inverse de l'application client

J'ai un service Web qui est utilisé par un client flash. Le service et le client Flash sont produits par moi (lire: Ma compagnie). Le client Flash communique avec le serveur via HTTPS.

L'une des questions que nous avons vues récemment est que les gens décompilent le client Flash, puis créent leurs propres clients pour interagir avec le serveur. Ce n'est pas un énorme problème, car le serveur a beaucoup de "contrôles", mais c'est gênant.

Je sais à propos de Flash Obfuscation, mais ma question est un peu plus générique: en supposant que vous distribuiez un logiciel client de travailler avec votre service Web, quelles mesures prendriez-vous pour limiter le risque de fumer avec votre logiciel client?

12
Dimitrios Stergiou

L'obfuscation pourrait ressembler à la première étape évidente, mais l'obfuscation doit protéger quelque chose dans le code et que quelque chose ne peut pas être une fonctionnalité WebService car celle-ci est inverse ingénieur en interceptant le trafic même s'il est crypté SSL. Le certificat Pinning peut empêcher une simple interception SSL en faisant confiance à un certificat prédéfini.

Vous pouvez enregistrer symétriquement des données de communication et stocker la clé dans le client , puis Utilisez Obfuscation pour accéder à cette clé et algorithme de cryptage plus fort. Et vous pouvez également protéger l'obfuscation en faisant de la décompilation plus difficile. Un exemple d'obfousciateur flash et anti-décompileur est SWFENCRYPT et BISGUARD .

Les précédentes sont des protections de code source statique mais elles ne protègent pas contre des attaques en direct/dynamique. Une manière de protéger ces attaques est que le client utilise des contrôles d'intégrité sur la mémoire et les ressources. Il existe également des techniques d'ingénierie anti-inverse susceptibles de faire déboguer en direct.

L'autre moyen de prévenir les attaques vivantes est d'utiliser des logiciels qui recherchent toute falsification du système pouvant être utilisée pour la falsification du logiciel client. C'est le royaume des moteurs anti-tricher en forme de rootkit comme Punkbuster, Warden de Warcraft et Vac de la vanne.

Un type de protection différent est la signature de code et la signature de la mémoire (à la page de la mémoire) sur les plates-formes fermées telles que iOS et Android. De cette façon, vous pouvez limiter les modifications statiques aux celles binaires et dynamiques du client à sa mémoire et au système d'exploitation.

Même l'ancien CAPTCHA peut être utilisé comme protection contre l'automatisation, mais il fait mal à la convivialité de l'utilisateur. Vous pouvez également détecter l'automatisation sur le serveur, via le comportement des utilisateurs et les habitudes d'utilisation, puis la couplez-la avec CAPTCHA afin de réduire les faux positifs.

Outre des protections techniques, vous pouvez utiliser avec des moyens légaux et des incitations même. Fournissez le meilleur client afin que les utilisateurs ne soient pas enclins à pirater le vôtre ou à écrire leur propre. Ou faites-le pour que un client personnalisé ou piraté ne donne pas au pirate un plus grand avantage. Les moyens légaux ne sont pas ma force et varieront par pays, mais j'ai entendu parler des poursuites sur l'ingénierie inverse. La menace juridique pourrait dissuader les entreprises et les particuliers de vendre ou de fournir des clients personnalisés.

Enfin, vous pouvez transformer tout le problème sur sa tête et rendre le Webservice facilement accessible à travers des API flexibles et protéger contre les abus sur le serveur. Vous pouvez également charger de petits frais pour la fonctionnalité supérieure que vos pirates soient enthousiastes. :)

13
Cristian Dobre

Fondamentalement, vous ne pouvez pas sécuriser votre client. Au mieux, vous pouvez masquer et obscurcir afin de rendre plus difficile la modification du client.

Vous mentionnez que ce n'est pas un problème de sécurité car le serveur est correctement sécurisé, mais simplement une gêne. Il peut être plus gênant d'essayer d'obscurcir votre client que de laisser quelques clients modifiés faire de mauvaises demandes rejetées par le serveur.

Cela dépend vraiment de vos modèles de menace. Dans la plupart des clients que j'ai travaillé, je ne m'embêches avec aucune obscurité ni obscurcissement, car le serveur a été entièrement sécurisé et qu'il n'y aurait rien gagné en modifiant le client.

Maintenant, si nous parlons d'essayer de protéger un client lui-même (c'est-à-dire en raison de problèmes de propriété intellectuelle, vous ne voulez pas que quelqu'un voler le client) Il peut avoir plus de sens de consacrer du temps à rendre cela difficile à accomplir (tout en gardant toujours à l'esprit Que vous ne puissiez jamais sécuriser pleinement un client - au mieux, vous pouvez causer des attaquants non motivés à abandonner et à retarder les attaquants motivés).

9
Pixel Elephant

quelles mesures prendriez-vous pour limiter le risque de fumer avec votre logiciel client?

Il y a un équilibre ici que vous seul pouvez mesurer. En supposant que votre protection ne dérange pas les utilisateurs valides, il vous suffit d'équilibrer la valeur, de protéger le logiciel contre la valeur de l'attaquant de casser la protection.

Si vous parlez de logiciel ou de service qui n'est pas très coûteux et que les clients ne sont pas le type pour aller au-delà des moyens simples, l'obfuscation pourrait être suffisante.

Si vous parlez d'un service ou d'un logiciel très coûteux, ou si vous êtes précieux si vous avez mal utilisé, et que les clients sont déterminés à utiliser le service avec leur propre logiciel, vous allez utiliser des moyens beaucoup plus rigoureux.

Dans le premier cas, des outils existent déjà.

dans le second cas, la meilleure option consiste à utiliser Adobe Air, ce qui permet aux applications signées qui ne fonctionnent pas dans le navigateur. Vous pouvez vérifier en utilisant la cryptographie de clé publique que vous avez 1) parler à votre application et 2) que l'application n'a pas été modifiée. C'est compliqué si vous devez contrecarrer des attaquants très diligents (et, honnêtement, rien n'est absolument impénétrable) mais avec une conception minutieuse et des mises à jour forcées fréquentes, vous pouvez éliminer la majorité des attaques en faisant simplement beaucoup de travail à attaquer.

2
Adam Davis