Was könnte man denn noch modifzieren (notfalls in der APK der App), damit sich die App extern ohne VPN mit einer FritzBox verbinden lässt?
Wenn sich die App für Android nicht komplett anders verhält, als die App für iOS, wird es nichts, solange Du die Sicherheit Deiner Box nicht gefährden willst.
Warum ?
Als erstes prüft die App die angegebene Adresse auf Port 80 und fragt die Version der Box unter
http://fritz.box/jason_boxinfo.xml ab.
Dann kommuniziert die App in großen Teilen erst einmal mit der FRITZ!Box über TR-064. Nun ist es aber so, daß im internen Netz diese Kommunikation mit TCP auf den UPnP-Ports (49000 offen, 49443 verschlüsselt) abläuft.
Jetzt werden über den unverschlüsselten Port erst einmal die ganzen Informationen, was die Box per TR-064 so alles kann (das sind Schnittstellendefinitionen, die die App offenbar nicht fest annimmt, sondern wirklich dynamisch von der Box abfragt), eingesammelt.
Dann erfolgt über den verschlüsselten Port (also 49443) die Anmeldung der App mit den eingegebenen Credentials und wirklich erst dann kommt langsam aber sicher der Port 5060 und SIP ins Spiel.
Die Abfrage der Anrufliste (nicht des Telefonbuchs, wie ich an anderer Stelle mal irrtümlich behauptet habe) erfolgt dann aber wieder im Klartext am "offenen" Port, netterweise mit Angabe einer gültigen SID in der URL.
Um die App also von außen funktionsfähig zu machen, reicht die Einstellung "reg_from_outside" definitiv nicht aus.
Die Idee, auch die Ports 49000 und 49443 der Box über das Internet zugänglich zu machen (im GUI hoffentlich (!) nicht möglich, über Kommandozeile definitiv schon, über ar7.cfg wahrscheinlich auch), ist keine gute. Erstens wird eben auf 49000 auch ohne Authentifizierung einiges an Informationen zur Box geliefert, das Vorhandensein von weiteren Authentifizierungslücken dort würde ich auch nicht per se ausschließen. Die Kommunikation auf 49443 könnte man zwar theoretisch auch auf diesem Port aus dem Internet führen (das Fehlen einer Lücke mal angenommen), aber das reicht der App eben nicht. Außerdem verbietet der Rückfall auf 49000 beim Abfragen der Anrufliste (was schon im LAN ein Problem darstellen kann) den Einsatz über das Internet auch, da kann man leicht eine gültige SID abgreifen.
Es gibt zwar von AVM eine eigene Interpretation des TR-064-Standards, die darin besteht, das ganze auch über "https://<externeadresse>/tr064cgi" zugänglich zu machen (das nutzt m.W. die MyFRITZ!App auch in der neuen Version immer noch, man kommt aber gar nicht mehr hinterher mit der "Kontrolle"), aber solange die Fon-App das nicht benutzt, wird die "native" von außen eben nicht funktionieren.
Es ist - zumindest mit der derzeitigen Version der App unter iOS - auch nicht zu empfehlen, diese überhaupt zu verwenden. Im eigenen LAN wegen des erwähnten Problems mit der preisgegebenen SID ... eine KiSi ist ja auch nur dann sicher, wenn da keiner drankommt und die Kids finden beim Suchen im Internet genug Anleitungen zum "Sniffen" (und das meint keinen Klebstoff o.ä.). Wen das nicht juckt, der kann sie sicherlich trotzdem verwenden, man muß eben nur die Risiken kennen und bewerten können und sollte eben nicht aus Bequemlichkeit einen Account beim Zugriff auf TR-064 für die App verwenden, der gleichzeitig über das GUI die Box komplett konfigurieren darf.
Aber "unterwegs" sollte sie in jedem Falle sicher "abgeschossen" werden ...
Da diese App im Hintergrund ja weiterlaufen kann (manchmal klappt das sogar), kann man sich nie sicher sein, daß sie nicht - wenn das Smartphone in einem anderen WLAN-Netz eingebucht ist - auch dort mit einer "fritz.box" kommuniziert und dabei dann eine Anmeldung an der "falschen" FRITZ!Box (eines Angreifers, aber gerne auch im LAN eines Verwandten/Bekannten/vermeintlichen Freundes) versucht. Wenn das dann vielleicht gar keine FRITZ!Box ist, sondern ein darauf eingestellter "Honeypot" für Smartphones und FRITZ!Apps, dann sieht es schnell schlecht aus.
Das "Salt" (die Challenge) wird wohl auch bei Anmeldung über 49443 von der Box vorgegeben, sonst macht das ja auch alles keinen Sinn - wenn da überhaupt der AVM-eigene Mechanismus mit dem etwas anderen Hashen der Login-Daten wie beim GUI verwendet wird, denn TR-064 kennt m.W. per se gar nichts anderes als eine HTTP-Digest-Authentifizierung (
hier auf Seite 6, Punkt 4.2, 1. Satz: "Access to any password-protected action MUST require HTTP digest authentication."), es ist eine SOAP-Schnittstelle - und dann kann die Box
vermutlich auch eine leere oder sehr kurze Challenge vorgeben (wenn die App das nicht doch extra kontrolliert), so daß dann der MD5-Hash der einzige "Schutz" ist, der verbleibt und wenigstens die Klartext-Übertragung des Kennworts verhindert. Ob die App nicht von einer "angeblichen" Box, die anstelle von Digest- auf einmal nur Basic-Authentizierung in einer SSL-Verbindung "verlangt", auch einfach aufs Kreuz gelegt werden kann, müßte man glatt mal noch testen. Die "eigene" Box über das Zertifikat zu identifizieren, wie es die neue MyFRITZ!App jetzt macht (das sollte man auch ernst nehmen, besonders wenn man solche "Adressen" wie "fritz.box" verwendet), ist in der aktuellen iOS-Version jedenfalls noch nicht eingebaut, die schluckt klaglos jedes Zertifikat.
Allerdings stünde man mit den erbeuteten Anmeldedaten dann immer noch vor dem Problem, sie der richtigen Person und damit der richtigen FRITZ!Box zuzuordnen, solange nicht auch noch weitere Daten vorliegen (z.B. eine DNS-Abfrage der MyFRITZ!App auf demselben Gerät nach dem MyFRITZ!-Namen der Box daheim) oder - bei vielen immer noch Usus - die Daten an mehreren Stellen identisch sind. Da die FB auch die Angabe einer E-Mail-Adresse zuläßt, würde ein Angreifer bei einem Benutzernamen "
[email protected]" sicherlich auch mal einen Versuch mit dem erbeuteten Kennwort wagen (lassen ! - der macht das ja nicht von seinem eigenen PC, für so etwas gibt es Onion-Routing oder Bot-Netze).
Da dann z.B. das iPhone (zumindest bis zur Version 5.1.1 bei mir) seinerseits klaglos mit einem beliebigen WLAN Kontakt aufnimmt, welches denselben Namen wie ein bereits bekanntes WLAN hat (wenn dieses dann auch noch offen ist, klappt das wohl selbst dann, wenn das "altbekannte" eigentlich verschlüsselt war - ansonsten legt man sich mit seinem offenen WLAN in der Nähe eines anderen offenen WLANs gleichen Namens auf die Lauer, das geht auch), braucht man bloss noch ein offenes WLAN an einer belebten Straße anzubieten mit einem DNS-Server, der auf die Frage nach "fritz.box" mit der Adresse des Honeypots antwortet. Dann kann man beginnen die Daten von vorbeilaufenden iPhones abzufangen und mal sehen, was man damit anfangen kann. Solange die Leute nicht vorbei sprinten, sondern auch mal z.B. an einer Ampel etwas warten müssen, dürfte da einiges zusammen kommen.
Dagegen hilft auch die Anonymisierung beim iOS 8 nicht, mit der Apple dem Vernehmen nach dem WLAN-Tracking, wie es z.B. in London und einigen Einkaufszentren praktiziert wird, entgegen wirken will.
Selbst wenn Apple das Problem bei neuerer Firmware beseitigt haben sollte (das weiß ich gar nicht, da ich bei meinen Tests immer mit einem "alten" iPhone 4 mit 5.1.1 arbeite und das bei der MyFRITZ!App die minimale Version ist - die FRITZ!App Fon braucht sogar nur 5.0), bleiben noch genug ältere Modelle im Umlauf, die keine neuere Firmware verwenden können und dann von dem geschilderten Problem betroffen sind.
Auch wenn dieses Problem des iOS jetzt nicht spezifisch für die FRITZ!App Fon ist ... der eigentliche Knackpunkt ist, daß die App die Box, an der sie sich gerade versucht anzumelden, nicht eindeutig identifizieren kann.