Des sénateurs américains surveillés par la CIA

La CIA a espionné les membres de la commission du renseignement du Sénat américain, qui enquêtent sur les programmes de détention et d’interrogatoire de l’agence américaine de renseignement, instaurés après le 11 septembre 2001, rapporte le New York Times mardi 4 mars.

Les sénateurs, qui travaillent sur un volumineux rapport parlementaire détaillant les méthodes de la CIA, ont été espionnés par le biais d’une infiltration du réseau informatique par des salariés de l’agence. Les manœuvres de la CIA ont également permis de capter des communications sénatoriales pour court-circuiter ses investigations.

Une enquête interne a été lancée au siège de la CIA suite à une déclaration du sénateur démocrate du Colorado, Mark Udall, qui a dénoncé une « action sans précédent » contre la commission sénatoriale.

Lire sur le New York Times

J'aime(0)Ferme-la !(0)

Faille dans le noyau Linux : le root en 1 clic sur Android

Le noyau Linux est victime d’une faille de sécurité importante au début du mois de juin 2014 :

CVE-2014-3153
Pinkie Pie discovered an issue in the futex subsystem that allows a local user to gain ring 0 control via the futex syscall. An unprivileged user could use this flaw to crash the kernel (resulting in denial of service) or for privilege escalation.

GeoHot, célèbre hacker à qui l’on doit le crack de la playstation 3 et de l’iphone, a réussi à écrire un programme sur Android qui exploite cette vulnérabilité pour obtenir une élévation de privilège et ainsi avoir les droits administrateur sur le système (« root »).

Ca s’appelle TowelRoot et ca devrait potentiellement marcher pour obtenir le root sur tous les téléphones Android non mis à jour depuis début juin.

Ca c’était la bonne nouvelle. La mauvaise, moins médiatisée, est que n’importe quelle appli peut utiliser la même technique et avoir tous les droits (ce qui veut dire accéder à tous vos mots de passes, aux données personnelles de toutes les applis, mettre un virus ou mouchard, etc…).

Vous devez donc mettre à jour votre OS Android dès que possible !
– Omnirom est à jour pour le S3 par exemple

Cette remarque s’applique aussi à votre OS linux de bureau vu que la faille s’y applique aussi. :-) La majorité des distributions Linux (Debian, Ubuntu, etc…) ont déjà publié un correctif.

J'aime(4)Ferme-la !(0)

OpenSSL et la vérification du domaine dans les certificats

Je suis en train de rajouter de l’onion routing à mon moteur de recherche MySearch. Je me suis donc penché sur comment Twisted (13.2) gérait les connexions SSL.

Tout d’abord, il faut savoir qu’une connexion web HTTPS dans Twisted ne fait aucune vérification de certificat par défaut. C’est écrit dans la doc et dans l’API.

Enfin « par défaut », il faut comprendre « sans mettre les mains dans le cambouis ». Car quand on regarde plus en profondeur dans le code de Twisted, on voit que les connexions SSL reposent sur PyOpenSSL , qui est comme vous vous en doutez un binding pour la fameuse librairie OpenSSL.

Dans Twisted, voici ce qu’on trouve de plus exhaustif pour vérifier la sécurité de sa connexion SSL. Là, le premier truc qui choque, c’est que le hostname de destination n’apparaît pas dans le code de vérification des certificats.

On se dit qu’on loupe quelque chose, on va voir du coté de la doc de PyOpenSSL . Pareil, pas de fonction qui vérifie la correspondance du hostname demandé avec le certificat présenté. Et pas un mot sur le sujet.

Allons donc voir ce qu’en dit OpenSSL. Et là c’est beau, je vous le donne en mille :

One very common mistake made by users of OpenSSL is to assume that OpenSSL will validate the hostname in the server’s certificate. Currently, it does not, although a future version (1.1.0?) will include this functionality.

C’est écrit noir sur blanc et .

Sérieusement, vous pensez qu’il est sain de forcer des programmeurs lambda à coder une fonction si critique qui va vérifier le hostname de destination avec toutes les règles de subject alt name encodées en ASN.1 sans faire le moindre faux positif ni faux négatif ?

Je serai amusé de voir le code de cette partie de quelques applications reposant sur OpenSSL. On risque de trouver des manières élégantes de faire du MITM avec un simple certificat adapté…

Par pur hasard, une nouvelle version de Twisted (14.0) est sortie ces jours-ci. Les notes de mise à jour indiquent de grandes améliorations autour des communications SSL (enfin dirais-je !).

Je vais donc, curieux, voir comment ils se sont sorti de ce piège. Le code de vérification du hostname est en fait externalisé à un module Python externe : service_identity , module créé en mars 2014 (semble t il par des codeurs de Twisted). Ca c’est du code sûr, vérifié et testé… qui prend quand même environ 430 lignes de Python (avec beaucoup de lignes blanches je vous l’accorde).

Voici d’autres exemples du joli cadeau sue nous lègue OpenSSL :

 

J'aime(0)Ferme-la !(0)

USB dumper

Je vous avais déjà parlé des risques de brancher un téléphone Android par USB pour le recharger. En effet, dans le cas où le téléphone est déverrouillé lorsqu’il est branché, l’accès à l’espace de stockage du téléphone est aussi débloqué.

Bref si vous avez des données confidentielles sur votre téléphone, vous devriez, au même titre qu’une clé USB, ne pas le brancher n’importe où.

Pour aller plus loin dans la réflexion, j’ai codé un programme qui démontre comment vos données pouraient aisément être copiées sans que vous vous en aperceviez.
Ce programme s’appelle « usb-dumper« . Une fois lancé, il copie intégralement et silencieusement le contenu de tous les périphériques USB connectés utilisant le mode UMS (clés USB, Android 3.x, appareils photos) ou MTP (Android 4.x, lecteurs audio, appareils photos, etc…) vers le disque dur de votre ordinateur.

Dès qu’un nouveau périphérique USB est connecté, celui est copié. Vous verrez que la procédure est très rapide avec les débits en USB atteints aujourd’hui et que l’on peut se faire subtiliser des GigaOctets en quelques secondes et donc sans s’en rendre compte.

Le code utilise udev pour détecter le branchement de nouveau périphérique et GVFS pour l’accès aux données. L’utilisation de GVFS implique l’usage de Gnome mais c’est le seul moyen vraiment fiable d’accéder à l’espace de stockage des périphérique MTP (Android 4.x) que j’ai trouvé.

Vu que je commence à mieux appréhender la construction de paquet Debian pour mes programmes Python, je vous ai concocté un paquet .deb pour vous faciliter la tâche d’installation.
Lancez « usb-dumper » et branchez un périphérique :-)

Les préférences se trouvent dans le fichier ~/.config/usb-dumper/usb-dumper.conf
Vous pouvez y déterminer les périphériques et les fichiers à ne pas copier ainsi que l’emplacement où seront copiés les fichiers.

Le code source est sous licence libre AGPL et disponible sur la forge CodingTeam.

J'aime(0)Ferme-la !(0)

Lister les connexions entrantes de votre ordinateur

La commande netstat -tape permet de lister les processus qui acceptent des connections entrantes sur votre ordinateur. Facile à se rappeler !
Pour plus d’information, man netstat.

# netstat -tape
Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat        User       Inode       PID/Program name
tcp        0      0 localhost:60061         *:*                     LISTEN      mysearch   7850        2813/python     
tcp        0      0 *:43173                 *:*                     LISTEN      statd      13393       1844/rpc.statd  
tcp        0      0 *:sunrpc                *:*                     LISTEN      root       13372       1816/rpcbind    
tcp        0      0 *:ssh                   *:*                     LISTEN      root       33422       6097/sshd       
tcp        0      0 *:gdomap                *:*                     LISTEN      root       6788        2253/gdomap     
tcp6       0      0 [::]:sunrpc             [::]:*                  LISTEN      root       13375       1816/rpcbind    
tcp6       0      0 [::]:32947              [::]:*                  LISTEN      statd      13397       1844/rpc.statd  
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      root       33424       6097/sshd
J'aime(0)Ferme-la !(0)

Et ça continue encore et encore…


Le journal allemand Bild a révélé le 23/02/2014 que 320 haut fonctionnaires allemands étaient toujours espionnés par la NSA par des agents basés en Allemagne.
Le journal allemeand DeSpiegel a révéle le 27/10/2013 que Angela Merkel était espionnée depuis 2002 ! Même Obama le savait depuis 2010 et a bien sûr continué à profiter de cette position.

C’est quelque chose d’incroyable dans des relations diplomatiques entre états. Difficile d’imaginer qu’il en soit différent pour la France, étant donné que même Closer peut espionner notre président :D

Mais ce qui me choque le plus, c’est la non réaction de la classe au pouvoir. Aucune réponse ! Rien ! Nada !

Voici un bon dossier de rappel sur toutes les révélations de Snowden pour vous raffraichir la mémoire.

J'aime(0)Ferme-la !(0)

Bloquer l’accès à la mémoire du téléphone lors du branchement USB

Par défaut, lorsque vous branchez un câble USB à votre téléphone Android, vous donnez un accès en lecture/écriture à la totalité de votre téléphone. C’est pour moi une grosse faille de sécurité si l’on se branche sur l’ordinateur de quelqu’un à qui on n’a pas forcément envie de donner toutes ses données ou à un chargeur public qu’on ne connaît pas.

refCharlesdeGaulle

Pour désactiver l’accès automatique à la mémoire de votre téléphone lorsque l’on branche un cable USB, allez dans les options du téléphone, puis sur « Stockage », puis dans les options (l’icône en haut à droite avec 3 points verticaux), sélectionnez « Connexion USB à l’ordinateur » et désactivez les entrées MTP et PTP.

J'aime(0)Ferme-la !(0)

Messagerie sécurisée, attention à votre carnet de contact !

Une des questions cruciales à se poser sur une messagerie « sécurisée » est comment sont gérées les méta-données?

Par exemple, il est intéressant pour la NSA et autres états qui surveillent en masse de savoir qui parle à qui et à quelle fréquence. Ça permet aisément de construire des réseau de relations à faible coût.

Regardons maintenant un petit peu comment fonctionnent Textsecure et Telegram .

Pour mettre en relation les utilisateurs, ceux-ci se basent sur le numéro de téléphone.
Chaque utilisateur est identifié par son numéro de téléphone, vérifié par l’envoi d’un SMS sur le terminal lorsque l’on crée son compte de messagerie.Ensuite, lorsque l’on envoie un message à un contact, ça se passe grosso modo comme ça :

  1. on envoie le numéro de téléphone de son correspondant.
  2. le serveur cherche dans sa base d’utilisateurs connectés si il trouve le numéro de téléphone.
  3. le message est transmis au terminal de notre correspondant par la connexion permanente (PUSH) établie entre le terminal de notre correspondant et le serveur.

On comprend bien que déjà la personne qui gère le serveur sait qui parle à qui et à quelle fréquence.

Ensuite, on peut avoir quelques fioritures encore plus pourries :

Par exemple, comment savoir avec quels contacts je peux utiliser mon « application de communication sécurisée » ? En demandant au serveur, pour chacun des numéros de mon carnet de contact, s’il correspond à utilisateur enregistré. Bingo, vous venez d’envoyer la totalité des numéros de votre carnet de contact.

Ce qui est encore plus rigolo, c’est que même si vous ne l’avez pas fait mais que vos contacts ont envoyé leur carnet de contacts, par recoupement, le serveur peut reconstruire le votre. La preuve flagrante, c’est quand vous créez un compte avec un carnet d’adresse vide, mais qu’automatiquement, le serveur trouve vos amis (Ex: facebook, linkedin, etc…)

Pour moi, le design de base de ces applications rendent impossible la protection des métadonnées des échanges sauf si l’on a confiance dans le serveur. Croyez-vous encore au « Don’t be evil »?

Une solution serait :

  1. Utiliser un identifiant ne permettant pas de remonter facilement à l’identité réelle de l’utilisateur (ex : un numéro aléatoire)
  2. Ne pas laisser le serveur connaître qui envoie le message (ex: le message ne contient que l’identifiant du destinataire en clair, le message envoyé par l’utilisateur émetteur passe par plusieurs relais avant d’arriver au serveur. On peut ainsi dire que le message est envoyé de manière anonyme. L »identité de l’émetteur est à l’intérieur du message chiffré que seul le destinataire peut déchiffrer)
J'aime(0)Ferme-la !(0)