L'ingénierie sociale est une technique permettant d'acquérir des informations en se servant de la psychologie (méthode de persuasion). Elle s'applique en général avant la compromission de l'infrastructure
Nous allons voir comment contrer du mieux que l'on peut cette technique en mettant en place un trombinoscope accessible uniquement aux personnes de l'entreprise (connectées à l'AD et sur les réseaux internes, dont les VPN)
Notre serveur AD Windows se nomme srv
Le domaine est ad.lan
Le nom du serveur Debian sso
Compte de service AD test
Mot de passe du compte de service AD M!gnion923
Les prérequis déjà en place
Attention, les comptes de service ne doivent pas pouvoir se connecter aux ordinateurs, vous devez créer une gpo en interdisant l'ouverture d'une session locale à ces comptes.
Nous allons mettre en place les éléments suivants
Pour commencer, mettez à jour Debian 10
# apt update && apt upgrade
Puis installer les services et modules requis
# apt install krb5-user libapache2-mod-auth-kerb apache2 unzip
Réponse à donner si les questions suivantes sont posées :
ad.lan
srv
srv
Vous pouvez ne rien mettre, car on va refaire le fichier krb5.conf
krb5-user permet au serveur de communiquer avec l'AD
libapache2-mod-auth-kerb permet à apache d'authentifier les utilisateurs au prêt de l'AD
apache2 serveur apache2
unzip pour dézipper le site trombinoscope
Sur votre serveur DNS (AD) dans la forêt ad.lan, ajouter l'enregistrement A du serveur sso
, afin qu'il puisse être identifié comme sso.ad.lan
la keytab va permettre au service défini lors de sa création à s'authentifier au prêt du serveur DC, cette clé est à générer depuis le serveur AD avec un compte détenant les droits administrateur du domaine
Les serveurs DC contiennent déjà l'outil, il suffit de l'utiliser en ligne de commande. ouvrez CMD en administrateur, puis tapez la commande suivante
ktpass -princ HTTP/sso.ad.lan@AD.LAN -mapuser test@AD.LAN -pass M!gnion923 -crypto AES256-SHA1 -ptype KRB5_NT_SRV_INST -out c:\kerberos.keytab
Lors de la création de la clé, l'AD va modifier le nom d'ouverture de session de l'utilisateur test en HTTP/sso.ad.lan@AD.LAN
ktpass outil pour crée la keytab
-princ HTTP/sso.ad.lan@AD.LAN Le HTTP est un service, il permet de faire du SSO avec les navigateurs (SPNEGO), le service HTTP regroupe les protocoles http/https. les autres services possibles sont www/host/ldap
La différence en le service HTTP et WWW, c'est que le HTTP permet le SSO alors que le service WWW ne le permet pas
Attention ne pas mettre HTTPS en service car les services et protocoles non rien avoir
-mapuser test@AD.LAN indique le nom du compte de service
-pass M!gnion923 le mot de passe du compte de service
-crypto AES256-SHA1 La méthode de chiffrement utilisée
Attention, pour que le chiffrement en AES256 fonctionne, allez dans l'AD puis doublecliquez sur le compte de service (test dans notre cas), cliquez sur l'onglet Compte, dans Options de compte, cochez la case Ce compte prend en charge le chiffrement AES 256 bits via Kerberos.
-ptype KRB5_NT_SRV_INST Spécifie le type d'utilisation, nous utilisons KRB5_NT_SRV_INST pour l'authentification des utilisateurs uniquement.
-out c:\kerberos.keytab fichier générée
Copiez la clé généré kerberos.keytab
sur Debian
La clé kerberos.keytab copiée sur Debian, déplacée la dans /etc/kerberos.keytab
Modifier le propriétaire ainsi que le groupe de la clé, pour permettre à apache d'y accéder
# chown www-data:root /etc/kerberos.keytab
Modifier les droits en lecture/écriture pour apache2 et lecture pour root
# chmod 640 /etc/kerberos.keytab
Attention à ce que le nom de votre serveur soit bien le même dans le fichier /etc/hosts
et /etc/hostname
Contenu du fichier /etc/hostname
sso
La ligne concernant votre serveur dans /etc/hosts
127.0.1.1 sso.ad.lan sso
Ne pas oublier que les lignes mises dans le fichier hosts sont lues avant de faire une requête DNS
Maintenant, faites une sauvegarde du fichier de configuration du client kerberos
# mv /etc/krb5.conf{,.sav}
Vous allez ouvrir le fichier de configuration kerberos (qui n'existe plus) pour créer la configuration
# nano /etc/krb5.conf
Vous allez y copier les lignes suivantes
[libdefaults]
default_realm = ad.lan
[realms]
ad.lan = {
kdc = srv
admin_server = srv
}
[domain_realm]
.ad.lan = AD.LAN
ad.lan = AD.LAN
[libdefaults] Domaine par défaut pour le client
default_realm identifie le domaine KERBEROS par défaut
[realms] Détaille les informations spécifiques au domaine
kdc Nom d'hôte exécutant le Kerberos Domain Controler
admin_server Serveur d'administration (KDC maitre)
[domain_realm] Permet de faire la traduction de nom de domaine ou de nom d'hôte en nom KERBEROS
Entrez la commande suivante pour ouvrir une session vers l'AD avec le compte de service (test), un mot de passe va être demandé
kinit test@AD.LAN
Vous ne devriez pas avoir de retour sur cette commande
Liste les tickets kerberos en cours
klist
Permet d'acquérir un ticket de service, qui permet de vérifier le bon fonctionnement de la configuration effectuée
kvno HTTP/sso.ad.lan@AD.LAN
Vous devriez avoir un retour dans ce genre : HTTP/sso.ad.lan@AD.LAN: kvno = 43
Commencez par installer les modules d'apache2
# a2enmod ssl rewrite
ssl permet d'activer le SSL (HTTPS)
rewrite active les redirections d'url
Pour voir si les modules sont bien chargés
# apachectl -t -D DUMP_MODULES | egrep "rewrite*|ssl*"
Redémarrer Apache2
# systemctl restart apache2
Vous allez créer les certificats autosignés, pour la création du virtualhost SSL trombinoscope.conf
# openssl genrsa -out /etc/ssl/private/trombinoscope.key 2048
# openssl req -new -key /etc/ssl/private/trombinoscope.key -out /etc/ssl/trombinoscope.csr
# openssl x509 -req -days 365 -in /etc/ssl/trombinoscope.csr -signkey /etc/ssl/private/trombinoscope.key -out /etc/ssl/certs/trombinoscope.crt
sso.ad.lan
.Pour automatiser le renouvellement du certificat, nous allons vérifier la validité de celui-ci, s'il n'est plus valide, alors il crée un nouveau certificat
Ajouter cela à /etc/crontab, la validité du certificat va être vérifiée tous les 12h
* */12 * * * root if true | openssl s_client -connect 127.0.0.1:443 2>/dev/null | openssl x509 -noout -checkend 0; then echo "$(date '+%d/%m/%Y %r') Certificat encore valide" >> /var/log/apache2/cert.trombinoscope.log; else echo "$(date '+%d/%m/%Y %r') Certificat expiré, actualisation du certificat pour 1 an" >> /var/log/apache2/cert.trombinoscope.log && rm /etc/ssl/certs/trombinoscope.crt && openssl x509 -req -days 365 -in /etc/ssl/trombinoscope.csr -signkey /etc/ssl/private/trombinoscope.key -out /etc/ssl/certs/trombinoscope.crt && systemctl restart apache2; fi
Commencer par créer le dossier qui va accueillir le site
# mkdir /var/www/trombinoscope
Créer un site en SSL
# nano /etc/apache2/sites-available/trombinoscope.conf
Remplissez-le comme suit
<IfModule mod_ssl.c>
<VirtualHost *:443>
#LogLevel trace8
Servername sso.ad.lan
ServerAdmin webmaster@localhost
DocumentRoot /var/www/trombinoscope
SSLEngine on
SSLCertificateKeyFile /etc/ssl/private/trombinoscope.key
SSLCertificateFile /etc/ssl/certs/trombinoscope.crt
<Location />
order deny,allow
deny from all
allow from IPDEVOTRERESEAU
AuthType Kerberos
AuthName "Demande d'identification SSO"
KrbAuthRealms AD.LAN
Krb5Keytab /etc/kerberos.keytab
KrbMethodNegotiate On
KrbMethodK5Passwd On
require valid-user
</Location>
ErrorLog ${APACHE_LOG_DIR}/trombinoscope.error.log
CustomLog ${APACHE_LOG_DIR}/trombinoscope.access.log combined
</VirtualHost>
</IfModule>
Sécurité supplémentaire
Avec ces trois lignes vous n'autorisez que les utilisateurs des réseaux souhaités.
order deny,allow
deny from all
allow from IPDEVOTRERESEAU/MASQUE**
Si vous avez plusieurs réseaux mettez des espaces entre chaque réseau, pensez aussi au VPN
allow from 192.168.1.0/24 10.0.0.0/8
N'oubliez pas d'autoriser vos différents VLAN à accéder à ce serveur (en cas de réseau sectionné)
IfModule mod_ssl.c Indique que nous sommes dans une configuration SSL
VirtualHost *:443 Le virtualhost écoute toutes les ip appartenant au serveur sur le port 443 (port https)
LogLevel trace8 Permet de voir les échanges entre l'AD et apache pour résoudre les problèmes, ne l'activez que pour résoudre un problème, car cela génère beaucoup de lignes
Servername Quand quelqu'un tape le domaine sso2.ad.lan sur son navigateur, cela le renvoie sur cette configuration
DocumentRoot Répertoire du site
SSLCertificateKeyFile et SSLCertificateFile Désignent les clés publiques et privées crées plus haut
Les lignes ci-dessous sont les options liées à kerberos
AuthType Kerberos indique que c'est une authentification kerberos
AuthName "Demande d'identification SSO" texte incrit lors de la demande d'authentification (s'il y en a un)
KrbAuthRealms AD.LAN Domaine utilisé pour l'authentification kerberos
Krb5Keytab /etc/kerberos.keytab Chemin de la clé
KrbMethodNegotiate On Permet la négociation automatique SSO
KrbMethodK5Passwd On Active l'authentification par mot de passe avec kerberos 5
require valid-user N'autorise que les utilisateurs valides
Activer le site
# a2ensite trombinoscope.conf
Vous allez modifier le site par défaut d'apache http
# nano /etc/apache2/sites-available/000-default.conf
Ajouter cette ligne Redirect "/" "https://sso.ad.lan
juste en dessous de DocumentRoot /var/www/html
Vous allez commenter la ligne DocumentRoot /var/www/html en mettant un # devant
#DocumentRoot /var/www/html
Redirect "/" "https://sso.ad.lan
Relancez apache pour prendre en compte les modifications
# systemctl reload apache2
j'ai récupéré le trombinoscope fait pas Saïda : saidaZgl
Pour nos besoins j'ai :
Attention à mettre des photos prises de la même façon (en portrait ou paysage) pour éviter les différences d'affichages (comme moi)
Télécharger le zip du trombinoscope
curl -SLO https://blog.chezme.eu/user/pages/02.blog/ingenierie-social-dsi-et-trompinoscope/trombinoscope.zip
Dézipper l'archive dans /var/www/trombinoscope
# unzip trombinoscope.zip -d /var/www/trombinoscope
-d répertoire de destination
Pour ajouter des membres, il suffit d'ajouter cette partie (coller autant de fois que nécessaire cette partie)
<div class="card mt-3 col-lg-3 col-md-4 col-sm-6 offset-sm-0 offset-1 col-10" style="width: 18rem;">
<img class="card-img-top mt-3" src="assets/2.webp" class="card-img-top">
<div class="card-body text-center">
<h5 class="card-title">Personne 2</h5>
<p class="card-text"><small class="text-muted">Code : 5536898</small></p>
</div>
</div>
Juste au dessus de ces lignes
</div>
</div>
</body>
</html>
Puis modifier en conséquence
Pensez à modifier chaque page.
Il va falloir mettre en place l'une des GPO suivantes
Vous avez mis en place le trombinoscope avec les sécurités suivantes :
il va falloir sensibiliser les utilisateurs à l'utilisation du trombinoscope, pour cela il faudra
Il va falloir mettre à jour régulièrement les codes
Pour créer une GPO Firefox, il va falloir télécharger les ADMX
Je vous recommande d'avoir un magasin central pour éviter d'avoir des différences entre vos contrôleurs de domaines
Créer un magasin central GPO
Allez sur Template Firefox GPO et télécharger la dernière version des ADMX
Une fois l'archive extraite, copiée les dossiers et fichiers suivants en-US, fr-FR, firefox.admx, mozilla.admx et coller les dans votre dossier PolicyDefinitions du réseau
Créer une GPO sur l'OU des utilisateurs
Utilisateurs authentifiés
. Ajouter votre utilisateur avec lequel vous allez faire les essais GPO (pas le compte de service, il n'est pas censé se connecter à un poste). Ajouter aussi le poste sur lequel vous faites vos essais.https://sso2.ad.lan
Si cela fonctionne
Utilisateur authentifié
Sous firefox pour mettre plusieurs URL, insérer une virgule entre chaque valeur (dans le cas où vous avez déjà un service équivalent mis en place)
Pour configurer le SSO sur ces 3 navigateurs, créer une GPO sur l'OU des utilisateurs
Utilisateurs authentifié
, puis Ajouter votre utilisateur avec lequel vous allez faire les essais GPO (pas le compte de service, il n'est pas censé se connecter à un poste) Ajouter aussi le poste sur lequel vous faites vos essaishttps://sso2.ad.lan
1
Si cela fonctionne
Utilisateur authentifié
https://jfrog.com/knowledge-base/http-sso-with-apache-and-kerberos/
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/cc753771(v=ws.11)?redirectedfrom=MSDN
https://fabien.io/installer-une-authentification-sso-windows-ldap-sur-apache-2-4-ubuntu-18/
https://active-directory-wp.com/docs/Networking/Single_Sign_On/Configure_browsers_to_use_Kerberos.html
https://active-directory-wp.com/docs/Networking/Single_Sign_On/Kerberos_SSO_with_Apache_on_Linux.html
http://wiki.deimos.fr/Authentification_SSO_depuis_Apache_sur_backend_AD_via_Kerberos.html
https://docs.microsoft.com/fr-fr/windows-server/administration/windows-commands/ktpass
https://docs.oracle.com/cd/E24843_01/html/E23285/aadmin-10.html
https://social.technet.microsoft.com/wiki/contents/articles/36470.active-directory-using-kerberos-keytabs-to-integrate-non-windows-systems.aspx
https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-20-04-fr
https://datacadamia.com/iam/kerberos/spn
https://web.mit.edu/kerberos/krb5-1.4/krb5-1.4.1/doc/krb5-admin/krb5.conf.html#krb5.conf
https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.html
https://translate.google.com/translate?hl=&sl=en&tl=fr&u=https%3A%2F%2Fweb.mit.edu%2Fkerberos%2Fkrb5-1.12%2Fdoc%2Fuser%2Fuser_commands%2Fkinit.html
https://github.com/saidaZgl/Trombinoscope
https://httpd.apache.org/docs/2.4/fr/howto/access.html