BlackLotus UEFI Bootkit ist kein Mythos mehr

BlackLotus UEFI Bootkit ist kein Mythos mehr

Das erste UEFI-Bootkit „in freier Wildbahn“, das UEFI Secure Boot auf vollständig aktualisierten UEFI-Systemen umgeht, ist nun die traurige Realität. Forscher haben seit kurzem einen großen Cybersicherheitsfund bekannt gegeben – die weltweit erste bekannte Instanz echter Malware, die den Startvorgang eines Computers kapern kann, selbst wenn Secure Boot und andere erweiterte Schutzfunktionen aktiviert sind und auf vollständig aktualisierten Versionen von Windows ausgeführt werden.

BlackLotus UEFI Bootkit ist eine Art von Malware, die auf die Firmware des Unified Extensible Firmware Interface (UEFI) abzielt. Es handelt sich um eine Art von Rootkit, das im Bootprozess des Systems aktiv wird und sich selbst in der Firmware verankert, um permanente Kontrolle über das System zu erlangen.

Ein UEFI-Bootkit kann schwer zu erkennen sein, da es sich in der Firmware des Systems versteckt und oft keine Spuren auf der Festplatte hinterlässt. Es kann auch sehr schwierig zu entfernen sein, da die Malware bei einem Versuch, sie zu entfernen, möglicherweise den Bootprozess des Systems beschädigt.

DE LINK: https://www.welivesecurity.com/deutsch/2023/03/01/blacklotus-uefi-bootkit-ist-kein-mythos-mehr/

EN LINK: https://arstechnica.com/information-technology/2023/03/unkillable-uefi-malware-bypassing-secure-boot-enabled-by-unpatchable-windows-flaw/

EN LINK: https://b2b-cyber-security.de/microsoft-uefi-secure-boot-schwachstelle-entdeckt/

 

BlackLotus nutzt eine Sicherheitslücke (CVE-2022-21894), die mehr als ein Jahr alt ist, um UEFI Secure Boot zu umgehen und sich dauerhaft in den Computer einzunisten. Dies ist der erste bekannte Exploit dieser Schwachstelle in freier Wildbahn. Obwohl die Schwachstelle mit dem Januar 2022-Update von Microsoft behoben wurde, ist ihr Missbrauch weiterhin möglich. Dies liegt daran, dass die betroffenen, gültig signierten Binärdateien immer noch nicht zur UEFI-Sperrliste hinzugefügt wurden. BlackLotus nutzt dies aus, indem es seine eigenen Kopien von legitimen – aber anfälligeren – Binärdateien auf das System bringt.

Die BlackLotus-Malware wurde erstmals im Jahr 2015 entdeckt und zielt hauptsächlich auf Unternehmen in Russland und Osteuropa ab. Sie wird häufig von Cyberkriminellen verwendet, um Zugriff auf Systeme zu erhalten, um vertrauliche Informationen zu stehlen oder um Botnets aufzubauen.

Einige Möglichkeiten, um sich gegen UEFI-Bootkits wie BlackLotus zu schützen, sind:

  1. Aktualisieren Sie regelmäßig die Firmware Ihres Systems, um Sicherheitsupdates und Patches zu erhalten.

  2. Verwenden Sie Antiviren- und Anti-Malware-Software, um Ihr System zu schützen.

  3. Vermeiden Sie das Herunterladen von Software aus nicht vertrauenswürdigen Quellen oder das Öffnen von E-Mail-Anhängen von unbekannten Absendern.

  4. Überwachen Sie Ihre Systemaktivitäten und suchen Sie nach ungewöhnlichen Aktivitäten, wie z.B. unerwarteten Neustarts oder unbekannten Netzwerkverbindungen.

  5. Verwenden Sie starke Passwörter und authentifizieren Sie alle Benutzer auf Ihrem System.

  6. Schalten Sie Secure Boot ein, wenn es verfügbar ist, um zu verhindern, dass nicht signierte Code ausgeführt wird.

Es ist wichtig, dass Unternehmen und Einzelpersonen sich bewusst sind, dass UEFI-Bootkits eine reale Bedrohung darstellen und dass Schutzmaßnahmen ergriffen werden sollten, um ihre Systeme zu schützen.

PumpControl mit ESP8266 01

In diesem Blog beschreibe ich dir, wie du deine Brunnenwasserpumpe mit dem Smartphone steuern kannst. Dabei kannst du die Wasserpumpe ein- und ausschalten, sowie die Leistung mittels einer Phasenanschnittsteuerung regulieren. Zusätzlich können Controller-Informationen sowie die Restzeit auf das Smartphone übertragen werden. Als Controller-Modul kommt der ESP8266 01 zum Einsatz, welcher über dein Home WLAN die Kommunikation zu deinem Smartphone herstellt. Gleichzeig steuert er deine Wasserpumpe. Mit der „PumpControl“ App (nur für Android), kannst du deine Wasserpumpe dann steuern. Deine bestehende WiFi Infrastruktur wird, ohne Änderungen machen zu müssen, voll unterstützt – auch mit mehreren Access Points. Wichtig ist, dass dein ESP8266 über WLAN eine Verbindung herstellen kann (2,4GHz IPv4, DHCP ist nicht relevant, da für den ESP-Controller static IP benutzt wird).

Voraussetzungen:

  • Da es sich im Leistungsbereich um Hardware am 230V Stromnetz handelt, musst du ein Fachmann sein im Bezug auf elektrische Spannungen bis 230 Volt. Sicherheitsregeln unbedingt beachten! Achtung Lebensgefahr!!!  Ziehe ggf.  einen Fachmann  hinzu, der dich beim Aufbau oder der Verdrahtung im Leitungsteil unterstützt.   
  • Du solltest mit der Arduino IDE Umgebung in der Lage sein eine Bibliothek sowie ein Programm (Sketch) laden bzw. öffnen zu können. Im Internet gibt es sehr viele Tutorials dazu. Fortgeschrittene können dies natürlich auch mit Visual Studio machen.
  • Du solltest Wissen, wie man das ESP8266 01 in den Programmiermodus versetzt, um deine Firmware übertragen zu können. Hier gibt es auch viele Dokumentationen und Videos im Internet.
  • Handwerkliches Geschick und Engagement zum Projekt haben.

Du musst keine einzige Zeile Programmcode schreiben, du machst nur Anpassungen in der Firmware für deine Hardware (Servoparameter) und deinem Netzwerk (SSDI, WLAN-Key sowie IP-Adr, Sub,DNS, Gateway und Port) – das ist alles.

 

Gesamter Schaltplan

(Gesamtschaltplan als PDF)

Schaltplan KiCAD (Date: 14.02.2021)

 

Servomotor mit mechanischer Kopplung an die Phasenanschnittsteuerung. 

Achtung! Hier muss unbedingt auf eine galvanische Trennung geachtet werden! Je nachdem wie du den Stecker deines Fertig-Moduls in die Steckdose steckst, können bei diesem Modul am Kühlkörper, Gehäuse und am Poti Netzspannung anliegen. Ich habe dieses Modul inklusive Servomotor aus isoliertem Material aufgebaut. Bei einem 180 Grad Servo könnte theoretisch auch eine axiale mechanische Kopplung angewendet werden, da die Motorleistung nicht auf 0 zurück geregelt werden soll. Das soll bedeuten, der gesamte Poti-Drehwinkelbereich von ca. 270 Grad wird nicht benötigt. Ausgehend vom Poti-Maximum Anschlag und dann 180 Grad zurück ist völlig ausreichend. Achte hier besonders darauf, dass deine Mechanik wenig Schlupf aufweist.

 

Das Steuermodul

Spannungsversorgung, elektronisches Relais, 4011-NAND, ESP8266 01, Reset-Taster sowie die Pullup Widerstände und Kondensatoren. Das elektronische Relais steuert einzig das Schaltschütz (kleine Leistung erforderlich) und benötigt zur Ansteuerung eine Spannung zwischen 3 bis 30 Volt.   

Das Gesamtmodul

Ein Schaltschütz deshalb, weil bei Nichtgebrauch die Stromzufuhr zur Pumpe zweipolig  unterbrochen werden soll (Pumpe im Außenbereich – Brunnen). Ggf. kannst du auch ein Relais oder eine eigene Schaltstufe verwenden.

Die Firmware für das ESP8266 01


(PumpControl V1.11.zip ESP8266 01 – Date: 23.07.2022)


[MD5 Hash: 794c5c01af45ab089efef8814eae5ffa]
Changelog: Automatische WiFi-Neuverbindung (reconnect) bei WLAN-Verlust. Zusätzliche Übertragung der Soll-Daten beim Erststart und bei Leistungsänderung. Erweiterungen an den beiden AppInfo(1 & 2) Daten eingefügt. Neu hinzu gekommen ist ein PowerOn-Counter, der die Einschaltvorgänge mitzählt. Das Problem mit der Steuerungsvariable RemoteOnlyOne wurde behoben und funktioniert jetzt, wie in der Anleitung beschrieben. Neu und zusätzlich kann jetzt über die „ShowError“ Konstante gesteuert werden, ob evtl. Parameterfehler/Hinweise am Client angezeigt werden oder nicht. Allgemeine Codeoptimierungen und Textanpassungen durchgeführt.


(PumpControl V1.10.zip für ESP8266 01 – Date: 14.01.2022)

[MD5 Hash: 7b3ba51e919b1b2530b146dca94e8e11]
Changelog: Servomotor konnte keine 180 Grad Drehung ausführen. Das Problem wurde behoben.


Öffne deine IDE-Umgebung und lade dir über den Board Manager die Arduino Core for ESP8266 WiFi chip herunter, damit deine IDE auch dieses Board ansprechen kann.

Öffne dann den Sketch PumpControl und mache die Anpassungen wie im Code-Kommentar beschrieben. Die Änderungen der Netzwerk IPs sind nur im Setup-Block zu finden.

* ssid - Your WiFi SSID name
* password - Your WiFi password
* localUdpPort - UDP communication port number
* IPAddress ip - ###.###.###.###
* IPAddress gateway - ###.###.###.###
* IPAddress subnet - ###.###.###.###
* IPAddress dns - ###.###.###.###
* servoStart - Potentiometer left stop
* servoEnd - Potentiometer right stop
* servoOffset - minimum flow rate at which the engine is still running well | The value can also be set via smartphone app.
* Token - Your personal key to operate the controller; only with this correct key will received data processed; Note: Token must not contain a semicolon character (;)
* RemoteOnlyOne - true = only one IP adr can send commands to controller / false = any IP adr may send commands ...
* ShowError - true = Show Info & Errors on Client / false = no Infos and Errors (from version V1.11 available)

* !!!Caution!!! Do not change any other variables, methods or functions in the code - the function is then no longer guaranteed.
Befinden sich im Setup()
IPAddress ip(192, 168, xxx, xxx);
IPAddress gateway(192, 168, xxx, xxx);
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(192, 168, xxx, xxx);

Überprüfe deine Änderungen, kompiliere den Sketch und übertrage die Firmware

Setze dein ESP8266 01 in den Programmier Modus und übertrage (flashen) die geänderte Firmware. Nach erfolgreicher Übertragung schaltest du den Programmier Modus aus und führst einen Restart durch. Wenn du, wie im Schaltplan beschrieben, einen Summer installiert hast, sollten nach einigen kurzen Tönen drei lange Töne folgen. Dies ist die Bestätigung, dass eine WLAN-Verbindung aufgebaut werden konnte.

 

PumpControl – Android Smartphone App

Lade dir die kostenlose, werbefreie App PumpControl als APK-Datei herunter und installiere sie. Sie ist seit dem 15.10.2024 im Google Play Store nicht mehr verfügbar (Account wegen Inaktivität geschlossen).

Download PumpControl Android App (APK-File V1.09) 

 

 

Als nächsten Schritt öffnest du die Konfigurationsseite ( Open Config) und tätigst deine Einstellungen. 

IP Adr.: die IP deines ESP Controllers
UDP Port: die Portnummer, welche du im Code definiert hast
Power min: kleinste Einstellung in der App Skala-Beschriftung [1..99] – % Leistung
Power max: größter Wert in der App Skala-Beschriftung [2..100] – % Leistung
Empfehlung

Time min:
kürzeste Zeit in Minuten [>0 und <60]
Time max: längste Zeit in Minuten [>Time min und <=60]
Servo Offset: dieser Wert bestimmt die Maximum-Leistung der Pumpe (rechter Endanschlag Potentiometer der Phasenanschnittsteuerung). Der Wert hängt davon ab, wie deine mechanische Kopplung vom Servomotor zum Potentiometer aufgebaut wurde. [-180 .. 180]. (Gleich-/ oder Gegenläufig (Richtung) und mit welcher Über-/Untersetzung). Die mechanische Kopplung sollte so verbunden werden, dass der Nullpunkt/0-Anschlag des Potentiometers mit der Nullposition des Servomotors übereinstimmt.
Drive Speed: Wie schnell sollen Leistungsänderungen umgestellt werden. [1…300] – (kleiner Wert: Änderung schnell; großer Wert: Änderung langsam)
Token: dein persönlicher Key, der immer überprüft wird – ansonsten keine Steuerung möglich.

Nach der Parametrierung schließt du mit „Save and Close“  den Screen. Der Rest auf dem Mainscreen sollte selbsterklärend sein. Ist dein ESP-Controller online, kannst du nun mit der App deine Pumpe steuern.

  • Blauer Bereich: Gesamter Drehbereich für Potentiometer (linker bis rechter Anschlag)
  • Roter Bereich: Arbeits-Drehbereich für Pumpenmotor (Minimale bis Maximale Fördermenge)

Ein nützliches Tool bei der Entwicklung und den Tests ist der Packet Sender. Mit dem Tool kannst du alle Funktionen testen. 

Technische Erklärung

Nach dem Start des ESP8266 01 werden die Ausgänge auf OFF (low aktiv) gesetzt und danach die von dir konfigurierte WLAN Verbindung aufgebaut. Klappt dies, bestätigt der Controller dies mit drei langen Tönen. Und dann beginnt schon die Loop-Schleife – also das Warten auf ein korrektes Kommando per UDP Empfang. Zyklus drei mal je Sekunde.

Der Empfang Stream des ESP8266 01 muss wie nachfolgend aufgebaut sein und am korrekten Port  eintreffen. Dies wird von der App PumpControl realisiert bzw. sichergestellt – praktisch nur zur Information.

Beispiel: ON;33;10;30;100;1;20;-70;180;123abc;

Value1: erlaubte Kommandos (ON, OFF, APPINFO01, APPINFO02, RESTART)
[RESTART wurde in der App nicht implementiert – Diente nur für Tests]
Value2: Soll Leistung der Pumpe
Value3: Soll Einschaltdauer der Pumpe in Minuten
Value4: Bereich Power min
Value5: Bereich Power max
Value6: Bereich Einschaltdauer min
Value7: Bereich Einschaltdauer max
Value8: Servo Offset
Value9: Servo Geschwindigkeit
Value10: dein persönlicher Key [WICHTIG!!! Dein Schlüssel darf kein Semikolon-Zeichen enthalten]

Kommt der erste korrekte Befehl am ESP an, merkt sich der Controller die Remote IP und sendet dem Device eine entsprechende Antwort bzw. agiert mit der Hardware (Servo, Schaltschütz, Summer). In Abhängigkeit der Variable RemoteOnlyOne kommuniziert das ESP dann nur mit diesem Gerät oder mit mehreren Geräten, die ein gültiges Kommando zum ESP senden. Somit kann konfiguriert werden, dass der Controller bis zum nächsten Restart oder Reset immer nur von einem Device gesteuert werden kann. Im anderen Fall, wird mit dem Gerät kommuniziert, welches den letzten korrekten Befehl gesendet hat.

const boolean RemoteOnlyOne = true; //true = only one Client / false = any clients

Fehlerhafte Datenpakete oder Pakete mit nicht autorisierter Geräte IPs an dem Controller werden nicht quittiert – das Daten-Paket wird ohne Quittierung verworfen.

Pumpe ON – Kommando
Wird die Pumpe eingeschaltet, bewegt sich der Servo im Eilgang immer zuerst auf 100% Leistung und regelt dann erst auf die gewünschte Soll-Leistung herunter. Damit soll sichergestellt werden, dass der Motor sicher unter Last anläuft. Ist die Pumpe bereits eingeschaltet, werden nur Änderungen der Leistung und Einschaltdauer unter Berücksichtigung  der Servo-Geschwindigkeit ausgeführt.

Alternative
Du kannst natürlich jedes Modul aus der ESP8266- oder ESP32 – Familie verwenden. Ändere entsprechend die Beschaltung und ggf. dein Board in der IDE.

Datenschutz
Die zum Download bereitgestellte Firmware und die App „PumpControl“ kommunizieren einzig im lokalen Netzwerk und übertragen keinerlei Daten in ein externes Drittsystem (Cloud, Web-DB, Webservice, IoT, API, usw…). Sollte es eine neue Version geben (Controller Firmware oder Android App), wird diese nur hier auf der Webseite  zur Verfügung gestellt.

Stand: 25.02.2025


PumpControl Nachbau am 25.01.2022

Hier drei Bilder von Gerhard H. aus Österreich, der die Pumpensteuerung erfolgreich nachgebaut hat. Er hat dies mit besonderer Sorgfalt und Präzision umgesetzt. Siehe nachfolgende Bilder.

Bild 01 – Spannungsversorgung und Controllermodul von hinten

Bild 02 – Servomotor mit Phasenanschnitt-Steuerung und  Controllermodul

Bild 03 – gesamte Steuerung


FAQ 
Die Frage war:
Warum die mechanische Kopplung mit dem Servomotor zum Poti der Phasenanschnittsteuerung? Mit Optokoppler oder Zündtransformatoren  und Netzsynchronisation kann von einem Controller der Phasenwinkel auch bestimmt werden. Der Servomotor könnte dann entfallen.

  • Ja – das ist alles bekannt und auch realisierbar, aber mit sehr viel Aufwand an die Controller Hardware.
    Ein Controller müsste im 10ms Zyklus (bei 50 Hz) per Interrupt den jeweiligen Phasenwinkel je nach Sollleistung an den Optokoppler zum Triac ausgeben – und das zyklisch. Mit einem ESP8266 ist dies nicht realisierbar. Zudem soll das ESP8266 auch noch interne Timerfunktionen, UDP und App-Kommunikation übernehmen. Damit wäre das Teil komplett überlastet. Soweit bekannt hat das ESP8266-01 keinen externen Interrupt Eingang – also völlig ungeeignet.

Die Frage war:
Welche IP Adresse muss ich für mein Netzwerk zu Hause im Code und in der App eintragen?

  • Gute Frage – Antwort darauf, ich weiß es nicht.
    Das hängt von deinem Netzwerk/Router zu Hause ab. In der Regel werden private IP Adr.  beginnend mit 192.168.x.x verwendet – diese sind im Internet nicht vergeben (ausgespart). Bereich: 192.168.0.0 bis 192.168.255.255, 172.16.0.0 bis 172.31.255.255 oder 10.0.0.0 bis 10.255.255.255.
    Link: https://de.wikipedia.org/wiki/Private_IP-Adresse
    Welches lokale IP-Band und den definierten DHCP Bereich dein Netzwerk verwendet, musst du in deinem Router einsehen. 

    Beispiel:
    Dein Router ist eine FritzBox mit der IP 192.168.178.1. Dein DHCP-Bereich ist konfiguriert von 192.168.178.50 bis 192.168.178.100. Dann hast du zum einen die Möglichkeit eine feste IP innerhalb des DHCP Bereiches für das ESP8266 zu reservieren. Anderenfalls kannst du dem ESP8266 die IP 192.168.178.2 bis 192.168.178.49 oder 192.168.178.101 bis 192.168.178.253 geben. 

Netzwerk Architektur soll aber nicht das Thema dieses Projektes sein.

Stand: 27. Apr. 2021

Der Gmaadiener

Eine Aufzeichnung anlässlich des 1000-jährigen Bestehens Kersbachs vom 7. Mai 2017. Die Dokumentation zeigt den historischen Rundgang durch das Jubiläumsdorf Kersbach. Bei 26 Anwesen wurden den Gästen bzw. Besuchern Erinnerungen aus längst vergangener Zeit mitgeteilt. Durch den Ortsrundgang führte der im ganzen Ort und darüber hinaus bekannte Willi Preusch, welcher mit all seinen noch in Erinnerung gebliebenen Geschichten, Vorfällen und sonstigen Ereignissen im Ort, die Aufmerksamkeit aller Teilnehmer an sich ziehen konnte.