Short review of the KeyGrabber USB keylogger

keygrapper © keelog.comFew days ago I've bought a USB keylogger to use on my own computers (explanation in french here). Since then, and as I'm sitting in front of a computer more than 12 hours a day, I've got plenty of time to test it.
The exact model I've tested is the KeyGrabber USB MPC 8GB. I've had to choose the MPC model because both my current keyboards are Apple's Aluminum keyboards. They act as USB hubs, hence requiring some sort of filtering so that the keylogger won't try and log everything passing through the hub (mouse, usb headset, whatever…) and will get only what you type.
My setup is close to factory settings: I've just set LogSpecialKeys to "full" instead of "medium" and added a French layout to the keylogger, so that typing "a" will record "a", and not "q".

First of all, using the device on a Mac with a French Apple keyboard is a little bit frustrating: the French layout is for a PC keyboard, so typing alt-shift-( to get a [ will log [Alt][Sh][Up]. "[Up]"? Seriously? The only Macintosh layout available is for a US keyboard, so it's unusable here.

The KeyGrabber has a nice feature, especially on it's MPC version, that allows the user to transform the device into a USB thumbdrive with a key combination. By default if you press k-b-s the USB key is activated and mounts on your system desktop. The MPC version allows you to continue using your keyboard without having to plug it on another USB port after activation of the thumbdrive mode, which is great. You can then retrieve the log file, edit the config file, etc.
Going back to regular mode requires that you unplug and plug back the KeyGrabber.
Applying the "kbs" key combo needs some patience: press all three keys for about 5 seconds, wait about 15-20 seconds more, and the thumbdrive could show up. If it does not, try again. I've not tested it on Windows, but I'm not very optimistic, see below.

I'm using a quite special physical and logical setup on my home workstation. Basically, it's an ESXi hypervisor hosting a bunch of virtual machines. Two of these VM are extensively using PCI passthrough: dedicated GPU, audio controller, USB host controller. Different USB controllers are plugged to a USB switch, so I can share my mouse, keyboard, yubikey, USB headset, etc. between different VMs. Then, the KeyGrabber being plugged between the keyboard and the USB switch, it's shared between VMs too.
Unfortunately, for an unidentified reason, the Windows 10 VM will completely loose it's USB controller few seconds after I've switched USB devices from OSX to Windows. So for now on, I have to unplug the keylogger when I want to use the Windows VM, and that's a bummer. Being able to use a single device on my many systems was one of the reasons I've opted for a physical keylogger, instead of a piece of software.
Worse: rebooting the VM will not restore access to the USB controller, I have to reboot the ESXi. A real pain.

But in the end, it's the log file that matters, right? Well, it's a bit difficult here too, I'm afraid. I've contacted the support at Keelog, because way too often what I see in the log file does not match what I type. I'm not a fast typist, say about 50 to 55 words per minute. But it looks like it's too fast for the KeyGrabber which will happily drop letters, up to 4 letters in a 6 letters word (typed "jambon", logged "jb").
Here is a made-up phrase I've typed as a test:

c'est assez marrant parce qu'il ne me faut pas de modèle pour taper

And here is the result as logged by the device:

cesae assez ma[Alt][Ent][Alt]
rrant parc qu'l ne e faut pa de modèl pour taper

This can't be good. May be it's a matter of settings, some are not clearly described in the documentation, so I'm waiting for the vendor support to reply.

Overall, I'm not thrilled by this device. It's a 75€ gadget that won't work properly out of the box, and will crash my Win 10 system (and probably a part of the underlying ESXi). I'll update this post if the support helps me to achieve proper key logging.

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.