Pas malin

Voilà, je viens de donner un accès illimité à mes données personnelles, mes contacts, mes photos, mes sms, mon historique de navigation, et j'en passe, à une entreprise américaine qui n'a pas grand respect pour la vie privée et dont les pratiques me répugnent presque autant que celles de Facebook. Je suis géolocalisable une bonne partie du temps, j'ai autorisé des logiciels à accéder et modifier mes données de manière non documentée. J'ai mis pas mal d'argent dans un appareil moderne qui consomme tellement qu'il a autant d'autonomie qu'un modèle de 10 ans d'âge avec sa batterie d'origine, en prime je tue des ours polaires parce qu'il n'est pas démontable (sans doute pas réparable) et que la batterie n'est pas remplaçable par l'utilisateur. Il n'est pas extensible et sera sans doute périmé dans moins de 3 ans. Son client mail par défaut ne sait pas faire de l'authentification CRAM-MD5, et bien sûr je ne peux rien synchroniser directement à partir de mon ordinateur, tout doit être stocké sur et transféré via des serveurs américains.
Bref, j'ai un Google Nexus 4.

Bonjour vie privée

Je pourrais me lancer dans une grande dissertation sur la manière de protéger sa vie privée sur internet, et sur tous les mômes qui s'en foutent aujourd'hui, et pleureront demain. Mais comme rien n'est plus pédagogique qu'une démonstration, surtout avec une fille à poil, en voici une.
Vous connaissez presque tous, j'en suis sûr, le site bonjourmadame.fr. Pour les autres, sachez jusque que ce site présente une fois par jour une photographie de jeune femme sexy (comprendre nue), les contributeurs (et/ou l'administrateur) n'hésitant pas à supprimer la signature du photographe, et à convertir de temps en temps le résultat en noir et blanc parce que ça donne une caution artistique.
Parfois, un fan du concept un peu zélé va poster une photo de sa copine. C'est déjà un peu limite car rien ne dit si la copine est d'accord, ou même si les gens qui pilotent le site s'en soucient. Mais le fan est prudent, il ne veut pas qu'on reconnaisse sa copine, alors il lui coupe la tête dans un recadrage un peu barbare. Le bougre croit qu'il est bordé, que plus rien ne peut lui être reproché. Ce qu'oublie notre bonhomme c'est que la protection de la vie privée ça ne se fait pas par dessus la jambe, et qu'un coup de ciseaux dans une photo ou tout autre type de document ne suffit pas toujours.
Ainsi, certains logiciels conservent dans les méta données du fichier un aperçu de l'image d'origine. Moi je trouve ça particulièrement marrant, mais la copine sûrement moins.

bonjour vie privee, ou comment finir à poil dans les EXIF d'une photo
Sur la capture ci-dessus, j'ai bien sûr flouté la jeune fille. Bonjour vie privée !

edit du 2 février 2013 : il a récidivé avec la même jeune et pulpeuse demoiselle. Cette fois en nu intégral.

Loi informatique et libertés : fail.

Il est de notoriété publique que les opérateurs de téléphonie mobile accumulent tout un tas de données personnelles sur leurs clients. Notamment, les dates et heures de synchronisation à leur réseau d'antennes, ce qui permet sans grand effort d'obtenir une géolocalisation de votre téléphone en fonction du temps, même un an après.
Toutes ces données sont normalement accessibles à l'abonné, en vertu de la loi dite "Informatique et Libertés" (loi n°78-17 du 06 janvier 1978). J'ai donc décidé de demander à mon opérateur (Bouygues Télécom) l'intégralité des données relatives à mon abonnement. Je me suis fendu pour l'occasion d'une missive papier dont voici le contenu censuré :

24 janvier 2012

Monsieur,

Je suis client Bouygues Télécom depuis plus de 7 années. Mes coordonnées sont :

Patrick Proniewski
13 rue XXXXXX 6900X Lyon

Numéro : 06 67 XX XX XX
Numéro client, tel qu'indiqué sur ma facture : 1.78XXXXX
Numéro de série de portable : 3543XXXXXXXXXXX

Conformément à la loi "Informatique et Libertés" n°78-17 du 06 janvier 1978, je souhaite que vous me fassiez parvenir l'intégralité des données correspondant à mon abonnement, à ma carte SIM, à mon téléphone. Notamment, mais pas uniquement, toutes les données en votre possession concernant les communications, et les synchronisations de mon portable avec le réseau d'antennes (données de géolocalisation notamment), sur l'intégralité de la durée de mon abonnement.

Les données devront être lisibles sans logiciel spécifique (export texte ou pdf, format csv ou tabulé...)

Sincère salutations,
Patrick Proniewski

Puis j'ai attendu. Longtemps. Jusqu'au 15 juin 2012 en fait, jour où j'ai reçu contre signature une grande enveloppe, très fine. La lettre d'accompagnement disait précisément ceci :

Objet: Exercice du droit d'accès (1)

Lettre recommandée avec AR

Monsieur,

Pour faire suite à votre courrier, veuillez trouver ci-joint la liste des informations à caractère personnel que Bouygues Telecom détient sur votre compte client.

Nous vous informons que cette présente liste des données est établie selon les délais de conservation notifiés à la Commission Nationale de l'Informatique et des Libertés (CNIL).

vous souhaitant bonne réception de la présente.

Veuillez agréer, Monsieur, l'expression de mes sentiments distingués.

Service Inforntatique et Libertés
Direction des Systèmes d'Information

(1) Les données nécessaires au traitement des courriers reçus par le service Informatique et Libertés sont enregistrées dans un fichier informatisé à son usage exclusif pour l'accomplissement de ses missions. Vous pouvez exercer votre droit d'accès aux données vous concernant et les faire rectifier en vous adressant au service Informatique et Libertés - Bouygues Telecom - 13-15 Avenue du Maréchal juin - 92366 Meudon La Forêt Cedex

On notera avec amusement que le service informatique et libertés de Bouygues a introduit une close récursive dans sa réponse. En matière de liste des données personnelles, c'est par contre beaucoup moins drôle, puisque cela se limite à une page et demi de rien, de non-sens, dont je livre la plus grosse partie ci-dessous :

la blague de Bouygues

La seconde page ne contient que 4 lignes de tableau, reprenant exactement les 2 dernières lignes de la première page, seule la date change. Autant dire, je n'ai rien, et cet accès à mes données personnelles est juste un coup d'épée dans l'eau.
Peut être mon opérateur actuel sera-t-il un peu plus bavard ?

Utiliser auditd sur Mac OS X et FreeBSD – 3

Cet article est la suite de Utiliser auditd sur Mac OS X et FreeBSD - 2

Exploiter les résultats de l'audit

Dans le premier article j'ai mentionné très succinctement une commande qui permet de lire les logs d'audit en temps réel. Et finalement la consultation de ces logs est sans doute la chose la plus intéressante. Personne n'a envie d'activer l'audit sur une machine pour le simple plaisir de remplir son disque dur. Tout ceci doit avoir une raison d'être : pouvoir ensuite (ou en temps réel) exploiter les logs d'auditd. Continue reading

Utiliser auditd sur Mac OS X et FreeBSD – 2

Cet article est la suite de Utiliser auditd sur Mac OS X et FreeBSD - 1

Configuration : quid des utilisateurs comme www ?

J'expliquais précédemment que le système d'audit ne peut suivre un utilisateur que si ce dernier se connecte à la machine (par ssh par exemple), et que quelques soient les ruses utilisées (su, sudo...) c'est toujours l'UID réelle de l'utilisateur qui est suivie.

À cause de cela, il est totalement impossible de traquer des évènements appartenant à des utilisateurs qui ne peuvent pas se connecter au système. Ainsi, une ligne comme celle-ci dans audit_user ne permettra de traquer aucun évènement :

# pour freebsd remplacer _www par www
_www:fc,fd,ex:

Il serait pourtant très intéressant de savoir ce que fait Apache dans votre dos, parfois sous la direction de méchants pirates.
De nos jours, La plupart des serveurs utilisent des protocoles comme l'HTTP qui permettent aux utilisateurs d'accéder aux ressources sans être authentifiés au niveau du système. Les utilisateurs en question n'existent d'ailleurs pas au niveau du système. Néanmoins, les applications web permettent de faire énormément de choses via les langages comme le PHP, y compris d'interagir avec le système, en lançant des commandes, en créant des fichiers, etc.

Si on souhaite qu'auditd puisse contrôler les actions de www, il faut recourir à un artifice. Attention tout de même, ce qui suit est plus proche d'un hack que d'une méthode vraiment propre, et je ne peux pas garantir son fonctionnement correct dans un environnement de production.

En premier lieu il faut installer un programme spécifique, qui va permettre de forcer auditd à suivre les actions pour une UID donnée, sans que l'utilisateur correspondant ait besoin de se connecter à la machine.

curl -LO http://www.freebsd.org/~csjp/setaudit.c
cc -o setaudit -lbsm setaudit.c 

Cela vous donne, si tout se passe bien, le binaire setaudit, que l'on va utiliser sous cette forme :

setaudit -a UID_WWW -m FLAGS /programme/de/lancement/d/apache

Pour suivre les évènements d'exécution de commande sous respectivement FreeBSD et Mac OS X, cela donnera :

setaudit -a www -m ex /usr/local/etc/rc.d/apache22 restart
setaudit -a _www -m ex /usr/sbin/apachectl restart

Ainsi, toutes les commandes lancées par Apache (donc sous l'UID www) sont enregistrées par auditd.
Comme le masque des évènements (les flags de l'argument -m) décrit ce que l'on doit suivre, il est même inutile de renseigner le fichier audit_user.

Pour résumer :

  • Si vous souhaitez que l'audit suive les utilisateurs qui se connectent à la machine, vous pouvez régler les classes d'évènements qui seront soumises à l'audit pour l'ensemble des utilisateurs dans le fichier audit_control, et gérer les cas particuliers dans audit_user.
  • Si vous souhaitez que l'audit suive des UID "interne", pour traquer tout signe de compromission sur un serveur web, un serveur de mail, etc. il faudra recourir à setaudit pour activer l'audit au moment du lancement du service correspondant.
  • Faites attention à la liste de flags que vous choisissez. Le volume des logs d'audit peut grossir très rapidement.

Troisième partie de l'article ->

Utiliser auditd sur Mac OS X et FreeBSD – 1

FreeBSD et les versions récentes de Mac OS X sont livrées avec un système d'audit intégré, dérivé du Basic Security Module de SUN, et disponible en logiciel libre sous le nom d'OpenBSM. Ce système d'audit se décompose en deux parties : un ensemble d'appels systèmes dédiés et de librairies d'un côté, et des logiciels "utilisateur" de l'autre. Sauf précision contraire, les explications présentées ici sont valables à la fois pour FreeBSD 7 et 8, et Mac OS X 10.6. Dans cette série d'articles je ne vais aborder que l'aspect "utilisateur" du système d'audit : comment l'activer, comment le configurer, comment exploiter les résultats.
Le système d'audit fourni par OpenBSM a pour but la surveillante des actions des utilisateurs. Un certain nombre d'évènements peuvent être mis sous surveillance, pour tout ou partie des utilisateurs. Quand le système d'exploitation détecte qu'un utilisateur sous surveillance génère un des évènements à surveiller, il averti le démon auditd qui se charge de reporter cet évènement dans un fichier de log. Continue reading

Rendre des logs anonymes

En tant qu'administrateur système, je gère un certains nombre de serveurs qui voient passer des données personnelles, soit en tant que simple intermédiaire (passerelle de messagerie) soit en tant que destination finale (connexion/authentification des utilisateurs). Ces serveurs stockent alors sous forme de fichier de log des quantités phénoménales de données nominatives comme des identifiants, des adresses email, des adresses IP. Ces données sont bien évidemment confidentielles, et seule une réquisition judiciaire peut m'autoriser à en divulguer tout ou partie. Je suis moi-même autorisé à les exploiter dans le cadre de mon travail, mais uniquement à des fins statistiques, ou pour vérifier le bon fonctionnement des systèmes.
Il peut pourtant arriver qu'on soit tenté de fournir des extraits de log à certaines personnes. Un jour ce sera pour un prestataire ou un support technique, un autre jour ce sera pour alimenter des chercheurs universitaires qui ont besoin de données brutes. Il est alors impératif de faire disparaître toute trace de données personnelles et nominatives de ces fichiers, tout en s'assurant que le destinataire des fichiers sera en mesure de faire son travail.
Les données doivent être anonymes, mais pour autant elles doivent rester intègres et cohérentes. Par exemple, il faut que l'on puisse suivre le trajet d'un message électronique entre le serveur d'entrée, l'antispam, la passerelle interne, et le serveur de stockage final, sans pour autant connaître ni l'adresse IP du serveur de provenance, ni les adresses email de l'expéditeur et des destinataires.
Après quelques recherches infructueuses, j'ai décidé de créer moi-même le script dont j'ai besoin pour rendre des log de serveurs de mails anonymes.
En Perl, le module IP::Anonymous fourni une méthode cryptographique puissante basée sur Crypto-PAN. Cette méthode permet de rendre les adresse IPv4 anonymes tout en préservant une très grande cohérence des données. Voyez cet exemple avec à gauche les IP réelles, et à droite les IP anonymes obtenues par chiffrement :

192.168.0.15 -> 54.42.0.48
192.168.0.20 -> 54.42.0.43
192.168.1.15 -> 54.42.1.56
192.168.1.20 -> 54.42.1.43

En me basant sur un exemple de script Perl utilisant IP::Anonymous, j'ai créé un script qui permet en plus de rendre anonyme les adresses email, les message-IDs, et les noms de machines. Ainsi, et à condition de rester en IPv4, le script final permet de rendre totalement anonyme des logs Postfix :

   1: #!/usr/bin/perl -wT
   2: 
   3: # script brodé à partir d'un exemple
   4: # trouvé en ligne sur le forum CPAN
   5: # http://cpanforum.com/posts/1304
   6: 
   7: # à utiliser sous la forme :
   8: # logs_anonymes.pl fichier.log > sortie_anonyme.log
   9: 
  10: use strict;
  11: $|=1;
  12: 
  13: use IP::Anonymous;
  14: use Digest::MD5;
  15: 
  16: # 32 integers entre 0 et 255 (jot -r 32 0 255)
  17: my @key = (135,229,13,26,29,84,46,37,231,95,211,
  18:            196,243,11,87,5,23,217,173,214,66,241,
  19:            164,67,132,149,161,151,114,137,238,75);
  20: 
  21: my $obj = new IP::Anonymous(@key);
  22: my $md5 = Digest::MD5->new;
  23: 
  24: # seed pour le md5 
  25: my $seed = '766326241f69b1244792587f556d02b8';
  26: 
  27: while(defined(my $line=<>)) {
  28:     chomp $line;
  29:     # les IP
  30:     if($line =~ /\d{1,3}(?:\.\d{1,3}){3}/) {
  31:         $line =~
  32:             s/(\d{1,3}(?:\.\d{1,3}){3})/$obj->anonymize($1)/eg;
  33:     }
  34:     # les adresses email et messageID
  35:     if($line =~ /[=< ][^@ ]*@/) {
  36:         $line =~
  37:             s/([=< ])([^@=< ]*@)/$1.$md5->add($seed)->add($2)->hexdigest."@"/eg;
  38:     }
  39:     # les hostnames
  40:     if($line =~ /([=< @])(([a-zA-Z0-9]***TRONQUÉ***|ZW)/i ) {
  41:         $line =~
  42:             s/([=< @])((?:(?:[a-zA-Z0-9]***TRONQUÉ***|ZW)/$1.$md5->add($seed)->add($2)->hexdigest.".".$3.".".$4/egi;
  43:     }
  44:     # suppression des HELO
  45:     if($line =~ /(helo=<[^>]*>)/i ) {
  46:         $line =~
  47:             s/(helo=<[^>]*>)//gi;
  48:     }
  49:     
  50:     print $line."\n";
  51: }

Attention : certaines lignes du script ci-dessus sont tronquées volontairement. Cliquez ici pour obtenir le code du script fonctionnel : logs_anonymes.pl.

Pour utiliser ce script, il vous faudra installer IP::Anonymous, comme ceci par exemple :

$ sudo cpan
cpan[1]> install IP::Anonymous

Il vous faudra aussi personnaliser le contenu de @key (lignes 17 à 19), en utilisant par exemple la commande jot pour générer une liste de 32 entiers aléatoires compris entre 0 et 255 :

$ jot -r -s , 32 0 255

@key doit être gardée secrète, donc votre script devra être lisible seulement par vous.
Pour finir il faudra personnaliser le contenu de $seed (ligne 25), en saisissant la chaîne de caractères qui vous plait.
Aux lignes 40 et 42 figure une liste quasi complète des TLD, obtenue auprès de l'IANA.

Pour utiliser le script, que vous aurez rendu exécutable, il suffit de l'invoquer comme cela :

$ /chemin/de/logs_anonymes.pl fichier.log > sortie_anonyme.log

Testé sous Mac OS X 10.6 et FreeBSD 8.

Enjoy.

Munin, carte RAID, et température des disques durs

Monitorer la température de ses disques durs n'est pas très compliqué. De base, Munin fait ça très bien avec un minimum de réglages. Il suffit d'installer smartmontools, Munin, et de régler ce dernier pour qu'il sache quels disques on veut surveiller.
On obtient rapidement ce genre de graphique :

Mais si les disques durs sont connectés non pas à la carte mère directement, mais à une carte RAID, la chose se complique. En effet, le système ne sait pas qui est ad4 (ou ad6, ou toute autre appellation interne). Le système ne voit que la carte RAID.

Disons que nous sommes sur un bon système (FreeBSD), avec une bonne carte RAID (3Ware) utilisant le pilote twa. Cette carte sera donc vue du système sous le nom interne /dev/twa0 (0 car c'est la première carte de ce type dans la machine).
L'outil smartctl permet d'accéder au S.M.A.R.T. des disques durs au travers de la carte RAID par des requêtes comme :

smartctl -a /dev/twa0 -d 3ware,0  # 1er disque branché sur la carte
smartctl -a /dev/twa0 -d 3ware,1  # 2nd disque branché sur la carte
...

Comme le plugin hddtemp_smartctl de Munin utilise smartctl aussi, il ne reste plus qu'à lui faire comprendre la syntaxe. On ne doit plus lire les données S.M.A.R.T. de /dev/ad4, /dev/ad6… mais celles de /dev/twa0 -d 3ware,0, /dev/twa0 -d 3ware,1
Il faut éditer le fichier plugins.conf de Munin, en créant une section [hddtemp_smartctl] dans la quelle :

  1. on crée des disques durs "virtuels"
  2. on rattache chacun de ces disques à notre carte twa0
  3. on précise le type de chaque disque dur (3Ware,0, 3Ware,1…)

Voici ce que cela donne pour une carte 3Ware twa0, à la quelle sont connectés quatre disques durs que l'on décide de nommer tout à fait arbitrairement hd0 à hd3 :

[hddtemp_smartctl]
env.smartctl /usr/local/sbin/smartctl
env.drives hd0 hd1 hd2 hd3
env.dev_hd0 twa0
env.dev_hd1 twa0
env.dev_hd2 twa0
env.dev_hd3 twa0
env.type_hd0 3ware,0 
env.type_hd1 3ware,1
env.type_hd2 3ware,2
env.type_hd3 3ware,3

J'insiste bien sur le fait que les noms hdx sont des abstractions arbitraires, utilisées pour mettre en relation un "dev" et un "type". On pourrait mettre "toto", "titi"… cela marcherait de la même manière.
Cela donne finalement quelque chose comme ça :