Renforcer la sécurité de son domaine Samba Active Directory

Désactiver les connections null session

Indication

Samba-AD hérite d’un comportement des domaines NT4 qui n’est plus nécessaire en mode Active Directory.

En effet, on peut récupérer la liste des utilisateurs sans être loggé sur le domaine, ce qui n’est pas très élégant.

Par exemple, la commande suivante renvoie l’ensemble des utilisateurs du domaine (remplacer l’adresse ip par celle de votre contrôleur de domaine et appuyer sur Entrée au moment du prompt) :

rpcclient -U "" -c enumdomusers 10.0.0.11
  • pour éviter ce listing, rajouter la ligne suivante dans la section [global] de /etc/samba/smb.conf :

    restrict anonymous = 2
    

Désactiver NetBIOS

Indication

Si la configuration DNS est correctement faite, on peut désactiver les anciens protocols NetBIOS qui ne sont plus nécessaires.

  • rajouter dans la section [global] du /etc/samba/smb.conf :

    disable netbios = yes
    smb ports = 445
    

Désactiver le support des imprimantes

Indication

Le contrôleur de domaine ne doit pas être configuré avec le rôle de serveur d’impression.

Un serveur Samba configuré en serveur de fichiers est mieux adapté pour cette fonction.

  • désactiver le rôle impression qui est actif par défaut sous Samba, rajouter dans la section [global] du /etc/samba/smb.conf :

    printcap name = /dev/null
    load printers = no
    disable spoolss = yes
    printing = bsd
    

Désactiver NTLMv1

Le protocole d’authentification NTLMv1 date du début des années 90 et a été rapidement remplacé par NTLMv2 en raison de ses failles de sécurité. Il n’est plus utile sur les réseaux moderne sauf dans le cas d’utilisation de MS-CHAP-v2 qui est le protocole par défaut pour l’authentification 802.1x sur les postes Windows (par exemple authentification Radius pour les connexions Wifi). Dans ce cas d’usage MS-CHAP-v2, l’usage de NTLMv1 peut être toléré dans une certaine mesure car il est encapsulé dans un autre protocole plus robuste.

Samba dispose d’une option permettant de désactiver NTLMv1 globalement sauf si il est utilisé dans le cadre de l’authentification MS-CHAP-v2. Il est donc conseillé de rajouter le paramètre suivant à votre fichier /etc/samba/smb.conf.

[global]
...
ntlm auth = mschapv2-and-ntlmv2-only

Remplacer le certificat par un certificat validé par votre Organisation

Indication

Contrairement à l’AD Microsoft, Samba-AD active par défaut le support LDAP STARTTLS et LDAPS. Pour cela un certificat autosigné est généré à l’installation. Il est important de le remplacer par un certificat valable au sein de votre Organisation.

  • Ajouter les directives suivantes dans /etc/samba/smb.conf en les personnalisant pour votre contexte :

    [global]
    ...
    tls enabled = yes
    tls keyfile = /etc/samba/tls/srvads.mydomain.lan.key
    tls certfile = /etc/samba/tls/srvads.mydomain.lan.crt
    tls cafile = /etc/samba/tls/mondomaine_CA.crt
    

Générer des hashes de mot de passe supplémentaires

Indication

Il est fréquent qu’une LDAP d’authentification existe en parallèle de votre Active Directory. Pour permettre de transférer des hashes sur une autre base d’authentification, il est possible de demander à Samba-AD de générer des hashes supplémentaires quand un utilisateur change son mot de passe.

  • Rajouter la ligne suivante au /etc/samba/smb.conf :

    [global]
    ...
    password hash userPassword schemes = CryptSHA256 CryptSHA512
    

Protéger les champs DNS wpad et isatap

Les serveurs AD Windows disposent d’une DNS Global Query Block List avec deux entrées :

  • wpad ;

  • isatap ;

La clef de registre GlobalQueryBlockList liste ces deux enregistrements DNS pour éviter qu’une entité non-autorisée agissant sur le réseau local ne crée ces enregistrements et déroute le trafic réseau. WPAD est notamment configuré par défaut sur les navigateurs Internet Explorer.

Même si les configurations wpad et isatap ne sont pas utilisées, il est quand même important de créer ces deux entrées pour éviter qu’elles puissent être utilisées de manière détournée car dans Samba-AD, il n’y a pas de manière de bloquer la création d’entrées comme avec Microsoft-AD.

Pour en savoir plus :

https://technet.microsoft.com/en-us/library/cc794902%28v=ws.10%29.aspx

samba-tool dns add `hostname -s` `hostname -d` wpad A 127.0.0.1 -P
samba-tool dns add `hostname -s` `hostname -d` isatap A 127.0.0.1 -P

Limiter la plage des ports dynamiques

Par défaut Active Directory utilise une plage dynamique très large pour les appels MS-RPC.

Il est possible et recommandé de restreindre cette plage.

  • Pour cela rajouter la ligne suivante à la section [global] du fichier /etc/samba/smb.conf.

    rpc server dynamic port range = 50000-55000
    
  • Ensuite reconfigurer le firewall pour limiter la plage des ports ouverts :

    firewall-cmd --zone=public --remove-port=49152-65535/tcp --permanent
    firewall-cmd --zone=public --add-port=50000-50500/tcp --permanent
    

Limiter les sous-réseaux pouvant faire de la récursion DNS

Dans la configuration named, remplacer la ligne :

allow-query  { any; };

… avec la liste des sous-réseaux autorisés :

allow-query { 10.40.0.0/16;
              10.20.0.0/16;
              };

Auditer les requêtes DNS Bind

Activer l’historisation des requêtes DNS Bind

Dans la configuration suivante on va configurer le service DNS Bind pour historiser toutes les requêtes DNS qui arrivent sur le serveur. Ces requêtes peuvent être ensuite renvoyées vers un concentrateur de logs.

  • Créer /var/log/bind/audit.log et /var/log/bind/requests.log :

    mkdir -p /var/log/bind/
    touch /var/log/bind/audit.log
    touch /var/log/bind/requests.log
    chown -R bind /var/log/bind
    chmod u+rw /var/log/bind
    
  • Créer un fichier de configuration des logs /etc/named/log.conf que l’on va inclure dans la configuration Bind9 :

    logging {
         channel default_syslog {
                 // standard syslog logging
                 syslog local2;
         };
         channel audit_log {
                 // audit log except DNS requests
                 file "/var/log/bind/audit.log" size 10m;
                 severity debug;
                 print-category yes;
                 print-severity yes;
                 print-time yes;
         };
         channel requests_log {
                 // DNS requests logging
                 file "/var/log/bind/requests.log" size 10m;
                 severity debug;
                 print-time yes;
                 print-category yes;
                 print-severity yes;
         };
         channel null {
                 null;
         };
         category default { default_syslog; };
         category general { audit_log; };
         category security { audit_log; };
         category config { audit_log; };
         category resolver { audit_log; };
         category xfer-in { audit_log; };
         category xfer-out { audit_log; };
         category notify { audit_log; };
         category client { audit_log; };
         category network { audit_log; };
         category update { audit_log; };
         category queries { requests_log; audit_log; };
         category lame-servers { null; };
       };
    
  • Inclure le fichier de configuration dans /etc/named.conf :

    # Debian
    include "/etc/bind/log.conf";
    
    # RedHat8 and derived distributions
    include "/etc/named/log.conf";
    
  • Créer /var/log/bind/audit.log et /var/log/bind/requests.log :

    # Debian
    chown bind:root "/var/log/bind/audit.log";
    chown bind:root "/var/log/bind/requests.log";
    
    # RedHat8 and derived distributions
    chown named:root "/var/log/bind/audit.log";
    chown named:root "/var/log/bind/requests.log";
    
  • Activer le log de query DNS :

    rndc querylog on
    
  • Redémarrer Bind9 et vérifier que Bind9 est bien démarré :

    systemctl restart named
    

Activer la rotation des journaux d’historisation des requêtes Bind

La volumétrie des journaux d’historisation peut grandit très vite sur ce genre d’audit, donc on met en place une rotation journalière avec une conservation de 7 jours :

  • Créer le fichier /etc/logrotate.d/bind :

    /var/log/bind/audit.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 644 bind bind
    postrotate
    systemctl reload bind9 > /dev/null
    endscript
    }
    
    /var/log/bind/requests.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 644 bind bind
    postrotate
    systemctl reload bind9 > /dev/null
    endscript
    }
    
  • Enclencher la rotation des journaux d’historisation :

    logrotate -d /etc/logrotate.d/bind
    

Désactiver la rotation des journaux d’historisation des requêtes Bind

  • Relancer la commande avec l’argument off ;

    rndc querylog off
    

Auditer les accès aux répertoires SYSVOL et NetLogon

  • Rajouter dans /etc/samba/smb.conf :

    [global]
    ...
    full_audit:failure = none
    full_audit:success = pwrite write renameat
    full_audit:prefix = IP=%I|USER=%u|MACHINE=%m|VOLUME=%S
    full_audit:facility = local7
    full_audit:priority = NOTICE
    
  • Ensuite dans les sections [sysvol] et [netlogon], rajouter :

    [sysvol]
    ...
    vfs objects = dfs_samba4, acl_xattr, full_audit
    [netlogon]
    ...
    vfs objects = dfs_samba4, acl_xattr, full_audit
    

Limiter les suites de chiffrement de kerberos

Les méthodes de chiffrement kerberos autorisée sont contrôlées par le fichier krb5.conf. Il y a une différence dans la gestion de ce fichier krb5.conf selon que vous êtes sur un serveur de fichiers ou un contrôleur de domaine.

Contrôleur de domaine

Le fichier krb5.conf qui est utilisé est /var/lib/samba/private/krb5.conf. Si vous avez suivi cette documentation, il devrait être un lien symbolique vers le fichier /etc/krb5.conf. Donc, afin de limiter les méthodes de chiffrement kerberos, vous devez modifier ce fichier.

Par défaut, si vous n’avez que des clients Win7 ou plus, vous pouvez limiter la suite kerberos à AES uniquement (aes256-cts-hmac-sha1-96 et aes128-cts-hmac-sha1-96). Si vous avez encore des périphériques WinXP, ou si vous utilisez pdbedit --set-nt-hash pour l’injection de hash, vous devez également conserver arcfour-hmac-md5.

DES est désactivé par défaut, cf https://wiki.samba.org/index.php/Samba_Security_Documentation#Kerberos_2.

Vous pouvez ajouter ce paramètre au fichier /etc/krb5.conf afin de restreindre à AES seulement :

Ces paramètres par défaut ne sont pas correctement définis dans l’arbre LDAP. En effet, la valeur par défaut pour un nouveau contrôleur de domaine Samba est : msDS-SupportedEncryptionTypes : 31 (support pour DES+A1:C33_CBC_MD5, DES_CBC_MD5, RC4, AES 128, AES 256). Il doit être changé en « msDS-SupportedEncryptionTypes : 28 » pour refléter la valeur réelle (support pour « RC4, AES 128, AES 256 »). Vous risquez d’avoir des faux positifs avec vos outils de contrôle de sécurité si vous gardez la valeur par défaut. Cette valeur n’est pas utilisée par le processus ADDC de Samba lui-même.

Pour plus d’informations sur msDS-SupportedEncryptionTypes, veuillez consulter https://techcommunity.microsoft.com/t5/core-infrastructure-and-security/decrypting-the-selection-of-supported-kerberos-encryption-types/ba-p/1628797.

Avec une GPO

Vous pouvez déployer une GPO appelé sec-EnforceAllowedEncryptionType, et vous pourvez la positionner à la racine de votre domaine.

Editez-la, et aller dans Configuration Ordinateur - Stratégies - Paramètres Windows - Paramètres de sécurité - Stratégies locales - Options de sécurité.

Modifiez Sécurité Réseau : Configurer les types de chiffrement autorisés pour Kerberos, et mettre AES128_HMAC_SHA1 - AES256_HMAC_SHA1 - Future encryption types.

Serveur de fichiers

Le fichier :/run/samba/smb_krb5/krb5.conf.<NETBIOS_DOMAIN_NAME> est créé au démarrage de smbd/winbind et est utilisé pour la configuration de kerberos. La suite de chiffrement est contrôlée par le paramètre Tkerberos encryption types. A moins que vous n’ayez encore des périphériques WinXP sur le réseau, vous pouvez utiliser kerberos encryption types = strong pour avoir uniquement des méthodes de chiffrement AES128 et AES256.

Par défaut, l’option kerberos encryption types = all permet l’ancien chiffrement DES qu’il vaut mieux désactiver.