Google PlusFacebookTwitter

Flasher un routeur ZyXel EMG2926-Q10A de chez Vidéotron

By on Mar 25, 2017 in Autres, Embarqué, Linux | 13 comments

Share On GoogleShare On FacebookShare On Twitter

Vidéotron, le retour avec ZyXel…

Il y a presque 4 années, je rédigeais un billet sur comment Flasher un routeur D-Link DIR-825 de chez Vidéotron. Aujourd’hui, je vais rester sur le même sujet à une petite nuance près, le routeur sera un ZyXel EMG2926-Q10A toujours de chez Vidéotron.

Avant d’aller plus loin, une petite mise en garde habituelle au sujet de la procédure qui suit. Comme la plupart des changements bas niveau il existe un risque, c’est pour cela que je ne pourrai en aucun cas être tenu responsable des possibles dommages engendrés suite au remplacement du micrologiciel (firmware) ou à la suite de cette procédure.

Pour la petite histoire, le modèle EMG2926-Q10A de chez ZyXel n’est en fait qu’un ZyXel NBG6716. Ce modèle découle peut-être d’un partenariat entre Vidéotron et ZyXel, je ne saurai le confirmer !

ZyXel propose par défaut un firmware OpenWRT personnalisé aux couleurs de la société. Comme à son habitude, Vidéotron a décidé (et je peux comprendre) de personnaliser le firmware en limitant l’accès à certaines fonctions comme par exemple:

Si je décide de passer en mode paranoïaque 😈 , je pourrai dire qu’il est « simple » de lister les fonctions manquantes mais qu’il est beaucoup plus complexe d’identifier les « choses » ajoutées (comme un spyware par exemple ?).

Plus compliqué que prévu

Restaurer le firmware ZyXel fut une tâche bien plus compliquée que prévu… Ci-joint une liste des problèmes rencontrés:

Pour ce qui est du « Kernel panic« , je dois avouer que je pensais avoir brické mon cher et tendre routeur.

Après plusieurs heures d’acharnement, de recherches, d’échecs, de frayeurs, de déprime, de café et de chocolat (et de gâteaux aussi parce que les gâteaux c’est bon), la sombre idée d’abandonner commença sournoisement à faire son nid…

Tout problème a sa solution (mais si!)

Toutes les « solutions » trouvées sur les forums, blogs, liste de diffusions, etc… se sont soldées par des échecs et cela même si chacune d’entre-elles apportaient leur lot d’informations plus qu’instructives. J’ai vraiment tout essayer, tout !

Pour les modèles non Vidéotron de ZyXel, la mise à jour du firmware est censée s’effectuer très simplement à l’aide d’un serveur TFTP. Il suffit de déposer le firmware dans /var/tftp/ par exemple et de renommer le firmware V1.00(AAKG.9)C0.bin en ras.bin puis d’allumer le routeur en maintenant le bouton WPS enfoncé. Le serveur TFTP doit-être branché via un câble RJ45 au routeur et doit absolument avoir l’adresse IP 192.168.1.33 (le routeur quand à lui aura l’adresse IP 192.168.1.1).

Pour en revenir à la solution, il m’a « suffit » de renommer le routeur. En renommant le routeur de EMG2926 à NBG6716 j’occulte la partie qui consiste à éditer le firmware V1.00(AAKG.9)C0.bin et donc de ce fait à éviter un changement de signature (checksum) du fichier pour au final ne plus avoir de message d’erreur jeter par zloader et être capable de restaurer le firmware de mon choix.

Le service TFTP sera géré par DNSmasq (Linux), ce qui fera amplement l’affaire, le service écoute sur le port 69 (pensez à votre pare-feu).

Pour ceux étant sous Windows ou Mac OS, il y a moult tutoriels et documentations sur Internet.

Nous voilà en possession d’un serveur TFTP fonctionnel ainsi que du plus récent firmware pour le routeur ZyXel NBG6716.

À votre tournevis !

Vous vous en doutiez n’est-ce pas ? Il est encore temps de rebrousser chemin ^^

Hélas, il est nécessaire d’ouvrir le routeur pour y avoir accès en console série, cela signifie qu’il est nécessaire d’avoir un câble USB vers TTL.
Si vous avez déjà joué avec Arduino, Raspberry Pi, OLinuXino, etc… vous êtes certainement (sauf toi Étienne 😆 ) déjà en possession de ce dernier, si ce n’est pas le cas allez voir ici.

Le branchement du câble USB/TTL pour notre routeur est parfaitement détaillé sur le site d’OpenWRT (cf. https://wiki.openwrt.org/toh/zyxel/zyxel_nbg6716#serial).

Une fois les câbles RJ45 et USB connectés à votre ordinateur, il vous faut installer un outil permettant une interaction entre votre clavier et le router. Pour ce faire j’ai choisi minicom mais screen peut tout aussi bien faire l’affaire.

Résultat:

Quand la ligne « Hit any key to stop autoboot: 3 » apparaît, il suffit d’appuyer sur n’importe quelle touche (vous avez 3 secondes). Suite à cela nous avons accès à un premier prompt, celui du booloader ZyXel: zloader. Ce dernier va nous permettre d’accéder à U-Boot (même si c’est U-boot qui charge zloader) une fois qu’il aura été déverrouillé, « déverrouillé » dans le sens ou toutes les fonctionnalités de zloader seront accessibles.

zloader, made in ZyXel

Le déverrouillage de zloader n’est pas très intuitif, voici une description des étapes à suivre:

  1. Récupération des informations et plus particulièrement du modèle (ATSH)
  2. Récupération du seed qui permettra d’obtenir le mot de passe (ATSE)
  3. Récupération du mot de passe via le seed obtenu précédemment (script en C)
  4. Activation de l’accès complet à zloader (ATEN)
  5. Entrée dans le shell U-Boot (ATGU)

Avant d’aller plus loin, ouvrez une nouvelle fenêtre dans votre terminal. Il est nécessaire de récupérer un petit de bout de code en C sur GitHub puis de le compiler (à l’aide de gcc), ce script nous permettra de récupérer le mot de passe de zloader.

Après compilation (qui sera volubile et qui ne durera qu’une seule seconde), un fichier exécutable nommé zynpass aura fait son apparition. En ligne de commande voici ce que ça donne:

Maintenant que nous connaissons le seed, la prochaine étape consiste à exécuter le script zynpass qui a été compilé juste avant afin de récupérer le mot de passe de. Le script zynpass prend en argument la valeur retournée par la commande ATSE précédente, exécutez-le dans une nouvelle fenêtre.

Résultat:

Une fois le mot de passe obtenu, nous sommes prêt pour retourner sur notre prompt zloader pour exécuter notre nouvelle commande.

Vous remarquerez le changement de prompt, nous sommes passés de > à #, cela signifie que nous sommes dans le shell U-Boot \o/

U-Boot, on y est presque !

On se motive, le plus dur est fait. Le prochaine étape consiste à modifier le hostname et à sauvegarder cette modification mais avant cela nous allons vérifier notre hostname actuel ainsi que l’adresse IP du routeur histoire de valider certains acquis.

Résultat:

Pour obtenir la totalité des variables d’environnement il suffit d’exécuter la commande printenv sans aucun argument, bref tout semble correct. Il est temps de remplacer ce hostname qui nous pose tant de traquas, de sauvegarder le tout puis de redémarrer le routeur en faisant un reset CPU.

This is it, on flash…

C’est la dernière étape, promis ! Le meilleur pour la fin, le routeur redémarre et comme expliqué un peu plus haut dans cette incroyable procédure (n’est-ce pas ? 😯 ), lorsque la fameuse ligne « Hit any key to stop autoboot: 3 » fait son retour; appuyez sur n’importe quelle touche. Vous devriez-être retour au prompt zloader.

La prochaine action consiste à télécharger via TFTP le firmware  V1.00(AAKG.9)C0.bin que nous avons renommé en ras.bin en utilisant la commande ATUR. L’exécution dure à peine 10 secondes…

Il ne reste plus qu’à démarrer le routeur sur le nouveau noyau à l’aide de la commande ATGO.

Le processus de boot prend environ 60 secondes le temps de démarrer tous les services, la séquence de boot devrait se terminer par « sysinit: Boot finished! » . Il suffit d’appuyer sur une touche pour avoir un prompt de login. Les identifiants sont les suivants:

Ouvrez un navigateur et rendez-vous (mon côté autoritaire reprend le dessus) à l’adresse http://192.168.1.1 vous devriez avoir la page de connexion ZyXel et non plus celle de Vidéotron. J’ai envie de dire, VICTOIRE !

Conclusion

Ce fut un long billet, certainement difficile à lire et à comprendre mais au final être capable d’installer un firmware du constructeur, libre ou simplement de votre choix ça n’a pas de prix !

Je n’ai pas la science infuse et ce genre de « bidouille » n’est pas mon quotidien donc s’il y a des erreurs merci de ne pas me fustiger ! :mrgreen:

Liens

The following two tabs change content below.

Gaëtan Trellu (goldyfruit)

OpenStack Technical Cloud Consultat chez Red Hat
Autodidacte en informatique, depuis 2005 je parcours l’écosystème Unix à la recherche de nouvelles connaissances et de nouvelles rencontres.

CC BY 4.0 Flasher un routeur ZyXel EMG2926-Q10A de chez Vidéotron par Gaëtan Trellu (goldyfruit) est sous Licence Creative Commons Internationale Attribution 4.0.

  • Normand_Nadon

    Vous semblez avoir une excellente connaîssance de ce routeur! Je réalise que Videotron semble avoir désactivé telnet ou ssh sur cet appareil… Je cherche comment communiquer avec le « usb print server »… peut-être avez vous une idée? J’ai tenté les méthode habituelles du genre la connecter via http://192.168.2.1:631/printers/nom de l’imprimante mais je n’obtient pas de réponse… pourtant le GUI du routeur la voit bien… Une idée?

  • Ricky D

    Dans ta documentation, tu indiques d’acheter un model de cable USB to TTL a 5v mais parcontre sur le site de openwrt (de https://wiki.openwrt.org/toh/zyxel/zyxel_nbg6716#serial) il indique d’utiliser un cable a bas volatge de 3.3v. Peux tu recommander un autre cable?

    • Le câble que je recommande est celui que j’utilise. Il est compatible 3.3v et 5v.
      Il suffit de brancher uniquement les connecteurs de transmission, réception et de masse (il te restera le rouge qu’il ne faudra pas brancher).

      • Ricky D

        merci goldyfruit!

  • Salut Ricky,

    Le câble que je recommande est celui que j’utilise. Il est compatible 3.3v et 5v.
    Il suffit de brancher uniquement les connecteurs de transmission, réception et de masse (il te restera le rouge qu’il ne faudra pas brancher).

  • Christian Rousseau

    Il y a une vulnérabilité « intéressante » sur le EMG2926 : https://www.exploit-db.com/exploits/41782/
    Avec quelques commandes, on arrive à setter un root password et activer correctement le ssh sur le router. J’ai changé le hostname et son product_name pour ‘NBG6716’ et tenterai bientot un sysupgrade… je sais pas si la procédure sera alors plus facile…

    • Christian,

      C’est moche !
      Par contre j’ai l’impression que la version de firmware impactée est V1.00(AAQT.4)b8 du coup la version V1.00(AAKG.9)C0 semble sécuritaire, ce n’est qu’une hypothèse.

      Merci d’avoir partagé.

  • Philipe Goulet

    Videotron ne se plaindra pas que le routeur n’as pas été activé? Le technicien me disait que si le routeur n’était pas activé ( ou changer de quelque facon que ce soit ) le service allait coupé apres une semaine, je doute fortement que ce soit vrai, mais bon. Vous n’avez pas eu de problème?

    • Aucun incident à l’heure actuel.
      J’ai du mal à voir comment ils pourraient savoir que le firmware ait changé, si c’était le cas cela voudrait dire qu’ils y ont accès d’une manière ou d’une autre et là c’est un tout autre problème.

      Dans le pire des cas (s’ils s’en aperçoivent), ils te demanderont certainement de payer le router.

  • Samuel Talbot

    j’ai essayer de flasher mon routeur, je me suit connecter avec mon adapteur usb ttle, et j’utilise putty pour avoir acess, seul probleme, je ne recoit pas le prompt « Hit any key to stop autoboot: » le routeru boot automatiquement sans jamais afficher se prompt. du coup impossible de poursuivre.

  • Mr IR 0 IB 0 T

    Merde, ça fait longtemps que j’ai pas toucher à linux. Mais avec le nouvelle exploit « Krack Attack » pour WPA2 c’est sûr que je vais installer linux sur mon portable et flasher aussitôt que zyxel sort une patch. Mais pour le moment il y pas un moyen de le faire sous Windows10 ?

%d blogueurs aiment cette page :