Code master EOne dans Jeedom

Tags: #<Tag:0x00007fcbaa691180>

Bonjour à tous
Merci pour ce plugin que je viens de découvrir. C’est très tentant.
L’idée de pouvoir déclencher mon alarme Diagral quand mon détecteur d’ouverture de porte de garage Z-Wave signale une ouverture où qu’un detecteur de présence s’active quand il n’y a personne. C’est génial.
Il y a toutefois quelque chose qui m’interpelle un peu. Il faut saisir son code master dans l’application.
Or quand je me connecte à Jeedom depuis chez moi, je ne suis pas en https, je me contente de lancer l’appli dans mon navigateur en http. A ce moment, si j’utilise Jeedom, le code va circuler en clair sur mon réseau local entre Jeedom et ma box E-One…
Je crains qu’il n’y ait pas le choix parce qu’il me semble que E-One réclame le code master pour toute exécution sur son application et que ça doit être la contrainte de développement du plugin. Mais je me demande si cela présente un risque susceptible de fragiliser la sécurité mise en oeuvre. Après tout, si j’ai choisi un système d’alarme propriétaire, c’est pour renforcer la sécurité par rapport à ces protocoles plus ou moins protégés de la domotique.
On peut penser - ou espérer - que l’application E-One utilisée sur nos téléphones pour la saisie du code master est sécurisée (mais je me pose quand même la question).
En fait, mon besoin principal est de récupérer de manière fiable l’état de mon alarme, pour gérer le fait qu’il y ait ou non quelqu’un à la maison.
Aujourd’hui, je gère cela avec mail listener, en demandant à E-One de m’envoyer un mail à chaque mise sous tension ou désactivation, analysant le mail avec mail listener, et mettant à jour une variable d’état de mon alarme. Mais il y a parfois des ratés, un mail qui n’arrive pas ou n’est pas analysé et dans ce cas, il y a désynchronisation dans l’état de ma variable. Et puis, il y a toujours un décalage entre l’action sur l’alarme et la réception du mail.
Donc, récupérer dans E-One sur Jeedom l’état réel de mon alarme serait un vrai plus.
Est-ce que ça ne pourrait pas se gérer avec un code secondaire, avec des droits moindres ? Je n’ai pas besoin de Jeedom pour mettre l’alarme ou l’enlever puisque je peux le faire aussi facilement avec e-One sur mon téléphone.

En tous cas, ça ne retire rien au magnifique travail que représente ce plugin.
Merci d’avance pour la réponse

Bonjour,

Surtout quand c’est gratuit :wink:

Diagral requiert systématiquement le code master pour interagir avec l’alarme.

Imaginons que dans votre réseau interne vous ayez un hacker (peu de chance mais admettons), le seul moment où il pourra voir en clair votre masterCode c’est :

  • En effectuant une capture réseau au moment où vous configurez la première fois le plugin avec le masterCode (cela peut être simplement résolu en activant l’https en interne)
  • En hackant votre Jeedom qui stocke en base de donnée le masterCode (dépendant d’une faille de sécurité chez Jeedom - aucune connue en cours a l’heure actuelle - ou plus vraisemblablement, un mot de passe faible sur la machine qui héberge le Jeedom)

Ensuite toutes les requêtes que Jeedom fait a destination de Diagral (les serveurs Diagral sur Internet car il n’y a pas de communication possible entre Jeedom et la box) sont en HTTPS, que votre Jeedom soit en HTTPS ou non.

Je travaille dans la Cybersécurité et tout ce qui touche à la sécurité a était une de mes contraintes de développement les plus fortes. En l’état je considère que mon plugin n’apporte pas plus de risque de sécurité que l’utilisation de l’application.
Bien évidement la sécurité est un tout. Le plugin peut être sécurisé mais si mon Jeedom est accessible sur interne (http ou https peut importe) avec en login « admin » et en mot de passe « 'password », la je peux rien faire et le risque est plus important.

Je suis a l’écoute de tout proposition pour renforcer encore la sécurité du plugin, tant que cela n’impact pas trop l’experience utilisateur.
Par exemple, quelqu’un ma demandé d’ajouter une fonction pour éviter le désarmement depuis Jeedom, j’ai ainsi ajouter la fonctionnalité SecureDisarm.
image

C’est aussi la raison de mon choix de Diagral et il était hors de question pour moi de réduire la sécurité comparativement à l’application.

Tout autant que le plugin puisque le plugin simule l’app

Le plugin récupère directement les statuts en interrogeant régulièrement à intervalle configurable, les serveurs de Diagral. Mais il peut aussi capter les mail envoyé par Diagral au travers de Mail Listener, les analyses, et stock les informations dans les commandes. Cela lance aussi dans certains cas une interrogation sur les serveurs Diagral pour récupérer l’état (après un mail d’activation/désactivation reçu) limitant ainsi les appels sur les serveurs Diagral et ne pas se faire blacklister.
Je trouve la documentation plutôt bien faite (c’est normal elle est de moi :slight_smile: ), un inclus des détails sur le fonctionnement du plugin.

Si certains utilisateurs du plugin utilisent un compte secondaire pour le Jeedom. Il faut juste faire attention, par exemple dans le cas ou des CGV sont a revaliez, sur son compte principale on le voit, mais faut penser aux comptes secondaires, sinon Jeedom marche plus.

Merci

Hello mguyard
Merci pour la réponse rapide.

J’ai travaillé pas mal de temps comme reponsable sécurité réseau et ça m’a rendu parano (ou alors j’y ai travaillé parce que je l’étais déjà au départ).

C’est vrai, mais je n’ai pas de souci pour payer un produit qui me plaît ou qui m’est utile. Le seul souci avec Jeedom, c’est qu’il faut payer pour voir. Alors merci aussi pour la gratuité.

Oui, enfin je peux certes me faire hacker mon Jeedom, mais je peux tout aussi bien - et ce serait bien plus facile - me faire hacker une caméra chinoise, un appareil multimédia, une prise wifi ou n’importe quel appareil construit pour ne pas être cher sans trop de souci de sécurité. A partir de là, un vilain qui m’en voudrait personnellement pourrait sniffer mes trames réseau et également pirater le compte Facebook de madame, ou des jeunes de la maison susceptibles d’étaler partout leur nom, leur adresse et leurs habitudes. Si en plus ils ont le code de l’alarme…
Quand je disais que j’étais parano. Hélas, cela arrive !

Je vais faire l’essai de ce que je peux faire avec un compte secondaire. Reste à savoir quels droits je serai obligé de lui donner. Diagral n’est pas très efficace sur la question, on voit bien que ça ne fait pas partie de leur préoccupation première et que la box e-one, c’est juste une tentative bridée de se mettre dans l’air du temps.

Merci encore

Oui c’est pour cela que je dis que la sécurité c’est un trou. Si je met une porte d’entrée en acier de 3m d’épaisseur mais que toutes les fenêtres de derrière sont ouverte, il y aura toujours un souci.
Comme je disais le seul moment où le masterCode transite en clair c’est au moment ou vous le rentrez dans le plugin. Et il suffit de passer toujours échanger avec votre Jeedom en HTTPS pour résoudre ce souci.
Le reste du temps, le flux est chiffré en HTTPS est donc le seul moyen est de faire un déchiffrement SSL entre les 2. Il est vrai que je ne vérifie pas le certificat de Diagral, car ca marcherait plus chez les utilisateurs qui font du déchiffrement SSL, quand Diagral change son certificat, etc… soit beaucoup de problème utilisateur pour un risque très modéré si la sécurité globale de l’infrasture est assurée.
Par exemple chez moi, chaque flux entrant chez moi est soit au travers d’un VPN, soit maitrisé. Pas d’UPNP, etc…

Je te laisse tester le plugin pour ton faire ton avis, rien de plus simple étant gratuit.
Lis bien la doc qui donne la encore beaucoup d’info.
L’utilisation d’un compte secondaire n’apporte pas grand chose (hormis un compte dédié à Jeedom) car Diagral propose peut de gestion de droits.

Bonjour mguyard (et bonjour tout le monde)
Merci pour la réponse.

J’essaie autant que faire se peut, mais certains équipements ne se laissent pas faire, les services de streaming n’aiment pas les VPN et le font savoir de temps à autre, et comme madame n’aime pas la technologie surtout quand elle se fait remarquer… Bref…

C’est le moins qu’on en puisse dire, un compte qui n’a pas le droit sur le système d’alarme peut quand même l’activer et la désactiver !

Bref, il reste quand même la sécurité d’avoir un compte qu’on peut désactiver à tout moment, et c’est déjà pas si mal. Mais pour l’instant, j’ai un petit souci.
Quand je fais un refresh manuel dans les commandes, j’ai le message interactif suivant :

×array(2) { [« message »]=> string(14) « Accès refusé » [« details »]=> NULL } {« state »:« ok »,« result »:""}

J’ai mis la log en mode debug, je peux l’envoyer si nécessaire bien que je n’y pas pas vu le message
Je suis bien entendu certain de mon compte et de mon code
Au début, je pensais que c’était du au fait que j’étais déjà connecté à mon compte principal e-one avec mon téléphone, pendant mes tests. A priori, Jeedom n’autorise pas une connexion avec le compte secondaire quand quelqu’un est connecté avec le principal… J’avais les messages suivants (dans Jeedom) :
> ||2020-05-13 16:20:07|Diagral_eOne|Erreur sur Diagral_eOne::pull() : Another session is already open. Try to open new connection to TT|||
> ||2020-05-13 16:19:21|Diagral_eOne|Erreur exécution de la commande [Maison][ ChezNous][Rafraichir] : Another session is already open. Try to open new connection to TT|*

Mais j’ai refait des tests avec une télécommande, téléphone déconnecté, et j’ai la même erreur (array(2)), et plus de message dans Jeedom.
Le refresh se fait quand même, parce qu’en enlevant notification Diagral, je récupère le statut après un refresh, malgré l’erreur. Idem dans un scénario.
Ca amène donc une sécurité supplémentaire, puisque ça m’affranchit d’une défaillance possible de mail listener. Je peux contrôler que l’état de l’alarme renvoyé par mon scénario mail listener est correct en en récupérant la valeur dans le plugin (notification Diagral désactivée) après un refresh.
C’est un gros plus.
Le refresh automatique fonctionne également. C’est donc juste le refresh manuel dans les commandes qui me renvoie cette erreur.

Peut être lié aux droits du compte secondaire ?

Je vais continuer les tests avec plus de fonctions, mais je suis déjà très heureux de pouvoir vérifier mon statut indépendamment du fonctionnement d’un autre plugin; ou d’un scénario qui peut arrêter de fonctionner si Diagral change son message mail.

Merci beaucoup pour le plugin et le support
Bonne journée

Bonjour,

Il me faut le debug complet pour voir où il y a un souci.
D’autant que la cron lance la commande de refresh. Donc je comprend pas qu’il y ai une différence entre les deux.

Bonjour
Merci pour la réponse, pas vue hier, j’ai pas mal de scénario à revoir entièrement…
Je joins le debug complet, en tous cas ce que je sais faire c’est à dire la copie de la log Diagral-eOne en mode debug…
Ce q’il y a là correspond à 2 lancements de la commande refresh en mode manuel. J’ai vidé la log avant de lancer les commandes, sinon je n’aurais pas su quoi envoyer…

[2020-05-16 12:35:32][DEBUG] : getDiagralStatus::0::Starting Request
[2020-05-16 12:35:32][DEBUG] : setDiagralEnv::0::Start Diagral Environnement
[2020-05-16 12:35:36][DEBUG] : setDiagralEnv::UpdateAvailable :
[2020-05-16 12:35:36][DEBUG] : setDiagralEnv::getVersions : array ( ‹ box › => ‹ 1.5.11 ›, ‹ boxRadio › => ‹ 13 ›, ‹ plugKnx › => ‹ 1.1.20 ›, ‹ rawVersions › => ‹ V1.5.11_V13_V1.1.20 ›, ‹ central › => ‹ 5.6.0 ›, ‹ centralRadio › => ‹ 11 ›, )
[2020-05-16 12:35:36][DEBUG] : getDiagralStatus::0::Result ‹ off ›
[2020-05-16 12:35:36][DEBUG] : isAlarmActive::Status
[2020-05-16 12:36:29][DEBUG] : getDiagralStatus::0::Starting Request
[2020-05-16 12:36:29][DEBUG] : setDiagralEnv::0::Start Diagral Environnement
[2020-05-16 12:36:32][DEBUG] : setDiagralEnv::UpdateAvailable :
[2020-05-16 12:36:32][DEBUG] : setDiagralEnv::getVersions : array ( ‹ box › => ‹ 1.5.11 ›, ‹ boxRadio › => ‹ 13 ›, ‹ plugKnx › => ‹ 1.1.20 ›, ‹ rawVersions › => ‹ V1.5.11_V13_V1.1.20 ›, ‹ central › => ‹ 5.6.0 ›, ‹ centralRadio › => ‹ 11 ›, )
[2020-05-16 12:36:33][DEBUG] : getDiagralStatus::0::Result ‹ off ›
[2020-05-16 12:36:33][DEBUG] : isAlarmActive::Status

A noter également que ce matin, j’avais les erreurs suivantes dans les messages Jeedom :

2020-05-16 07:00:16 Diagral_eOne Erreur sur Diagral_eOne::pull() : sessionId is not in the response – {« message »:« sso.connection.error »,« details »:« timeout »} 2
2020-05-16 06:00:11 Diagral_eOne Erreur sur Diagral_eOne::pull() : User not found – {« message »:« error.connect.mydiagralusernotfound »,« details »:« Item not found »}

Merci d’avance
Bonne journée

Bonjour,

Ces messages d’erreur comme le premier que tu as indiqué provienne de Diagral.
Au moment des erreurs Diagral refuse la connexion ou l’accepte que partiellement.

Ça arrive de temps à autre où le Cloud Diagral deconne un peu.