2010-11-30 21 views
2

Je suis implémentation d'un serveur de réseau qui traite les paquets UDP. Je veux éviter les attaques en répétition, où un attaquant pourrait copier des paquets udp, et les rejouer plus tard dans le temps. Je suis en train de jouer avec l'idée que je pourrais hacher le paquet et stocker cette valeur dans une table de hachage. Je peux alors faire le même processus chaque fois qu'un paquet est reçu puis le chercher dans la table de hachage. S'il existe déjà, nous rejetons le paquet, mais si nous ne l'avons jamais vu (l'entrée n'existe pas), nous le stockons pour un usage futur.Optomised algorithme pour garder la trace des paquets réseau (rediffusion de prévention d'attaque)

Maintenant, quel algorithme de hachage Conviendrait pour cela? Ai-je besoin d'autre chose qu'une table de hachage? Comme il y a beaucoup de paquets udp reçus, je veux que cela fonctionne dans O (1) !!!!!! ;-), Est-ce possible?

Il est évident que plus je me souviens « » hachages, plus de stockage (état) je vais devoir allouer, peut une table de hachage croître et réduire dynamiquement au fil du temps?

je peut-être loin ici, je ne peux pas avoir besoin d'une table de hachage du tout! Je suis ouvert à l'idée !!

Répondre

3

Contrôlez-vous le contenu du paquet? Si c'est le cas, ajoutez un hachage au contenu et utilisez-le, ce qui déplace l'effort de hachage vers l'expéditeur. Vous pouvez également inclure une période de validité pour que a) vous sachiez que vous pouvez vous débarrasser de tout enregistrement d'un paquet après cette date et b) qu'un paquet stocké par un attaquant devienne inutile après cette heure. Vous voudriez crypter l'horodatage d'une manière ou d'une autre afin que l'attaquant ne puisse pas simplement mettre à jour l'horodatage.

D'autres techniques peuvent être trouvées sur Wikipedia

1

utilisant une table de hachage pour les paquets peut être coûteux parce que vous aurez à ressasser votre table de hachage, qui est O (n).

Dans cette situation, vous devriez négocier un secret partagé entre le serveur et chaque client. Cette clé secrète K est ensuite utilisée pour construire un Message Authentication Code. Le message en cours d'authentification doit être les données que vous transmettez dans le paquet UDP avec un horodatage. Les identifiants de séquence sont défavorables car il n'y a aucune garantie qu'un paquet UDP arrivera à tous, et il est possible que les paquets arrivent en désordre.

Il convient de noter que cette attaque est impossible avec TCP en raison de la poignée de main à trois modalités et l'ordre ids. Dans ce cas, la sécurité fournie par TCP peut en fait être plus légère que ce système de sécurité proposé.