dimanche 12 janvier 2025

Celestron Origin.SWU

Les fichiers utilisés pour mettre à jour toute la partie logicielle concernant le Rasberry Pi (qui se trouve dans le bas du télescope) sont nommés Origin-x.y.zzzz.swu et se trouvent ici. Nous allons voir ce qu'ils contiennent...

Observations 

Si on charge l’un de ces fichiers dans un éditeur comme Notepad++ on constate que le fichier commence par quelques dizaines de lignes de texte qui ressemble a du json, suivit de beaucoup de binaire. 

Le début de la première ligne "070702" devrait faire lever un sourcil aux barbus d’Unix. Les fichiers commençant par le texte 070707 ou 070701 ou 070702 sont des fichiers d’archive au format CPIO. Ce qui est confirmé par le fait que le fichier se termine par « TRAILER!!! ».

La commande cpio n’étant plus vraiment utilisée on devra taper « man cpio » pour se rafraîchir la mémoire… et peut être même l’installer !

Pour lister le contenu d'un fichier .swu on utilisera :

    $ cpio –itv < Origin-x.y.zzzz.swu

et on obtiendra une liste qui ressemble a celle ci :

-rw-r--r-- 1 root root      1308 Dec 18  2024 sw-description
-rw-r--r-- 1 root root      1580 Dec 18  2024 sw-description.sig
-rw-r--r-- 1 root root      1488 Dec 18  2024 select_rootfs0.sh.enc
-rw-r--r-- 1 root root      1488 Dec 18  2024 select_rootfs1.sh.enc
-rw-r--r-- 1 root root 202883456 Dec 18  2024 rootfs.ext4.zst.enc
396270 blocks 

Pour extraire ces 5 fichiers on tapera la commande ci-dessous et les fichiers listés ci-dessus seront extraits dans le répertoire courant.

    $ cpio –i Origin-x.y.zzzz

Le fichier sw-description contient un  json qui décrit les propriétés, et comment utiliser, les divers fichiers qui l'accompagnent. Notez que la description les fichiers avec l’extension .enc contient "encrypted": true et qu’en plus pour rootfs.ext4 on a "compressed": "zstd" d’où le nom du fichier : rootfs.ext4.zst.enc Il est compressé avec l’algorithme Zstd et ensuite encrypté.

Le fichier sw-description.sig est certainement une signature RSA. On retrouve dedans les info qui ressemble à un certificats au format DER : [California] [Los Angeles] [Celestron Acquisition LLC] répété plusieurs fois ce qui fait penser a une chaîne de certification auto-signée.

Les fichiers select_rootfs0.sh et select_rootfs0.sh sont certainement des scripts Bash a exécuter durant le processus de mise à jour.

rootfs.ext4, vu son nom et sa taille, est une partition Linux au format ext4. La mise à jour ne se fait donc pas au niveau des fichiers mais du file-system.

NOTE: Jusqu’à la version 1.1.4327 la taille de rootfs.ext4.enc  était d'environ 406Mo. A la version suivante, la 1.2.4345,  rootfs.ext4.enc est passé à 193Mo ! Certainement un shrink de la partitions principales pour faire la place à une partition dédiées aux images de l'utilisateur qui seront accessibles via FTP ?...

UPDATE : voir le post sur les partitions  

UPDATES 2025, 2026 : 

Dans la version  1.2.5100 il y avait en plus le script "initialize_ftp.sh.enc"
Dans la version 1.4.6084 il y avait en plus le script "fixup_home.sh.enc"

Déductions 

Si on regroupe ce que l’on vient d'observer : swu, cpio, json, zstd, sig,  on trouve rapidement que tout cela est géré par le framework open source SWUpdate.

- L’encryptage pourrait donc être fait en utilisant AES en mode CBS (par exemple aes-256-cbs). Cette méthode de cryptage nécessite une clé AES et un vecteur initial (IV).

- La signature du fichier sw-description serait au format CMS avec un certificat auto-signé

 On récapitule

  • sw-description, qui est au format json n'est pas encrypté. Il contient, entre autres, le SHA256 de chaque fichier. 

  • sw-description.sig, est la signature qui valide le fichier

  • Les fichiers sont encrypté, et parfois compressés. Leur intégrité est protégée par le cryptage ET le SHA256 qui est lui même protégé par la signature.