Start › Cybersecurity-Wiki › Was ist PhantomJS?

Wiki

Was ist PhantomJS?

PhantomJS war ein kopfloser Browser auf WebKit-Basis, mit dem sich Seiten ohne sichtbares Fenster steuern und auslesen ließen.
Skripte öffneten Adressen, klickten und lasen Ergebnisse in einer automatisierten Umgebung.
Das Projekt wird nicht mehr weiterentwickelt, bleibt aber in alten Werkzeugketten und in Beschreibungen von Angriffswerkzeugen präsent.

Geschichte von PhantomJS

Entstanden ist PhantomJS in einer Zeit, in der automatisierte Browser vor allem für Tests und für das Rendern von Seiten gebraucht wurden, lange bevor kopflose Chrome- und Firefox-Varianten üblich waren.
Es bündelte WebKit mit einer JavaScript-Schnittstelle.
Mit dem Ende der Pflege blieben Sicherheitskorrekturen der zugrundeliegenden Engine aus.

Auswirkungen von PhantomJS

Die Auswirkungen waren eine leicht einsetzbare Automatisierung für Tests, Vorschaubilder und das Auslesen gerenderter Seiten.
Dieselbe Fähigkeit wurde auch missbraucht, um Seiten in Menge aufzurufen und Schutzmechanismen zu beobachten.
Heute ist der größere Effekt, dass ungepflegte Installationen eine alte Engine mit bekannten Mängeln weiterlaufen lassen.

Merkmale von PhantomJS

Die Merkmale waren scriptgesteuertes Laden von Seiten, Zugriff auf den gerenderten Inhalt, das Auslösen von Aktionen und das Schreiben von Bildern.
Eine sichtbare Oberfläche war dafür nicht nötig.
Diese Kombination machte es zum Werkzeug für wiederholbare Abläufe, solange die Engine zur jeweiligen Seite passte.

Seite Automatisierung

Seite Automatisierung bedeutete, eine Adresse zu öffnen, auf Elemente zu warten und Klicks oder Eingaben aus dem Skript heraus auszulösen.
Tests konnten so einen Ablauf prüfen, ohne dass ein Mensch das Fenster bedient.
Dieselbe Steuerung ist der Grund, warum Betreiber automatisierte Clients von gewöhnlichen Besuchen unterscheiden müssen.

Bildschirmfoto

Bildschirmfoto erzeugte eine Rastergrafik der gerenderten Seite, etwa für Vorschauen, Belege oder den Vergleich von Layouts.
Das Bild zeigt, was die Engine dargestellt hat, nicht zwingend, was ein aktueller Desktop-Browser heute zeigen würde.
Für Belege taugt das nur, solange die Engine die Seite überhaupt noch korrekt aufbaut.

PhantomJS in der Cybersecurity

In der Cybersicherheit diente PhantomJS als steuerbarer Browser für Prüfungen und wurde zugleich in Automaten verwendet, die Seiten ohne Nutzer abrufen.
Verteidiger treffen es eher als veraltete Komponente oder als Muster eines kopflosen Clients.
Ein Fund der Software ist ein Anlass zu fragen, ob sie noch gepflegt und noch berechtigt im Einsatz ist.

Penetrationstests

Bei Penetrationstests ließ sich mit einem scriptbaren Browser prüfen, wie eine Anwendung auf einen echten Seitenaufbau reagiert, soweit der Auftrag das Ziel umfasst.
Das ersetzt keine Genehmigung und erzeugt keinen dauerhaften Zugang.
Heute übernehmen gepflegte kopflose Browser dieselbe Rolle mit aktuelleren Engines.

Scannen auf Schwachstellen

Scannen auf Schwachstellen konnte den gerenderten Zustand einer Seite einbeziehen, statt nur den Rohtext der Antwort zu sehen.
Dynamisch nachgeladene Inhalte wurden so überhaupt erst sichtbar.
Die Qualität hing an der alten Engine und an dem Umfang, den der Auftrag erlaubte, nicht am Werkzeugnamen allein.

Beschränkungen von PhantomJS

Die Beschränkungen folgen aus der eingestellten Pflege, aus einer Engine, die moderne Seiten nur noch teilweise versteht, und aus einer Automatisierung, die sich von aktuellen Browsern unterscheidet.
Für neue Vorhaben ist das ein Grund zum Wechsel, nicht zum Weiterbauen.
Bestehende Skripte sollten abgelöst werden, bevor die Engine selbst zum Risiko wird.

Probleme mit der Kompatibilität

Kompatibilitätsprobleme zeigen sich, wenn Seiten aktuelle Skriptfunktionen, aktuelle TLS-Stände oder heutige Layoutregeln erwarten.
PhantomJS stellt die Seite dann unvollständig dar oder bricht den Ablauf ab.
Ein Test, der auf dieser Darstellung beruht, prüft nicht mehr das, was echte Nutzer sehen.

Performance-Probleme

Performance-Probleme entstehen, weil jede Seite eine schwere Engine startet und die alte Umsetzung heutige Seiten ineffizient aufbaut.
Viele parallele Instanzen vervielfachen Speicher und CPU, ohne die Fehlstellen der Engine zu beheben.
Für Last, die ein aktueller kopfloser Browser leichter trägt, ist PhantomJS die teurere und ungenauere Wahl.

Alternativen zu PhantomJS

Alternativen sind gepflegte kopflose Browser und die Steuerbibliotheken, die darauf aufsetzen.
Sie erhalten Sicherheitskorrekturen und verstehen aktuelle Seiten.
Der Wechsel umfasst nicht nur den Aufruf, sondern auch die Skripte, die auf Besonderheiten von PhantomJS gebaut waren.

Kopfloser Chrome und Firefox

Kopfloser Chrome und kopfloser Firefox führen die jeweilige Engine ohne sichtbares Fenster aus und werden mit dem Browser selbst gepflegt.
Sie eignen sich für Tests, Rendering und für beauftragte Prüfungen, deren Ziel einen aktuellen Client braucht.
Ihr Einsatz bleibt an dieselbe Erlaubnis gebunden wie jeder andere automatisierte Abruf.

Puppenspieler und Dramatiker

Unter der wörtlichen Bezeichnung Puppenspieler und Dramatiker sind die Steuerbibliotheken Puppeteer und Playwright gemeint, die kopflose Browser von außen bedienen.
Sie bieten Warten auf Elemente, mehrere Browser und eine aktuellere Grundlage als PhantomJS. Auch sie sind Werkzeuge mit einem Auftrag und kein Freibrief, fremde Formulare in Menge zu bedienen.