Let’s Encrypt everything, la grosse trouvaille du siècle !

Rappelez-vous de l’époque où on utilisait HTTPS uniquement pour les communications ayant un caractère privé (on parle aussi de TLS, SSL, certificats, etc).

A cette époque, pour obtenir un certificat, il fallait se diriger vers une autorité de certification, démontrer qu’on était autorisé à faire cette demande, payer une certaine somme, et installer ce certificat sur le serveur web, pour bénéficier d’une protection des communications transmises via le web. Toute cette procédure était assez malaisée pour le “webmaster moyen”.

Puis la grande vague “Let’s Encrypt” est passée par là depuis fin 2015, et tout le monde est en train de tout encrypter, facilement et gratuitement. Même les horaires de l’autobus. Même le présent blog. Même l’édition gratuite de la gazette. Même la recette du pot-au-feu de Mme Michu.

En fait tout le monde s’en fichait un peu, jusqu’au moment où Google, déjà victorieux de la troisième guerre mondiale, celle de l’information, a décidé de pénaliser les sites non-HTTPS dans ses résultats de son moteur de recherche en les éjectant de la première page.

Non content de crypter le trafic web mondial, il faut passer à la vitesse supérieure. On va de plus en plus encrypter le trafic DNS (conversations de machine à machine – entre autres répondre aux questions telle que celle-ci: quelle est l’adresse IP de xxx.com) , de telle manière que personne entre l’utilisateur et le serveur DNS questionné ne puisse “sniffer le câble” et prendre connaissance des questions DNS, et donc des sites visités et des habitudes de surf de l’utilisateur.

En fait tout ça me plaît lorsque que j’utilise le wifi gratuit mis à disposition par stib.brussels, ou bien un hôtel d’une grande chaîne ou le petit restaurant viet du coin. Ils n’ont pas à savoir si je vais sur Facebook et quels sont mes amis, ni intervenir dans mes conversations Skype. Ca me rassurerait “presque” d’oser utiliser ma banque en ligne.

Bien au contraire, les e-mails (ou mèl, ou courriels, …) sont très mal protégés. En 2019 la quasi-totalité des communications e-mail sont sécurisées. A moins d’utiliser Gmail, Hotmail ou équivalent, vous savez sans doute trop bien que c’est compliqué de configurer une messagerie sur votre téléphone ou PC. En contrepartie si les communications sont sécurisées, tous vos e-mails sont stockés en clair sur les disques durs de la société qui héberge vos mails. C’est à dire que vous êtes à poil devant Apple si vous mettez tout dans iCloud ; devant Microsoft pour Hotmail, Office365, Live, Onedrive ; devant Google pour Gmail et Googledrive…

Quand vous envoyez une information commerciale importante ou sensible à plusieurs personnes, combien de fois pouvez-vous affirmer qu’il n’y a pas au moins un destinataire chez ces Google, Apple et consorts ?

Tout ceci a un effet insidieux sur la sécurité des entreprises. Le responsable de la sécurité informatique se trouve fort démuni lorsqu’il doit prendre toutes les mesures contre les infections de virus et autres bestioles malfaisantes, exfiltration de données d’entreprise, visites de sites inacceptables, et j’en passe et des meilleures.

 

 

Linux / bash / Raspberry Pi : reboot quotidien

J’ai un Raspberry Pi 3 sur lequel tourne Domoticz. Ca fait deux ou trois fois que je l’ai retrouvé complètement planté.

J’ai décidé de le rebooter au milieu de chaque nuit, vers deux heures du matin. J’y a inclus un fusible pour ne jamais avoir de reboots indésirables, par exemple s’il y a des changements d’heure. Et depuis que je reboote régulièrement je n’ai plus jamais eu de plantage.

Dans /etc/crontab, ajouter la ligne suivante:

2 2 * * * root if [ `cat /proc/uptime|cut -f1 -d.` -gt 86200 ]; then /sbin/shutdown -r +2 ; fi

J’explique: chaque jour à 02:02, sous le user ‘root’ exécuter la commande suivante

# cat /proc/uptime
76861.53 276823.00

renvoie l’uptime en secondes. La seconde valeur est l’idle time (supérieur à l’uptime car il y a 4 processeurs)

Il y a 86400 secondes dans 24 heures. Dans la réponse à la commande ci-dessus, on prend ce qui est devant le point. Si l’uptime mesuré est supérieur à 86200 secondes, alors on reboote le système. Sinon pas d’action.

 

Domotique, IoT, électronique connectée : ici ça dépasse les bornes !

J’ai acheté cette semaine un relais électronique SONOFF , en vente pour le moment pour 4,78€ frais de port compris, chez Banggood. (lien)Pas de notice, il faut lire un QR-code sur la boîte. Il y a deux autres QR-codes pour l’app iPhone et l’app Android.

Le manuel complet se trouve ici (lien lien)

Ca a l’air sympa, voilà enfin un accessoire facile à configurer, et ça fonctionne juste bien comme annoncé.

J’ai ouvert le boîtier pour constater que la qualité de réalisation est bonne. Ce n’est pas protégé contre l’humidité ou la pluie. Pour 5€ livré chez vous, c’est une bonne affaire.

_______________________________________________

Maintenant on va passer aux points négatifs et ils sont si nombreux que je vais m’abstenir d’utiliser ce gadget tel qu’il est.

  1. Il ne peut être piloté que via une application. Abandonnez l’idée d’un simple navigateur internet.
  2. Cette application fonctionne via un site centralisé hébergé sur Amazon AWS.
  3. Si plusieurs personnes doivent télécommander le même appareil, chacune doit installer l’app, créer un compte personnel et accepter une invitation de la part du propriétaire du relais.
  4. L’application testée dans sa version Android réclame les droits suivants pour pouvoir être installée: Device & App history, Location, Photos/Media/Files, Camera, Microphone, WiFI connection information, Device ID and Call History. Je vous invite à voir les captures d’écran qui expliquent mieux en détail les accès demandés.

    Lors de l’installation de l’app j’ai aussi dû créer un compte avec une classique validation de mon adresse e-mail. Je n’ai pas complété mon n° de téléphone qui était pourtant demandé. N’est-ce pas un peu beaucoup pour allumer ma lampe de jardin à distance ?
  5. Ensuite, comme toutes les communications passent par ce serveur centralisé, il, me sera impossible d’allumer ou éteindre cette lampe qui est tout près de moi, s’il n’y a pas d’internet, si le serveur central est arrêté par le vendeur, s’il se fait hacker, etc.

Etant donné l’intrusion grave dans ma vie privée, et la dépendance au bon fonctionnement d’internet et de l’infrastructure centralisée avec laquelle je n’ai aucune relation contractuelle, j’ai désinstallé aussitôt l’application. Le relais est devenu sans aucune utilité, tel qu’il est.

Cet appareil contient un microcontrôleur programmable ESP8266. L’internet regorge de projets pour reprogrammer la mémoire de ce microcontrôleur. Ca promet du plaisir … L’interface USB-Serial TTL est commandé…

Dans un article suivant, j’explique comment programmer le bouton et la LED.

Collection de liens:

Reprogram Sonoff Smart Switch with Web Server

MQTT -> http://www.hivemq.com/blog/how-to-get-started-with-mqtt

Hacking it -> https://wiki.almeroth.com/doku.php?id=projects:sonoff

ESPurna -> https://bitbucket.org/xoseperez/espurna/wiki/Home

Let’s Control It: https://www.youtube.com/watch?v=fN_QKOWvG1s
https://www.letscontrolit.com/wiki/index.php/ESPEasy

Update 10 novembre 2017: pourquoi il ne faut pas acheter un appareil qui est “possédé” par quelqu’un d’autre (et qui peut décider de bloquer son fonctionnement alors qu’il est en parfait état de marche même dans un environnement non relié à internet)
NEST: http://www.zdnet.com/article/nest-to-brick-revolv-smart-hubs-on-sunday-and-theres-nothing-owners-can-do-about-it/
LOGITECH: https://gizmodo.com/logitech-will-be-intentionally-bricking-all-harmony-lin-1820279591
https://arstechnica.com/gadgets/2017/11/logitech-to-shut-down-service-and-support-for-harmony-link-devices-in-2018/

Edit 15/02/2018: Un article à lire sur la “smart house”. Brrrr… bonjour les mouchards.

Edit 19/05/2018: NEST en panne pendant quelques heures. Ce n’est pas la fin du monde, mais ça touche tous les cleints NEST dans le monde. Articles: TheVerge, Gizmodo.

Sonoff – programmation du bouton et de la LED

Cet article fait suite à un article précédent.

J’ai acheté plusieurs relais Sonoff et je les ai flashés (reprogrammés) avec l’excellent logiciel ESP Easy de Lets Control It.

Pour flasher l’appareil il y a de multiples articles et videos Youtube qui expliquent comment faire. Il faut avoit un UART USB (interface USB vers port série à 3,3 volts) et savoir manipuler un fer pour souder une barrette de 4 jumpers sur la carte mère du Sonoff.

J’ai utilisé la version 2.0.0.-dev12 du logiciel ESP Easy.

Je considère que vous êtes arrivé à enregistrer le mot de passe de votre réseau WiFi dans le Sonoff à ce stade.

Dans cet article, je vais indiquer comment j’ai activé les fonctions basiques du bouton poussoir et de la LED d’état.

Je vais passer en revue les différents écrans de configuration.


Ecran principal


Ecran de configuration de base: donnez un nom unique à votre Sonoff, ainsi qu’une adresse IP fixe. En ce qui me concerne j’ai opté pour une réservation fixe DHCP: le serveur DHCP attribue toujours la même adresse IP sur base de l’adresse MAC.


Dans l’onglet Controllers il y aura lieu d’indiquer les coordonnées de votre serveur domotique si vous en avez un (par exemple Domoticz, ce sera peut-être l’objet d’un article suivant)


Dans l’onglet Hardware, il n’y a rien à modifier (pour le moment).


Voici l’écran Devices. On va éditer la ligne 1 et ensuite la ligne 2, comme décrit ci-dessous.


Détail de l’édition de la ligne 1 de Devices, déclaration du bouton poussoir.


Détail de la ligne 2, déclaration du relais.


Cette phase est importante. Il s’agit des actions que le Sonoff prendra lors d’événements.
– A chaque reboot, envoi d’un mail et positionnement de la sortie (GPIO12) à l’état allumé.
– A chaque pression du bouton, changement de l’état de la sortie GPIO12 ON ou OFF.
– A chaque changement d’état de la sortie GPIO12, changer l’état de la LED (GPIO13, 0=allumée, 1=éteinte)
Notez que pour faire apparaître le menu “Rules” il faudra d’abord lire la suite de l’article. Le script se trouve plus bas pour vous permettre un copier/coller.


Configuration de la notification n° 1.


Configuration du serveur e-mail pour les notifications. Vous pouvez opter pour le serveur mail de votre fournisseur internet, si celui-ci ne vous oblige pas d’authentification ni d’encryptage SSL ou TLS.


Pour finir, une page importante, dans Tools, choisir Advanced.
Cocher “Rules” pour pouvoir accéder à ce menu.
Vous pouvez aussi cocher NTP et le configurer, afin que votre SONOFF connaisse la date et l’heure.


Comme promis voici le script de l’étape ci-dessus “Rules”:

on System#Boot do 
 notify 1,Rebooted
 gpio,12,1
endon

on bouton#Switch do
 if [relais#Switch]=1
 gpio,12,0
 else
 gpio,12,1
 endif
endon

on relais#Switch do
 if [relais#Switch]=1
 gpio,13,0
 else
 gpio,13,1
 endif
endon

Comment trouver les doublons dans un gros répertoire ?

Que ce soit de la musique, des dossiers, des images, il est parfois utile de partir à la recherche des doublons sur vos gros disques de stockage, afin de les trier et les éliminer.

Pour cela, on va utiliser un algorithme d’empreinte digitale sur chaque fichier et chercher les empreintes qui apparaissent de multiples fois.

Avec l’algorithme MD5 l’empreinte de n’importe quel fichier a toujours la même longueur de 32 caractères hexadécimaux ce qui nous suffit amplement pour cette application : 3 x 1038 combinaisons possibles (à comparer au Lotto 3 x 109 combinaisons).

Le nom des fichiers et leur date ne sont pas pris en compte pour la comparaison.

Mise en oeuvre, en utilisant Cygwin sous Windows.

1) Générer un fichier texte contenant toutes les empreintes MD5

cd /cygdrive/d/photos
find . -type f -iname "*.jpg" -exec md5sum {} \; >> ../photos.md5.txt

Le fichier va contenir des milliers de lignes semblables à celles-ci:

ffec08582acee50e888c0eb8ef0f66c2 *./g/piscine 16-02/111_1107.JPG
058985e2dcedb7a6692f3fbbecf86a91 *./g/piscine 16-02/111_1108.JPG
ed166e0b101812f8902086f4a3d1d354 *./g/piscine 16-02/111_1109.JPG
87ea7756e7dd8dbd2bd443cf179943f7 *./g/piscine 16-02/111_1110.JPG
3e2ed3ec9267119cfd234d907faff1f4 *./g/piscine 16-02/111_1111.JPG
b092ccabea875fb24725b25addb9eb5f *./g/piscine 16-02/111_1114.JPG
cb21d2e1daa65b7bb7b96d35741edb2c *./g/piscine 16-02/111_1116.JPG
41cedebb2579eb820f4545cd864c23be *./g/piscine 16-02/111_1119.JPG
3e2ed3ec9267119cfd234d907faff1f4 *./g/piscine 16-02/double_111_1111.JPG

2) La commande suivante va révéler tous les fichiers qui sont en double ou en multiples copies.

sort ../photos.md5.txt|uniq -w 32 -D|sort -k1.33|less

résultat:

3e2ed3ec9267119cfd234d907faff1f4 *./g/piscine 16-02/111_1111.JPG
3e2ed3ec9267119cfd234d907faff1f4 *./g/piscine 16-02/double_111_1111.JPG

Vous pouvez effacer toutes les copies sauf une, et ça c’est votre travail.

Explication sur les commandes utilisées:

find : trouve les fichiers correspondant au critère demandé ; le paramètre -exec ordonne d’exécuter la commande md5sum sur la liste de fichiers retournés par find.

md5sum : calcule l’empreinte md5 sur chacun des fichiers dont les noms sont passés en paramètre et l’affiche sur stdout.

sort : trie un fichier vers stdout. Aucun paramètre n’est passé donc le tri commence sur la 1è position de chaque ligne. Le fichier sera donc trié par empreinte md5.

uniq : identifie les lignes qui sont uniques ou celles qui ne le sont pas ; le paramètre -w 32 ordonne de ne prendre en compte que les 32 premières positions, c’est-à-dire l’empreinte md5. Le paramètre -D ordonne d’afficher toutes les lignes pour lesquelles le critère n’est pas unique.

sort : avec le paramètre -k1.33 ordre de trier à partir de la 33è position, donc par nom de fichier.

less : permet de naviguer dans les résultats. On pourrait aussi l’orienter vers un fichier avec > fichier.txt

Si on doit lire ce fichier sous Windows, il convient d’utiliser un autre programme que Notepad.exe (bloc-notes), par exemple Wordpad. Sinon les fins de lignes ne sont pas respectées et c’est illisible.

Rhââ ! Un bad-block !

Bonjour,

Ca fait un paquet d’années que je fais mes backups vers un petit serveur dédié équipé d’un disque de 2 TB (Kimsufi offre spéciale décembre 2012). (lire ce que j’avais écrit à cette époque)

Le disque a déjà crashé une fois dans le passé, et il a été remplacé, ce qui m’a valu de tout réinstaller.

Grâce à une surveillance automatique des paramètres S.M.A.R.T. les signes avant-coureurs m’avaient permis de prendre mes dispositions.

Et maintenant, voilà qu’il y a de nouveau un bad-block.

D’expérience, si un block est illisible ça vaut la peine de réécrire à cet endroit sur le disque. Soit le contrôleur arrive à écrire à cet endroit qui redevient utilisable, soit il réalloue le bloc dans une réserve. Dans les deux cas le disque est à nouveau propre pour l’operating system.

J’avais plus de 100 GB de libre sur un autre serveur. Et par chance le bad block se trouve dans la petite partition Linux et non dans la grosse partition /home.

Voici comment j’ai procédé. L’autre serveur (l’un et l’autre se trouvent de part et d’autre de l’Atlantique) a pu accueillir les sauvegardes.

root@srv4:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 20026236 12384660 6601244 66% /
devtmpfs 2009980 0 2009980 0% /dev
tmpfs 2010508 0 2010508 0% /dev/shm
tmpfs 2010508 9760 2000748 1% /run
tmpfs 5120 0 5120 0% /run/lock
tmpfs 2010508 0 2010508 0% /sys/fs/cgroup
/dev/sda3 1902052484 937731384 867679412 52% /home

 

# fdisk /dev/sda
Command (m for help): p
Disk /dev/sda: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: A811DA9B-19C7-46A3-BA18-8770041AD73C

Device Start End Sectors Size Type
/dev/sda1 40 2048 2009 1004.5K BIOS boot
/dev/sda2 4096 40962047 40957952 19.5G Linux filesystem
/dev/sda3 40962048 3905974271 3865012224 1.8T Linux filesystem
/dev/sda4 3905974272 3907020799 1046528 511M Linux swap

 

Le bad block se trouvant dans la partition Linux, il faut impérativement booter sur un live-CD ou via le réseau. Chez OVH un environnement “rescue” est proposé. Je n’ai utilisé que le mode “command-line”.

Sauvons tout ce qu’il y a moyen, y compris la table de partition, la partition boot gpt, puis la partition /root linux.

root@rescue:~# dd if=/dev/sda bs=512 count=40| ssh user@srv3.dmmail.eu "cat > srv4.sda.0-40.dd.raw"
40+0 records in
40+0 records out
20480 bytes (20 kB) copied, 0.000505364 s, 40.5 MB/s
user@srv3.dmmail.eu's password:
root@rescue:~# dd if=/dev/sda bs=512 count=4096| ssh user@srv3.dmmail.eu "cat > srv4.sda.0-2048.dd.raw"
4096+0 records in
4096+0 records out
2097152 bytes (2.1 MB) copied, 5.57779 s, 376 kB/s
root@rescue:~# dd if=/dev/sda1 bs=512 | ssh user@srv3.dmmail.eu "cat > srv4.sda1.dd.raw"
2009+0 records in
2009+0 records out
1028608 bytes (1.0 MB) copied, 5.66955 s, 181 kB/s
root@rescue:~# dd if=/dev/sda2 bs=512 | ssh user@srv3.dmmail.eu "cat > srv4.sda2.dd.raw"
i/o error

Arrêt prématuré: ce fichier dump est incomplet. Il faut recommencer, en passant outre les bad blocks. (option conv=noerror,sync de la commande dd)

root@rescue:~# dd if=/dev/sda2 bs=512 conv=noerror,sync| ssh user@srv3.dmmail.eu "cat > srv4.sda2.dd.raw"

Une copie supplémentaire qui permettra de retrouver quel est le fichier manquant (celui affecté par le bad block)

# find . -print |cpio -ocBv | ssh user@srv3.dmmail.eu "cat > srv4.sda2.cpio.raw"

Etonamment pas de message d’erreur. Il n’y a probablement aucun fichier impacté. Le file system ext4 a dû marquer ce bloc, mais je n’ai pas cherché.

Réécriture complète de tous les blocks de la partition en question, au moyen de l’utilitaire approprié

# badblocks -w /dev/sda2

A nouveau pas de message d’erreur

Récupération

# ssh user@srv3.dmmail.eu cat srv4.sda2.dd.raw| dd of=/dev/sda2

Test:

# mount /dev/sda2 /mnt
cd /mnt ; ls ; du -sh * ; cd / ; umount /mnt

tout est là

# fsck -pvcf /dev/sda2
fsck from util-linux 2.25.2
/dev/sda2: Updating bad block inode.

46964 inodes used (3.67%, out of 1281120)
 86 non-contiguous files (0.2%)
 63 non-contiguous directories (0.1%)
 # of inodes with ind/dind/tind blocks: 0/0/0
 Extent depth histogram: 41031/81/1
 3209273 blocks used (62.68%, out of 5119744)
 0 bad blocks
 ^^^^^^^^^^^^^^^^^^ yeah !
 1 large file

37606 regular files
 3338 directories
 15 character device files
 102 block device files
 2 fifos
 20 links
 5864 symbolic links (5696 fast symbolic links)
 28 sockets
------------
 46975 files

Le paramètre 197 Current_Pending_Sector est revenu à zéro.

# smartctl -a /dev/sda

...
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
 1 Raw_Read_Error_Rate 0x000b 100 100 016 Pre-fail Always - 0
 2 Throughput_Performance 0x0005 136 136 054 Pre-fail Offline - 80
 3 Spin_Up_Time 0x0007 100 100 024 Pre-fail Always - 486
 4 Start_Stop_Count 0x0012 100 100 000 Old_age Always - 7
 5 Reallocated_Sector_Ct 0x0033 100 100 005 Pre-fail Always - 0
 7 Seek_Error_Rate 0x000b 100 100 067 Pre-fail Always - 0
 8 Seek_Time_Performance 0x0005 145 145 020 Pre-fail Offline - 24
 9 Power_On_Hours 0x0012 098 098 000 Old_age Always - 14717
 10 Spin_Retry_Count 0x0013 100 100 060 Pre-fail Always - 0
 12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 7
192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 604
193 Load_Cycle_Count 0x0012 100 100 000 Old_age Always - 604
194 Temperature_Celsius 0x0002 166 166 000 Old_age Always - 36 (Min/Max 16/47)
196 Reallocated_Event_Count 0x0032 100 100 000 Old_age Always - 0
197 Current_Pending_Sector 0x0022 100 100 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0008 100 100 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x000a 200 200 000 Old_age Always - 0




ATA Error Count: 47 (device log contains only the most recent five errors)
Error 47 occurred at disk power-on lifetime: 14714 hours (613 days + 2 hours)
 When the command that caused the error occurred, the device was active or idle.

J’espère juste qu’on est reparti pour un bail, et que le problème ne va pas ressurgir trop vite.

J’avais entretemps envisagé d’utiliser Amazon Cloud Drive pour m’affranchir des problèmes mécaniques, mais je me suis trouvé confronté à d’autres problèmes (manque d’accessibilité depuis un environnement Linux). Peut-être écrirai-je un article là-dessus mais rien n’est sûr.

J’ai donc renoncé à l’abonnement de test gratuit de 3 mois, après une demi-semaine.

Sur l’autre serveur j’ai ceci en réserve:

-rw-r--r-- 1 user user 2097152 Sep 10 17:00 srv4.sda.0-2048.dd.raw
-rw-r--r-- 1 user user 20480 Sep 10 16:59 srv4.sda.0-40.dd.raw
-rw-r--r-- 1 user user 1028608 Sep 10 17:01 srv4.sda1.dd.raw
-rw-r--r-- 1 user user 1456424960 Sep 10 19:57 srv4.sda2.cpio.raw
-rw-r--r-- 1 user user 20970471424 Sep 10 18:17 srv4.sda2.dd.raw

 

Et si demain votre TV se faisait pirater via les ondes ?

Après le gros piratage du vendredi 12 mai 2017, où de grosses sociétés se sont fait rançonner leurs précieux fichiers, ce serait au tour des “Smart TV” de se faire pirater, via un virus injecté par les ondes TV ?

Les Smart TV contiennent un ordinateur embarqué. Ce n’est plus une TV comme celle de papa maman.

Un chercheur équipé d’un émetteur a prouvé pouvoir prendre possession de l’ordinateur se trouvant dans la TV Samsung, et à partir de là, utiliser la TV pour se faufiler plus loin dans le réseau des appareils de la maison. Lisez plutôt (article en anglais)

https://arstechnica.com/security/2017/03/smart-tv-hack-embeds-attack-code-into-broadcast-signal-no-access-required/

… 

The proof-of-concept exploit uses a low-cost transmitter to embed malicious commands into a rogue TV signal. That signal is then broadcast to nearby devices. It worked against two fully updated TV models made by Samsung. By exploiting two known security flaws in the Web browsers running in the background, the attack was able to gain highly privileged root access to the TVs. By revising the attack to target similar browser bugs found in other sets, the technique would likely work on a much wider range of TVs.

“Once a hacker has control over the TV of an end user, he can harm the user in a variety of ways,” Rafael Scheel, the security consultant who publicly demonstrated the attack, told Ars. “Among many others, the TV could be used to attack further devices in the home network or to spy on the user with the TV’s camera and microphone.”

Mots de passes hachés ? Salés ??? (en anglais: hashed, salted)

Les études en cryptographie sont très poussées et nombreuses. Ce n’est pas le but de cet article.

Imaginons que je crée un site web où tous les utilisateurs doivent s’enregistrer, fournir une adresse e-mail et un mot de passe de leur choix.

Si mon site se fait pirater et que ma liste d’utilisateurs est dérobée, je cours une grande responsabilité vis-à-vis de tous ceux qui m’ont confié leur identité et un mot de passe de leur choix. N’oublions pas que madame Michu utilise toujours le même mot de passe partout car c’est pour elle le seul moyen de ne pas l’oublier !

100% stupide: les mots de passe sont enregistrés tels quels dans la liste d’utilisateurs.

99,9% stupide: on va les transformer sous une forme évidente, par exemple en transformant Password en drowssaP ou bien en Qbttxpse. (Avez-vous trouvé ?)

C’est ici qu’interviennent les algorithmes de hashage (du moins bon au meilleur: MD4, MD5, SHA1, SHA2). Ces algorithmes transforment une donnée de n’importe quelle longueur en un résultat de longueur fixe sans aucune corrélation visible.

Voici quelques exemples avec MD5 :

a -> 0cc175b9c0f1b6a831c399e269772661
b -> 92eb5ffee6ae2fec3ad71c777531578f
aa -> 4124bc0a9335c27f086f24ba207a4912
bb -> 21ad0bd836b90d08f4cf640b4c298e7c
?? -> 5f4dcc3b5aa765d61d8327deb882cf99

et ainsi de suite. Mais au fait, que vaut le ?? ci-dessus. Facile, demandez 5f4dcc3b5aa765d61d8327deb882cf99 à Google.

Un bon hash interdit toute collision, de telle manière qu’il soit impossible de trouver deux données différentes qui donnent le même hash. Il doit être imprévisible de savoir ce qui a changé dans la donnée si le hash change, et aucun renseignement ne doit filtrer dans aucun sens. Le hash n’indique pas la longueur de la chaîne d’entrée, ni aucun autre renseignement.

On va se croire un peu plus malin, et enregistrer les hash des mots de passe dans le fichier d’utilisateurs. Quand la personne se connecte et présente son mot de passe, on le hashe, on compare les hash, s’ils diffèrent, le mot de passe présenté est faux.

C’est ce qui est arrivé chez Yahoo qui s’est fait pirater en 2013, et s’est fait dérober un demi-milliard ou deux milliards de comptes, peu importe le nombre exact. Les mots de passe étaient bêtement stockés sous forme hashée MD5.

En fait ça n’offre aucune protection, puisqu’il existe des listes avec des centaines de milliers de mots, courts et longs, figurant ou non dans les dictionnaires, avec leur hash correspondant. Voyez par exemple cette page https://md5db.net/explore/B408 d’un site qui contient 65000 autres pages similaires, toutes indexées par Google et autres outils de recherche.

Si on prend un mot de passe ne figurant dans aucun dictionnaire, et dont le hash est  c53e479b03b3220d3d56da88c4cace20, croyez-vous être plus sûr ? Rien n’est moins sûr car à nouveau quelqu’un y a pensé avant vous ! (L’exemple est le hash de P@$$w0rd)

C’est ici qu’on ajoute du sel. Le sel est un nombre aléatoire, vraiment aléatoire et suffisamment long qu’on va inclure dans le processus.

Pour l’exemple disons que le sel est un nombre entre 0000 et 9999. Au hasard 2016, et le mot de passe “aa”.

md5("aa") -> 4124bc0a9335c27f086f24ba207a4912

Ajoutons du sel et on hache une deuxième fois
md5("20164124bc0a9335c27f086f24ba207a4912")
   -> 66863812d410807765bac7856ef334c2

Et dans ce cas-ci, même pour un mot de passe aussi pauvre que “aa”, Google ne trouve plus aucun résultat pour le hash 66863812d410807765bac7856ef334c2 que nous venons de produire.

Saler les hash est aussi très important: si deux utilisateurs utilisent le même mot de passe, grâce au sel aléatoire, leurs mots de passe hachés n’auront aucune ressemblance.

Je n’ai plus qu’à enregister dans mon fichier d’utilisateurs le sel (2016) et le hash final (66863812d410807765bac7856ef334c2) ; au moment où l’utilisateur se connecte on refait le même processus de hashage, mais on connaît la valeur à utiliser pour le sel et reproduire le même hashage pour vérifier si le mot de passe est correct.

En réalité on prend des valeurs beaucoup plus longues et complexes pour le sel et pour le hashage.

Dans un système Unix/Linux, les mots de passe sont stockés dans un fichier /etc/shadow .

root:~# adduser exemple
Adding user `exemple' ...
...
Enter new UNIX password: secret
Retype new UNIX password: secret
...
Is the information correct? [Y/n]


root:~# grep exemple /etc/passwd /etc/shadow
/etc/passwd:exemple:x:1002:1002:,,,:/home/exemple:/bin/bash
/etc/shadow:exemple:$6$ztDVi3xQ$2KXD9LWl36eVah8lvEpiDBi.Y5SaCuzqr8bFXRNMPPHtxZ5wzOdTLOeB3tDgPZ4zR9lVmEA0e9PAT/1tjfjRP0:17205:0:99999:7:::

Le signe “$” délimite les champs. Par convention $6$ indique qu’on va hasher avec sha-512, un successeur de MD5 plus robuste, et que les champs séparés par “$” sont le sel et ensuite le mot de passe hashé.

On voit aussi que les chaînes de caractères ne sont pas constituées d’hexadécimal (16 catactères possibles, de 0 à 9 et de A à F) mais de base64 (64 caractères possibles de 0 à 9, de A à Z, de a à z, ainsi que / et .) .

Le sel est ici une enfilade de 8 caractères. Ce qui fait 64 ^8 possibilités, soit 281474976710656, ou 281000 milliards de possibilités. En 2016, personne n’oserait imaginer d’enregistrer toutes les 281000 milliards de variantes hashées, de tous les mots du grand Larousse.

Vérifions mon mot de passe ci-dessous:

root:~# mkpasswd -m sha-512 secret ztDVi3xQ
$6$ztDVi3xQ$2KXD9LWl36eVah8lvEpiDBi.Y5SaCuzqr8bFXRNMPPHtxZ5wzOdTLOeB3tDgPZ4zR9lVmEA0e9PAT/1tjfjRP0

 

Etes-vous unique ? Oui ! Pouvez-vous être anonyme ? Heu… Lisez plutôt !

Je vous conseille la visite du site https://amiunique.org (Am I Unique ?) pour y constater que lors de vos périgrinations sur Internet, vous possédez une sorte d’empreinte digitale unique, qui permet à un site de vous suivre (“de vous tracker” comme on dit), et ce, même si vous effacez vos cookies.

Chaque navigateur internet (Firefox, Chrome, Internet Explorer, Safari, …) , lors de chaque connexion vers un site visité, annonce des tas de renseignements sur votre PC. Ce sont des numéros de versions, des listes de plugins, la langue, le décalage horaire, les dimansions de l’écran, etc. L’ensemble de ces caractéristiques vous rend unique.

Qu’un site sache que c’est un utilisateur qui revient (et non pas quelqu’un qui vient pour la 1ère fois) n’est pas nouveau. Il y a déjà les cookies pour mémoriser cela. Comme les gens effacent leures cookies et que les annonceurs (friands de “tracking”) ne veulent pas lâcher leur proie, et sont passés aux super-cookies enregistrés derrière votre dos par Adobe Flash. Si vous avez coché l’option par laquelle Flash doit demander la permission avant de fonctionner, ça ne vous a jamais perturbé qu’autant de sites sans animation Flash visible vous demandent néanmoins de pouvoir activer Flash ?

A partir du moment où c’est une agence de publicité qui vous “tracke” et non tel site A ou B, cette agence de pub qui place des espaces publicitaires sur de nombreux sites peut croiser les résultats (c’est le même utilisateur belge francophone qui va voir Les 3 Suisses et La Redoute) et si le site transmet des infos précises (Les 3 Suisses informent que je cherche des chaussettes noires), voilà de quoi remplir le Big Data.

Le plus gros annonceur est Google, rappelez-vous. Et il sait “mieux que vous” quels sont vos centres d’intérêt…

Démonstration:

– on fait une recherche Google. On s’intéresse à des chaussettes noires (donc Google le sait) et on va examiner le 1er des résultats fournis. En passant la souris sur le lien retourné on voit apparaître une adresse sur le site 3suisses.fr

amiu1amiu1c
– On fait un clic-droit sur ce lien pour le sauvegarder

amiu3

– Le lien est “par magie” devenu une adresse “google.be” et non plus “3suisses.fr”

amiu2amiu2c
– La preuve: quand on le colle dans la barre d’adresses c’est bien un lien vers Google qui veut absolument savoir sur lequel des résultats vous avez cliqué. Il en prend note et vous renvoie vers les 3 Suisses.

amiu4C’est ainsi que Google sait quelles sont les réponses qui ont le plus de succès parmi celles présentées, mais aussi qui a cliqué sur quoi. Même si vous avez fait un logoff de votre compte Google/Gmail/Google+.

Avec les outils standards, non il n’y a pas d’anonymat. Essayez avec le mode “Private” de votre navigateur, et ce n’est pas mieux.

Linux Counter

Vers 1996 (bigre, ça va faire 20 ans) j’installais ma première machine Linux sur un 486-dx2 qui avait déjà pas mal d’heures de vol.

La distribution était un slackware, achetée chez CDROM.COM. (on trouve toujours les fichiers TXT ici !)

Lors de l’installation on était encouragé à enregistrer sa machine Linux chez counter.li.org.

Hé bien, ce Linux Counter existe toujours.

LinuxCounter.net