Azure Ad Connect et Openldap

Read in : English English

 

 

Bonjour a tous, encore un petit poste rapide,

Dans mon article précédent je vous présentai un script azure ad connect samba4 écris en python et qui fonctionne sous linux pour synchroniser vos user/groupe/device vers azure ad.

Je viens également de  faire un nouveau projet presque identique au premier intitulé AzureADConnect_Ldap qui permet de synchroniser des utilisateurs et groupes openldap (ou autre autre solution ldap similaire) vers azure ad. Pratique pour les organisations sans active directory (Microsoft ou samba4)

Attention ! Pour que la synchronisation des mot de passe fonctionne il faut que votre openldap possède le HASHNT (NTLM HASH) de l’utilisateur.
L’attribut est souvent présent si vous avez le schema samba3 dans votre openldap et présent dans l’attribut « sambaNTPassword »

Il existe de nombreuses implémentations openldap, le script peut nécessiter quelques modifications pour répondre à vos besoins

Amusez vous bien !

 

Azure Ad Connect Samba4

Read in : English English

Bonjour a tous

Cela fait bien longtemps que je n’est pas écris sur ce blog.

Récemment je suis tomber sur plusieurs article concernant le fonctionnement de la synchronisation des password active directory avec azure ad connect:
Microsoft how-password-hash-synchronization-works
Dsinternals how-azure-active-directory-connect-syncs-passwords

Le fonctionnement est le suivant : azure ad connect prend le hashnt encodé en utf16-le, et le rentre dans la fonction PBKDF2-HMAC-SHA256″ avec 1000 itérations un sel aléatoire

Ces même recherches m’ont amenez tomber sur le travail de Dr Nestori Syynimaa (@DrAzureAD):
aadinternals long-passwords  qui permet a partir d’un simple script powershell d’envoyer un hashnt.
Je tente donc ma chance avec le powershell et je m’aperçois que cela fonctionne !
Le code de @DrAzureAD est opensource, je me dit donc… il y a sûrement possibilité de le convertir en python pour l’utiliser sous linux et donc avec samba.

Après analyse du code je comprend que microsoft communique avec en WCF binary xml  ,
Bonne nouvelle les spécification sont ouverte et un projet python existe sur github : python-wcfbin

Je créer donc un repo git baptiser AADInternals_python   qui reprend le code de AADInternals qui m’intéresse pour le convertir en python. Après avoir tâtonner un peu… victoire, le code fonctionne !

Je m’aperçois ensuite que le projet AADInternals de @DrAzureAD reprend tout ce qui est nécessaire pour créer/supprimer des utilisateurs et des groupes a la mode azuread il me reste donc a porter le reste du code.

Mais dans mes tests, les serveur Microsoft répondent:

 « The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://schemas.microsoft.com/online/aws/change/2010/01:syncRequest. The InnerException message was ‘Element ‘http://schemas.microsoft.com/2003/10/Serialization/Arrays:Value’ contains data from a type that maps to the name ‘:mustUnderstand’. The deserializer has no knowledge of any type that maps to this name. Consider using a DataContractResolver if you are using DataContractSerializer or add the type corresponding to ‘mustUnderstand’ to the list of known types – for example, by using the KnownTypeAttribute attribute or by adding it to the list of known types passed to the serializer.’. Please see InnerException for more details. »

Je comprend donc que c’est lib python-wcfbin qui serialize mal dans certain cas.

Je demande donc au boulot un petit coup de main a des dev plus expérimenter et notement a AndreasLrx  un stagiaire chez nous, (oui oui ils sont très bon les stagiaires chez nous ! )

Et il trouve le problème, les spécifications de microsoft ne sont pas à jour ! Nous faisons même une pull request sur le projet d’origine : https://github.com/ernw/python-wcfbin/pull/16

J’ai maintenant tout ce qu’il faut pour construire un outils de synchronisation complet.

Je créer donc sur mon projet github un projet: AzureADConnect_Samba4

Le projet est capable d’envoyer des groupe et utilisateurs ansi que d’envoyer des hashnt  (aadhash) a l’azure ad.

Le script conserve ensuite les dernières informations dans une base sqlite local,  il l’enverra a nouveau l’objet a azure ad uniquement si l’objet a été modifier depuis le dernier envoie.

ATTENTION Si vous avez déjà utiliser l’azure ad connect windows, vous devez bien identifier votre « sourceanchor » ou « immutableId » de votre configuration précédente.
Par défaut microsoft utilise l’ objectGUID avec msDSConsistencyGuid, j’ai donc repris ce fonctionnement, cependant, en fonction des versions votre paramétrage peu être différent.
A vous donc de bien identifier votre sourceanchor pour ne pas créer de doublon et/ou mauvaise suppression.

Attention également, le script ne prend pas en charge le password writeback !

En espérant que ce travail vous sera utile ! N’hésitez pas a me faire des retours !

Edit:

Depuis le 13/05/2023, le script gère également les Device (jonction hybrid)

Découverte Rpyc

Il y a peu de temps j’ai découvert RPYC https://rpyc.readthedocs.io/en/latest/

L’outil est pratique pour piloter des machines a distance a travers ssh.

Pourquoi ne pas utiliser Ansible  ?

Disons que c’est une méthode différente.
Ansible est très pratique (je l’utilise parfois), beaucoup de module et grosse communauté mais je préférerais écrire du python pour faire des boucle, des while etc, et je dois bien dire que je ne suis pas très fan du yaml …

RPYC permet de faire discuter deux connexion python ensemble, par exemple, je suis capable de créer une liste (python) sur un serveur1, de la récupérer sur mon poste (python local) pour la renvoyer via RPYC sur une connexion python du serveur2

Je découvre donc les possibilités, voici un bout de code d’exemple :


import rpyc 
from rpyc.utils.classic import upload_package 
from rpyc.utils.zerodeploy import MultiServerDeployment 
from rpyc.utils.zerodeploy import DeployedServer 
from plumbum import SshMachine 
import ldap3 
import pyasn1 
 
# create the deployment 
 
list_host=['mysrv.domain.lan'] 
list_ssh=[] 
 
for f in list_host: 
    mach = SshMachine(f, user="root", keyfile="/home/user/.ssh/id_ed25519",port="22") 
    list_ssh.append(mach) 
 
 
def get_etc_file(): 
    import glob 
    allfile = [] 
    for i in glob.glob('/etc/*'): 
        allfile.append(i) 
    return allfile 
 
def get_ldap_version(): 
    import ldap3 
    return ldap3.__version__ 
 
 
dep = MultiServerDeployment(list_ssh) 
conns = dep.classic_connect_all() 
 
for conn in conns: 
 
    run_get_etc_file = conn.teleport(get_etc_file) 
    print(run_get_etc_file()) 
 
    rpyc.classic.upload_package(conn, ldap3) 
    rpyc.classic.upload_package(conn, pyasn1) 
    run_get_ldap_version = conn.teleport(get_ldap_version) 
 
    print(run_get_ldap_version()) 

Dans l’exemple ici on a quelque chose d’intéressant, j’utilise rpyc.classic.upload_package, en gros les serveurs sur lequel je me connecte n’ont pas le paquet ldap3, mais il est installé sur ma machine, du coup avec rpyc je le pousse dans la connexion python instancier avec rpyc, (je le l’install pas sur le serveur !), et du coup il est utilisable. teleport lui me permet d’envoyer une fonction sur le python distant pour ensuite l’executer sur le distant. J’aime bien l’idée.

Je découvre l’outil et je vois un potentiel intéressant. Attention je n’ai pas fais de réel test en prod ni d’utilisation intensive, mais j’aime bien l’idée.

 

La généralisation du filtrage mitm …

Je constate lors de mes divers et nombreux déplacement que le filtrage mitm par les firewall est quelque chose de plus en plus répandu en entreprise et collectivité. J’ai donc décidé d’en parler !

Historique

Revenons a la base, pourquoi l’https a été inventé ?
Dans les entreprise, la nécessité de chiffrer le flux pour éviter qu’un pirate ne puisse récupérer des information sensible devient une nécessité, notamment pour les banques. Les sites de vente en ligne …

Principe de fonctionnement : Le navigateur est capable de vérifier qu’il discute avec le bon serveur grâce au certificat du site web. La connexion est chiffrée et donc illisible par un attaquent positionner sur un routeur par exemple.   Un petite révolution ! On peu maintenant être certain de discuter avec le bon serveur de manière chiffré !

C’est quoi le filtrage mitm ?

Souvent, c’est le firewall de votre entreprise qui va se comporter comme un pirate et analyser tous le trafic pour bloquer ou autoriser la connexion.

Comment ça marche ?

Le principe de fonctionnement est du coup assez simple pour analyser le contenu https. On installe le certificat du fwall dans les différent bundle de certificat des clients (store windows, firefox, logiciel…)
Ensuite lors du surf, le fwall va chiffrer la connexion avec sa clé et va ainsi pouvoir analyser tous le trafic … (mot de passe, mail, image tous y passe)

Que doit on en penser ?

Je ne blâme pas le principe…  En revanche il faut être clair avec ses utilisateurs en leurs indiquant la pratique !

En pratiquant le mitm il faut donc être rigoureux… l’appareil qui fait le filtrage est souvent le fwall, et l’ironie veut que c’est l’appareil qui est directement en frontale sur internet …

Vous vous devez donc (plus particulièrement que d’habitude) de vérifier que votre appareil est à jours, la moindre faille de sécu est critique car le pirate peut déchiffrer le flux https.

De la même manière, si vous remplacez l’appareil et que vous jetez l’ancien. Vous devez vous assurer que la clé privé a bien été supprimé de l’ancien appareil. (cela parait évident mais bon …)

Je constate dans trop de cas que l’option est activée sans vraiment que l’administrateur prenne conscience qu’il est en train de prendre une responsabilité vis à vis de ses utilisateurs.

De la même manière, vous ne devez pas demander a vos utilisateurs d’installer le certificat sur leur poste personnel (pour du wifi invité par exemple)…

Cela m’est déjà arrivé que l’ont me demande d’installer ce genre de certificat dans mon navigateur lors de déplacement. L’admin réseau semblant alors étonné que cela soit un non catégorique de ma part…

Conclusion

Le but n’est pas de blâmer mais plus d’ouvrir un débat sur cette pratique qui se généralise … Si vous êtes utilisateurs je vous invite a en discuter a votre adminsys…

 

Samba4 Password Synchro

Bonjour a tous

Petit article pour vous annoncer que je me suis enfin re-penché sur la synchronisation des mots de passe avec samba4:

Synchro des mots de passe avec google apps : https://github.com/sfonteneau/samba4-gaps

C’est clairement un dérivé de la version de baboons. A la différence qu’il ne nécessite plus l’activation de « store-plaintext » dans samba4.
Il demande en revanche l’activation de CryptSHA256 in smb.conf

En comparaison avec le script de baboons, le nouveau script le renvoi pas tous les mot de passe au redémarrage de gaps puisque il vérifie si la valeur de pwdlastset a changé depuis le dernier envoi. Ce script peut clairement être modifé pour d’autre application acceptant CryptSHA256 ou CryptSHA512.

Je me suis également penché sur sur l’envoie de mot de passe a des applications qui ne supporte pas le CryptSHA256 ou CryptSHA512, comme Windows Azure …

La seul solution dans ce cas est de stocké le mot de passe de l’utilisateur en clair et donc d’utiliser le mode « store-plaintext » dans active directory.

J’ai donc fais un script qui permet de récupérer les mot de passe en clair des utilisateurs et de les envoyés dans un script, puis une fois traité par celui-ci, le mot de passe en clair est supprimé: https://github.com/sfonteneau/samba4-sync-password

Dans le cas de windows azure le script précédent peut appeler un script de changement de mot de passe dans windows azure :  https://github.com/sfonteneau/send_password_in_azure

Une fois le mot de passe correctement envoyé à windows azure celui-ci sera supprimé de samba.

En espérant que cela peut vous être utile !

 

 

 

 

 

comment 0

Gitea – Solution simple pour faire du versioning

Article rapide pour vous présenter rapidement un produit que je découvre en ce moment: Gitea.

Gitea c’est quoi : c’est un service Git auto-hébergé sans prise de tête

Pourquoi pas gitlab ? Il est vrais certes que gitlab est plus complet. voir ici

Mais gitea a un gros avantage, sa faible très faible consommation CPU et RAM.

Je trouve également gitea plus réactif. Bref un outils très efficace si vous avez du code/doc a versionner.

PS: Pour les windosien, le gitea fonctionne aussi sous windows !

Seafile, une solution différente

Récemment, je vous ai parlé de nextcloud. Aujourd’hui je vous parle de seafiles

Seafile fonctionne différemment, sa vision est différente. Là où nextcloud va proposer un system de plugin et essayer d’être le plus polyvalent possible, Seafile va se concentrer sur la partie la plus importante: l’hébergement de fichier.

Seafile se différencie par sa façon dont sont stockée les données. Comme l’indique ce document, le fonctionnement se rapproche du fonctionnement GIT

Seafile stock en block, l’avantage de ce type de fonctionnement, c’est que c’est très efficace. En effet par exemple sur un Document libreoffice de 50mo, si ce document est édité, tous le document se sera pas uploadé. Seafile se débrouillera avec les bloc pour ne synchroniser que la différence. Ce mode de fonctionnement a l’avantage de rendre la synchronisation plus rapide entre le client et le serveur mais également d’optimiser la place côter serveur pour la partie versionning.

Seafile a aussi un avantage avec le « Virtual Drive Clients »

Le Virtual Drive Client permet d’installer sur le client un disque dur virtuel seafile sur son ordinateur.

L’arborescence apparaît ainsi que les fichiers.  Le contenu du fichier sera téléchargé lorsque vous ouvrirez un fichier. Le fichier récemment ouvert sera mis en cache sur votre disque local. Tous les fichiers mis en cache seront marqués d’une coche verte. Cela évite de télécharger tout un dossier.

Seafile gère également très bien Collabora et onlyoffice

Vous ne pourrez pas en revanche connecter celui-ci a un storage externe a la manière de nextcloud avec un serveur de fichiers de cifs. Seafile est plus dans l’optique de remplacer celui-ci.

Le webdav est dispo !

Bref, Seafile et nextcloud sont deux solutions différentes. On sent bien que les deux solution on été pensées de manière différente. Au niveau performance (coter client de synchronisation) seafile l’emporte. Au niveau interopérabilité et interface web, nextcloud l’emporte.

Bref, faire votre choix 😀

Nextcloud et Outils d’édition collaborative auto hebergée

Vous connaissez tous « google doc » ou « office online » ?

Ce genre d’outils est très prisé en environnement scolaire pour travailler avec des élèves ! En effet un groupe d’élèves qui travaille sur le même exposé peut travailler ensemble sur le même document avec chacun son ordinateur. C’est très puissant.

Il faut savoir que ce genre d’outils (google apps ou office 365) est gratuit en établissement scolaire. Si vous êtes une entreprise, le prix va rapidement augmenter. Egalement, l’idée de ne pas vraiment savoir où sont stockées les données est problématique pour la confidentialité. En plus, il vous faut avoir une connexion internet correcte pour que l’ensemble soit utilisable. Bref, il semble important de proposer une alternative !

J’avais testé il y a maintenant 2 ans quelques outils de collaboration auto-hébergée. A l’époque les produits ne m’avaient pas convaincu plus que ça.

Je profite donc des vacances pour voir les évolutions et re-tester les différents outils open-source du marché.

  • Libreoffice online
  • Onlyoffice

J’ai donc remonté un petit nextcloud rapide pour tester les deux solutions.

Le plus simple ensuite pour mettre en place les deux solutions c’est d’utiliser docker. C’est simple, rapide, efficace et on se fait pas chier pour les mise à jour.

Rien n’est stocké sur onlyoffice ou libreoffice online, l’application n’est qu’un éditeur, rien de plus !

Premier test; très concluant, très réactif ! Les deux solutions fonctionnent vraiment bien.

Onlyoffice semble embarquer pas mal de fonctionnalités le produit est très abouti, rien à envier a google doc ou à word online, voir même il est mieux ! Très très bonne surprise ! A tester rapidement !

Libreoffice online fonctionne très bien également ! Moins de fonctionnalités mais répond très bien a mes besoin ! Faire du doc, du calc, du ppt.

Onlyoffice dans sa version gratuite lui par contre a une limite à 20 utilisateurs simultanée. Au delà, il vous faudra prendre la version payante.

En soit, le logiciel est open source et le code ouvert, rien ne vous empêche d’aller modifier le code pour faire sauter l’avertissement… mais bien entendue, il ne faut pas le faire, il faut encourager financièrement le logiciel pour qu’il évolue et que les dev puissent vivre de leur travail ! Pour libreoffice online il y a égallement une limite ( vous pouvez égallement recompiler pour faire sauter cette limite)

A savoir qu’une réduction de -70% est proposée au école pour l’offre auto-hébergée et gratuite pour l’offre cloud !

Bref, vous pouvez proposer a vos utilisateurs de reprendre la main sur leurs données ! A eux d’en décider !

 

Subtilités technique rencontrée, et retour d’expérience.

Dans mes test j’ai installée les deux solution, onlyoffice et libreoffice online pour tester. Le tout couplée a un nextcloud

Dans les gros bonus; nextcloud est capable de monter des partage cifs pour les utilisateur! Gros avantage donc car on peut monter des partages windows (cifs) directement dans nextcloud, le plus fort dans l’histoire c’est que le tout est synchronisable avec le client lourd nextcloud sans pour autant être stockée sur le serveur nextcloud !

Egalement d’autre « external storage » comme google drive, Amazon, dropbox, ftp, sftp, webdav, openstack object … sont dispo !

Nextcloud peut aussi faire de la fédération si vous avez plusieurs établissement !

Attention par contre lorsque vous faite de l’édition collaborative avec ce genre de partage (car oui c’est possible) ! Il faut bien comprendre que si il y a écriture concurrentiel  entre le onlyoffice le libreoffice online, le client lourd et le fichier sur le partage cifs, c’est le dernier qui a parlée qui a raison ! Pas de versioning sur les external storage ! C’est une mécanique technique a comprendre mais ça va encore.

La ou cela peut devenir tordu c’est si vous faire de l’édition collaborative sur un partage cifs mais que les différents utilisateurs sont connectée au partage cifs avec un identifiant différent. (l’option identifiant et mot de passe de la session en cour lors de la configuration cifs).
Du coup finalement chaque utilisateur ouvre son propre editeur au niveau du libreoffice online ou du onlyoffice et donc pas d’édition collaborative possible le dernier qui enregistre a raison et écrase les autre changement.

Pour contourner le problème j’ai créer un identifiant « next-cloud-share » pour les partage problématique et je connecte l’external storage en fournissant celui-ci.

Subtilités a comprendre donc …

Autre bonus du nextcloud:

Nextcloud emarque un store d’application. Dans les application interessante :

  • Draw.io
  • Client imap/smtp
  • Client caldev
  • Client cardev
  • Outils d’apelle vidéo
  • Liste de Tache
  • Outils d’organisation …

Bref très bon produit !

Laps, pvlan, partages administratifs, parfeu, limiter les attaques latérales…

Le bilan

Nouveau venu dans les ransomware efficace: notpeyta

Nous allons regarder comment fonctionne peyta et essayer de tirer les enseignement du type de propagation et sécuriser nos réseau en conséquence…

Article Microsoft qui détail l’attaque :

https://blogs.technet.microsoft.com/mmpc/2017/06/27/new-ransomware-old-techniques-petya-adds-worm-capabilities/

Lorsque notpeyta réussi a infecter un poste, il tente de récupérer les mot de passe de la machine pour se propager sur les autre postes avec psexec via les partages administratif ouvert sur les autres postes.

On va voir dans ce post différente solutions pour bloquer cela.

Désactiver les partages administratifs

Une méthode pour bloquer ce type de propagation est avant toute chose de supprimer les partages administratif ouvert sur les postes.
Un paquet de mon dépôt fait cela : https://wapt.lesfourmisduweb.org/tous-les-packages?recherche=smp-disabling-administrative

Mettre en place le pvlan

Une autre méthode est de mettre en place le pvlan sur les switch votre réseau. En effet, en règle général les postes n’ont aucune raison de se voir entre eux. Plus d’information : https://fr.wikipedia.org/wiki/VLAN_priv%C3%A9

Activer LAPS

Une  recommandation  également est d’activer laps sur votre réseau.
En effet nous utilisons malheureusement régulièrement pour des raison de facilitée les même mot de passe administrateur locaux sur tous les postes …  Si ce mot de passe est compromis c’est toute la sécurités de réseau qui est compromise. Laps permet donc de gérer automatiquement le mot de passe du compte « Administrateur » local de toutes les machines de votre domaine. Le mot de passe est changée régulièrement et deviens unique a chaque machine. Il est ensuite stockée dans un attribut spécifique sécurisée dans l’active directory.

Règles parfeu

Globalement, sur un client windows, il n’y a aucune raison pour qu’un port soit en écoute.sur celle-ci… C’est le meilleur moyen de limiter un attaque latérale. D’ailleurs, la prochaine version de wapt va se séparer de son port d’écoute 8088 pour basculer sur du websocket !

J’ai donc fait un paquet wapt qui bloque les différents port de windows ouvert par défaut sans réelle raison pour moi …

Paquet wapt –> smp-add-rules-block-firewall

 

comments 2

Apache Guacamole – Alternative au VPN pour vos utilisateurs

Petite présentation rapide du produit même si plusieurs blog en parlent déjà.

Guacamole permet de proposer à vos utilisateurs une interface centralisée (web) pour des connections RDP, VNC, ssh.  Dans notre cas c’est surtout le remplacement d’une connexion RDP (trop vulnérable aux attaques) qui nous intéresse. Il peut être pratique par exemple pour proposer une alternative aux connections VPN.

Le but est de fournir à l’utilisateur une connexion RDP à un serveur TSE au travers d’une interface web.  Vous n’êtes donc plus dépendants d’un OS, l’utilisateur peut être sous, Windows, Linux ou Mac (potentiellement tablette et smartphone également). La connexion RDP sera affichée à travers le navigateur web en HTML5.

Guacamole peut être couplée a un LDAP/ActiveDirectory pour l’authentification. Il est également recommandé d’activer l’authentification double facteur pour plus de sécurité (SMS par exemple). Mettre en place un fail2ban pour bannir une IP en cas de trop nombreuses tentatives de connections échouées est recommandé.

Guacamole permet également de partager un écran. Vous pouvez partager votre écran guacamole en partageant un lien, puis définir si les utilisateurs connectés via ce lien pourront contrôler la machine ou non. Cela peut être très pratique pour faire des démos de produit par exemple.

Je propose guacamole pour  une alternative au VPN mais il peut également être une excellente solution dans une école pour proposer un accès à des applications Linux sur des postes windows et inversement !

Petite vidéo: