Fonction shell pour récupérer la dernière version du navigateur Tor

Tor est un dispositif numérique permettant d'anonymiser sa navigation internet. Son principe de fonctionnement, reposant sur un réseau décentralisé de serveurs au sein duquel les requêtes vont transiter, garantit à de nombreuses personnes (lanceurs d'alerte, journalistes, activistes) la possibilité de consulter des sites interdits dans leurs pays ou une plus libre expression sans craindre la répression d'États autoritaires.

Son utilisation sur sa machine de tous les jours peut cependant s'avérer un rien complexe car il faut veiller à ne pas se trahir soit même en laissant transiter sur le réseau des informations permettant de nous identifiant en parallèle de notre utilisation de Tor. C'est pour cela que le projet Tor met à disposition depuis quelques temps déjà un produit tout packagé : le Tor Browser.

Ce dernier est construit autour de la version offrant un support à long terme de Firefox (Firefox ESR). L'utilisation de cette base très stable n'empêche pas le Tor Browser de se mettre à jour fréquemment, afin de corriger les problèmes ou failles de sécurité pouvant compromettre l'anonymat de ses utilisateurs.

Comme souvent en informatique, il devient vite intéressant d'automatiser les tâches répétitives. En l’occurrence : se rendre sur le site du Tor Browser, vérifier la dernière version disponible, comparer avec la version que l'on possède déjà et au besoin la télécharger à nouveau. C'est long et fastidieux. J'ai donc commis la fonction shell ci-après, à placer dans votre .bashrc ou .zshrc ou que sais-je, afin de simplement avoir à taper un dl_latest_tor_browser avant de l'utiliser la conscience tranquille.

dl_latest_tor_browser() {
    OLD_PWD=$(pwd)
    LAST_VER=$(\curl -s 'https://www.torproject.org/projects/torbrowser.html.en' | sed -n "s|^.*\.\./dist/torbrowser/\([0-9]\.[0-9]\.[0-9]\)/tor-browser-linux64-\([0-9]\.[0-9]\.[0-9]\)_fr\.tar\.xz\".*$|\1|p")
    if [ ! -n "$LAST_VER" ]; then
        LAST_VER=$(\curl -s 'https://www.torproject.org/projects/torbrowser.html.en' | sed -n "s|^.*\.\./dist/torbrowser/\([0-9]\.[0-9]\)/tor-browser-linux64-\([0-9]\.[0-9]\)_fr\.tar\.xz\".*$|\1|p")
    fi
    cd "$HOME/Téléchargements"
    if [ -d 'tor-browser_fr' ]; then
        CUR_VER=$(sed -n 1p tor-browser_fr/Browser/TorBrowser/Docs/ChangeLog.txt | sed -n "s/^Tor Browser \(.*\) -- .*$/\1/p")
        if [ "$LAST_VER" = "$CUR_VER" ]; then
            echo "You already have the last stable release: $LAST_VER"
            echo ''
            echo "Start it with: ${HOME}/Téléchargements/tor-browser_fr/Browser/start-tor-browser --detach"
            cd "$OLD_PWD"
            return
        fi
        rm -rf tor-browser_fr
    fi
    TOR_BUNDLE="tor-browser-linux64-${LAST_VER}_fr.tar.xz"
    [ -f "$TOR_BUNDLE" ] && rm "$TOR_BUNDLE"
    [ -f "$TOR_BUNDLE.asc" ] && rm "$TOR_BUNDLE.asc"
    wget "https://dist.torproject.org/torbrowser/${LAST_VER}/${TOR_BUNDLE}"
    wget "https://dist.torproject.org/torbrowser/${LAST_VER}/${TOR_BUNDLE}.asc"
    gpg --verify ${TOR_BUNDLE}{.asc,}
    tar xJf ${TOR_BUNDLE}
    rm "$TOR_BUNDLE" "$TOR_BUNDLE.asc"
    echo ''
    echo "The TOR browser v${LAST_VER} is here: ${HOME}/Téléchargements/tor-browser_fr"
    echo ''
    echo "Start it with: ${HOME}/Téléchargements/tor-browser_fr/Browser/start-tor-browser --detach"
    cd "$OLD_PWD"
}

Comme vous pouvez le constater, cette fonction effectue les tâches suivantes :

  1. récupérer le numéro de la dernière version stable
  2. comparer avec le numéro de la dernière version téléchargée et laissée dans le dossier $HOME/Téléchargements/tor-browser_fr
  3. si nécessaire télécharger la nouvelle version
  4. si une nouvelle version a été téléchargée, vérifier la signature numérique du paquet et l'extraire si tout va bien en lieu et place de l'ancienne version si elle existait

La vérification de la signature numérique implique que vous ayez déjà ajouté à votre trousseau de clefs publiques gpg celle utilisée par le projet Tor pour signer ses paquets :

gpg --keyserver pool.sks-keyservers.net --recv-keys 0x4E2C6E8793298290

Attention cependant, je n'ai pas (en tout cas pas dans cette version) mis en place de barrières strictes autour de cette vérification de signature. Si elle échoue, rien ne vous empêchera d'utiliser tout de même le Tor Browser téléchargé. Je vous encourage donc vivement à bien observer les messages affichés à l'écran au cours de l'utilisation de cette fonction.

Commentaires

N'hésitez pas à réagir en m'envoyant un email, qui sera publié ci-dessous sous la forme d'un commentaire.

Comment from JocelynD

De JocelynD - 21/12/2016, 14:10

Je ne comprends pas trop le pourquoi sachant que tor browser surveille lui-même si il est à jour et sait s'auto-mettre à jour d'une manière safe et simple (bonne UX et vérif de signature sans besoin de savoir utiliser GPG).

Comment from Milouse

De Milouse - 22/12/2016, 18:57

Ah ? Eh bien pour être honnête je savais pas que la mise à jour était inclue dans le package xD Pour moi c'était juste un zip que tu télécharge et qui fonctionnera tel quel jusqu'à ce que tu en télécharge un autre.

Bon, c'est pas le temps que ça m'a coûté non plus. Mais merci de l'information, effectivement si une version officielle existe, c'est bête de s'en passer !