Dans les jeux vidéo, la plupart des logiciels anticheat sont exécutés côté client (par exemple PunkBuster ou Valve Anti-Cheat) - mais n'est-ce pas l'une des premières règles de sécurité à ne jamais faire confiance au client? Si oui, alors pourquoi ces sociétés n'offrent-elles pas de vérification côté serveur pour les jeux vidéo, mais continuent-elles plutôt d'insister sur la confiance du client?
Dans l'affirmative, pourquoi ces sociétés n'offrent-elles pas de vérification côté serveur pour les jeux vidéo, mais continuent-elles plutôt d'insister sur la confiance du client?
Il s'agit moins d'insister sur la confiance du client et plus qu'il n'y a pas d'autre modèle anti-triche viable. Comme DRM, et en fait, les logiciels anti-triche comme PB utilisent une forme de DRM, il y a peu de choses à faire.
Le logiciel DRM a des atténuations en place pour empêcher le client de trop piquer, mais il doit être mis sur le client pour essayer d'empêcher le client de faire des choses que les sociétés de médias ne veulent pas que le client fasse.
La technologie anti-triche repose sur une méthodologie similaire. Les informations sur le client sont collectées, envoyées au serveur, et si un client est considéré comme un comportement incorrect, quelle que soit la série de vérifications effectuées pour le logiciel spécifique, il peut être interdit sur le serveur.
En fin de compte, cela revient à la gestion des risques. Oui, ne croyez pas que le client est l'un des premiers principes de sécurité. Mais pour atténuer les risques qui se produisent chez le client, il y a une analyse coûts-avantages, ce qui est la gestion des risques. Le coût de laisser les clients continuer à botter et tricher vaut-il la peine de perdre des clients qui veulent un jeu juste et amusant? Ou faut-il mettre en place des mesures d'atténuation? PB et autres logiciels ne sont pas là pour arrêter complètement la triche, mais visent à la rendre plus chère.
Il existe également une autre façon plus subtile de limiter les clients à tricher (hacks muraux, ...), principalement impliquée par les jeux en ligne uniquement, mais sans s'y limiter. Ceci est réalisé en ne fournissant pas toutes les données côté client. Par exemple, le moteur irréel 3 vérifie si un acteur se trouve à proximité de votre visibilité, si cette vérification est positive, le serveur VOUS envoie l'emplacement exact ainsi que votre adversaire VOTRE. Pour ainsi dire, seul le serveur connaît toutes les positions, actions et mouvements de tous les acteurs sur l'instance de jeu.
Cela peut être lu dans la documentation du moteur irréel 3/Client Server Model dans le paragraphe cheating, à trouver ici: https://udn.epicgames.com/Three/ClientServerModel.html
Pour ainsi dire, avec des moteurs/code réseau avancés et des modèles Client/Serveur, il n'est pas nécessairement nécessaire de faire confiance au client à 100%. Le serveur peut décider à l'avance de ce que le client doit savoir, LIMITANT efficacement les possibilités de piratage. Pour aller encore plus loin, le serveur peut décider ce qu'il DEVRAIT savoir lui-même, pour ne pas se laisser distraire ou confondre par les clients qui envoient des paquets contrefaits.
Le logiciel anti-triche côté client en soi ne concerne pas la sécurité, il s'agit de l'expérience de jeu (et du client).
Ainsi, les règles de sécurité ne sont pas aussi applicables. Faire confiance au client "atteindre le pixel 1056 en 1723" est très différent de faire confiance au client "peut transférer 1000 $ à Nigera", ou que le client "peut accéder au courrier électronique de Bob".
Notez que j'exclus spécifiquement les transactions financières, juste les tricheurs de gameplay comme les aimbots, les tricheurs à grosse tête, etc.
First: Il existe de nombreux jeux qui utilisent une validation côté serveur à 100% et ne font pas confiance au client. Un exemple: le poker en ligne
Vous n'envoyez simplement pas la valeur des cartes au client qu'il ne peut pas connaître. Donc, même s'il pirate le client et lit la matrice, il n'y a rien de caché qu'il puisse révéler et aucun mouvement qu'il puisse faire qu'il ne pourrait pas faire avec le client habituel.
Mais de nombreux jeux modernes sont beaucoup plus complexes. Un jeu de tir à la première personne par exemple. Ici, il n'est pas si facile de décider si et à quel point vous pouvez voir un autre joueur. Vous pourriez dire que c'est facile, s'il y a un mur entre vous deux, vous ne pouvez pas le voir. Et pour ces cas simples, les jeux modernes peuvent déjà éliminer le joueur ennemi de votre point de vue, de sorte que vous n'obtiendrez pas la position où il se trouve. Mais dès que l'ennemi est dans un coin sombre et à peine visible, le jeu doit encore vous envoyer sa position, afin que votre appareil graphique puisse le peindre là-bas. Si vous utilisez un tricheur, qui le peint de couleurs vives, vous pouvez facilement le repérer et tricher. C'est difficile à éviter, car la logique qui le peint dans des couleurs sombres dans l'ombre est très complexe pour les jeux avec de bons graphismes - donc rendre l'image sur le serveur et ne vous envoyer que l'image finale rendrait la tricherie beaucoup plus difficile, mais aussi nécessiterait une tonne de ressources sur le serveur et aurait le grave problème de LAG.
DELAY ou LAG: Le deuxième gros problème des jeux en streaming est le décalage. Si vous déplacez la souris, vous pouvez regarder très rapidement dans un jeu de tir à la première personne. Mais l'envoi de cette commande sur Internet et la réception du résultat à afficher sur votre écran prendront plus de temps que le rendu local. Si vous avez une connexion Internet rapide, vous pouvez avoir de la chance avec un Ping inférieur à 20 ms, mais la plupart des connexions peuvent être très instables et le décalage peut parfois augmenter. Un jeu qui réagit lentement jouera horriblement lentement et ne sera presque pas amusant du tout. Au contraire, de nombreux jeux modernes appliquent une tonne de techniques comme la prédiction de mouvement, la déformation temporelle et d'autres afin que vous puissiez réduire le décalage perçu des autres joueurs en faisant calculer à votre jeu beaucoup de logique locale et en prédisant les mouvements des autres joueurs, donc le jeu se sent plus fluide qu'il ne l'est réellement.
Tricherie matérielle/prête à l'emploi. Et il y a toujours une tonne d'occasions de tricherie qui ne peuvent pas être facilement vaincues par le logiciel. Et le dopage? (une vraie chose dans les esports) Ou laisser un robot jouer pour vous. Ou avoir une webcam sur votre épaule, qui repère les ennemis sur votre écran et vous indique où ils se trouvent? Ou même des choses comme les attaques DDoS d'un botnet sur votre équipe ennemie pour perturber leurs communications?
Il existe certaines possibilités pour effectuer des validations prises en charge par le serveur. Le serveur peut tester l'exactitude du code de jeu/logiciel anti-triche comme la protection DRM (mais peut bien sûr être usurpé). Le serveur peut également vérifier la logique du jeu, mesurer vos mouvements, collecter des statistiques et des données sur votre comportement et les comparer à d'autres joueurs et à certaines limites et essayer de décider si vous jouez anormalement ou si vous enfreignez des règles ... mais rien c'est parfait.
Dans l'affirmative, pourquoi ces sociétés n'offrent-elles pas de vérification côté serveur pour les jeux vidéo, mais continuent-elles plutôt d'insister sur la confiance du client?
Ils le font!
La plupart des jeux en ligne ont une vérification de cohérence de temps en temps.
Player32517 a déplacé 100 unités en 3 secondes, est-ce possible?
Cependant, vérifier si chaque mouvement est valide est une énorme quantité de calculs.
Prenez n'importe quel tireur par exemple:
Votre PC de jeu moyen commence à avoir du mal s'il y a trop de grenades/ennemis sur votre écran. Cette charge est répartie sur 20 ordinateurs.
Imaginez maintenant que vous deviez calculer tout cela encore sur un serveur et vérifier chaque mouvement, chaque coup de souris, chaque déclencheur de feu pour les schémas de triche. En temps réel.
À cause de tout cela, il est beaucoup moins cher ou même possible de vérifier de temps en temps si vous pouviez vraiment sauter aussi loin, bouger aussi rapidement ou garder votre souris exactement sur la tête de l'ennemi pendant 3 secondes avant même de le voir derrière ce mur.
Et si tout cela échoue, vous avez toujours les rapports de la communauté avec des séquences vidéo.
Modifier:
Merci Num Lock d'avoir souligné cela:
Le décalage n'est pas causé par la logique mais plutôt par le rendu. Calculer tous les vecteurs pour la lumière et les animations est beaucoup plus important que de calculer si quelque chose était à portée pour être touché.
Il y a deux éléments à aborder ici.
Premièrement, la détection de triche côté client est rarement le seul élément de la prévention de la triche. Étant donné que le logiciel serveur de certains jeux est également distribué, le logiciel de détection de triche côté serveur peut ne pas être entièrement distribué avec lui afin d'éviter de l'exposer à la rétro-ingénierie. Vous ne pouvez pas déduire un manque de détection de triche côté serveur à partir du code serveur que vous exécutez peut-être par rapport au code serveur qu'ils peuvent exécuter en interne. De plus, les entreprises peuvent être réticentes à discuter de leurs solutions anti-triche pour des raisons similaires: l'obscurité n'est pas une mauvaise chose à avoir en plus d'une solution robuste.
Pourtant, il est également nécessaire de détecter les tricheurs côté client, car les jeux dépendent des compétences des joueurs. Cela signifie que la tricherie peut se produire à plusieurs niveaux: matériel, entrée et logiciel. Le logiciel est simplement le plus pratique et le plus précis, il n'y a pas grand-chose à faire pour se prémunir contre un robot compétent. Afin de se prémunir contre la triche logicielle, vous devez avoir une sorte de moniteur résident sur le client pour avoir une chance de le détecter.
De plus, une simulation de jeu est complexe. Comme vous l'avez dit à juste titre, rien n'empêche quelqu'un de créer un client simulé qui copie correctement tous les protocoles que le jeu utilise et peut générer arbitrairement des entrées au bon moment afin de tricher. Le simple fait de le faire est une entreprise énorme; il est beaucoup plus facile de tenter de casser le client existant. Il en va de même pour la construction d'un faux client anti-triche. En tant que telle, la sécurité côté client consiste davantage à rendre les choses aussi difficiles que possible plutôt qu'à 100% à toute épreuve. Valve en particulier fait régulièrement des mises à jour de VAC pour rivaliser dans une bataille continue avec les développeurs de triche.
La plupart des autres réponses se concentrent sur les aspects techniques de la prévention de la triche, je voudrais ajouter que VAC empêche la triche en la rendant économiquement non viable:
TL; DR: la protection contre la triche côté client fonctionne car l'effort et les compétences nécessaires pour le tromper sont élevés et la punition pour les erreurs est sévère.
Le piratage implique beaucoup d'essais et d'erreurs et même si vous avez un accès complet à la source, il nécessite un travail considérable pour savoir comment modifier un client tout en lui faisant croire qu'il ne l'était pas. Et tout ce travail est rendu théorique à chaque mise à jour du client.
D'un autre côté, si vous commettez la moindre erreur, vous risquez d'être banni pour toujours de tous les serveurs VAC.
Il est également inutile de distribuer votre hack, car Valve sait également comment rechercher des tricheurs sur Google et une fois qu'ils auront trouvé votre hack, ils ajouteront une logique de détection supplémentaire pour trouver tous ceux qui l'utilisent. Cela décourage à nouveau les utilisateurs d'utiliser des outils de triche disponibles publiquement.
Toute entrée client est parfaitement VALIDE.
Valve vérifie déjà les données utilisateur valides. Par exemple, le client ne peut pas dire au serveur: "J'ai tiré Sparkles depuis le spawn CT, alors qu'il était dans le spawn T".
Il vérifie également que lorsque vous achetez quelque chose, vous n'essayez pas d'acheter cette arme à crédit. Si le serveur ne le faisait pas, le tricheur achèterait des AWP sur des coups de pistolet.
Le problème est que la triche (sur CSGO par exemple) fait une action parfaitement valide (les tricheurs qui font des actions invalides, comme le problème de téléportation Spawn, peuvent être corrigés facilement). Le problème est que les tricheurs utilisent une variété de méthodes pour entrer une entrée valide qui est soit améliorée, soit créée par un ordinateur.
En effet VAC essaie d'appliquer le test de Turing sur un joueur. Même un serveur ne peut pas vérifier l'identité de l'agent qui prend les décisions.
Les vérifications côté serveur visent à s'assurer que les opérations demandées par le client sont légales. Fondamentalement, pour ne pas essayer de courir deux fois plus vite que vous le permettez.
Les vérifications côté client visent à vérifier que la décision d'apporter ce changement est prise par un être humain, et non par l'ordinateur - par exemple les aimbots qui rendent des commandes clients légales (et donc non détectables par le serveur) mais ne sont toujours pas autorisés.
En outre, côté serveur, vous pouvez effectuer un post-traitement de grands ensembles de données pour essayer de déterminer si le joueur triche, mais c'est quelque chose que vous devez examiner après coup et c'est toujours une science imparfaite.
Le défi avec la sécurité comme celle-ci est que vous devez faire le calcul où se trouvent les informations. Vous devez soit effectuer le côté client des calculs anti-triche, soit déplacer le côté serveur d'informations afin que les calculs puissent y être effectués. Pour de nombreux jeux, la transmission de toutes les informations au serveur peut être exorbitante. Pour ce faire, le client devrait enregistrer toutes les interactions utilisateur et l'heure à laquelle elles se sont produites. Envoyer toutes ces informations au serveur pour effectuer une analyse est trop, donc le calcul est envoyé au client.
Cela ne veut pas dire que c'est la fin. De nombreux jeux implémentent les deux tests côté client et côté serveur. Certains tests peuvent être effectués sur la base d'informations déjà envoyées au serveur. Il peut ne pas être en mesure d'attraper tous les hacks de vitesse lorsque quelqu'un zig et zags, mais il peut attraper quelqu'un qui parvient à passer d'un point A à un point B beaucoup plus rapidement que les règles du jeu ne le permettent.
Il y a aussi une option intéressante: les engagements. Un client pourrait offrir un engagement cryptographique décrivant toutes les interactions de l'utilisateur, comme un hachage SHA-1. Sur une commande du serveur, ils peuvent être obligés de fournir les données qui ont généré ce hachage. Ce modèle est utilisé dans certains jeux distribués qui n'ont pas de serveur pour garder les joueurs honnêtes. Les clients sont obligés de prendre un engagement envers les actions qu'ils ont faites dans le passé avant que d'autres clients n'envoient ensuite les données actuelles. Cela empêche un client de réécrire son historique.