[Système embarqué] Récupérer des codes secrets !
Hello les Dyrknautes !
Gros dossier pour vous aujourd'hui, mais qui nécessitera une grande attention de votre part.
Que ce soit pour de l'espionnage industriel, du hacking, ou bien de la récupération de données, il existe une technique qui permet d'obtenir le code "compilé" situé sur nos précieux arduino !
En soi, dit comme ça, ça ne nous paraît pas très utile ...
Cependant, en convertissant le binaire en assembleur on peut parvenir à comprendre ce que fait le code, et ainsi le modifier ...
Mais là n'est pas notre objectif, à moins que vous ne soyez des experts en assembleur ...
Sur linux il existe une commande "strings" qui permet de récupérer toutes les chaines de caractère visible dans un binaire.
Commande très utile à l'époque
où la sécurité n'existait pas encore.
Car beaucoup de personnes qui ne protégeaient pas leurs codes mettaient pas mal d'informations sensibles en clair... serveurs & identifiants ftp par exemple ...
Alors pour ce qui est de l'arduino...
Nous utilisons régulièrement, au travers de l'ide (logiciel / environnement de développement) une commande qui s'appelle "avrdude" ....
C'est transparent pour nous.
Mais cette commande permet d'envoyer notre code compilé sur notre arduino.
Elle permet également ... de le récupérer....
Ainsi en exploitant la commande suivante :
avrdude -pm328 -P/dev/ttyACM0 -cavrisp -U flash:r:flash.bin:r -F
-p : m328, indique que mon arduino UNO correspond à un ATmega328 (google vous indiquera selon votre arduino, ce à quoi il correspond)
-P : /dev/ttyACM0 correspond au chemin d'accès vers votre périphérique "Arduino", vous devriez le voir dans le menu "Tools / Serial Port" de votre IDE Arduino.
-c : avrisp, c'est le "programmer", pareil, vous pouvez également le retrouver dans l'IDE "Tools / Programmer"
-U : flash:r:flash.bin:r correspond à l'action, ici nous lui indiquons de faire un dump (r = read / lire, w signifierait write / écrire)n flash.bin et le nom, ou le chemin vers lequel vous souhaitez que le dump soit écrit.
-F : Force, simplement pour forcer à faire la copie et ignorer les possibles erreurs.
Tout le détail d'AVRDUDE ainsi que des valeurs possible est ici :
http://www.nongnu.org/avrdude/user-manual/avrdude_4.html
J'ai pu le tester sur un Arduino Uno et un Arduino Micro, résultat frisson garanti !
Lorsque qu'après avoir récupéré mon dump (flash.bin), je fais un "strings" dessus :
strings flash.bin
Surprise :
Je récupère mon super dump !!!!
On retrouve même les jolis visages que j'avais donné à mon robot ^^