Hide navigation sidebar
Hide table of contents sidebar
Skip to content
SAMBA 4.22
Back to top
View this page
Toggle table of contents sidebar

# 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 :

>     [libdefaults]
>     ...
>     default_etypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
>     ...

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.