FHEM Forum

FHEM - Hausautomations-Systeme => Unterstützende Dienste => Thema gestartet von: pandabear_de am 14 Januar 2017, 00:42:04

Titel: [gelöst] Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 14 Januar 2017, 00:42:04
Hi an alle Interessierte,
meine FHEM Installation kann ich über 'Telegram' ansprechen, um z.B. die aktuellen Verspätungen im ÖPNV oder auch Spritpreise abzufragen. Ich mache mir nun zum Thema Sicherheit Gedanken.

Als erstes habe ich den Bot für 'Telegram' im Notify-Script so eingeschränkt, dass er nur auf bestimmte User antwortet.
https://wiki.fhem.de/wiki/TelegramBot (https://wiki.fhem.de/wiki/TelegramBot)

Zusätzlich möchte ich bei einigen anderen Befehlen (z.B. Heizung an) die Sicherheit mit der Angabe eines One-Time-Passwords (OTP) verbessern. Als OTP Generator habe ich mir den https://de.wikipedia.org/wiki/Google_Authenticator (https://de.wikipedia.org/wiki/Google_Authenticator) ausgesucht, da ich ihn auch für andere Themen bereits nutze.

Beispiel Befehl in 'Telegram': Heizung-WZ an 123456   
Dieses Modul prüft nun, ob der Token 123456 gültig ist.


Danke der riesen Hilfe von betateilchen ist jetzt schon ein ganz ansehnliches Modul daraus geworden.


Notwendige Packages für den Raspi

sudo apt-get install libconvert-base32-perl libauthen-oath-perl libcrypt-urandom-perl


Die Moduldatei 98_GoogleAuth.pm ist seit dem 16.01.2017 teil des Standard-Updates von FHEM.

In FHEM

define GoogleAuth GoogleAuth

Damit ist das Device angelegt.

set GoogleAuth new
Erstellt einen neuen Code. Danach einfach mit der Google Authenticator App abfotografieren.

Get GoogleAuth check 123456
Prüft den angegebenen Code (hier 123456) gegen den aktuellen gültigen Code. Liefert 1 (gültig) bzw (-1) für nicht gültig zurück.


Im Notify Script für Telegram nutze ich folgende Zeilen um GoogleAuth einzubinden.

teleBot:msgText.* {
  my $msgpeer = ReadingsVal("teleBot", "msgPeer", "");;
  my @evtparts = split(" ",$EVENT);
     $evtparts[1] //= "";
     $evtparts[2] //= "";
  my $GivenToken = substr $EVENT, -6;
  my $GAuthResult = gAuth("GoogleAuth",$GivenToken);
  #Log3("ChatMessage.notify",4,"googleAuth ChatMessage.notify: result: $GAuthResult");

  if (($msgpeer eq 'Max_Mustermann') || ($msgpeer eq 'Erika_Musterfrau')) {
     if ($evtparts[1] eq 'Licht') {
       if ($GAuthResult eq '1') {
         if ($evtparts[2] eq 'an') {
           fhem("set KNX_0004 on");
           fhem("set teleBot send @" . $msgpeer . " Licht an");
         }
         elsif ($evtparts[2] eq 'aus') {
           fhem("set KNX_0004 off");
           fhem("set teleBot send @" . $msgpeer . " Licht aus");
         }
         else {
           fhem("set teleBot send @" . $msgpeer . " " . " Befehlt ungültig!");
         }
       }
       else {
         fhem("set teleBot send @" . $msgpeer . " Token ungültig!");
       }     
     }
     elsif ($evtparts[1] eq 'Test') {
       fhem("set teleBot send @" . $msgpeer . " Echo Test");
     }
     else {
       fhem("set teleBot send @" . $msgpeer . " Nicht verstanden!");
     }
  }
}


In Telegram jetzt z.B. folgendes eingeben:

Licht an 123456


Wenn 123456 zu dem Zeitpunkt ein gültiger Token ist, schaltet FHEM dann das Licht ein.

Zitat von: betateilchen am 15 Januar 2017, 15:30:21
So kann man den Zugang zur fhem-Oberfläche direkt mit GoogleAuth absichern:

define allowedWeb allowed
attr allowedWeb validFor web
attr allowedWeb basicAuth { "$user" eq "bt" && gAuth("g1","$password") == 1 }


Damit muss man sich dann an der FHEMWEB Instanz "web" mit dem Benutzer bt und  dem aktuellen Token aus "g1" als Passwort anmelden.

Alles aber in der Erprobungsphase!


Verbesserungsvorschläge?

Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 14 Januar 2017, 18:12:57
Zitat von: pandabear_de am 14 Januar 2017, 00:42:04
Die Moduldatei (aktuell 99_myUtilsGoogleAuthenticator.pm - siehe Dateianhang)

Eine ganz blöde Idee, ein Modul mit 99_ am Anfang zu benennen. Bitte benennne diese Datei so schnell wie möglich um, meinetwegen in 98_...

Die Idee für ein solches Modul ist allerdings gut.

Sowas macht man übrigens auch nicht:

  $hash->{STATE} = 'active';

Schon gar nicht, wenn man weiter oben im Code

  $hash->{AttrList} = "$readingFnAttributes";

einbaut. Das eine widerspricht dem anderen. Vielleicht solltest Du erst einmal die DevelopmentGuidelines lesen, bevor Du weiter an Deinem Modul schraubst.
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 14 Januar 2017, 18:26:44
Hi,
Danke für den Hinweis. Wie gesagt, ich frickle nur und würde mich über Unterstützung sehr freuen.

Zum Dateinamen
Im Original Thread habe ich die Datei jetzt umbenannt. Hintergrund war, dass ich sie so einfach über die GUI editieren konnte.

Zu der Bearbeitung von Variabeln
Danke für den Hinweis wg RTFM. Die Dokumentation ist so umfangreich, dass ich das nicht alles auf einmal erfassen und verstehen kann. Die von Dir aufgeführten Befehle, hatte ich übrings aus anderen herauskopiert.

Frage: Wie kann ich die aufgeführten Befehle besser schreiben?
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 14 Januar 2017, 18:31:06
Ich bin schon dabei, einmal komplett durch Deinen Modulentwurf zugehen.

Es gibt noch ein paar andere Dinge, die man grundsätzlich besser/einfacher lösen könnte.
FHEM kann z.B. von Haus aus Zufallswerte generieren, die man für die QR Generierung verwenden kann.
Das erspart einem das Editieren der /etc/sudoers

Gib mir mal ein bisschen Zeit, ich werde Dir einen überarbeiteten Modulentwurf schicken.
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 14 Januar 2017, 18:32:04
Cool Danke...
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul - alt
Beitrag von: betateilchen am 14 Januar 2017, 20:24:32
hm... irgendwie gelingt es mir nicht, ein korrektes Token zu bekommen, obwohl das secret korrekt gefunden wird.


2017.01.14 20:18:01 1: DEBUG>set secret_base32: gjrwczlfgm4gmyztha4tsntdgrrdenbtmvstqyjtmnrwgojyg4ywezryge4ggnjzmyztqnzvhe2wkodc
2017.01.14 20:18:27 1: DEBUG>get secret_base32: gjrwczlfgm4gmyztha4tsntdgrrdenbtmvstqyjtmnrwgojyg4ywezryge4ggnjzmyztqnzvhe2wkodc
2017.01.14 20:18:27 1: DEBUG>correct: 883095 given: 313104

Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul - alt
Beitrag von: pandabear_de am 14 Januar 2017, 20:44:22
Mit Deinem secretString schaffe ich es auch nicht.

Ich habe bei mir einen neuen über 'Set GAuth new' erstellt und es funktioniert.

Wichtig ist, dass die Uhr ziemlich genau läuft.

Funktioniert diese Kombi?
Hier für GoogleAuthenticator
https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth%3A%2F%2Ftotp%2FFHEM%3Fsecret%3D4c7t4rsstqsmxujempwfvpszlvvxp6evvtnoxshi4xrfqq2bqpks2bfcza32zogymizgeyavvozg54xo (https://www.google.com/chart?chs=200x200&chld=M%7C0&cht=qr&chl=otpauth%3A%2F%2Ftotp%2FFHEM%3Fsecret%3D4c7t4rsstqsmxujempwfvpszlvvxp6evvtnoxshi4xrfqq2bqpks2bfcza32zogymizgeyavvozg54xo)

Hier der SecretString für GAuth --> SecretString:
4c7t4rsstqsmxujempwfvpszlvvxp6evvtnoxshi4xrfqq2bqpks2bfcza32zogymizgeyavvozg54xo
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul - alt
Beitrag von: betateilchen am 14 Januar 2017, 21:04:12
Mit den secretBytes aus /dev/urandom funktioniert es jetzt hier auch.

Aber eigentlich will ich darauf nicht zugreifen. Mal schauen, wie ich das noch löse :)


2017.01.14 21:07:38 4: googleAuth: given: 123456
2017.01.14 21:07:38 4: googleAuth: possible 676436 959631 175283
2017.01.14 21:07:38 4: googleAuth: result: -1

2017.01.14 21:08:13 4: googleAuth: given: 175283
2017.01.14 21:08:13 4: googleAuth: possible 959631 175283 553749
2017.01.14 21:08:13 4: googleAuth: result: 1

Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul - alt
Beitrag von: betateilchen am 14 Januar 2017, 22:02:07
Im Anhang eine Version, die fast alle Deine ToDo-Punkte quasi als Abfallprodukte mit abfackelt.

(neuere Version weiter unten im Thread!)

erledigt:

Offen ist:

Achtung: Zusätzlich muss  das Paket Crypt::URandom installiert werden (apt-get install libcrypt-urandom-perl)
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul - alt
Beitrag von: betateilchen am 14 Januar 2017, 22:16:51
Wir sollten uns bitte nicht in zwei Threads verzetteln. Kannst Du das "alt" wieder aus dem Titel nehmen und den anderen Thread vielleicht schließen?
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul - alt
Beitrag von: pandabear_de am 14 Januar 2017, 22:29:53
Ja klar, macht ich sofort. Macht absolut Sinn.

Sieht genial aus und super aufgeräumt! Ist jetzt auch für einen Leien besser lesbar. DANKE!


Habe bei mir gerade noch einen Defekt gefunden... Ich komme beim Link auf eine 404 Seite. Erst wenn ich nach dem markierten Fragezeichen in der URL im Browser ein Leerzeichen rein mache und dieses direkt wieder lösche funktioniert es.

Wenn ich den Link von FHEM in ein Texteditor kopiere, sehe ich ein CR/Linefeed an der Stelle.

https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth%3A%2F%2Ftotp%2FFHEM%20Authentication%20GoogleAuth%3Fsecret%3D
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul - alt
Beitrag von: betateilchen am 14 Januar 2017, 22:37:09
Das mit dem Link schau ich mir an. Wenn ich mit der rechten Maustaste auf den Link klicke und "in neuem Tab öffnen" auswähle, hat es bisher immer funktioniert.
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul - alt
Beitrag von: pandabear_de am 14 Januar 2017, 22:41:01
mmm... Ich hatte direkt mit linker geöffnet.
Aber jetzt funzelt es mit beiden Tasten... Verstehe ich nicht, aber ist so... Mal beobachten.
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul - alt
Beitrag von: betateilchen am 14 Januar 2017, 22:42:11
Zitat von: pandabear_de am 14 Januar 2017, 22:29:53
Wenn ich den Link von FHEM in ein Texteditor kopiere, sehe ich ein CR/Linefeed an der Stelle.

WELCHEN Link kopierst Du?
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul - alt
Beitrag von: betateilchen am 14 Januar 2017, 22:44:08
schau mal in den Anhang...

Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 14 Januar 2017, 23:24:42
2 Topics

1. Funktioniert das QR bei Dir? Wenn ich es in GoogleAuthenticator fotographiere bekomme ich ein InvalidBarcode. Auch den den Du eben hier gepostet hast

2. Ich habe das Gefühl, dass Du den QR in FHEM siehst... Was habe ich da falsch gemacht? Den Fehler bokomme ich immer wenn ich einen neuen Schlüssel generiert habe. Wenn ich einmal für einen Schlüssel den Link bereinigt habe (Leertaste rein und wieder raus an der Stelle) funktionieren die nächsten Aufrufe wieder.

(Siehe Anhang)
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 14 Januar 2017, 23:28:38
Die QR funktionieren bei mir alle. Allerdings funktioniert die Anzeige (als Grafik) in fhem noch nicht zuverlässig.

Aktuell arbeite ich an einem Umbau, denn laut Google API Beschreibung ist für die QR Generierung eigentlich eine andere URL zuständig. Mal schauen, ob es damit besser funktioniert.

Die Anzeige in fhem funktioniert nicht so ohne weiteres, da ist noch ein bisschen Aufwand nötig.
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 14 Januar 2017, 23:34:09
Mit einem Neustart des Mobiltelefons hat es jetzt funktioniert.... Sorry...
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 15 Januar 2017, 00:04:38
Im Anhang eine Version mit QR Code Anzeige direkt nach dem "set ... new"

In der Version kann man auch mit dem Attribut "ga_qrsize" die Ausgabegröße des QR-Codes in Pixel angeben.


attr gAuth ga_qrsize 400x400


Fehlt das Attribut, wird 200x200 verwendet.
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 15 Januar 2017, 00:14:27
WOW!!!!

Danke!
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 15 Januar 2017, 00:17:25
Ich habe das Modul eben in fhem unter ./contrib eingecheckt, solange wir daran basteln.
Die jeweils aktuelle Version kann aus SVN gezogen werden.

Die hier im Thread von mir geposteten Dateien werde ich entfernen, um kein Versions-Wirrwarr zu verursachen.
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 15 Januar 2017, 00:17:57
Nach dem jetzt alles so perfekt ist...

Darf ich aus meinen Telegram Notify Script wie folgt die Prüfung durchführen?

Telegram:
Auth 123456
oder später
Heizung WZ an 123456


elsif ($EVTPART1 eq 'Auth') {

      my $GivenToken = substr $EVENT, -6;
        my $GAuthResult = GoogleAuth_Get("", "GoogleAuth", "check", $GivenToken);
        if ($GAuthResult eq '1') {
          log 3, "ChatMessageNotify: GoogleAuth Token gültig.";
          # Aktionen zum ausführen
          fhem("set teleBot send @" . $msgpeer . " " . " Token gültig!");
        }
        else {
          log 3, "ChatMessageNotify: GoogleAuth Token ungültig!";
          fhem("set teleBot send @" . $msgpeer . " Token ungültig!");
        }

       
    }
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 15 Januar 2017, 00:19:23
OK, werde einen Link zum SVN setzen...
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 15 Januar 2017, 00:21:40
bitte nicht so:


my $GAuthResult = GoogleAuth_Get("", "GoogleAuth", "check", $GivenToken);


sondern so:


my $GAuthResult = fhem("get GoogleAuth check $GivenToken");

Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 15 Januar 2017, 00:23:46
Zitat von: pandabear_de am 15 Januar 2017, 00:19:23
OK, werde einen Link zum SVN setzen...

Zum Anschauen: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/98_GoogleAuth.pm

Zum Runterladen: ganz unten auf der Seite bei "In anderen Formaten herunterladen" -> "Ursprüngliches Format" auswählen.
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 15 Januar 2017, 01:04:23
Der QR Code wird jetzt direkt auf der Detailseite des definierten device angezeigt.
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 15 Januar 2017, 01:22:32
Genial gelöst! Danke, Danke, Danke!

Gleich poste ich eine aktualisierte Version des ersten Postings, mit allen Anpassungen, damit die erste Berührung für Neugierige möglichst gut verläuft.
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 15 Januar 2017, 01:31:10
Ich wollte gerade mit Wiki schon Mal anfangen, leider kann ich dort aber kein Benutzerkonto anlegen (Berechtigungen).
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 15 Januar 2017, 01:53:14
Ich bin (bekanntermaßen) kein Freund des Wiki. Vor allem nicht, solange ein Modul noch in der Entwicklung ist und sich ggf. noch das Eine oder Andere ändert.  8)
Die Entwicklungsgeschichte habe ich inzwischen mit ins Modul gepackt und eingecheckt. Und es gibt neue Attribute und readings :)

Aber das Modul braucht erstmal noch eine commandref-Doku, zumindest in Englisch.
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 15 Januar 2017, 01:57:26
Wie kann ich helfen?
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 15 Januar 2017, 02:26:40
Erweiterungsvorschlag:
Für das manuelle Übertragen des Schlüssels sollten wir bei GET noch die Funktion GET SecretKey hinzufügen.
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 15 Januar 2017, 04:27:57
Anbei mein Vorschlag für die Commandref.html

(überholt - Anhang gelöscht)
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 15 Januar 2017, 10:34:22
Eine Frage an die Versierteren...

Im Notify Script von Telegram bekomme ich immer Fehler, wenn ich nur Ein-Wort-Befehle ohne Token nutze. Dann gibt es nämlich kein $EVTPART2.

Workaround ist es Ein-Wort-Befehle (bei mir z.B. 'Bahn' für aktuelle Verspätungen oder Test hier im Beispiel) immer um einen Zusatz zu ergänzen z.B. 'Test egal')


Wie geht es Besser?

Jetzt konkret Teile aus meinem Notify Script:


...
  my $GivenToken = substr $EVENT, -6;
  my $GAuthResult = fhem("get GoogleAuth check $GivenToken");
...
   if ($EVTPART1 eq 'Licht') {
      if ($GAuthResult eq '1') {
        if ($EVTPART[b]2[/b] eq 'an') {
          #fhem("set KNX_0004 on");
          fhem("set teleBot send @" . $msgpeer . " Licht an");
        }
        elsif ($EVTPART[b]2[/b] eq 'aus') {
          #fhem("set KNX_0004 off");
          fhem("set teleBot send @" . $msgpeer . " Licht aus");
        }
        else {
          fhem("set teleBot send @" . $msgpeer . " " . " Befehlt ungültig!");
        }
      }
      else {
        fhem("set teleBot send @" . $msgpeer . " Token ungültig!");
      }     
    }
    elsif ($EVTPART1 eq 'Test') {
      fhem("set teleBot send @" . $msgpeer . " Echo Test");
    }
...


Usage Telegram
Licht an 123456
Ergebnis Licht an wie erwartet

Aber bei Telegram
Test
kommt keine Antwort

aber mit Ergänzung
Test 123456
kommt 'Echo Test' als Antwort, wie erwartet

Fehlerhinweis bei 'Test' im Log

ERROR evaluating my $EVENT='msgText: Test';my $TYPE='TelegramBot';my $EVTPART0='msgText:';my $EVTPART1='Test';my $SELF='ChatMessage.notify';my $NAME='teleBot';{

ChatMessage.notify return value: Global symbol "$EVTPART2" requires explicit package name at (eval 4117) line 11.
Global symbol "$EVTPART2" requires explicit package name at (eval 4117) line 15.

Die zitierten Stellen mit $EVTPART2 sind die aus 'Licht an'.

Danke für Eure Unterstützung.

Gruß
Jakob
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: CoolTux am 15 Januar 2017, 11:44:22
Du könntest Deine EVTPARTs selber erstellen. Sprich EVENT selber zerlegen.
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 15 Januar 2017, 11:45:18
Das Arbeiten mit den specials $EVTPARTx ist generell bäh...

Aber in Deinem gesamten Konstrukt würde ich Dir ohnehin empfehlen, das Token nicht ans Ende einer Nachricht zu setzen, sondern an den Anfang.
Das erleichtert die Verarbeitung erheblich, weil Du dann immer genau weißt, an welcher Stelle das Token zu finden ist.
Bei Deiner Lösung kann das Token nämlich auch in $EVTPART2 stehen, deshalb kann man da nicht einfach eine Prüfung einbauen.

In folgendem Lösungsvorschlag passiert folgendes:


Probier mal, ob Du damit weiterkommst.



...
  my @evtparts = split(" ",$EVENT);
     $evtparts[1] //= "";
     $evtparts[2] //= "";
  my $GAuthResult = fhem("get GoogleAuth check $evtparts[0]");
...
  if ($evtparts[1] eq 'Licht') {
    if ($GAuthResult eq '1') {
      if ($evtparts[2] eq 'an') {
        #fhem("set KNX_0004 on");
        fhem("set teleBot send @" . $msgpeer . " Licht an");
      }
      elsif ($evtparts[2] eq 'aus') {
        #fhem("set KNX_0004 off");
        fhem("set teleBot send @" . $msgpeer . " Licht aus");
      } else {
        fhem("set teleBot send @" . $msgpeer . " " . " Befehlt ungültig!");
      }
    } else {
      fhem("set teleBot send @" . $msgpeer . " Token ungültig!");
    }     
  }
    elsif ($evtparts[1] eq 'Test') {
    fhem("set teleBot send @" . $msgpeer . " Echo Test");
  }
...

Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: CoolTux am 15 Januar 2017, 12:30:27
Sag Mal mein lieber Udo, hast oder hattest Du Urlaub? Du wirst so entspannt und gelassen  ;D


Grüße
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 15 Januar 2017, 12:34:14
Danke betateilchen für den Vorschlag.

Das mit dem Token immer an der ersten Stelle passt nicht ganz zum Plan.

Befehle die in die Steuerung des Hauses eingreifen sollen mit Token und andere z.B. Spritpreise oder Bahnverspätungen auch ohne Token möglich sein.
Daher die letzte Stelle, damit ich einfach immer die letzten 6 Zeichen prüfen kann.
my $GivenToken = substr $EVENT, -6;

Damit wäre dies doch die Anpassung. Sieht bei mir im Log gut aus.

...
my @evtparts = split(" ",$EVENT);
     $evtparts[1] //= "";
     $evtparts[2] //= "";
my $GivenToken = substr $EVENT, -6;
my $GAuthResult = fhem("get GoogleAuth check $GivenToken");
...
if ($evtparts[1] eq 'Licht') {
      if ($GAuthResult eq '1') {
        if ($evtparts[2] eq 'an') {
          #fhem("set KNX_0004 on");
          fhem("set teleBot send @" . $msgpeer . " Licht an");
        }
        elsif ($evtparts[2] eq 'aus') {
          #fhem("set KNX_0004 off");
          fhem("set teleBot send @" . $msgpeer . " Licht aus");
        }
        else {
          fhem("set teleBot send @" . $msgpeer . " " . " Befehlt ungültig!");
        }
      }
      else {
        fhem("set teleBot send @" . $msgpeer . " Token ungültig!");
      }     
    }
    elsif ($evtparts[1] eq 'Test') {
      fhem("set teleBot send @" . $msgpeer . " Echo Test");
    }
}
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 15 Januar 2017, 12:36:12
Zitat von: pandabear_de am 15 Januar 2017, 02:26:40
Für das manuelle Übertragen des Schlüssels ...

Meinst Du wirklich, dass irgendjemand dieses Ding manuell eintragen möchte?
Ich zeige jetzt den Link und den Key direkt im device an (siehe screenshot)

Bei den readings entfällt ab sofort die qr_url, weil man die dort nicht mehr braucht, wenn man den Link auf der Geräteseite hat.

Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 15 Januar 2017, 12:40:21
Zitat von: CoolTux am 15 Januar 2017, 12:30:27
Sag Mal mein lieber Udo, hast oder hattest Du Urlaub?

Dieses Jahr noch nicht.

Zitat von: CoolTux am 15 Januar 2017, 12:30:27
Du wirst so entspannt und gelassen

Ich bin immer entspannt und gelassen.

Wer mich lange genug persönlich kennt, wird das auch bestätigen.
Bei vielen Menschen dauert diese Erkenntnis nur leider sehr sehr lange.
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 15 Januar 2017, 14:50:19
Das Modul besitzt jetzt auch eine commandref Doku in Englisch. Auf Deutsch habe ich verzichtet.

Die modulspezifische Hilfe kann beispielsweise mit "help GoogleAuth" aufgerufen werden.




Neuer set Befehl: "set <name> revoke"

Damit wird der vorhandene key für ungültig erklärt. Sinn ist, ein versehentliches Überschreiben eines bestehenden keys durch "set <name> new" zu vermeiden. Beim Versuch, ein "set ... new" bei einem bereits vorhandenen key auszuführen, erfolgt eine entsprechende Fehlermeldung.




Zitat von: betateilchen am 15 Januar 2017, 12:36:12
Meinst Du wirklich, dass irgendjemand dieses Ding manuell eintragen möchte?
Ich zeige jetzt den Link und den Key direkt im device an

Das sieht so kacke aus, dass die Anzeige des keys jetzt per Attribut ga_showKey ein-/ausschalten kann.
Gleiches gilt für die Anzeige des Links mit dem Attribut ga_showLink (Tipp: der QR Code selbst ist ja schon ein Link)




Ausserdem kann man jetzt noch viel einfacher eine token-Prüfung durchführen:


gAuth(<deviceName>,<token>)


Das erspart den Umweg über fhem(...)
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 15 Januar 2017, 15:01:52
Ich habe meinen Entwurf für die CommandRef entsprechend aktualisiert.
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 15 Januar 2017, 15:28:26
Danke, aber Du brauchst für die commandref nichts mehr überarbeiten .
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 15 Januar 2017, 15:30:21
So kann man den Zugang zur fhem-Oberfläche direkt mit GoogleAuth absichern:

define allowedWeb allowed
attr allowedWeb validFor web
attr allowedWeb basicAuth { "$user" eq "bt" && gAuth("g1","$password") == 1 }


Damit muss man sich dann an der FHEMWEB Instanz "web" mit dem Benutzer bt und  dem aktuellen Token aus "g1" als Passwort anmelden.
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 15 Januar 2017, 15:31:12
Bei mir habe ich wieder Probleme mit dem Scannen des QRs bekommen.

Ich nutze iPhone mit IOS 10.2

Ich vermute es liegt an den Leerzeichen im Standard-Namen des QRs. Ich kann nämlich den Fehler reporduzieren und wieder bereinigen in dem ich einen ga_labelName ohne Leerzeichen vorgebe.

Hier ein paar Screenshots zum Thema:
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 15 Januar 2017, 15:47:40
Ich kann den Fehler nicht reproduzieren. *grübel*

Zumindest nicht mit GoogleAuthenticator unter Android.
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 15 Januar 2017, 15:59:58
Hi Udo
Ich hätte noch eine kleine Verbesserung.

Mit ist aufgefallen, dass andere Anbieter noch im Google Authenticator überhalb vom Token noch einen Eintrag haben. Es ist ein sogennanter Issuer Eintrag.

otpauth://totp/MeinName?secret=4c7t4rsstqsmxujempwfvpszlvvxp6evvtnoxshi4xrfqq2bqpks2bfcza32zogymizgeyavvozg54xo[b]&issuer=FHEM[/b]

Proof of concept bei http://qrcode.tec-it.com/de gemacht.

Bei Gelegenheit...

Gruß
Jakob
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 15 Januar 2017, 16:07:33
Der Issuer hat aber keinen praktischen Nutzen.

Auf iOS kann ich den Fehler mit den Leerzeichen übrigens nachvollziehen. Scheint ein Problem der jeweiligen App zu sein.

Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 15 Januar 2017, 16:11:01
Hi,
der workaround für IOS ist entweder einen eigenen Namen ohne Leerzeichen zu vergeben oder den Schlüssel-String die Google Authenticator einzutragen. (ggf per Email oder so auf das Gerät übertragen)

Du könntest den Standard-Namen auch einfach auf FHEM ändern.

Sollten wir m.E. in der CommandRef kurz erwähnen.

Gruß
Jakob
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 15 Januar 2017, 16:22:21
Zitat von: pandabear_de am 15 Januar 2017, 16:11:01
Sollten wir m.E. in der CommandRef kurz erwähnen.

Nein, man sollte das eigentliche Problem beheben 8) Seit zwei Minuten erledigt und schon eingeckeckt.

Das Modul wird ab morgen auf dem offiziellen fhem Update-Weg verteilt, die aktuelle Version steht schon in SVN bereit.

Ankündigung (https://forum.fhem.de/index.php/topic,64924.0.html)
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 15 Januar 2017, 16:27:49
Cool!
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 15 Januar 2017, 16:56:04
Zitat von: pandabear_de am 15 Januar 2017, 15:59:58
Mit ist aufgefallen, dass andere Anbieter noch im Google Authenticator überhalb vom Token noch einen Eintrag haben

Das ist aber nur bei iOS so.
Bei Android wird der Issuer einfach vor das Label geschrieben und das Label dann in Klammern gesetzt.

Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 15 Januar 2017, 17:13:48
Du bist ja perfekt ausgestattet, und kannst auf allen Geräten testen...
Titel: Antw:[gelöst] Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 16 Januar 2017, 20:26:27
Das Modul hat gerade zwei neue Attribute bekommen.

Titel: Antw:[gelöst] Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 16 Januar 2017, 22:12:12
schon eingechecked?
Titel: Antw:[gelöst] Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 16 Januar 2017, 22:39:07
jo

Titel: Antw:[gelöst] Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: JoeALLb am 17 Januar 2017, 15:08:09
Klappt sehr gut, vielen Dank für die Integration!

Nutze es im Moment für basicAuth, wie oben beschrieben:

Frage:
# Kann man irgendwo anzeigen, wie lange das Login noch gültig ist?
# Kann man nach erfolgter Autentifizierung diese IP für längere Zeit für mehrere Devices freischalten?
# Kann ich in FHEm anzeigen, als welcher Benutzer ich gerade über basicAuth eingeloggt bin? ("bt" im oberen Beispiel).

Hintergrund:
Grundsätzlich gehe ich davon aus, dass Zugriffe bei mir für 24h erlaubt sind, wenn ich mich einmal mit einem Token angemeldet habe.
Nun könnte ich über telegramm das basicAuth einfach für 24h deaktivieren, wenn der Token korrekt geprüft wurde... eine
andere Lösung wäre natürlich einfacher. Schön wäre es eben auch, wenn ich irgendwo in der Kopfzeile oder links im Menü anzeigen könnte, welcher Benutzer gerade eingeloggt ist...

Edit1: Frage 1 korrekt formuliert.
Titel: Antw:[gelöst] Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 17 Januar 2017, 15:16:27
Das sind alles keine Fragen, die mit dem Authenticator-Modul zusammenhängen, sondern mit dem Frontend von fhem.
Titel: Antw:Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: JoeALLb am 17 Januar 2017, 15:41:02
Zitat von: betateilchen am 17 Januar 2017, 15:16:27
Das sind alles keine Fragen, die mit dem Authenticator-Modul zusammenhängen, sondern mit dem Frontend von fhem.

Hast ja recht, danke und sorry ;-) .. Irgendwie passte es halt doch zusammen.

Zitat von: pandabear_de am 15 Januar 2017, 12:34:14
Das mit dem Token immer an der ersten Stelle passt nicht ganz zum Plan.

Sollte es hilfreich sein, hier meine Lösung.
Ich prüfe, ob 6 Zahlen am Ende des Strings sind.
Davor muss ein Leerzeichen oder der Nachrichtenbegin sein.
Danach darf noch ein Leerzeichen kommen (da meine Tastatur am Schluss manchmal automatisch ein Leerzeichen anfügt).
Mit diesem Code bin ich am flexibelsten und habe die oben angesprochenen Probleme nicht....


$EVENT =~ m/(?:\s|^)(\d{6})\s?$/;
  my $GivenToken = $1;
Titel: Antw:[gelöst] Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: weini am 06 Februar 2017, 10:34:15
Ich habe eine Frage zum Notify Script aus dem ersten Post:

Verstehe ich das richtig, dass ich bei diesem Vorgehen die Befehls-Optionen (also cmdKeyword, cmdFavorites etc.) des TelegramBot Moduls deaktivieren muss und das Notify als "Alternative" dazu fungiert?
Titel: Antw:[gelöst] Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: pandabear_de am 06 Februar 2017, 14:03:31
Hi weint,
ich habe bei mir keine Einstellungen für cmdKeywotd etc vorgenommen. Der komplette Dialog läuft über das Script. Dies war aber keine bewußte Entscheidung, sondern nur der gewählte Lösungsansatz.

Gruß
Jakob

Titel: Antw:[gelöst] Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: weini am 09 Februar 2017, 19:44:16
Hallo zusammen!

Die Nutzung von Google Authenticator für Telegram finde ich eine geniale Sache, vielen Dank erst einmal für das Modul.

Die Intergration mit dem im ersten Beitrag verlinkten Notify hat mir dagegen nicht so gut gefallen, da einige Features des Telegram Moduls im Notify nachgebildet werden.

Ich habe für meine Zwecke ein alternatives Notify erstellt, das folgende Features hat:

Meine Konfigturation sieht nun ungefähr so aus:

TelegramBot

defmod telegramBot TelegramBot <code>
attr telegramBot cmdFavorites fav
attr telegramBot cmdKeyword do
attr telegramBot cmdRestrictedPeer <peerID1> <peerID2>
attr telegramBot cmdReturnEmptyResult 0
attr telegramBot favorites [Fahre los]=trigger  ntf_sayTTS "Fahre jetzt los";;[Komme gleich]=trigger  ntf_sayTTS "Komme gleich";;[Wird später]=trigger  ntf_sayTTS "Es wird leider etwas später";;[Öffne Haustüre]=set Flur_Tueroeffner press;;[Temperaturen]=trigger listTemperatures
...


allowed Device

defmod allowed_telegramBot allowed
attr allowed_telegramBot allowedCommands get,trigger,getstate
attr allowed_telegramBot validFor telegramBot

Die hier aufgeführten Befehle sind ohne zusätzliche Authentifizierung nutzbar.

Notify

defmod ntf_telegramBot notify telegramBot:msgText.* {\
  my $msgpeer = ReadingsVal("telegramBot", "msgPeerId", "");;\
  my @evtparts = split(" ",$EVENT);;\
  \
  # Reading-Namen entfernen\
  shift @evtparts;;\
  # das Token steht vor dem Befehl\
  my $GivenToken = shift @evtparts;;\
  my $FhemCmd = join " ", @evtparts;;\
  my $cmdKeyword = AttrVal("telegramBot", "cmdKeyword", undef);;\
  my $cmdFavorites = AttrVal("telegramBot", "cmdFavorites", undef);;\
  my @favarray;;\
  my $favno;;\
\
  # nur verarbeiten, wenn das Token nur aus Zahlen besteht -> sonst ist es verm. ein reguläres Kommando für das Bot-Modul\
  if ($GivenToken =~ /^\d+$/) {\
    Log3("ntf_telegramBot",4,"ntf_telegramBot: EVENT: $EVENT");;\
    Log3("ntf_telegramBot",3,"ntf_telegramBot: FhemCmd: $FhemCmd");;\
\
    # prüfe ob die Zeichenfolge von eben einen gültigen Token ergibt\
    my $GAuthResult = gAuth("googleAuth",$GivenToken);;\
    Log3("ntf_telegramBot",3,"ntf_telegramBot: googleAuth Token: $GivenToken result: $GAuthResult");;\
\
    # ggf. Favoriten auflösen\
if (substr($FhemCmd, 0, length($cmdFavorites)) eq $cmdFavorites) {\
   $favno = int(substr($FhemCmd, length($cmdFavorites)));;\
   @favarray = split(";;",AttrVal("telegramBot", "favorites", ""));;\
   $FhemCmd = $favarray[$favno-1];;\
       # wenn ein Alias definiert ist, dann den Befehlsteil aus dem Favoriten extrahieren\
       if (index($FhemCmd, "=") >= 0) {\
     $FhemCmd = substr($FhemCmd, index($FhemCmd, "=")+1);;\
   }\
       Log3("ntf_telegramBot",3,"ntf_telegramBot: FhemCmd after favorite substitution: $FhemCmd");;\
}\
\
    #Prüfung, dass der aktuelle peer in der Liste der cmdRestrictPeer ist. Achtung: es wird auf die PeerId geprüft, username funktioniert nicht\
    if ( index(AttrVal("telegramBot", "cmdRestrictedPeer", $msgpeer), $msgpeer) >= 0 and $GAuthResult eq '1') {\
      Log3("ntf_telegramBot",4,"ntf_telegramBot: execute cmd");;\
      fhem($FhemCmd);;\
    }\
  }\
}


In Telegram kommuniziere ich wie folgt:

Der Code fängt sicher nicht alle Sonderfälle ab, wenn z. B. keine Favoriten definiert sind. Im Prinzip sollte das Notify aber mit minimalen Anpassungen übertragbar sein.
Ich hoffe, dass das für andere hilfreich ist.

Das Größte wäre natürlich, wenn Johannes den Google Authenticator direkt im TelegramBot Modul einbinden würde  ;D ;D ;D

Beste Grüße,
weini
Titel: Antw:[gelöst] Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 09 Februar 2017, 19:50:54
Zitat von: weini am 09 Februar 2017, 19:44:16
Für den hier beschriebenen Aufbau ist es sinnvoller, das Google Authenticator Token dem Befehl voranzustellen. So erfolgt im Notify auch die Erkennung, ob authentifiziert werden soll.

Das hatte ich ja für mailcheck auch schon argumentiert, aber man wollte mir nicht glauben, dass ein Token am Anfang einer Nachricht eindeutiger ist und mehr Sinn macht. Bei mir ist nach dem Token zu Beginn noch ein Trennzeichen (=) um die Sache völlig eindeutig zu machen: "Wenn an 7. Stelle ein = steht, ist da ein Token"

Ansonsten finde ich Deinen perl Code im notify ziemlich gruslig, solche Mengen an perl Code gehören m.E. immer in eine Funktion in der 99_myUtils.pm.
Titel: Antw:[gelöst] Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: weini am 09 Februar 2017, 20:37:44
ZitatAnsonsten finde ich Deinen perl Code im notify ziemlich gruslig, solche Mengen an perl Code gehören m.E. immer in eine Funktion in der 99_myUtils.pm.

Das ist natürlich voll beabsichtigt, damit Johannes sich hoffentlich erbarmt, und das vernünftig macht.  ;D

Im Ernst, ich bin leider nicht der Perl Pro....
Titel: Antw:[gelöst] Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: Queeek am 30 Juni 2019, 15:43:36
Hi
das Modul funktioniert übrigens auch mit anderen Tools die TOTP unterstützen, grad z.B. mit FreeOTP von Red Hat getestet.
Kann das jemand der Schreibrechte hat mit in der commandref ergänzen?
Danke ;-)
Titel: Antw:[gelöst] Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: dstegmaier am 04 September 2019, 13:28:01
Hallo zusammen,

ich wollte Mal freundlich anfragen ob jemand das selbe Problem mit dem G-Authenticator und vielleicht eine Lösung hat.

Ich habe wie hier beschrieben den Google Authenticator anstelle des Passworts für meinen WEBPhone Zugang, also fürs Smartphone eingerichtet.

Leider ist der Login immer nur so lange gültig wie der aktuelle Code aus dem Authenticator.

Heißt, wenn ich mich mit einem G-Authenticator Code einlogge, dieser aber aber z.B. nur noch 10 Sekunden gültig ist. Und ich dann z.B. versuche einen anderen Raum aufzurufen, dann werde ich wieder nach dem Passwort gefragt und muss wieder den gerade aktuellen Code eingeben.

Gibt es irgendeine Möglichkeit den Code länger in FHEM gültig zu halten oder den G-Authenticator Code vielleicht stattdessen als 2-Faktor-Authentifizierung zu nutzen, also zusätzlich zu einem festen Passwort?


Danke und Grüße
Dominik
Titel: Antw:[gelöst] Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 27 September 2019, 20:23:09
Zitat von: dstegmaier am 04 September 2019, 13:28:01
ich wollte Mal freundlich anfragen ob jemand das selbe Problem mit dem G-Authenticator und vielleicht eine Lösung hat.

Das beschriebene Problem kann ich nicht nachstellen.

Es macht für solche Fragen übrigens mehr Sinn, einen neuen Thread mit einem aussagekräftigen Titel zu eröffnen, anstatt einen ziemlich alten Entwicklungsthread wieder auszugraben.
Titel: Aw: [gelöst] Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: gent am 28 August 2024, 01:05:03
Hier ist schon lange nichts mehr passiert, aber trotzdem habe ich ein aktuelles Problem:

Ich musste FHEM komplett aus einem Backup neu aufsetzen und auch auf einem anderen rPI. Dabei musste ich auch das GoogleAuth Modul neu definieren.

Das Problem ist, dass der QR-Code nicht mehr angezeigt wird, wenn ich ein set new mache.

Die URL für den QR-Code in dem Modul verweist auf https://chart.googleapis.com diese URL scheint bei Google nicht mehr zu existieren

Hat jemand eine Idee, was man da machen kann?

Viele Grüße
Holger
Titel: Aw: [gelöst] Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: gent am 28 August 2024, 01:19:11
Ich konnte hier selber eine Lösung finden. Es gibt eine Drop-In-Replacement Seite für https://chart.googleapis.com namens https://quickchart.io

Dazu musste ich einfach im Modul 98_GoogleAuth.pm

die Zeile

Zitatmy $qr_url        = "https://chart.googleapis.com/chart?cht=qr&chs=$qrsize"."&chl=";

durch diese hier ersetzen:

  my $qr_url        = "https://quickchart.io/chart?cht=qr&chs=$qrsize"."&chl=";

Vielleicht besteht die Möglichkeit, dass man (oder vielleicht sogar ich) das Modul dahingehend updaten kann?

Würde hier gerne helfen.

Liebe Grüße
Holger
Titel: Aw: [gelöst] Google Authenticator zur Verbesserung der Sicherheit als FHEM Modul
Beitrag von: betateilchen am 28 August 2024, 09:17:35
Danke für den Hinweis, ich kümmere mich darum.

Es macht aber grundsätzlich mehr Sinn, in solchen (Fehler-)Fällen einen neuen Thread mit einem aussagekräftigen Titel zu eröffnen, anstatt einen ziemlich alten Entwicklungsthread wieder auszugraben.