Atténuer les risques d'ingénierie sociale avec un trombinoscope

Intro


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)

Mise en place


prérequis

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

  • Serveur AD
  • Compte de service AD
  • Debian récupère le/les DNS de l'AD via un DHCP (important pour les connexions), sinon il faudra le faire manuellement
  • Que vous avez un serveur NTP fonctionnel sur lequel se base l'AD et le serveur Debian (le même serveur)

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

  • Serveur apache avec authentification AD sur Debian 10
  • Trombinoscope récupérer sur internet et modifier pour nos besoins

Installation

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 :

  • Default Kerberos version 5 realm : ad.lan
  • Kerberos servers for your realm: srv
  • Administrative server for your Kerberos realm: 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

Configuration sur l'AD


Ajout DNS

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

Création du fichier keytab avec ktpass

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

Configuration sur Debian

Sécurisation de la clé

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

Vérification des noms

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

Paramétrage de KRB5

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

Test de fonctionnement

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

Configuration d'APACHE

activation du module SSL

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
  • Concernant openssl req -new -key /etc/ssl/private/trombinoscope.key -out /etc/ssl/trombinoscope.csr remplissez Common Name (e.g. server FQDN or YOUR name) avec sso.ad.lan.
  • -days 365 indique que l'on génère un certificat valide pour 1 an, vous pouvez augmenter ou réduire la durée.

Automatiser le renouvellement de certificat

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

Création du virtualhost trombinoscope

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>
Explication du fichier

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
le / indique le répertoire courant, soit /var/www/trombinoscope. la vérification kerberos ne s'effectuera que dans ce dossier
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

Mise en place du site

j'ai récupéré le trombinoscope fait pas Saïda : saidaZgl
Pour nos besoins j'ai :

  • Mis les scripts (css et js) en local, au lieu d'aller les chercher sur internet
  • Modifier les dates d'arrivée par les codes d'authentification
  • Changé les sections pour créer : DG et DSI
  • Remplacer les photos par des photos libres de droits pour l'exemple

    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.

GPO


Il va falloir mettre en place l'une des GPO suivantes

  • Créer un raccourci sur le bureau de chaque utilisateur qui renvoie vers la page trombinoscope
  • Mettre en place une GPO utilisateur, définissant le site du trombinoscope en page principal ou en onglet supplémentaire (si l'intranet est en page principal). cela doit s'appliquer à tous les navigateurs

Sécurité


Vous avez mis en place le trombinoscope avec les sécurités suivantes :

  • les utilisateurs doivent être dans l'un des réseaux autorisés par le virtualhost trombinoscope.conf d'apache2
  • ils doivent avoir un compte AD pour voir les pages

Ce qu'il reste à faire

Au niveau des utilisateurs

il va falloir sensibiliser les utilisateurs à l'utilisation du trombinoscope, pour cela il faudra

  • Qu'il vous demande le code à chaque fois que vous appelez pour résoudre un problème. S'il ne vous le demande pas, indiquez-leur la démarche à suivre pour qu'il puisse utiliser le trombinoscope et vous demandez votre Prénom, Nom et code.
    • A force de les obliger à le faire ça deviendra automatique, surtout ne lâchez pas (sinon à quoi bon mettre en place le trombinoscope)
  • Cela s'applique aussi lorsqu'un membre du personnel vous contacte
    • Ce cas peut vous paraitre bizarre vu les circonstances ? Imaginer que tout votre service soit en réunion de crise. Une personne étrangère à la société (qui s'est fait passer pour un livreur) rentre dans le service puis décroche un téléphone qui sonne. Il n'a plus qu'à demander les identifiants de l'utilisateur qui les donnera pensant que c'est le support (c'est aussi pour cela qu'il faut sensibiliser les utilisateurs à ne jamais fournir leurs identifiants).

Au niveau du site

Il va falloir mettre à jour régulièrement les codes

  • définir une stratégie de changement des codes (tous les mois)
  • A chaque départ d'un membre du personnel présent dans le trombinoscope, il faudra effacer ce membre, mais aussi remplacer de nouveau tous les codes

Activer le SSO dans les navigateurs


Firefox

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

  • Dans filtrage de sécurité, enlevés 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.
  • Doublecliquez sur la GPO créée
  • Allez dans Configuration utilisateur / Stratégies / Modèles d'administration / Mozilla / Firefox / Authentification
  • Doublecliquez sur SPNEGO
  • Cocher le bouton radio Activé
  • Cliquez sur Afficher dans la partie Options (en dessous du bouton radio Activé)
  • Dans nom de la valeur, indiquée https://sso2.ad.lan
  • Cliquez sur Ok
  • Cliquez sur Ok
  • Fermer l'éditeur de GPO
  • Faites un gpupdate sur le poste d'essai
  • Relancez la session concernée

Si cela fonctionne

  • Remplacer votre poste d'essai et votre utilisateur dans filtrage de sécurité de la GPO créée par Utilisateur authentifié
  • Si vous avez déjà une GPO qui gère les paramètres liés aux navigateurs, supprimez la GPO de test et faites les modifications dans cette GPO
  • Il faudra patientez que la GPO se déploie pour tous les utilisateurs

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)

Chrome, IE, EDGE

Pour configurer le SSO sur ces 3 navigateurs, créer une GPO sur l'OU des utilisateurs

  • Dans filtrage de sécurité, enlevez 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 essais
  • Doublecliquez sur la GPO créée
  • Allez dans Configuration utilisateur / Modèles d'administration / Composant Windows / Internet Explorer / Panneau de configuration Internet / Onglet sécurité
  • Doublecliquez sur Liste des attributions de sites aux zones
  • Cocher le bouton radio Activé
  • Cliquez sur Afficher dans la partie Options (en dessous du bouton radio Activé)
  • Dans nom de la valeur, indiquée https://sso2.ad.lan
  • Dans valeur, renseigner 1
  • Cliquez sur Ok
  • Cliquez sur Ok
  • Fermer l'éditeur de GPO
  • Faites un gpupdate sur le poste d'essai

Si cela fonctionne

  • Remplacer votre poste d'essai et votre utilisateur dans filtrage de sécurité de la GPO crée par Utilisateur authentifié
  • Si vous avez déjà une GPO qui gère les paramètres IE, supprimez la GPO de test et faites les modifications dans cette GPO
  • il faudra patientez que la GPO se déploie sur tous les utilisateurs

SOURCES

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