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.