FHEM – csrfToken unkompliziert einrichten und nutzen

Loxone im Einsatz? Dann schau dir unseren LoxKurs an und profitiere von unserem Wissen!

Mit dem Update von FHEM auf Version 5.8 wurde auch der csrf-Token als neues Sicherheitsfeature eingef├╝hrt, um ein potenzielles Einfalltor f├╝r Angreifer zu schlie├čen. Gleichzeitig besteht jedoch auch die Notwendigkeit bestehende Konfigurationen anzupassen, sofern das FHEM-System weiterhin auf externe HTTP-Requests reagieren soll. Denn sonst geht erstmal gar nichts mehr, wie viele Anwender – wie ich – mal mehr oder weniger schmerzlich herausfinden mussten.

Welche Schritte notwendig sind, um eine neue bzw. bestehende Installation ausreichend per csrfToken abzusichern, wird in nachfolgendem Blogpost kurz erkl├Ąrt. Eine Kurzanleitung, die schon lange auf meiner ToDO-Liste steht und die hoffentlich vielen Lesern weiterhilft.

csrf-Token setzen

Grunds├Ątzlich gibt es zwei M├Âglichkeiten den csrf-Token zu nutzen.

Zum einen die dynamische Variante, bei der FHEM bei jedem Neustart einen neuen Token (im Endeffekt nur ein anderer Begriff f├╝r ein Passwort) vergibt, der dann von externen Applikationen jedes Mal abgeholt werden muss, bevor ein HTTP-Befehl mit korrektem Token/Passwort in Richtung FHEM abgesetzt werden kann. Ich denke diese Art ist vermutlich eher versierteren Anwendern zu empfehlen, je nach externer Anwendung ist dieses Vorgehen zudem gar nicht oder nur mit gr├Â├čerem Aufwand verbunden. Deshalb werde ich an dieser Stelle nicht weiter darauf eingehen, weiterf├╝hrende Infos dazu im FHEM-Wiki.

Zum anderen die statische Variante, der Token wird also einmal fix in FHEM festgelegt. Also erstmal ein sicheres Passwort, bestehend aus Zahlen und Ziffern ausdenken, in diesem Beispiel Me1nT3chBl0g4Th3W1n. Ich w├╝rde dringend empfehlen auf Umlaute und Sonderzeichen zu verzichten, da sowas bei HTTP-Aufrufen sonst schneller zu Problemen f├╝hrt als man csrfToken buchstabieren kann.

Mit dem FHEM-Kommandozeilenbefehl (oben in den Schlitz vom FHEM-Interface eingeben und mit Enter best├Ątigen)

attr WEB.* csrfToken Me1nT3chBl0g4Th3W1n

wird der neu vergebene csrf-Token in die FHEM-Config geschrieben. Jetzt noch links auf „Save Config“ klicken, dann ist der Token auch bei einem Neustart von FHEM dauerhaft gesetzt.

HTTP-Befehle um csrf-Token erg├Ąnzen

Bestehende und neue HTTP-Befehle in Richtung FHEM m├╝ssen dann nat├╝rlich noch um den eben gesetzten Token erg├Ąnzt werden.

Lautete der HTTP-Bequest zum Einschalten („on“) der „Lampe“ bisher beispielsweise

http://user:pass@192.168.3.154:8083/fhem?cmd=set%20Lampe%20on

ergibt sich nun der neue um den csrf-Token erg├Ąnzte Befehl

http://user:pass@192.168.3.154:8083/fhem?cmd=set%20Lampe%20on&fwcsrf=Me1nT3chBl0g4Th3W1n

Und das war es auch schon mit dem csrf-Voodoo.

Aus meinem t├Ąglichen Leben

Ich selbst setze jede Menge HTTP-Befehle in Richtung FHEM ab. Die meisten kommen mittlerweile vom Loxone Miniserver, welcher entsprechende Steuerbefehle an die in FHEM verwalteten Devices ohne nennenswerten Zeitverzug weitergibt. In diesem Kontext habe ich gerade erst meine neue Multimediasteuerung fertiggestellt, wobei in FHEM nun u.A. sowohl eine VU+ Solo 4k (Affiliate-Link), ein Denon AV Receiver-X1400H (Affiliate-Link) als auch eine Logitech Harmony Elite (Affiliate-Link) samt Harmony Hub über die entsprechenden FHEM-Module eingebunden sind.

Eine mittlerweile doch recht umfangreiches Multimediasteuerung mit vielen automatisierten Regeln, bei der mir wieder klar geworden ist, wie vielseitig und unersetzlich FHEM doch ├╝ber die Jahre f├╝r mich geworden ist, auch wenn ich das meiste „normale“ (non-gimmik) Smart-Home-Geraffel aus Bequemlichkeit mittlweile lieber in Loxone umsetze. Es gibt aber einfach zu viele tolle Spielerein, die man nur bzw. so viel besser mit FHEM realisieren kann. Bald kommt nun auch das Modul f├╝r meinen mittlerweile nicht mehr wegzudenkenden Neato Botvac Connected (Affiliate-Link) dazu, der sogar eine Reinigungs-Map erzeugt, verr├╝ckt!

Vielleicht l├Ąsst sich die Map ja sogar easy in FHEM abrufen und ich kann auf die Neato-App komplett verzichten. Ich werde berichten.

Aber jetzt ist erstmal FHEM ein St├╝ck sicherer. Check!┬áOb der csrfToken jetzt aus technischer Sicht wirklich notwendig ist oder nicht, dar├╝ber kann man lange diskutieren – muss man aber nicht. Mit FHEM ab Version 5.8 wird er nunmal standardm├Ą├čig gesetzt, was zumindest in ausgew├Ąhlten Anwendungsf├Ąllen auch wirklich Sinn macht. Er tut ja auch nicht weh, lediglich die HTTP-Befehle werden noch etwas unhandlicher.

Wer g├Ąnzlich auf das Plus an Sicherheit verzichten m├Âchte, kann den csrf-Token┬áaber auch einfach deaktivieren. Dazu wird der FHEM-Kommandozeilenbefehl

attr WEB.* csrfToken none

genutzt. Aber dann kann FHEM aber technisch bspw. schon allein ├╝ber manipulierte iFrames beim Surfen im Web ferngesteuert werden. Wie akut dieses Angriffsszenario wirklich ist, entzieht sich meiner Kenntnis. Dennoch empfehle ich den Einsatz des Token, denn umgekehrt er schadet ja auch nicht.

Smart Home Gear zu diesem Blogpost (Affiliate-Links)

Loxone im Einsatz? Dann schau dir unseren LoxKurs an und profitiere von unserem Wissen!

Verpasse keine Inhalte mehr! Trage dich in den Newsletter ein und folge uns auf Facebook.

Was ist ein Affiliate-Link? Wenn du auf einen Affiliate-Link klickst und ├╝ber diesen Link einkaufst, bekomme ich vom betreffenden Online-Shop oder Anbieter eine Provision, was mich u.A. bei den laufenden Kosten den Blogs unterst├╝tzt. F├╝r dich ver├Ąndert sich der Preis nicht.

J├Ârg

hat meintechblog.de ins Leben gerufen, um seine Technikbegeisterung und Erkenntnisse zu teilen. Er ver├Âffentlicht regelm├Ą├čig Howtos in den Bereichen Smart Home und Home Entertainment. Mehr Infos

7 Gedanken zu „FHEM – csrfToken unkompliziert einrichten und nutzen“

  1. Die Map von Neato l├Ąsst sich in der Tat abrufen, habe das in OpenHab implementiert. Schreib mir gern eine Mail, dann suche ich das mal raus bzw. ich versuche dran zu denken, wenn ich wieder am Rechner bin und poste es hier.

  2. Sehe ich das richtig: Das Passwort wird nun also immer im Klartext ├╝ber jeden http-Aufruf mitgegeben? Wo ist denn da jetzt ein Zugewinn an Sicherheit, wenn einmal jemand im Netzwerk die Aufrufe mitgelesen hat (z.B. mittels Wireshark), dann hat er das Passwort und kann doch genauso Befehle erteilen wie bisher ohne csrf-Token auch, oder?!

    Vermutlich stehe ich irgendwo auf dem Schlauch… Sorry!

    1. Jep, du siehst das schon richtig.

      Der csrf-Token deckt eben nur einen Teil potenzieller Sicherheitsrisiken ab, wenn bspw. beim Ansurfen einer manipulierten Website ein statischer URL-Befehl in Richtung FHEM abgesetzt wird, der das System sch├Ądigen soll. Viele FHEM-Anwender nutzen vermutlich keine User/Passwort-Kombination und da hilft der neue Token-Zwang zumindest diese Art Angriffe zu minimieren.

      So k├Ânnte ich es mir wenigstens ansatzweise erkl├Ąren, ohne jedoch die Hintergr├╝nde zu kennen. Vielleicht steht im FHEM-Forum irgendwo mehr dazu…

      Gr├╝├če
      J├Ârg

    2. Bei dem csrf-Token handelt es sich nicht um ein Passwort. Dies ersetzt auch keine Passwort-Absicherung. Vielmehr soll CSRF/XSRF Angriffen vorgebeugt werden. So k├Ânnte z.B. niemand mit einer pr├Ąparierten Webseite eine Aktion in deinem FHEM ausf├╝hren.

      Das Problem w├Ąre n├Ąmlich sonst: Dein Browser kennt Dein Passwort von fhem, Du hast Dich ja eingeloggt. Somit wird der BasicAuthentication-Header mit Benutzernamen und Passwort immer automatisch ├╝bermittelt.

      Baut nun jemand eine Webseite, welche dann einen iframe zu fhem enth├Ąlt (z.B. ein 1×1 Pixel gro├čer iFrame), k├Ânnte er dort eine URL hinterlegen. Sowas wie „set Haustuer open“. Also durchaus Sicherheitsrelevante Dinge tun. Dein Browser ├Âffnet nun diese Seite und f├╝hrt die Anfrage im Hintergrund an fhem durch. Zack, deine T├╝r ist offen (als Beispiel).

      Daf├╝r muss der Angreifer nat├╝rlich viel wissen. Also wie die IP zu deinem fhem im lokalen Netzwerk lautet, wie deine Ger├Ąte hei├čen (wobei man das auch ├╝ber devspec mit TYPE=… umgehen k├Ânnte) und was f├╝r einen Typ sie haben. Generell k├Ânnte man nat├╝rlich beliebig viele iFrames einbinden, um die Trefferrate zu erh├Âhen.

      Aber das ist alles sehr konstruiert. Wie auch immer – der csrfToken soll genau dieses Vorgehen verhindern. Stimmt der Token nicht, wird die Aktion nicht ausgef├╝hrt. Egal ob Du erfolgreich eingeloggt wurdest oder nicht.

      Ich hoffe es ist klarer geworden :)

  3. Hallo J├Ârg, ich sehe diesen Artikel auch nicht als umfassendes Allheilkonzept gegen Angriffe von au├čen. Im Bereich Sicherheit sind ja viele einzelne Punkte zu betrachten. Dieser geh├Ârt definitiv dazu, genauso wie die Einrichtung eines Reverse Proxy im Artikel Geocaching. Genauso kann man sich die Frage stellen, ob eine Kommunikation nach au├čen immer ├╝ber eine Portweiterleitung in der fritz.box laufen muss, oder Pushover und Amazon Echo nicht ein alternativer Weg w├Ąren. Nur welche Angriffspotentiale bestehen hierbei ? Gru├č Axel

  4. Hallo,

    ich habe FHEM mit SmartVisu am laufen.
    Hier finde ich allerdings nichts, wie ich die Tokens senden/erg├Ąnzen kann.
    Hat hier schon jemand Erfahrungen gesammelt?

    Danke und Gru├č
    Jens

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht ver├Âffentlicht. Erforderliche Felder sind mit * markiert