Bösartige Base Images

Bösartige Base Images

A lookalike base image on a public registry reaches production and calls home. Trace it back to the FROM line, then fix it with an internal mirror, verified publishers, and signature verification at pull time.

Was ist Bösartige Base Images?

Jeder kann in einer öffentlichen Registry unter einem Namen veröffentlichen, der einem vertrauenswürdigen Namen nahekommt. Ohne Signaturprüfung ist eine FROM-Zeile nur eine Zeichenkette, und ein Build, der diese Zeichenkette auflöst, führt aus, was auch immer er lädt. Diese Übung behandelt ein bösartiges Base Image, das die Produktion erreicht hat: Sehen Sie zu, wie ein Angreifer es platziert und einsammelt, was es nach Hause sendet, und beheben Sie es dann mit verifizierten Publishern, einem internen Mirror und Signaturprüfung beim Pull.

Was Sie lernen in Bösartige Base Images

Bösartige Base Images — Trainingsschritte

  1. Ein Name, der ein Zeichen daneben liegt

    Bob bricht in nichts ein. Er veröffentlicht. In einem öffentlichen Image-Hub kann jeder ein Repository pushen, und er hat eines unter einem Namespace gepusht, der sich fast genauso liest wie das offizielle Node.js-Base-Image. Dann wartet er darauf, dass irgendwo ein Build es versehentlich zieht.

  2. Getarnt, um zu bestehen

    Bobs Repository steht in den Suchergebnissen direkt unter dem echten, mit demselben Slogan und einer ordentlichen Pull-Zahl. Der einzige Unterschied ist der Teil, den ein gehetzter Engineer überfliegt.

  3. Was er tatsächlich ausgeliefert hat

    Bobs Lookalike ist kein neu verpacktes Node-Image mit frischem Etikett. Er hat es aus einem echten gebaut und nur eine einzige Zeile hinzugefügt. Das ist das Dockerfile hinter der Basis, die er veröffentlicht hat.

  4. Die Zeile, die die Arbeit macht

    Alles über dieser Zeile ist eine gewöhnliche Node.js-Basis. Ein einziges RUN, getarnt mit einem harmlosen Kommentar, macht daraus eine Waffe.

  5. Sehen Sie zu, wie die Payload zündet

    Die Basis sieht aus und verhält sich wie ein normales Node.js-Image, sodass ein Build damit gelingt und eine App darauf läuft. Aber eine Schicht, die Bob hinzugefügt hat, lädt und startet eine Payload, sobald ein Container startet. Er startet seine eigene Basis einmal, um zu bestätigen, dass die Payload noch zündet.

  6. Den Zugang nutzen

    Ein Marlspire-Build wurde auf seiner Basis ausgeliefert, und das eingeschleuste Implantat meldete sich nach Hause. Bob muss jetzt nicht mehr einbrechen: Er hat bereits eine Shell in ihrem Produktions-Container. Er weist sie an, alles herauszugeben, was sie erreichen kann.

  7. Was das möglich gemacht hat

    Ein kurzer Moment beim Mechanismus, bevor die Reaktion beginnt.

  8. Der Host meldet einen Miner

    Marlspire betreibt Endpoint-Monitoring auf seinen Container-Hosts. Es interessiert sich nicht dafür, was der Container eigentlich tun soll; es meldet, was es gesehen hat.

  9. Die Schichten des Image lesen

    Ein Image protokolliert, wie es gebaut wurde, ein Befehl pro Schicht. Wenn sich ein Miner selbst installiert, muss irgendeine Schicht den Befehl ausgeführt haben, der ihn geladen hat. Alice liest den Build-Verlauf des ausgelieferten Image.

  10. Woher die Basis kam

    Das Gift steckt in der Basis, also lautet die Frage: welche Basis. Alice schaut sich die beiden Kandidaten im öffentlichen Hub nebeneinander an.