Journal Protocole Privacon v1.0

Posté par .
10
20
nov.
2019

musique d'entrain : Worakls Orchestra live @ Château

Présentation du protocole PRIVACON

URL Projet : https://gitlab.com/voxdemonix/privacon-protocols
Version : 1.0

Définition

Ce protocole vise à permettre à l'utilisateur de prévenir son système d'exploitation et ses logiciels s'ils peuvent ou non continuer d'afficher des données sensible sur l'écran.

Le Protocole PRIVACON est très simple à comprendre : c'est un code situé entre cinq (5) et un (1) où 5 signifie “tout est cool je suis seul” et 1 signifie “attention il y a un ennemi derrière moi”. À noter le zero (0) qui signale le mode Fantôme (Ghost) indiquant aux logiciels d'éviter toute requête réseau.

  • L'utilisateur indique une valeur entre 5 et 0 dans le fichier /tmp/$USER_PRIVACON ou dans une variable d'environnement appelée “PRIVACON”. Si vous utilisez le fichier, aucun autre utilisateur système ne doit pouvoir accéder à ce dernier en écriture pour des raisons évidentes de sécurité.
  • Les logiciels affichent toutes les informations ou censurent en fonction du code PRIVACON. Si aucun PRIVACON n'est trouvé, la valeur de 6 est forcée. Cette valeur permet d'indiquer que PRIVACON est absent tout en ne cassant pas les applications si l'utilisateur n'utilise pas PRIVACON. Si vous souhaitez forcer l'utilisation du PRIVACON afin d'empêcher l'affichage de données vraiment très sensible, vous pouvez utiliser -1 à la place de 6. Mais pensez à prévenir vos utilisateurs aux risques qu'ils voient un dysfonctionnement.

Échelle de l'alerte

  • 6 ⇒ PRIVACON inconnu / non défini
  • 5 ⇒ tout est normal
  • 4 ⇒ un pote est derrière (limitation faible)
  • 3 ⇒ une personne indigne de confiance est derrière (limitation forte)
  • 2 ⇒ tu fais une présentation à une convention de hack (affiche que les trucs cool sans aucune infos)
  • 1 ⇒ compromission totale (n'affiche rien même pas un nom de logiciel)
  • 0 ⇒ mode Fantôme (tu peux tout afficher mais AUCUNE (zéro) requête réseau, mode furtif uniquement)
  • -1 ⇒ bug et erreurs non résolvable en définissant PRIVACON à 6

Exemples :

Source : [Debian/Ubuntu] Nextcloud - Monitoring grâce au conky

Par défaut (pas de privacon ou privacon 4+) le conky nextcloud affiche tout.

demo active conky

Mais indiquez '3' dans /tmp/[votre_pseudo]_PRIVACON pour cacher tout.

echo '3' > /tmp/${USER}_PRIVACON

demo conky refuse affichage infos

Évolutions (réflexion)

  • Restreindre accès en écriture au fichier au script de changement.
  • Passer par une variable d'environnement ?
  • Ajouter une demande de mot de passe pour passer d'un état alarmant à tranquille ? (voir un truc plus hardcore genre contrôle de l'iris)
  • Créer un installeur magique voodoo permettant d'installer (boutons&raccourcis compris) sans aucune manipulation.

Installer sur Debian/Ubuntu

Définir le PRIVACON au démarrage sur Debian/Ubuntu

crontab < <(crontab -l ; echo "@reboot   ( sleep 1 ; echo '3' > /tmp/${USER}_PRIVACON )")

Ajouter des boutons de changement

demo bouton privacon

  1. Téléchargez le script de changement d'état :
mkdir -P /opt/scripts
cd /opt/scripts
wget https://gitlab.com/voxdemonix/privacon-protocols/raw/master/Lib/Bash/changePrivacon.bash
chmod +x /opt/scripts/changePrivacon.bash
  1. Téléchargez les images des boutons de votre choix, décompressez les puis rangez les dans /usr/share/pixmaps/ (ou ailleurs si vous le souhaitez).

  2. Ajoutez les boutons sur votre moteur graphique (xfce, kde, gnome, etc) en respectant la logique suivante à répéter pour chaque chiffre :

Name : 1 PRIVACON
Comment : set PRIVACON to 1
Command : /opt/scripts/changePrivacon.bash "1"

Tester avec Bash

Multi-Lignes

    # initialise
PRIVACON=$(cat /tmp/${USER}_PRIVACON 2>&1 | grep -Eo "[0-9]");
[ -z "$PRIVACON" ] && PRIVACON=6 # set privacon to 6 if undectected
    # display privacon code
echo "$PRIVACON"
    # display WAN IP only if PRIVACON is 5 or unset (6)
[ "$PRIVACON" -gt 4 ] && curl https://bot.whatismyipaddress.com || echo '⛔'

One-Line

[ -z $(cat /tmp/${USER}_PRIVACON 2>&1 | grep -Eo "[0-9]") ] && PRIVACON=6 || PRIVACON=$(cat /tmp/${USER}_PRIVACON 2>&1 | grep -Eo "[0-9]"); [ "$PRIVACON" -gt 4 ] && curl https://bot.whatismyipaddress.com || echo '⛔';

Tester avec PHP

<?php
$PRIVACON=6;
if (file_exists($tmpfile))  {
    $raw=intval(file_get_contents('/tmp/'.posix_getpwuid(posix_geteuid()).'_PRIVACON'));
    if ($raw === 0 || ($raw > -2 && $raw < 6 )){
    $PRIVACON=$raw;
    }
}
    # Display PRIVACON
echo "PRIVACON : ".$PRIVACON.'</br>';
    # Display WAN IP only if PRIVACON is 5 or unset (6)
if($PRIVACON > 4){ echo file_get_contents("https://bot.whatismyipaddress.com");     }else{  echo '⛔'; }
?>

Article original : voir Nebuleuse0rion.

  • # coquille

    Posté par . Évalué à 4 (+3/-0). Dernière modification le 20/11/19 à 00:17.

    Pfff que je hais les journaux et leur instant blocage de l'édition. (c'est le re-post de l'article, Firefox n'a rien trouvé de mieux de cracher lors de la précédente correction 😅)

    Lien oublié dans

    Téléchargez les images des boutons
    

    voici la correction

    [Téléchargez les images des boutons](https://gitlab.com/voxdemonix/privacon-protocols/tree/master/Buttons/Quickluncher)
    
    • [^] # Re: coquille

      Posté par . Évalué à 3 (+1/-0). Dernière modification le 20/11/19 à 07:27.

      Corrigé, merci !

      En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

  • # Ouh la non

    Posté par . Évalué à 10 (+14/-0).

    /tmp/$USER_PRIVACON est une horreur niveau sécurité.

    En tant que simple utilisateur sur la machine, je peux créer les fichiers pour tous les utilisateurs de la machine, et les forcer à se mettre en mode 5

    Les variables d'environnnement c'est pas top parce que c'est statique une fois le processus lancé.

    Un fichier dans /tmp fait qu'au final, tous les softs vont devoir recharger ce fichier toutes les X secondes (ouvrir le fichier, lire la valeur, le fermer), ou faire un inotify dessus pour savoir si la valeur change et les inotify ont un cout.

    Au plus basique, met le fichier dans ~/.privacon, et les apps relisent le fichier toutes les X secondes

    Si tu veux faire un truc un peu plus solide, t'as un daemon qui offre un named pipe. Le daemon s'occupe de recevoir - stocker pour chaque utilisateur son niveau de sensibilité et les apps se connectent dessus, elles recoivent une notification quand le niveau change.

    • [^] # Re: Ouh la non

      Posté par . Évalué à 2 (+2/-1). Dernière modification le 20/11/19 à 02:52.

      Merci pour ton retour fort instructif.
      A mon avis le démon sera de la partie pour la version suivante. (ensuite j'essayerai d'implémenter le tout sur android)

      En tant que simple utilisateur sur la machine, je peux créer les fichiers pour tous les utilisateurs de la machine, et les forcer à se mettre en mode 5

      Je n'ai pas trop chipoté avec /tmp, mais les fichiers d'un propriétaire peuvent être modifié par un autre dans ce dossier ? Ou ce n'est que si l'evil user crée en premier?

      tous les softs vont devoir recharger ce fichier toutes les X secondes

      Oui j’ai choisi cette position car facile à mettre en RAM et donc pas grave si 36 conkys rechargent le fichier de façon répétitive 😄

      Les variables d'environnnement c'est pas top parce que c'est statique une fois le processus lancé.

      Ok, je n'étais pas sur en lisant les threads sur ubuntu (j'espérais avoir fais une erreur d’interprétation). Donc on peut complètement oublier ces variables pour ce cas de figure.

      • [^] # Re: Ouh la non

        Posté par . Évalué à 8 (+7/-0).

        Dans /tmp je ne peux pas modifier ton fichier, mais je peux le supprimer.

        Les distributions ont maintenant /run/user/${UID} qui me semble adapté.

        • [^] # Re: Ouh la non

          Posté par (page perso) . Évalué à 4 (+2/-0).

          Dans /tmp je ne peux pas modifier ton fichier, mais je peux le supprimer

          Pas sur un système correctement configuré (et c'est le cas de tous ceux que j'ai eu à utiliser jusqu'ici) : c'est à ça que sert le sticky bit justement.

          • [^] # Re: Ouh la non

            Posté par . Évalué à 2 (+1/-0).

            Effectivement /run rest tout de même plus sympa pour empêcher quiconque de créer/lire le fichier.

            • [^] # Re: Ouh la non

              Posté par . Évalué à 0 (+0/-1).

              Peut on y faire un montage en ram du genre :

              tmpfs /run/user/${UID}/RAM_folder tmpfs defaults,noatime,nosuid,nodev,noexec,mode=1770,size=126M 0 0
              

              ?

              • [^] # Re: Ouh la non

                Posté par . Évalué à 3 (+2/-0).

                C'est déjà un montage en ram en principe:

                tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=1631360k,mode=700,uid=1000,gid=1000)
                

                et tu peux faire un montage à l'intérieur, chez moi j'ai un :

                gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
                
                • [^] # Re: Ouh la non

                  Posté par . Évalué à 0 (+0/-1). Dernière modification le 20/11/19 à 14:56.

                  C'est déjà un montage en ram en principe:

                  Ah oki merci pour l'infos. Je ne connaissais pas ce path. (ça fait plus de dix ans que je tourne sur ubuntu et je n'ai jamais réussi a comprendre son arborescence dans sa totalité 😁 )

                  et tu peux faire un montage à l'intérieur, chez moi j'ai un :

                  Pour faire un montage le point de montage local doit exister, si c'est en RAM et que cela se reset au démarrage : tu dois donc passer par un cron qui crée tes mount path au démarrage ?

                  • [^] # Re: Ouh la non

                    Posté par . Évalué à 2 (+1/-0).

                    Alors au doigt mouillé parce que c'est pas moi qui l'ai configuré, ça doit être entièrement géré par ta session utilisateur parce que /run/user/${UID} est créé à ta connexion si je ne me trompe pas et supprimé à ta déconnexion.

  • # Je rate peut-être quelque chose, mais...

    Posté par . Évalué à 7 (+5/-1).

    1-Il y a un ennemi derrière moi:
    Ben si c'est si critique, j'arrête instantanément toute activité et je ferme le PC (ou je coupe l'écran si c'est un fixe). De toute manière je ne vois pas bien ce que je pourrais continuer à faire sur le PC qui soit à la fois secret et qui ne révèle pas mon activité.

    2-Si je fais une présentation à une convention (ou ailleurs), par défaut, je ne partage jamais ô jamais mon bureau complet. Le plus souvent, j'ai un écran étendu sur projecteur, et pour les gens en ligne, c'est celui-là que je partage.
    Maintenant, mon expérience est limitée, vu qu'au bureau je n'ai qu'un PC sous Win, mais je suppose qu'on peut faire la même chose sous KDE et Gnome, non? En fait j'espère même qu'on peut ne partager qu'un bureau virtuel?

    3-Une personne indigne de confiance est derrière:
    Pareil que 1. Demander aux applis de se censurer, ça sert à quoi si j'ai besoin de faire des choses sur le PC. L'appli ne donne pas son nom, mais soit l'individu n'est pas si dangereux, soit il va bien deviner ce que c'est en regardant par-dessus mon épaule. Dans les 2 cas, si je veux éviter les fuites, il serait préférable que je coupe simplement l'écran et que j'attende qu'il parte (ou je pars moi-même).

    Un bête filtre sur l'écran pour réduire l'angle de vision, ça ne suffirait pas amplement dans la plupart des cas?

    • [^] # Re: Je rate peut-être quelque chose, mais...

      Posté par . Évalué à 1 (+0/-0).

      Moi n'est le niveau 0 que je ne comprends pas. Je vous pas à quoi ça sert et si j'en avais besoin je couperais mon réseau (ifdown par exemple).

      • [^] # Re: Je rate peut-être quelque chose, mais...

        Posté par . Évalué à 2 (+1/-0).

        Voir mon explication ci-bas avec le conky Popup. Ca permet de dire aux conkys "pas de conso nerwork par contre te gêne pas d'afficher les données locales".
        Mais j'avoue que le zero étant le dernier né, pas encore implémenté et inspiré du mode Ghost de Backtrack : il n'est pas encore totalement défini.

    • [^] # Re: Je rate peut-être quelque chose, mais...

      Posté par . Évalué à 1 (+1/-1).

      Un bête filtre sur l'écran pour réduire l'angle de vision, ça ne suffirait pas amplement dans la plupart des cas?

      On peut faire ca ? Sur tout écran (y compris branché sur hdmi ou sur vga)?

      Pour tes points 1-2-3: j'ai créé et implé ce protocol pour gérer l'affichage de mes derniers conky qui font du remote monitoring. Je n'avais pas envie de devoir couper tout mes conky quand je fais un live twitch, je trouve plus sympa de virer tout ce qui est sensible (par ex pour le conky Popup que j'ai modifié, la conso CPU et RAM n'étant pas sensible, elles restent affichées, par contre les ip se censurent a la demande)
      Tu peux aussi le voir comme un controlleur de verbosité.
      Ca fait longtemps que j'aimerais avoir ce genre de fonctionnalité sur smartphone : quand tu montres une videos a la racaille du coin t'as pas toujours envie que tes notifications n'apparaissait et lâchent les noms des filles avec qui tu flirts.

    • [^] # Re: Je rate peut-être quelque chose, mais...

      Posté par . Évalué à 4 (+3/-0). Dernière modification le 20/11/19 à 15:02.

      D'accord il y a toujours des solutions mais prenons un exemple concret :
      - Chez moi quand je tape un mot de passe, ca me casse les pied de voir des étoiles. Parfois j'ai fourché et si je voyais ce que je tapais j'aviterais de clicker sur valider alors que mon mot de passe est faux.
      - Au bureau, il y a du monde qui circule, je ne vais pas éteindre mon PC, mais mettre des étoiles pour le mot de passe est utile.

      En théorie, c'est très utile d'avoir un système comme ça. En pratique, il faudrait qu'il soit largement intégré et bien adapté. (Y compris sur le web, dans les navigateurs, et les pages web). L'idée est très bonne mais il reste du chemin a faire.

  • # Démo

    Posté par . Évalué à 4 (+4/-1).

    demo Privacon conky SysInfos

  • # Android

    Posté par . Évalué à 1 (+1/-1). Dernière modification le 24/11/19 à 15:51.

    Il serait impossible de transposer sur android sans obliger les applications compatible à soit avoir la permission "accès fichier" soit avoir "accès web" (si on passe par un srv web comme ici), ai-je raison ou tort ?

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.