Go Down

Topic: Securisation données par ethernet (Read 891 times) previous topic - next topic

314xl

Bonjour,
Je travaille actuellement sur un projet basé sur des modlues ATMega2560 avec puce WIZnet W5100.

Dans un premier temps je souhaitais transmettre des données entre un PC et mes modules de façon à ce que le PC puisse envoyer des configurations aux modules mais aussi que le modules puisse envoyer des données au PC. C'est maintenant chose faite et le PC me permet de centraliser et gérer tout ça.

J'utilise la librairie Ethernet d'arduino, et la méthode POST pour transmettre mes données.
Actuellement c'est le PC qui envoi une requête à l'arduino soit pour obtenir les données soit pour envoyer les configs. (l'arduino est donc en quelque sorte esclave et fonctionne donc en serveur).

Les données envoyées du module au PC sont encodées au format JSON

Mon problème actuel est de savoir comment sécuriser ces données, en effet si quelqu'un accède au réseau il est libre d'envoyer des fausses configurations aux modules qui n'y verra que du feu.


J'ai bien vu qu'un arduino ne peut pas prendre en charge du HTTPS.

Est-il possible de réaliser un filtrage mac sur les connexions (j'ai vu que l'on peut ajouter une methode pour obtenir l'ip du client a la lib ethernet, en est-il de même pour l'adr mac)?

http://forum.arduino.cc/index.php/topic,82416.msg619420.html#msg619420

Je n'ai aucune notion de sécurité à coté de ça, pouvez-vous me donner des pistes que je pourrais suivre?

infobarquee

bonjour,
tu peux utiliser en faisant simple une variable avec une valeur que toi seul connais.
si la variable et la valeur ne sont pas présentes dans le POST, tu ne fais rien.
ex : login=toto

en plus tu peux dire, mais je ne connais que pour le php, si l'OS et le navigateur par exemple toujours, ne sont pas linux avec firefox, tu dégage la requête.
AUCUNE AIDE PAR MP

314xl

Merci de ta réponse,
en plus tu peux dire, mais je ne connais que pour le php, si l'OS et le navigateur par exemple toujours, ne sont pas linux avec firefox, tu dégage la requête.

En effet je n'y avais pensé.

Pour ce qui est de la valeur dans le POST, il n'est pas possible d'intercepter une trame se déplaçant sur le réseau?
Car si c'est le cas une personne peut très bien récupérer le: login=toto et le réutiliser dans une trame qu'il aurait modifié.

314xl

Y-a-t'il des possibilités de cryptage sur arduino?
J'avais cru voir un librairie permettant de le faire mais je ne me rappel plus son nom et je ne la retrouve plus...

bigben99

#4
May 30, 2017, 05:27 pm Last Edit: May 31, 2017, 08:41 am by bigben99
A partir du moment où les échanges entre PC et arduino ne sont pas chiffrés (HTTP), n'importe quelle attaque du type "Man In the Middle" permettra de récupérer les informations que tu transmets et ensuite de les réutiliser pour communiquer avec tes modules arduino.

Le filtrage MAC n'est pas une solution non plus puisque les adresses MAC peuvent être usurpées.

La seule solution que tu as serait de chiffrer ton flux de données avant envoi coté PC et de déchiffrer ton flux de données coté arduino lors de la réception. Va alors se poser la problématique de ta solution pour le chiffrage. Un chiffrement trop simple (type chiffrement par décalage) sera implémentable coté arduino mais facile à casser. Un chiffrement complexe (AES, RSA, ...) sera difficile à casser mais complexe à implémenter (voir impossible) coté arduino.

Si la sécurisation des échanges et un véritable enjeu de ton projet, je pense qu'il faut que tu te tournes vers d'autres solutions (PC <--> Raspberry Pi par exemple) sinon, laisse tes flux en clair.

[Edit] : A priori, il existe une librairie qui permet de faire de l'AES 128bits sur Arduino

314xl

#5
May 31, 2017, 09:32 am Last Edit: May 31, 2017, 10:23 am by 314xl
D'ac, entre temps j'avais trouvé ça https://github.com/DavyLandman/AESLib (je ne sais pas si on parle de la même librairie)

Il y a écrit:
Quote
This means that the key array and possible iv array should contain exactly 16 bytes (uint8_t or byte). Moreover the amount of bytes to encrypt should be mod 16.
Si je comprends bien je devrais décomposer mon message en fragments de 16 bytes (en gros 16 caractères) pour pouvoir le chiffrer? Si je comprends bien la taille de l'ensemble du message doit être un multiple de 16bytes?

Je vais essayer de me familiariser avec cette libraire et d'envoyer des données crypter puis les décrypter

EDIT: J'ai vu ceci coté serveur, http://php.net/manual/fr/function.mcrypt-decrypt.php
Est-ce que ça peut marcher?
si oui quel est le paramètre de cypher a fournir avec la lib arduino et quel est l'IV?

314xl

En observant les .h de la lib j'ai trouvé deux méthodes,

void aes128_cbc_enc(const uint8_t* key, const uint8_t* iv, void* data, const uint16_t data_len);
void aes128_cbc_des(const uint8_t* key, const uint8_t* iv, void* data, const uint16_t data_len);

Ca semble répondre a mes questions précédente sauf pour le cypher

trimarco232

Quote
A partir du moment où les échanges entre PC et arduino ne sont pas chiffrés (HTTP), n'importe quelle attaque du type "Man In the Middle" permettra de récupérer les informations que tu transmets et ensuite de les réutiliser pour communiquer avec tes modules arduino.
Bonjour,
question bête : le problème de sécurité est-il limité aux communications PC <-> modules, ou risque-t-on également des attaques vers l'intérieur du PC (virus ou autres ?)



Quote
Je vais essayer de me familiariser avec cette libraire et d'envoyer des données crypter puis les décrypter
La tâche semble assez ardue pour un arduino, le risque c'est que l'AVR n'arrive pas à suivre : tout dépend du flux de la transmission et des autres traitement qu'il doit effectuer simultanément
c'est difficile à estimer, selon le cas l'AVR peut-être 100x trop lent ou 100x "trop" rapide ...

si pour une requête l'arduino à tout son temps pour répondre (une bonne fraction de seconde ...), je pense que c'est tout à fait faisable


314xl

Mon petit projet traite seulement de la partie communication, je suppose que le PC est parfaitement sécurisé.
Sur différents projet le PC pourrait être connecte à internet, mais je pense m'occuper de sa sécurité plus tard, sauf si elle est directement en lien avec les modules.

Pour ce qui est des requêtes j'ai tout mon temps, je n'ai pas de données à envoyer périodiquement avec un intervalle très cours.

Go Up