{"id":1443,"date":"2013-11-27T22:06:24","date_gmt":"2013-11-27T20:06:24","guid":{"rendered":"http:\/\/stephane.weblog.starend.org\/?p=1443"},"modified":"2013-11-27T22:06:24","modified_gmt":"2013-11-27T20:06:24","slug":"systeme-bootable-chiffre-sur-deux-cles-usb-interdependantes-suite","status":"publish","type":"post","link":"http:\/\/stephane.weblog.starend.org\/?p=1443","title":{"rendered":"Syst\u00e8me bootable chiffr\u00e9 sur deux cl\u00e9s USB interd\u00e9pendantes &#8211; suite"},"content":{"rendered":"<p style=\"text-align: justify;\">Il y a plusieurs choses qui peuvent \u00eatre am\u00e9lior\u00e9es dans le <a title=\"Syst\u00e8me bootable chiffr\u00e9 sur deux cl\u00e9s USB interd\u00e9pendantes\" href=\"http:\/\/stephane.weblog.starend.org\/?p=1404\" target=\"_blank\">syst\u00e8me bootable chiffr\u00e9 sur deux cl\u00e9s USB interd\u00e9pendantes<\/a>.<\/p>\n<p style=\"text-align: justify;\">C&rsquo;est un peu technique et aucune solution compl\u00e8te n&rsquo;est fournie. Si vous voulez les mettre en place, il va falloir gratter par vous m\u00eame.<!--more--><\/p>\n<p style=\"text-align: center;\"><a href=\"\/wp-content\/uploads\/stephane\/2013\/11\/face-angel.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1449\" alt=\"face-angel\" src=\"\/wp-content\/uploads\/stephane\/2013\/11\/face-angel.png\" width=\"256\" height=\"256\" srcset=\"\/wp-content\/uploads\/stephane\/2013\/11\/face-angel.png 256w, \/wp-content\/uploads\/stephane\/2013\/11\/face-angel-150x150.png 150w\" sizes=\"(max-width: 256px) 100vw, 256px\" \/><\/a><\/p>\n<h2>D\u00e9ception<\/h2>\n<p style=\"text-align: justify;\">La cl\u00e9 USB contenant le syst\u00e8me, int\u00e9gralement chiffr\u00e9e (ou avec une partition <em>VFAT<\/em> r\u00e9siduelle \u00e9ventuelle), est inutilisable en l&rsquo;\u00e9tat et il appara\u00eet rapidement qu&rsquo;elle cache quelque chose.<\/p>\n<p style=\"text-align: justify;\">La cl\u00e9 USB contenant la partition <em>boot<\/em> et la partition des donn\u00e9es peut \u00eatre suspecte si on regarde les diff\u00e9rentes partitions pr\u00e9sentes. Il convient donc d&rsquo;offusquer toute partition chiffr\u00e9e. On peut la faire passer pour une partition <em>SWAP<\/em> par exemple. On modifie juste son type.<\/p>\n<p style=\"text-align: justify;\">Mais cela ne cache pas le d\u00e9but de la partition reconnu comme une partition chiffr\u00e9e avec <em>LUKS<\/em>. On peut utiliser \u00e0 la place <em>dm-crypt<\/em>.<\/p>\n<p style=\"text-align: justify;\">Nous avons avec <em>dm-crypt<\/em> une partition qui peut \u00eatre suspecte si on regarde le d\u00e9but de celle-ci. Elle est en effet illisible et en plus elle a une tr\u00e8s forte entropie d\u00e8s le premier secteur. On peut dans ce cas la pr\u00e9-formater avec un syst\u00e8me de fichier plus classique comme <em>ext4<\/em> (mieux vaut \u00e9viter le <em>VFAT<\/em>) puis cr\u00e9er la &lsquo;fausse&rsquo; partition plus loin via <em>cryptsetup<\/em> et <em>dm-crypt<\/em> en utilisant le param\u00e8tre <code>offset<\/code>. \u00c9videment, on corrompt la partition en <em>ext4<\/em>, il faudra emp\u00eacher son utilisation par le syst\u00e8me.<\/p>\n<p style=\"text-align: justify;\">Les deux cl\u00e9s USB ne doivent jamais voyager ensemble.<\/p>\n<p style=\"text-align: justify;\">La cl\u00e9 de d\u00e9chiffrement de la partition syst\u00e8me, stock\u00e9e dans la partition <em>boot<\/em>, peut \u00eatre facilement vol\u00e9e depuis une machine <em>Linux<\/em>. Si on suspecte ce cas de compromission de cl\u00e9, il faut la changer, en g\u00e9n\u00e9rer une nouvelle et remplacer la cl\u00e9 existante dans le container <em>LUKS<\/em>.<\/p>\n<p style=\"text-align: center;\"><a href=\"\/wp-content\/uploads\/stephane\/2013\/11\/face-cool.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1450\" alt=\"face-cool\" src=\"\/wp-content\/uploads\/stephane\/2013\/11\/face-cool.png\" width=\"256\" height=\"256\" srcset=\"\/wp-content\/uploads\/stephane\/2013\/11\/face-cool.png 256w, \/wp-content\/uploads\/stephane\/2013\/11\/face-cool-150x150.png 150w\" sizes=\"(max-width: 256px) 100vw, 256px\" \/><\/a><\/p>\n<h2 style=\"text-align: justify;\">Offuscation de cl\u00e9s<\/h2>\n<p style=\"text-align: justify;\">Un des risques est la corruption de certaines donn\u00e9es du syst\u00e8me accessibles en clair. C&rsquo;est le cas du chargeur de d\u00e9marrage <em>GRUB<\/em> et du noyau <em>Linux<\/em> qui sont stock\u00e9s dans la partition <em>boot<\/em> non prot\u00e9g\u00e9e. Le but peut \u00eatre de voler la cl\u00e9 n\u00e9cessaire au d\u00e9chiffrement de la partition des donn\u00e9es, ou les donn\u00e9es elles-m\u00eames.<\/p>\n<p style=\"text-align: justify;\">Il n&rsquo;y \u00e0 pas grand chose \u00e0 faire pour emp\u00eacher le vol des donn\u00e9es si ce n&rsquo;est emp\u00eacher toute connexion r\u00e9seau sur la machine et v\u00e9rifier scrupuleusement les donn\u00e9es export\u00e9es via la partition d&rsquo;\u00e9change en <em>VFAT<\/em> ou la partition de <em>boot<\/em>.<\/p>\n<p style=\"text-align: justify;\">Pour complexifier la possibilit\u00e9 de vol de la cl\u00e9 de chiffrement, il est possible d&rsquo;utiliser non pas un fichier de cl\u00e9 bien d\u00e9finit comme <code>\/boot.pwd<\/code> mais un fichier perdu dans le syst\u00e8me. Ce fichier ne doit pas \u00eatre g\u00e9n\u00e9r\u00e9 par l&rsquo;installation du syst\u00e8me sinon il est facilement reproductible. Ce peut \u00eatre un fichier modifi\u00e9 dans <code>\/etc<\/code> et \u00e9ventuellement contenant une constante pour augmenter son entropie. Ce peut \u00eatre une page du <em>man<\/em> improbable.<\/p>\n<p style=\"text-align: justify;\">Malheureusement, le fichier de mot de passe peut \u00eatre retrouv\u00e9 assez simplement. Il est indiqu\u00e9 dans <code>\/etc\/crypttab<\/code>.<\/p>\n<p style=\"text-align: justify;\">Pour la cl\u00e9 contenant <em>GRUB<\/em> et la partition <em>boot<\/em>, le fichier cl\u00e9 de la partition syst\u00e8me peut \u00eatre un fichier assez banale comme une image <em>JPEG<\/em> stock\u00e9 dans <code>\/boot\/boot.pwd<\/code>. Pour d\u00e9sactiver la possibilit\u00e9 de d\u00e9marrage, ce fichier peut \u00eatre retir\u00e9 et stock\u00e9 \u00e0 un autre endroit plus l\u00e9gitime comme une image au milieu d&rsquo;une collection de photos de vacances. La collection de photos de vacances peut \u00eatre sur la cl\u00e9 USB dans la partition <em>VFAT<\/em> ou sur un des innombrables sites web faisant collection de photos.<\/p>\n<p style=\"text-align: center;\"><a href=\"\/wp-content\/uploads\/stephane\/2013\/11\/face-devilish.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1447\" alt=\"face-devilish\" src=\"\/wp-content\/uploads\/stephane\/2013\/11\/face-devilish.png\" width=\"256\" height=\"256\" srcset=\"\/wp-content\/uploads\/stephane\/2013\/11\/face-devilish.png 256w, \/wp-content\/uploads\/stephane\/2013\/11\/face-devilish-150x150.png 150w\" sizes=\"(max-width: 256px) 100vw, 256px\" \/><\/a><\/p>\n<h2>Anti-copie<\/h2>\n<p style=\"text-align: justify;\">Un des risques est la copie conforme des deux\u00c2\u00a0cl\u00e9s USB. Ces cl\u00e9s ne sont r\u00e9unies que pour \u00eatre utilis\u00e9es, elles sont en temps normal s\u00e9par\u00e9es et l&rsquo;une d&rsquo;entre elle constamment surveill\u00e9e. Le tout permet de reconstituer le bin\u00f4me de cl\u00e9s USB et atteindre les donn\u00e9es prot\u00e9g\u00e9es sans alerter le porteur d&rsquo;un cl\u00e9 parce qu&rsquo;il n&rsquo;y a pas vol proprement dit de sa cl\u00e9 USB.<\/p>\n<p style=\"text-align: justify;\">Comment rendre beaucoup plus difficile l&rsquo;exploitation d&rsquo;une copie de cl\u00e9 alors que leur contenu est strictement et scrupuleusement recopi\u00e9?<br \/>\nOn peut utiliser pour cela des informations propres \u00e0 la cl\u00e9 USB, c&rsquo;est \u00e0 dire ses m\u00e9ta-donn\u00e9es. On retrouve le num\u00e9ro du constructeur, le num\u00e9ro du mod\u00e8le de cl\u00e9 et son num\u00e9ro de s\u00e9rie. Ces informations sont disponibles via la commande <code>lsusb<\/code>.<\/p>\n<p style=\"text-align: justify;\">Toutes les informations retourn\u00e9es par la commande ne sont pas identiques d&rsquo;une machine \u00e0 l&rsquo;autre. Mais on peut n&rsquo;en garder qu&rsquo;un sous-ensemble. Cela permet de g\u00e9n\u00e9rer une valeur unique, infalsifiable et parfaitement reproductible avec, par exemple :<\/p>\n<pre># lsusb -v -d 154b:0048 | grep -A 14 \"^Device Descriptor:\"\nDevice Descriptor:\n  bLength                18\n  bDescriptorType         1\n  bcdUSB               2.00\n  bDeviceClass            0 (Defined at Interface level)\n  bDeviceSubClass         0 \n  bDeviceProtocol         0 \n  bMaxPacketSize0        64\n  idVendor           0x154b PNY\n  idProduct          0x0048 \n  bcdDevice           81.92\n  iManufacturer           1 \n  iProduct                2 \n  iSerial                 3 \n  bNumConfigurations      1\n\n# lsusb -v -d 154b:0048 | grep -A 14 \"^Device Descriptor:\" | sha256sum\nb2549024b55fcbeb9e4343406b98253adcfd3c76be0eb9dadb1961b0e0361d3f<\/pre>\n<p style=\"text-align: justify;\">Cette derni\u00e8re ligne de commande renvoie le m\u00eame r\u00e9sultat avec une cl\u00e9 USB pr\u00e9cise pour des machines sous <em>Debian 7.0<\/em> et <em>Ubuntu 13.10<\/em>.<\/p>\n<p style=\"text-align: justify;\">Comme nous avons deux cl\u00e9s USB, nous r\u00e9cup\u00e9rons deux valeurs que l&rsquo;on peut simplement mixer avec une cl\u00e9 pr\u00e9-d\u00e9finie dans un fichier de mot de passe plus classique. Le mot de passe r\u00e9sultant est donc d\u00e9pendant \u00e0 la fois d&rsquo;une valeur secr\u00e8te mais aussi des deux cl\u00e9s USB et pas de deux autres. On peut prot\u00e9ger la partition des donn\u00e9es avec ce mot de passe mais pas la partition syst\u00e8me.<\/p>\n<p style=\"text-align: justify;\">Si nous avons une cl\u00e9 de secours pour chaque cl\u00e9 USB, cela fait donc 4 cl\u00e9s USB \u00e0 conna\u00eetre, mais surtout 4 combinaisons (et non 6) de mots de passes g\u00e9n\u00e9r\u00e9s qu&rsquo;il faut faire reconna\u00eetre au niveau du chiffrement de la partition des donn\u00e9es. Il vaut mieux aussi dans ce cas utiliser <em>LUKS<\/em> plut\u00f4t que <em>dm-crypt<\/em> pour la gestion du chiffrement. Cette technique marche aussi avec l&rsquo;offuscation de cl\u00e9s vu pr\u00e9c\u00e9demment.<\/p>\n<p style=\"text-align: justify;\">Cette m\u00e9thode peut cependant \u00eatre attaqu\u00e9 relativement simplement. Il suffit au moment de la copie d&rsquo;une cl\u00e9 USB de recopier aussi la sortie de la commande <code>lsusb -v -d 154b:0048<\/code>. Ensuite, les diff\u00e9rentes valeurs peuvent \u00eatre tranquillement recalcul\u00e9es au chaud pour acc\u00e9der au contenu de la partition des donn\u00e9es.<br \/>\nDans ce cas, la seule m\u00e9thode pour r\u00e9duire ce risque est de prendre en compte l&rsquo;int\u00e9gralit\u00e9 du retour de la commande <code>lsusb -v -d 154b:0048<\/code> ainsi que des valeurs sp\u00e9cifiques \u00e0 la machine via par exemple la commande <code>lspci -v | sha256sum<\/code>. Ainsi la copie de la cl\u00e9 USB doit se faire sur la machine qui les utilises. cela fait que la machine devient en elle-m\u00eame aussi une cl\u00e9 du syst\u00e8me de chiffrement&#8230;<\/p>\n<p style=\"text-align: center;\"><a href=\"\/wp-content\/uploads\/stephane\/2013\/11\/dialog-password.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1451\" alt=\"dialog-password\" src=\"\/wp-content\/uploads\/stephane\/2013\/11\/dialog-password.png\" width=\"128\" height=\"128\" \/><\/a><\/p>\n<h2 style=\"text-align: justify;\">Cl\u00e9 USB sur mesure<\/h2>\n<p style=\"text-align: justify;\">Celui qui dispose du moyen de concevoir et produire une cl\u00e9 USB peut pr\u00e9voir d&rsquo;autres m\u00e9canismes d&rsquo;offuscation et de personnalisation flottants sous condition. On peut ainsi :<br \/>\n&#8211; emp\u00eacher la copie de l&rsquo;int\u00e9gralit\u00e9 d&rsquo;une des cl\u00e9s USB ;<br \/>\n&#8211; masquer une partie la cl\u00e9 USB par un banc m\u00e9moire autre ;<br \/>\n&#8211; emp\u00eacher la r\u00e9cup\u00e9ration du bon num\u00e9ro de s\u00e9rie d&rsquo;une cl\u00e9 USB.<\/p>\n<p style=\"text-align: justify;\">Mais celui qui dispose de ces moyens peut aussi faire bien d&rsquo;autres choses int\u00e9ressantes pour un syst\u00e8me de bicl\u00e9 diff\u00e9rent&#8230; Nous n&rsquo;avons plus dans ce cas une protection avec du mat\u00e9riel commun dans le commerce.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Il y a plusieurs choses qui peuvent \u00eatre am\u00e9lior\u00e9es dans le syst\u00e8me bootable chiffr\u00e9 sur deux cl\u00e9s USB interd\u00e9pendantes. C&rsquo;est un peu technique et aucune solution compl\u00e8te n&rsquo;est fournie. Si vous voulez les mettre en place, il va falloir gratter par vous m\u00eame.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[42,43,48,10,11,26],"tags":[135,154,244],"_links":{"self":[{"href":"http:\/\/stephane.weblog.starend.org\/index.php?rest_route=\/wp\/v2\/posts\/1443"}],"collection":[{"href":"http:\/\/stephane.weblog.starend.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/stephane.weblog.starend.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/stephane.weblog.starend.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/stephane.weblog.starend.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1443"}],"version-history":[{"count":0,"href":"http:\/\/stephane.weblog.starend.org\/index.php?rest_route=\/wp\/v2\/posts\/1443\/revisions"}],"wp:attachment":[{"href":"http:\/\/stephane.weblog.starend.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1443"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/stephane.weblog.starend.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1443"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/stephane.weblog.starend.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1443"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}