Journal Bootstrap Binary seed

60
4
fév.
2019

Demat'iNal,

J'ai été frappé (ouille) par cet exposé au FOSDEM 2019.
Le sujet sous-jacent était « comment arriver à un compilateur C » à partir de… source. Et il est vrai que jamais je ne m'étais posé la question sous cet angle : arriver à faire qu'un compilateur pour un langage X soit écrit dans ce même langage X suppose… que l'on ait déjà un compilateur pour X. Ce problème se gérant soit par la disponibilité d'un autre compilateur, soit d'une version antérieure du même compilateur.

Prenons un exemple : la première ligne de code de GCC-9 n'a pas pu être compilée avec gcc-9 (vu que celui-ci n'existait pas encore), mais avec une version antérieure, disons GCC-8, qui lui même a été pour la première fois compilé par GCC-7 etc (ignorons les versions mineurs pour la simplicité de l'exemple).

Mais qu'y avait il au… tout début ? Serions nous capable de reconstruire GCC-9 (dont une partie est écrite en C++) sans GCC ?

Une chaîne possible serait de passer par GCC-4.7, dernier GCC à être écrit purement en C, mais supportant le C++. Et on peut compiler GCC-4.7 à partir d'un autre compilateur, a priori plus simple, TCC. Mais encore faut-il être capable de compiler TCC, ce qui reste plus simple que de compiler GCC.

Ce dépôt montre un chemin possible pour bootstrapper à partir de rien. Et c'est fascinant ! On commence par un petit bout de binaire écit à la main (il faut bien !) pour aller vers un langage de macro simplissime, puis un assembleur simpliste et enfin un assembleur correct, une mini-VM etc.

Il y a pleins d'approches intéressantes du problème, ce journal vous enjoind à jouer avec l'idée ! Quelques liens sympatoches :

J'ai un peu honte de ne découvrir ça que maintenant, ça a l'air d'être un sujet bien étudié et avec pas mal de littérature, certainement plus probante que les quelques liens du dessus…

  • # J'ai exactement ce problème avec mon langage

    Posté par  (site Web personnel) . Évalué à 10.

    Mon langage s'appelle de C-Cool, il suffit de décrire grossièrement le programme que tu veux obtenir en langage naturel. Par exemple, le code du compilateur est écrit en C-Cool et est le suivant : « Fais un compilateur pour un langage dont il me suffirait de décrire grossièrement le programme que je veux en langage naturel ».

    Reste juste le problème de bootstrap.

  • # coquille

    Posté par  (site Web personnel) . Évalué à 7.

    Il s'agit de « The Ken Thompson Hack »: Hack et non Attack.

    • [^] # Commentaire supprimé

      Posté par  . Évalué à -8.

      Ce commentaire a été supprimé par l’équipe de modération.

      • [^] # Re: coquille

        Posté par  (site Web personnel) . Évalué à 8.

        Je ne sais pas si c'est de l'humour, mais tu as une sacré propension à justifier n'importe quoi en produisant une floppée de détails tout à fait inutiles (si c'est de l'humour, je m'excuse).

        Sinon je crois que ça fait référence (involontairement ?) à la Karger-Thompson Attack.

        "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

        • [^] # Commentaire supprimé

          Posté par  . Évalué à -10. Dernière modification le 05/02/19 à 06:03.

          Ce commentaire a été supprimé par l’équipe de modération.

          • [^] # Commentaire supprimé

            Posté par  . Évalué à -10.

            Ce commentaire a été supprimé par l’équipe de modération.

            • [^] # Commentaire supprimé

              Posté par  . Évalué à -10.

              Ce commentaire a été supprimé par l’équipe de modération.

              • [^] # Re: coquille

                Posté par  . Évalué à 10.

                Pitié oui, s'il-te-plait.

                En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

              • [^] # Re: coquille

                Posté par  . Évalué à 10.

                Je vais sérieusement envisager d'arrêter de donner de la confiture aux cochons…

                Ta confiture semble faite avec beaucoup d'attention et de bonne volonté, mais elle est immangeable.
                Pourtant sur ce site beaucoup sont dotés d'un solide appétit d'informations, de points de vues, etc, le tout avec un estomac entraîné à absorber des choses pas évidentes.

                Tes textes sont bardés de trucs dont on ne comprend pas l'utilité, ils sont longs pour expliquer un truc qui se fait en 5 phrases, et tu en rajoutes dans un message supplémentaire, puis encore un message, et encore un autre.
                Ça fait de centaines de lignes pour expliquer un truc basique --> tu as un soucis de vision, d'expression, de synthèse, de je ne sais quoi, mais c'est un GROS soucis.

                • [^] # Commentaire supprimé

                  Posté par  . Évalué à -10.

                  Ce commentaire a été supprimé par l’équipe de modération.

                  • [^] # Re: coquille

                    Posté par  (site Web personnel) . Évalué à 6.

                    Les critiques de ton commentaires sont très bien notées. Tes commentaires plongent dans les abîmes des notes. Et tu continues de réfuter toutes les critiques. Jamais de remise en cause, c'est décourageant.
                    En plus tu prétend nous expliquer pourquoi nous te notons mal, alors qu'on te lit depuis des années, qu'on est parfaitement au courant de ton histoire…

                    Quant au fond, ta abordes souvent des sujets techniques, que tu semble peu connaître. Tu ne te rends pas bien compte que tu as affaire à des professionnels en activité. Car nos métiers de programmeur, d'administrateur système, d'ingénieur réseau, etc. ça se pratique, lire des docs ne suffit pas.

                    Tu as déjà vu les commentaires de Zenitram ? il sont abondant, comme les tiens. Zenitram est spécialiste dans un domaine. Il parle rarement technique en dehors.

                    Enfin, les qq notes positives s'expliquent facilement : sur la quantité invraisemblable de tes messages, il y en a qui sont intéressant — et courts.

                    "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

                    • [^] # Commentaire supprimé

                      Posté par  . Évalué à -10.

                      Ce commentaire a été supprimé par l’équipe de modération.

                      • [^] # Re: coquille

                        Posté par  (site Web personnel) . Évalué à 4.

                        Mais arrête de te la jouer bon sang! ça fait des années que les gens te le demandent.

                        "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

                        • [^] # Commentaire supprimé

                          Posté par  . Évalué à -10.

                          Ce commentaire a été supprimé par l’équipe de modération.

                          • [^] # Re: coquille

                            Posté par  (site Web personnel) . Évalué à 4.

                            mon allégation largement sourcée et valide que l'expression Ken Thompson Attack est pertinente ?

                            Ton assertion a été notée négativement bien avant mon commentaire. Elle peut-être sourcée, elle n'en a pas moins été invalidée par les autres.

                            Me la jouer ?

                            Tu te la joues à avoir toujours raison, comme le schtroumpf à lunette.

                            Bonne nuit.

                            "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

                          • [^] # Re: coquille

                            Posté par  . Évalué à 7.

                            Je ne comprends pas qu'un mec aussi brillant que toi n'arrive pas à nous comprendre. Entre deux "mêêê" et "grouik grouik" on utilise bien des mots en Français non ?

                            en réaction à mon allégation largement sourcée et valide

                            On ne te parle pas de la validité ni des sources, mais de l'allégation elle-même. LA FORME BORDEL, LA FORME !!!

                            Et en plus le mot allégation me semble bien mal utilisé ici (mon Gros Robert est plutôt de mon avis), puisque justement le propos est justifié.

                            En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

                  • [^] # Re: coquille

                    Posté par  . Évalué à 9. Dernière modification le 05/02/19 à 22:27.

                    sans le rendre immangeable

                    Ton propos ne t'es pas destiné, tu n'as donc pas à le juger. "J'écris bien, ce sont les autres qui ne comprennent pas".

                    Quand j'écris un document et qu'on me fait une remarque (fond comme forme, c'est important), à 90% du temps ça fini par une modification du document, même si j'ai parfaitement raison sur le fond. Si la personne n'a pas compris ce que j'ai écris c'est de ma faute (par définition). Je propose donc une reformulation plus détaillée, plus directe ou moins ambiguë (selon).

                    Plutôt que de pester contre je ne sais quel complot contre toi (franchement, qu'est-ce qu'on s'en fiche de ta vie !) essaie de comprendre ce qu'on te dit. Ce que tu écris est généralement imbuvable, et transpire la vanité. Vrai ou faux, là n'est pas le problème, c'est le ressenti des gens, c'est comme ça. Si tu es si intelligent, tu devrais le comprendre aisément.

                    J'ai "pertinenté" moi-même pas mal de tes commentaires, ce n'est pas pour te faire plaisir, mais c'est bien parce qu'ils m'ont fait plaisirs : pertinents et agréables à lire.

                    Une bonne fois pour toutes, ce n'est pas toi qu'on note mal, c'est ton texte. Il est CHIANT À LIRE !

                    En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

                    • [^] # Commentaire supprimé

                      Posté par  . Évalué à -7.

                      Ce commentaire a été supprimé par l’équipe de modération.

                      • [^] # Commentaire supprimé

                        Posté par  . Évalué à -10.

                        Ce commentaire a été supprimé par l’équipe de modération.

                        • [^] # Re: coquille

                          Posté par  . Évalué à 8.

                          En fait tu ne parles que à toi-même. Tu n'as rien à faire que les autres ne te comprennent pas.

                          En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

                  • [^] # Re: coquille

                    Posté par  . Évalué à 3. Dernière modification le 09/02/19 à 22:36.

                    Vraiment immangeable ? Comment expliques-tu les quelques points en positif qui apparaissent ? De la complaisance ? Allons !

                    Moi j'ai pertinenté le premier message parce que j'ai apprécié le travail de recherche et aussi que tes commentaires deviennent progressivement trés interessant avec un bon travail de documentation.

                    Mais tu pars souvent de travers. J'ai l'impression que tu prend les commentaires trop à coeur. Tu surréagis.

              • [^] # Re: coquille

                Posté par  (site Web personnel) . Évalué à 8. Dernière modification le 05/02/19 à 17:07.

                Si tu donnes à manger à tes cochons de la même façon que tu nous abreuves de tes logorrhées, les pauvres bêtes doivent être mortes étouffées sous des monceaux de nourriture avariée :( – personnellement j'ai du mal à associer ça à de la confiture.

                Cette page te permets de relire tous tes commentaires, il semblerait qu'il y a une certaine corrélation entre la longueur de tes interventions et leur note.

                La connaissance libre : https://zestedesavoir.com

              • [^] # Re: coquille

                Posté par  . Évalué à 1. Dernière modification le 08/02/19 à 21:01.

                Tout aussi bonne que puisse être la confiture que tu nous sers, tu veux à chaque fois nous en servir un conteneur entier. Forcément, c'est l'indigestion !

                Tes pavés sont illisibles pour la population de decideurs pressés de DLFP qui préfèrent moinsser plutôt que se taper ta logorrhée.

                Si tu arrivais à synthétiser en quelques phrases, tout le monde s'en porterait mieux…

                • [^] # Commentaire supprimé

                  Posté par  . Évalué à -10. Dernière modification le 09/02/19 à 11:22.

                  Ce commentaire a été supprimé par l’équipe de modération.

  • # Compiler un compilateur... Avec une version antérieure?

    Posté par  . Évalué à 3.

    Je ne suis absolument pas expert dans ce domaine, mais on m'avait expliqué il y a de nombreuses années, qu'il n'était pas possible de compiler un compilateur avec une version précédente, tout simplement parce que le compilateur 'V-1' ne pouvait pas, par construction, comprendre les nouvelles instructions du compilateur 'V' et donc ne pouvait pas les compiler.

    Un expert du domaine pourrait-il confirmer (ou pas) en termes simples ce fait? :-)

    Note : C'est peut-être expliqué dans la présentation (que je n'ai pas encore regardé), donc mes excuses dans ce cas pour le bruit.

    Celui qui pose une question est bête cinq minutes, celui qui n'en pose pas le reste toute sa vie.

  • # Boostrap everything

    Posté par  . Évalué à 6. Dernière modification le 04/02/19 à 14:57.

    Le wiki donné en référence est impressionnant, on y trouve des CPU, des compilateurs et des OS de taille minimale. Extrêmement éducatif je suppose, faudrait trouver le temps pour s'y pencher dessus.

    En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

  • # Le big bang L'oeuf la poule Adent et Eve

    Posté par  (site Web personnel) . Évalué à -3.

    C'est toujours le même problème :

    L'oeuf ou la poule
    Adent et Eve
    Le big Bang

    Pour plus de renseignement contacter le service correspondant à votre croyance / culture ( curé prêtre pasteur imam rabin shamane sorcier stade de foot etc … )

    Pour le compilateur C l'équivalent de dieu sous Unix c'est Ken Thompson et Dennis Richie avec le langage B
    Avec des Archanges comme Linux Thorvalds

    Je vous laisse le soin de nommer les anges déchus :)

  • # Commentaire supprimé

    Posté par  . Évalué à 1. Dernière modification le 04/02/19 à 17:06.

    Ce commentaire a été supprimé par l’équipe de modération.

    • [^] # Commentaire supprimé

      Posté par  . Évalué à -10. Dernière modification le 10/02/19 à 12:52.

      Ce commentaire a été supprimé par l’équipe de modération.

  • # Attaque par le compilateur

    Posté par  . Évalué à 3.

    une justification au délire, qui dit en gros que si on compromet le compilo, on compromet tout ce qu'il produit (c'est la Ken Thompson Attack)

    Ça demande à ce que la propriété soit maintenu dans les compilateurs générés. Hors de cas totalement triviaux qui sont pas forcément très compliqué à déceler, ça me paraît assez complexe.

    • [^] # Re: Attaque par le compilateur

      Posté par  . Évalué à 3.

      Je pense que c'est plus une expérience de pensée qu'un risque réel, pour plein de raisons. Déja, il faut que le compilateur compromis ait été introduit il y a très longtemps, au début de la chaine, puisque la compromission ne peut plus être introduite en cours de route. D'autre part, il ne semble pas très compliqué de «nettoyer» une distribution une fois que la faille est identifiée (il suffit de compiler gcc avec un autre compilateur du marché, puis de recompiler gcc avec lui-même, et de recompiler tous les éléments du système : en quelques heures, pouf, la faille introduite 20 ans auparavant n'existe plus. Ça fait beaucoup d'efforts pour pas grand chose!

      Par contre, ce qui est intéressant, c'est la question autour de l'idée de prouver que les compilateurs ne sont pas compromis de cette manière. Si on analyse le binaire du compilo avec un outil compilé, qui prouve que le compilateur n'a pas fait en sorte que l'éditeur de binaire ne cache pas les bouts compromettants? Et si on utilise un autre compilo du marché, qui prouve qu'il n'a pas non plus lui aussi été affecté? C'est tellement improbable que ça ne représente pas un risque réel, mais c'est plus une question philosophique, et une attaque sur le principe souvent répété de la sûreté des logiciels libres par l'inspection du code.

      • [^] # Commentaire supprimé

        Posté par  . Évalué à -10.

        Ce commentaire a été supprimé par l’équipe de modération.

        • [^] # Re: Attaque par le compilateur

          Posté par  . Évalué à 10. Dernière modification le 05/02/19 à 23:06.

          les cochons auront cliqué sur "inutile"

          fait !

          En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

        • [^] # Commentaire supprimé

          Posté par  . Évalué à -8. Dernière modification le 06/02/19 à 07:42.

          Ce commentaire a été supprimé par l’équipe de modération.

        • [^] # Re: Attaque par le compilateur

          Posté par  . Évalué à 7. Dernière modification le 06/02/19 à 08:54.

          d'autre part, tu n'as aucune garantie de l'absence de passage de la théorie à la pratique et le seul nettoyage du code tel que tu l'évoques dans ton premier paragraphe ne règle pas tout, tu vas le découvrir ci-dessous.

          Sauf que tu parles d'un problème tellement différent que la discussion est carrément hors sujet, je trouve. Le problème que tu évoques n'a rien à voir avec le compilateur ; si tu veux juste dire que la confiance dans le compilateur n'est pas suffisante pour avoir confiance dans un ordinateur, alors oui, c'est trivialement vrai. Mais le nombre d'exemples qui pourraient poser de tels problèmes est quasiment illimité (noyau, bibliothèques externes, drivers, matériel, routeurs…).

          Sur le fond, les problèmes que tu évoques sont théoriquement possibles, mais ils sont détectables, et c'est ça qui est rassurant, dans une certaine mesure. Si un binaire, une fois exécuté, n'a pas le même comportement sur deux machines différentes (il envoie une trame réseau chiffrée quand il est exécuté sur une machine et pas sur l'autre, par exemple), alors tu as identifié un vrai problème. Le constructeur prend quand même un risque majeur en introduisant, de cette manière, «en dur», des protocoles espions. Il pourrait du jour au lendemain se faire interdire de vente, par exemple. D'autre part, un tel truc «en dur» dans le matériel peut difficilement être mis à jour, et il ne peut qu'être très sensible à toute modification de l'environnement logiciel. Enfin, il semble tellement plus facile d'introduire des backdoors dans le matériel que d'analyser les binaires et d'y introduire des instructions supplémentaires que ça me semble plutôt relever de la science fiction.

          Autrement, rien à voir, mais quand tu te retrouves à -50 avec 4 commentaires, c'est peut-être un signe qu'il est l'heure de prendre tes médicaments.

          • [^] # Commentaire supprimé

            Posté par  . Évalué à -8. Dernière modification le 06/02/19 à 11:18.

            Ce commentaire a été supprimé par l’équipe de modération.

        • [^] # Re: Attaque par le compilateur

          Posté par  (site Web personnel) . Évalué à 8.

          Tout ton problème est dans l'inadéquation entre ton ressenti quant à la qualité de tes textes :

          le long texte ci-dessus, bien qu'a priori parfait du point de vue lexical, syntaxique, et de la détermination univoque du sens,

          Et le fait qu'ils sont très loin de la perfection. En particulier parce qu'on y trouve encore des phrases beaucoup trop longues et complexes, comme par exemple :

          Non pas parce qu'il y aurait de la stéganographie — un contenu informatif (malveillant) non décelable — au niveau du code binaire (2), car si toute la chaîne de production des binaires est maitrisée depuis l'amorce d'un assembleur minimaliste écrit en binaire, alors la production d'une suite d'instructions binaires est toujours déterministe et sous contrôle du programmeur (si tant est qu'il vérifie la production (de tout binaire) faisant intervenir le… matériel).

          Exemple qui contient quand même deux fois un double niveau d'inclusion (incise dans une incise) et un renvoi externe (lui-même trop long).

          C'est un problème soulevé depuis plusieurs mois et que tu ne sembles pas décidé à prendre en considération.

          Ne t'étonnes donc pas de l'accueil reçu par tes commentaires.

          La connaissance libre : https://zestedesavoir.com

          • [^] # Re: Attaque par le compilateur

            Posté par  . Évalué à 6. Dernière modification le 06/02/19 à 15:23.

            Tout ton problème est dans l'inadéquation entre ton ressenti quant à la qualité de tes textes :

            Est-ce quelqu'un qui s'y connait un peu ne pourrait pas essayer de mettre un terme technique sur le problème de SamWang (manque total de lucidité sur son incapacité à communiquer ses idées de manière intelligible et logique)? Ça permettrait d'éviter les injures et d'être un peu plus constructifs.

            D'un autre côté, si SamWang tu es suivi pour un problème médical, ça ne coûte rien d'en glisser un mot (sans forcément donner des détails dont on se moque); d'expérience les gens sont bien plus bienveillants quand ils savent pourquoi leur interlocuteur ne respecte pas les codes sociaux. Dans tous les cas, il semble que tu n'es pas «cablé» comme le commun des mortels, ce qui fait qu'un texte qui te semble clair, aéré, et logique, nous semble confus, jargonnant, et maladroit. Mépriser tes interlocuteurs n'arrange pas ton cas, puisqu'il est évident pour tout le monde que le problème vient de toi. L'art de la communication, c'est avant tout l'humilité de faire l'effort de passer un message clair, surtout si en face on n'a rien demandé.

            Quand je contribuais à Wikipédia, j'ai dû gérer à plusieurs occasions ce genre de situations, et c'est très compliqué, parce que malgré tous les efforts faits des deux côtés, les contributions de la personne "dyscommunicante" ne sont pas constructives. Souvent, le dialogue et la participation à un projet collectif entrent dans une démarche thérapeutique dans l'esprit du contributeur, mais cette démarche finit par être contre-productive (exclusion, sentiment de paranoïa, tensions chez les contributeurs réguliers, dégradation de la qualité du projet parce qu'on s'est «forcés» à accepter quelques contributions de mauvaise qualité, etc).

            • [^] # Commentaire supprimé

              Posté par  . Évalué à -7. Dernière modification le 06/02/19 à 16:13.

              Ce commentaire a été supprimé par l’équipe de modération.

            • [^] # Re: Attaque par le compilateur

              Posté par  (site Web personnel) . Évalué à 2.

              Ça ressemble à de la logorrhée (terme qui a une vraie signification médicale) mais à l'écrit. Il semblerait que ce soit plus souvent classifié comme un symptôme d'autre chose plus que comme une maladie à part entière.

              La connaissance libre : https://zestedesavoir.com

            • [^] # Commentaire supprimé

              Posté par  . Évalué à -10. Dernière modification le 07/02/19 à 10:44.

              Ce commentaire a été supprimé par l’équipe de modération.

            • [^] # Commentaire supprimé

              Posté par  . Évalué à -9.

              Ce commentaire a été supprimé par l’équipe de modération.

              • [^] # Re: Attaque par le compilateur

                Posté par  . Évalué à 9. Dernière modification le 08/02/19 à 13:13.

                j'ai sollicité la bienveillance d'un expert en science de la sagesse.

                Tout d'abord mon domaine d'expertise est avant tout les mathématiques pure et la logique formelle, mais j'ai néanmoins une connaissance approfondie de la philosophie kantienne et une certaine érudition au sujet de la pensée philosophique.

                Maintenant, je te le dis : tu es un parfait crétin doublé d'un malotru. Non, pour reprendre ton expression sur l'autre fil de discussion, qu'il n'est plus nécessaire de polluer, nous ne sommes pas en bonne compagnie ! On ne colle pas de quenelles pour sodomiser Kant à titre posthume ! Quand bien même on appelle cela de l'humour : ton sens de l'humour m'est parfaitement incompréhensible.

                Ton problème principal de longueur dans tes textes n'est pas une pathologie (comme la logorrhée) mais tout simplement de la micrologie : c'est-à-dire de l'inutile précision dans les détails.

                Pour le reste tu passes ton temps à essayer d'employer des notions et des concepts auxquels tu n'entends absolument rien, et cela face à des personnes qui, elles, les comprennent.

                Au sujet de ton projet de LFC, tu devrais t'associer à Mr BG est son projet de C-Cool. Quand vous en serez à la phase de bootstrap, vous nous ferez un journal…

                Vu que tu aimes Carnap, tu devrais lire ça : Carnap, Cassirer, and Heidegger: The Davos Disputation and Twentieth Century Philosophy, c'est incroyable à quel point Kant est omniprésent dans un article où son nom n'est même pas mentionné dans le titre.

                Et globalement sur tes délires de projets :

                Faire des plans, c'est bien souvent se laisser aller à une activité intellectuelle ostentatoire et fanfaronne : on se donne une apparence de génie créateur en demandant ce qu'on n'est pas capable d'exécuter soi-même, en dénigrant ce que l'on est cependant incapable de surpasser et en prônant ce dont on ne saurait dire où le trouver.

                Kant, prolégomènes à toute métaphysique future.

                À l'avenir, ne prends pas la peine de répondre à mes commentaires en espérant que j'y réponde, tu y trouveras systématiquement la porte fermée. Considère notre canal de communication comme définitivement clos : je ne donne pas à manger aux cochons sans aucune éducation.

                Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

                • [^] # Commentaire supprimé

                  Posté par  . Évalué à -10. Dernière modification le 08/02/19 à 16:05.

                  Ce commentaire a été supprimé par l’équipe de modération.

                  • [^] # Re: Attaque par le compilateur

                    Posté par  (site Web personnel) . Évalué à 4.

                    Je t'ai demandé ce matin d'éviter tes propos sur la quenelle. Tu recommences. Tu te crois où ? Tu nous prend pour qui ?

                    Et descend de ton piédestal tu vas prendre froid.

                    "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

                    • [^] # Re: Attaque par le compilateur

                      Posté par  . Évalué à 6.

                      Sommaire

                      Et descend de ton piédestal tu vas prendre froid.

                      Je viens de voir que vous avez effacer son compte et supprimer certains de ses messages. Comme j'étais en train de rédiger un long commentaire pour exposer sa profonde ignorance au grand jour et que je ne veux pas avoir perdu du temps pour rien, je le mets quand même ici. Il pourra servir comme référence, au cas où il revienne avec un autre compte.

                      Voici une analyse de sa confiture que nous ne savons pas apprécier au sujet de l'article de Ken Thompson.

                      Le cas Ken Thompson

                      Alors que Ken Thompson reçoit le prix Turing en 1983 pour son œuvre, lors de son discours de remerciement, il présente le programme le plus malin (cutest)1 qu'il ait jamais écrit. Son discours est retranscrit sous forme d'article et publié dans un bulletin de l'ACM sous le titre Reflections on trusting trust.

                      Le programme en question est fortement lié au présent journal, puisqu'il consiste à corrompre un compilateur C dans la chaîne de bootstraping, de tel sorte que tout compilateur C qui lui succède introduise une porte dérobée dans le programme de login d'un système Unix.

                      Son exposé se décompose en trois étapes que nous présenterons brièvement dans ce qui suit.

                      Étape 1

                      La première étape consiste à écrire un programme qui, lorsqu'il s'exécute, reproduit son propre code source sur la sortie standard. Un tel programme est dit autoreproducteur. En voici un exemple minimal en OCaml :

                      (fun x -> Printf.printf "%s %S" x x) "(fun x -> Printf.printf \"%s %S\" x x)";;
                      (* ci-dessous le retour de l'exécution, identique au code source *)
                      (fun x -> Printf.printf "%s %S" x x) "(fun x -> Printf.printf \"%s %S\" x x)"

                      Étape 2

                      La seconde étape traite un problème posé dans un autre commentaire du journal par redo_fr : comment ajouter de nouvelles fonctionnalités à un langage en compilant le nouveau compilateur avec une version antérieure, qui ignore, donc, les nouvelles fonctionnalités ?

                      Il y traite un exemple simple avec l'interprétation des séquences d'échappement dans les chaînes de caractères. Il montre comment boostraper l'interprétation de la séquence \v comme une tabulation verticale. Ainsi, même si, à la génération N, la séquence \v n'est pas valide, à partir des générations N + 1 et suivantes, tous les compilateurs pourront l'utiliser dans leur propre code source.

                      Étape 3

                      C'est l'étape finale où il décrit comment introduire la porte dérobée sans laisser aucune trace dans le code source du compilateur.

                      Dans une représentation idéalisée du fonctionnement d'un compilateur, celui-ci lit le code source du programme puis applique une routine compile(s) sur les parties du code. Pour introduire une porte dérobée, on peut tester la correspondance de la fonction à compiler sur un motif donné et introduire dans ce cas compile(backdoor).

                      Le défaut de cette approche est que même une lecture superficielle du code source du compilateur risque de découvrir le pot aux roses, en voyant l'exécution conditionnelle de l'instruction compile(backdoor).

                      La solution consiste, alors, à combiner les techniques des deux premières étapes afin d'effacer la supercherie du code source du compilateur. À la génération N, on introduit la porte dérobée sous forme d'un programme autoreproducteur (étape 1), que l'on boostrape (étape 2), puis l'on distribue ce binaire comme compilateur C officiel qui reproduira son comportement dans toutes les générations successives.

                      Le lecteur intéressé par les détails de chaque étape pourra toujours se reporter à l'article de Ken Thompson.

                      Maintenant, chers lecteurs, attardons nous quelque peu sur l'analyse détaillée de cette succulente confiture gracieusement offerte par SamWang, que, nous autres, pauvres cochons, n'avons pas su éstimer à sa juste valeur. Ça vaut le détour ! :-)

                      La recension de SamWang

                      Lui, ô grand chasseurs devant l'éternel de coquilles, coquillages et autres crustacés, se propose de nous révéler quelques une de ses prises, suite à sa lecture du papier l'été dernier. Et quelles prises ! :-D

                      Avant cela, il tente un résumé de l'article qu'il semble n'avoir pas totalement saisi. Pour lui, l'article expose l'injection d'une porte dérobée dans la compilation du fichier login.c. Puis Ken Thompson mettrait ensuite « en garde contre le risque d'injection de code malveillant par un compilateur malveillant dans tout programme qu'il compile, y compris un compilateur ». J'espère que tout lecteur attentif de ma présentation aura compris que c'est un peu plus subtil que ça.

                      Passons, à présent, aux coquilles mineures relevées. Il en trouve deux :

                      • inversion de légendes entre deux figures du papier ;
                      • placement de figures dans la mauvaise section.

                      S'il y a bien inversion de légende entre deux figures (celles qui illustrent comment ajouter la séquence d'échappement \v au langage) et que tout lecteur attentif corrigera de lui-même, je suis au regret de lui apprendre que la seconde n'en est pas une.

                      SamWang ne devant pas être habitué à la lecture d'article académique, il a pris pour une coquille ce qui n'est rien d'autre qu'une mise en page, on ne peut plus classique, dans ce genre de papier. Les figures liées à la section 2 sont reportées en bas de page, qui, dans le cas présent où chaque page est en format deux colonnes, se trouve en bas de la seconde colonne. Cela lui donne l'illusion qu'elles sont insérées dans la section 3 dont le texte commence sur cette deuxième colonne.

                      C'est déjà quelque peu amusant, mais le plus beau reste à venir. Dans le fond, SamWang a une âme d'explorateur : il rêve d'une terre remplie de K-zino, avec son comparse zind dans sa logique LFC, inspirée des travaux de Rudolph Carnap, pour faire de la LNC. Malheureusement pour lui, depuis dix ans qu'il en parle, il ne navigue toujours par sur l'océan à la recherche de la terre promise. Nulle Santa Maria, ni même le moindre radeau, et tous ses bateaux semblent prendre l'eau. Alors, seul sur le rivage, admirant au loin l'horizon, il doit s'ennuyer un peu : il part donc à la pêche aux coquillages.

                      Et là, mazette, quelle récolte ! Ken Thompson ne sait même pas écrire correctement du C. Oui, vous avez bien lu : Ken Thompson est une bille en C, il ne sait pas écrire un programme de quelques lignes syntaxiquement valide, et en plus il propose ça en publication à l'ACM qui valide le tout. Mais dans quel monde vit-on ?

                      Voyons voir cette grossière erreur un peu plus à la loupe. Elle se trouve dans l'étape 1, lorsqu'il traite des programmes autoreproducteurs. Son code commence par la déclaration d'une chaîne de caractères :

                      char s[] = {'t', '0', '\n', '}', ';' ... }

                      Puis, dans la boucle principale, il parcourt cette chaîne pour l'imprimer caractère par caractère. Ni une, ni deux, SamWang arrive à la conclusion fatidique : si je commence par écrire cette séquence de caractère au tout début d'un fichier, je n'aurais pas un code source C valide. En conséquence, alors que le programme d'exemple devait afficher son propre code source, il affiche un texte qui n'est même pas valide en C. Quel escroc ce Ken Thompson ! encore un qui essaye de jouer au paralogisme, mais on n'échappe pas à la surveillance assidue du SamWang.

                      Rassurez vous, rien de tout cela dans le code de Ken Thompson, c'est juste que l'idiot de service à oublier de lire l'instruction qui précède la boucle for :

                      printf("char\ts[] = {\n");

                      C'est vrai que, finalement, il a un certain sens de l'humour notre SamWang : certes à ses dépends, mais c'est drôle quand même. :-)

                      Après, pour être tout a fait exact, son exemple n'est pas un programme autoreproducteur mais génère un tel programme. Il le précise lui même :

                      The purist will note that the programm is not precisly a self-reproducing programm, but will produce a self-reproducing programm

                      Ken Thompson

                      Ce qui est encore plus drôle (deuxième effet kiss cool) est que, à la toute fin de son commentaire, SamWang pointe un lien vers un vrai programme autoreproducteur « dans lequel le tableau de données est lu deux fois et interprété différemment les deux fois.[…] une solution bien astucieuse » (les mots sont de SamWang). Tout lecteur de bonne foi, comprenant le C, réalisera sans peine que cette solution astucieuse est identique, dans l'esprit, à celle de Ken Thompson.

                      Comme autre perle de sa pêche aux coquillages (heureusement que je sais ouvrir les huîtres), on trouvera celle-ci. S'interrogeant sur l'utilité de cette étape dans le corps de l'article, notre cher ami écrit, je cite :

                      Je suppose que s'il passe par cette étape, c'est pour justifier la possibilité, pour un compilateur malveillant, d'injecter sa malveillance en tant que code source ajouté au code source légitime qu'il compile. Bien que son propos manque d'articulation logique, je pense qu'on peut légitimement inférer ce que je viens de supposer.

                      SamWang au sommet de sa forme.

                      Je laisse le lecteur libre de juger à quel point l'étape 1 est cruciale pour l'étape 3 (d'après ma présentation), et si, dans son article, Ken Thompson ne le signale pas explicitement selon une articulation logique sans faille. Ce qui manque, assurément, d'articulation logique, ce sont les commentaires à ralonge de SamWang.

                      Arriver à ce stade, toute personne sensée, avec un minimum d'humilité, aurait du se dire : « j'ai du raté un truc » (en l'occurrence oui, à savoir, une ligne de code). Mais comme rien n'arrête notre SamWang, il va bien plus loin : par une réduction à l'infinie, il entend, dans un premier temps, nous convaincre que le problème que cherche à résoudre Ken Thompson n'a même pas de solution. Non seulement il ne peut toujours pas naviguer sur l'océan à la recherche de découverte pleine d'espérance, devant se contenter du rivage et de ses coquillages, mais le voilà maintenant chutant inexorablement dans le tonneau des danaïdes, ce puit sans fin dont il desespère de ne pas voir le fond.

                      Ce genre de problème de point fixe est on ne peut plus courant, mais il semble l'ignorer : étant donné une fonction f trouver une valeur x tel que f (x) = x ; où ici la fonction f, dont on cherche un point fixe, est la composée de deux autres f = run . compile, de telle sorte que l'on cherche source satisfaisant l'équation :

                      (run . compile) (source) = source
                      

                      Il se met alors à chercher des contournements au défi, en assouplissant les contraintes, afin d'y arriver. Il envisage, par exemple, un programme qui ouvre son fichier source puis l'affiche, ce qui nécessite d'avoir toujours à disposition le code source d'un tel programme. Là où l'on voit qu'il n'a rien compris à l'article, étant donné que le compilateur compromis ne sera distribué que sous forme binaire tout en ayant la capacité de « parasiter » tous les futurs compilateurs qui
                      l'auront comme ancêtre.

                      Incompréhension totale de l'article confirmée par ce qui conclut cette partie du commentaire (qui constitue la moitié, en volume, du commentaire complet) :

                      Tout ceci étant exprimé, est-il impératif d'avoir une solution viable au défi pour que l'exposé de Ken Thomson tienne la route par ailleurs ? Ma réponse est non.

                      SamWang dans sa chute ne voyant toujours pas le fond

                      Assurément que si, c'est impératif ! comme je viens de le rappeler.

                      Enfin, nous touchons au sublime avec la conclusion du commentaire, où, sautant du coq à l'âne, dans une articulation logique à toute épreuve, l'on apprend dans la foulée de cette question-réponse que, si, finalement, on peut écrire des programmes autoreproducteurs et que l'on appelle cela des quine (en l'honneur du philosophe analytique William Quine, je précise). SamWang a donc passé la moitié de son commentaire à nous expliquer que c'est pas possible, pour, finalement, nous dire que c'est possible. Effectivement, ça valait le coup ! :-D

                      Non vraiment, je ne vois pas ce qui a bien pu m'amener à écrire :

                      Pour le reste tu passes ton temps à essayer d'employer des notions et des concepts auxquels tu n'entends absolument rien, et cela face à des personnes qui, elles, les comprennent.

                      et le voir me répondre :

                      Bing ! La formule magique, l'échappatoire à deux sous !

                      Ce qui précède doit bien apporter la preuve irréfragable de ce que j'avançais. Pour ce qui est de l'autre fil de discussion, ce n'est guère mieux, mais j'ai déjà assez perdu de temps comme cela pour devoir le justifier.


                      1. l'adjectif anglais cut, outre sa signification de mignon, peut aussi caractérisé quelque chose d'habile et d'ingénieux. En choisissant la traduction « malin », on retrouve le côté ingénieux d'un hack, ainsi que celui malveillant (par un jeu de mot) d'une attack. ;-) 

                      Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

                • [^] # Re: Attaque par le compilateur

                  Posté par  (site Web personnel) . Évalué à 3.

                  Au sujet de ton projet de LFC, tu devrais t'associer à Mr BG est son projet de C-Cool. Quand vous en serez à la phase de bootstrap, vous nous ferez un journal…

                  Ah non, pitié ! Je pense que le compilateur C-Cool risque le dépassement de pile.

          • [^] # Commentaire supprimé

            Posté par  . Évalué à -6. Dernière modification le 06/02/19 à 16:05.

            Ce commentaire a été supprimé par l’équipe de modération.

            • [^] # Re: Attaque par le compilateur

              Posté par  (site Web personnel) . Évalué à 4.

              Tu n'as pas compris : ma citation était un exemple de ce qui ne va pas, pas un point précis à éclaircir.

              De plus, je ne suis pas convaincu que ta nouvelle version soit réellement plus claire ; déjà elle est sensiblement plus longue.

              La connaissance libre : https://zestedesavoir.com

            • [^] # Re: Attaque par le compilateur

              Posté par  . Évalué à 9.

              Je pense que tu n'as pas compris de quoi on parlait. Le but n'était pas d'éclaircir ce paragraphe confus, c'était de donner un exemple.

              Outre la taille gigantesque de tes blocs de texte, c'est avant tout un problème de clarté.

              Et pourquoi faut-il réfuter la pertinence de cette procédure réputée valide tant qu'il n'y a pas la condition que j'ai ajoutée ?

              Par exemple, pour moi, cette phrase m'apparait totalement vide de sens. Sa syntaxe est extrêmement ambigüe (est-ce que "tant qu'il n'y a pas" fait référence à "réputée valide" ou à "réfuter la pertinence"?), et les mots d'enchaînent sans signification, avec des références vagues à un contexte qui ne semble pas évoqué dans ton texte. Tu pourrais écrire :

              « Et pourquoi faut-il commanditer la perméabilité de cette orchidée réputée obscure tant qu'il n'y a pas la farine que j'ai ajoutée»

              que je ne verrais pas une différence en terme de sens.

              • [^] # Commentaire supprimé

                Posté par  . Évalué à -8. Dernière modification le 06/02/19 à 19:04.

                Ce commentaire a été supprimé par l’équipe de modération.

  • # Imbitable

    Posté par  (site Web personnel) . Évalué à 3.

    J'ai regardé les slide du FOSDEM et j'ai trouvé que c'était complètement incompréhensible… Au final je trouve que sa présentation aurait été plus efficace si elle avait contenu un seul slide comme la phrase que tu as écrite : « On commence par un petit bout de binaire écit à la main (il faut bien !) pour aller vers un langage de macro simplissime, puis un assembleur simpliste et enfin un assembleur correct, une mini-VM etc. »

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n’en sommes pas responsables.