Intéressé par des cours d'informatique en ligne ?
Visitez mon nouveau site
https://www.yesik.it !
La plupart des ordinateurs modernes utilise en standard un mécanisme appelé la mémoire virtuelle. En fait, il s'agit d'utiliser le disque dur pour suppléer à un manque de mémoire vive (RAM). L'avantage est évidemment d'ordre financier. Le prix du giga-octet de RAM est nettement plus élevé que celui d'un disque dur. La contre-partie principale est une dégradation des performances. Puisque l'accès aux données situées sur le disque dur est des centaines voire des milliers de fois plus lent que si elles étaient situées en mémoire vive.
Sommaire
Principe de fonctionnement
Pour commencer un petit rappel: l'ordinateur – ou pour être plus exact le micro-processeur ne peut manipuler que des données qui sont en RAM physique. Tant qu'il y a de la place en RAM, les nouvelles données y prennent place:
Une fois la mémoire physique pleine, la mémoire virtuelle entre en jeu. Si l'ordinateur a besoin de charger des données supplémentaires pour les manipuler, le gestionnaire de mémoire virtuelle va devoir faire de la place en RAM.
Bien entendu, pour des raisons de performances, le gestionnaire de mémoire virtuelle ne travaille pas octet par octet. Mais par paquet de un ou plusieurs kilo-octets appelés page. Donc, le gestionnaire de mémoire virtuelle trouve une page susceptible d'être transférée sur le disque dur (parce que les données qu'elle contient n'ont pas été utilisées depuis longtemps, par exemple). Il la copie dans le fichier d'échange – ou swap (en anglais, et plus généralement dans le jargon Unix). Ensuite, la donnée à charger prend la place ainsi libérée en RAM physique.
Enfin, si l'ordinateur a à nouveau besoin de données précédemment copiées dans le fichier d'échange, il va d'abord falloir libérer une page de la RAM physique en la copiant elle aussi dans le fichier d'échange. Et ensuite, il faudra recharger la page demandée dans l'espace ainsi libéré. Bien sûr, plus il y a de mémoire virtuelle utilisée, plus ces échanges ont lieu fréquemment. Et moins le système est performant.

Remarque:
C'est aussi l'échange incessant entre le disque dur et la RAM qui est à l'origine du bruit caractéristique d'un ordinateur qui utilise beaucoup sa mémoire virtuelle: Crrrr-Crrrr-Crrrr---Crrrr-Crrrr.
Un inconvénient sous-estimé
J'ai dit plus haut que l'inconvénient principal de la mémoire virtuelle était la dégradation des performances de l'ordinateur. Mais il y en a un autre. Très gros. Surtout si votre ordinateur manipule des données sensibles. En effet, qui dit enregistrement sur le disque dit possibilité de récupérer les données. Même après l'extinction de l'ordinateur (alors que la RAM physique est volatile: son contenu disparaît à température ambiante en quelques secondes).
Une petite expérience
A titre d'expérience, j'ai commencé à rédiger un message dans mon navigateur. Ce pourrait être un message dans votre WebMail, ou un post dans un blog, ou tout ce que vous voulez. Pour cette expérience, j'ai utilisé Iceweasel/Firefox – un logiciel pourtant réputé pour prendre au sérieux les problèmes de sécurité.
En outre, je tiens aussi à signaler que je n'ai même pas posté ce message. Je n'ai fait non plus aucune sauvegarde du texte de ce message. Je l'ai juste tapé dans la zone de saisie dans la fenêtre de mon navigateur:
Pendant et après la rédaction de ce message, j'ai ouvert un certain nombres d'applications: Eclipse, OpenOffice, Gimp, Dia. J'ai aussi écouté de la musique. Bref, j'ai tout fait pour occuper toute la mémoire vive et forcer Linux à faire usage du fichier d'échange (swap).

Remarque:
Peut-être allez-vous penser que je l'ai bien cherché. Et que dans la vraie vie, on ne lance pas plein d'applications pendant qu'on rédige un message.
Sachez simplement que pour cette expérience, je suis parti d'un swap complètement vide. Autrement dit, afin de faire cette expérience dans des conditions reproductibles, j'ai quitté toutes les applications sauf le strict nécessaire, et je me suis arrangé pour que toutes les données soient en RAM physique. D'où la nécessité de charger un peu l'ordinateur pour que Linux commence à swapper.
Maintenant, observez ce qui se passe dans la vraie vie: quand vous rédigez un message comme ici, vous avez sans doute déjà utilisé d'autres applications. Une (bonne) partie de la RAM physique est sans doute déjà utilisée. Et il y a certainement déjà des pages en mémoire virtuelle. Bref, il y a de grandes chances que votre ordinateur soit plus enclin à swaper que la machine clean de laquelle je suis parti...
Bref, je me suis arrangé pour faire swapper mon ordinateur. Alors passons maintenant au constat du délit. Tout d'abord, et toujours pour que vous ne m'accusiez pas de biaiser cette expérience, j'ai désactivé l'utilisation du fichier d'échange:
sh# swapoff -a
A partir de maintenant, le fichier d'échange n'est plus utilisé. Ce qu'il contient y reste pour que nous puisions l'examiner tranquillement. Sous Linux le fichier d'échange occupe sa propre partition. Avant d'aller plus loin, nous devons l'identifier. C'est facile, dans le fichier /etc/fstab c'est celle qui est marquée swap:
sh# cat /etc/fstab # /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/hda7 / ext3 defaults,errors=remount-ro 0 1 /dev/hda5 /home ext3 defaults 0 2 /dev/hda8 /mnt/fat32 vfat defaults,umask=000 0 0 /dev/hda2 /windows vfat defaults 0 0 /dev/hda6 none swap sw 0 0 /dev/hdb /media/cdrom0 udf,iso9660 user,noauto 0 0
Comme vous le voyez sur ma machine la partition de swap est celle identifiée par le périphérique bloc /dev/hda6.
Voyons un peu ce qu'il contient. Ici, j'utilise hexdump et less des outils rudimentaires disponibles en standard dans n'importe quelle distribution Linux. Un assaillant utiliserait sans doute plutôt des outils spécialisés...
sh$ hexdump -C /dev/hda6 | less ... # Après une recherche: 013d65b0 73 63 72 6f 6c 6c 3a 22 30 2c 30 22 7d 2c 20 7b |scroll:"0,0"}, {| 013d65c0 75 72 6c 3a 22 68 74 74 70 3a 2f 2f 63 68 69 63 |url:"http://chic| 013d65d0 6f 72 65 65 2f 77 2f 69 6e 64 65 78 2e 70 68 70 |oree/w/index.php| 013d65e0 3f 74 69 74 6c 65 3d 54 6f 70 5f 73 65 63 72 65 |?title=Top_secre| 013d65f0 74 26 61 63 74 69 6f 6e 3d 65 64 69 74 22 2c 20 |t&action=edit", | 013d6600 63 68 69 6c 64 72 65 6e 3a 5b 5d 2c 20 74 69 74 |children:[], tit| 013d6610 6c 65 3a 22 4d 6f 64 69 66 69 63 61 74 69 6f 6e |le:"Modification| 013d6620 20 64 65 20 54 6f 70 20 73 65 63 72 65 74 20 2d | de Top secret -| 013d6630 20 43 68 69 63 6f 72 65 65 22 2c 20 63 61 63 68 | Chicoree", cach| 013d6640 65 4b 65 79 3a 30 2c 20 49 44 3a 39 2c 20 73 63 |eKey:0, ID:9, sc| 013d6650 72 6f 6c 6c 3a 22 30 2c 30 22 7d 5d 2c 20 69 6e |roll:"0,0"}], in| 013d6660 64 65 78 3a 33 2c 20 7a 6f 6f 6d 3a 31 2c 20 64 |dex:3, zoom:1, d| 013d6670 69 73 61 6c 6c 6f 77 3a 22 22 2c 20 78 75 6c 74 |isallow:"", xult| 013d6680 61 62 3a 22 22 2c 20 65 78 74 44 61 74 61 3a 6e |ab:"", extData:n| 013d6690 75 6c 6c 2c 20 74 65 78 74 3a 22 23 77 70 54 65 |ull, text:"#wpTe| 013d66a0 78 74 62 6f 78 31 3d 56 6f 69 63 69 25 32 30 75 |xtbox1=Voici%20u| 013d66b0 6e 25 32 30 65 78 65 6d 70 6c 65 25 32 30 64 65 |n%20exemple%20de| 013d66c0 25 32 30 74 65 78 74 65 25 32 30 74 61 70 25 43 |%20texte%20tap%C| 013d66d0 33 25 41 39 25 32 30 64 61 6e 73 25 32 30 6c 61 |3%A9%20dans%20la| 013d66e0 25 32 30 66 65 6e 25 43 33 25 41 41 74 72 65 25 |%20fen%C3%AAtre%| 013d66f0 32 30 64 27 25 43 33 25 41 39 64 69 74 69 6f 6e |20d'%C3%A9dition| 013d6700 25 32 30 64 27 75 6e 25 32 30 6e 61 76 69 67 61 |%20d'un%20naviga| ...
Comme vous le voyez, par la magie de la mémoire virtuelle, le texte que j'ai tapé dans mon navigateur a été enregistré sur le disque dur!
Et il peut y rester un bon moment: tant que le gestionnaire de mémoire virtuelle n'a pas besoin de libérer cette page dans le fichier d'échange et qu'il ne l'écrase pas avec le contenu d'une nouvelle page, les données vont y rester. Autrement dit, si après avoir posté ce message secret vous éteignez votre ordinateur – ou simplement quittez votre poste de travail – n'importe qui ayant un accès physique au disque dur peut retrouver ces données tout aussi facilement.
Plus simple
Vous n'êtes pas convaincu. Vous vous dites toujours oui, mais il s'est mis dans des conditions particulières. Et puis le swap a de grandes chances d'être écrasé. Etc. Bref, vous voulez un exemple encore plus simple. Amusez-vous donc à faire cette même expérience de commencer à taper un message dans votre client de messagerie préféré (ou votre traitement de texte favori, ou n'importe quelle autre application). Puis passez votre ordinateur en veille longue. Relancez-le. Et là, surprise! A votre avis où sont sauvegardées les données qui étaient en RAM lors de la mise en veille? Dans le fichier d'échange!
Si vous examinez alors son contenu et vous verrez tout ce qui était en RAM lors de la mise en veille. Aussi bien le message que vous étiez en train de taper que toutes les données des applications ouvertes. Du pain béni pour un pirate qui mettrait la main sur votre disque dur...
Se protéger
La stratégie la plus simple pour éviter le risque qu'un assaillant ne récupère des données à partir du ficher d'échange, c'est de ne pas en utiliser. Et d'avoir assez de RAM physique pour satisfaire les besoins en mémoire des applications qui tournent sur votre machine.
Une autre alternative est de nettoyer le swap après avoir manipulé des données sensibles. C'est ce que nous allons faire maintenant. Sous Linux, c'est relativement simple. Il suffit d'arrêter la mémoire virtuelle (swapoff), puis d'écraser le contenu de la (ou les) partition(s) de swap(dd). Une fois cette opération effectuée, il faut recréer la partition de swap (mkswap) et la remettre en service (swapon):

Piège:
Faites extrêmement attention: ici nous allons utiliser la commande dd pour écraser tout le contenu d'une partition. Assurez-vous donc que la partition que vous écrasez est bien celle du swap (à vérifier dans /etc/fstab).
En effet, dd écrasera tout aussi allègrement n'importe quelle autre partition, y compris celle qui contient vos données importantes!
sh$ swapoff -a # Arrête la mémoire virtuelle sh$ dd if=/dev/urandom of=/dev/hda6 # Remplit la partition de swap de données aléatoires sh$ mkswap /dev/hda6 # Reconstruit le filesystem de la partition de swap sh$ swapon -a # Réactive la mémoire virtuelle
Et voilà: après ces manipulations, le swap ne contient plus que des données aléatoires – et toutes les pages sont libres. Votre système d'exploitation peut à nouveau l'utiliser. Eventuellement pour recommencer à y copier des données sensibles, d'ailleurs...
Est-ce que ça suffit?
Ecraser les données du swap permet d'éviter à un individu malveillant de récupérer ses données avec les fonctionnalités supportées par votre système d'exploitation.
Néanmoins, en cas de données extrêmement sensibles, ceci n'est peut-être pas suffisant. En effet, il est possible à quelqu'un ayant un accès physique au disque d'utiliser des moyens d'investigation exotiques comme l'analyse de surface du disque. Ce sont là des moyens sans doute hors de portée d'un pirate ordinaire. Mais pas d'un gouvernement hostile ou tout simplement d'une société concurrente disposant du matériel nécessaire.
Quand à savoir combien d'écriture et ce qu'il faut écrire (des 1? des 0? ou des données aléatoires) pour vraiment rendre inaccessible les données a quelqu'un doté de l'équipement nécessaire, c'est une matière qui fait débat parmi les spécialistes. Certains affirment que les disques modernes ont une telle densité de surface qu'une seule écriture rend les données impossibles à reconstituer. D'autres affirment qu'il faut plusieurs (6 ou 7) ré-écritures avec un schéma bien précis pour rendre irrécupérables ces données. Enfin, certains soulignent même qu'en théorie, il est possible de reconstituer n'importe quelle donnée écrite sur un disque dur.[1] [2] [3] [4] [5]
A titre d'information, sachez que certaines agences gouvernementales insistent pour que les disques ayant contenus des données top-secret soient physiquement détruits par vaporisation, dissolution dans de l'acide ou abrasion de la surface des disques. Et encore dans ce dernier cas, le gouvernement du Royaume-Uni préconise que la poussière ainsi récoltée soit collectés dans des récipients scellés et classifiée pendant 12 ans!
L'alternative
L'alternative pour protégée vos données sensibles est tout simplement de crypter le swap. Sous Linux, depuis le Kernel 2.6 c'est possible avec dm-crypt. En fait, cet utilitaire permet de crypter à la volée les données de n'importe quelle partition de votre disque dur. L'inconvénient est que la mise en oeuvre n'est pas des plus faciles. Pour plus de renseignements, je vous conseille les liens suivants:
- Cryptoloop est mort, vive dm-crypt !
- crypter un système de fichier avec dm-crypt
- et bien sûr le site officiel de dm-crypt
En conclusion
J'espère que cet article vous aura sensibilisé (sans jeu de mot) au risque de divulgation de données sensibles via le swap.
En tous cas, s'il n'y a qu'une chose à retenir, c'est que le disque dur est susceptible de trahir bien des secrets industriels. Et cela, même si vous pensez prendre des précautions comme chiffrer vos documents ou utiliser des protocoles de communication sécurisés. Le simple fait que des données soient chargées à un moment ou un autre en clair dans la RAM les rend candidates pour une copie (toujours en clair) dans le fichier d'échange.