##############options de configuration du noyau # Restreint l'accès au buffer dmesg (équivalent à # CONFIG_SECURITY_DMESG_RESTRICT=y) kernel.dmesg_restrict=1 # Cache les adresses noyau dans /proc et les différentes autres interfaces , # y compris aux utilisateurs privilégiés kernel.kptr_restrict=2 # Spécifie explicitement l'espace d'identifiants de processus supporté par le # noyau , 65 536 étant une valeur donnée à titre d'exemple kernel.pid_max =65536 # Restreint l'utilisation du sous -système perf kernel.perf_cpu_time_max_percent =1 kernel.perf_event_max_sample_rate =1 # Interdit l'accès non privilégié à l'appel système perf_event_open (). Avec une # valeur plus grande que 2, on impose la possession de CAP_SYS_ADMIN , pour pouvoir # recueillir les évènements perf. kernel.perf_event_paranoid =2 # Active l'ASLR kernel.randomize_va_space =2 # Désactive les combinaisons de touches magiques (Magic System Request Key) kernel.sysrq=0 # Restreint l'usage du BPF noyau aux utilisateurs privilégiés kernel.unprivileged_bpf_disabled =1 # Arrête complètement le système en cas de comportement inattendu du noyau Linux kernel.panic_on_oops=1 #############les options de configuration du réseau IPV4 # les performances associées. net.core.bpf_jit_harden=2 # Pas de routage entre les interfaces. Cette option est spéciale et peut # entrainer des modifications d'autres options. En plaçant cette option au plus # tôt , on s'assure que la configuration des options suivantes ne change pas. net.ipv4.ip_forward=0 # Considère comme invalides les paquets reçus de l'extérieur ayant comme source # le réseau 127/8. net.ipv4.conf.all.accept_local=0 # Refuse la réception de paquet ICMP redirect. Le paramétrage suggéré de cette # option est à considérer fortement dans le cas de routeurs qui ne doivent pas # dépendre d'un élément extérieur pour déterminer le calcul d'une route. Même # pour le cas de machines non -routeurs , ce paramétrage prémunit contre les # détournements de trafic avec des paquets de type ICMP redirect. net.ipv4.conf.all.accept_redirects=0 net.ipv4.conf.default.accept_redirects=0 net.ipv4.conf.all.secure_redirects=0 net.ipv4.conf.default.secure_redirects=0 net.ipv4.conf.all.shared_media=0 net.ipv4.conf.default.shared_media=0 # Refuse les informations d'en-têtes de source routing fournies par le paquet # pour déterminer sa route. net.ipv4.conf.all.accept_source_route=0 net.ipv4.conf.default.accept_source_route=0 # Empêche le noyau Linux de gérer la table ARP globalement. Par défaut , il peut # répondre à une requête ARP d'une interface X avec les informations d'une # interface Y. Ce comportement est problématique pour les routeurs et les # équipements d'un système en haute disponibilité (VRRP...). net.ipv4.conf.all.arp_filter=1 # Ne répond aux sollicitations ARP que si l'adresse source et destination sont sur # le même réseau et sur l'interface sur laquelle le paquet a été reçu. Il est à # noter que la configuration de cette option est à étudier selon le cas d'usage. net.ipv4.conf.all.arp_ignore=2 # Refuse le routage de paquet dont l'adresse source ou destination est celle de la # boucle locale. Cela interdit l'émission de paquet ayant comme source 127/8. net.ipv4.conf.all.route_localnet=0 # Ignore les sollicitations de type gratuitous ARP. Cette configuration est # efficace contre les attaques de type ARP poisoning mais ne s'applique qu'en # association avec un ou plusieurs proxy ARP maîtrisés. Elle peut également être # problématique sur un réseau avec des équipements en haute disponibilité (VRRP...) net.ipv4.conf.all.drop_gratuitous_arp=1 # Vérifie que l'adresse source des paquets reçus sur une interface donnée aurait # bien été contactée via cette même interface. À défaut , le paquet est ignoré. # Selon l'usage , la valeur 1 peut permettre d'accroître la vérification à # l'ensemble des interfaces , lorsque l'équipement est un routeur dont le calcul de # routes est dynamique. Le lecteur intéressé est renvoyé à la RFC3704 pour tout # complément concernant cette fonctionnalité. net.ipv4.conf.default.rp_filter=1 net.ipv4.conf.all.rp_filter=1 # Cette option ne doit être mise à 1 que dans le cas d'un routeur , car pour ces # équipements l'envoi de ICMP redirect est un comportement normal. Un équipement # terminal n'a pas de raison de recevoir un flux dont il n'est pas destinataire et # donc d'émettre un paquet ICMP redirect. net.ipv4.conf.default.send_redirects=0 net.ipv4.conf.all.send_redirects=0 # Ignorer les réponses non conformes à la RFC 1122 net.ipv4.icmp_ignore_bogus_error_responses =1 # Augmenter la plage pour les ports éphémères net.ipv4.ip_local_port_range =32768 65535 # RFC 1337 net.ipv4.tcp_rfc1337=1 # Utilise les SYN cookies. Cette option permet la prévention d'attaque de # type SYN flood. net.ipv4.tcp_syncookies=1 ###########les options de configuration des systèmes de fichiers # Désactive la création de coredump pour les exécutables setuid # Notez qu'il est possible de désactiver tous les coredumps avec la # configuration CONFIG_COREDUMP=n fs.suid_dumpable = 0 # Disponible à partir de la version 4.19 du noyau Linux , permet d'interdire # l'ouverture des FIFOS et des fichiers "réguliers" qui ne sont pas la propriété # de l'utilisateur dans les dossiers sticky en écriture pour tout le monde. fs.protected_fifos=2 fs.protected_regular=2 # Restreint la création de liens symboliques à des fichiers dont l'utilisateur # est propriétaire. Cette option fait partie des mécanismes de prévention contre # les vulnérabilités de la famille Time of Check - Time of Use (Time of Check - # Time of Use) fs.protected_symlinks =1 # Restreint la création de liens durs à des fichiers dont l'utilisateur est # propriétaire. Ce sysctl fait partie des mécanismes de prévention contre les # vulnérabilités Time of Check - Time of Use , mais aussi contre la possibilité de # conserver des accès à des fichiers obsolètes fs.protected_hardinks =1 #Désactivation de Ipv6 net.ipv6.conf.default.disable_ipv6=1 net.ipv6.conf.all.disable_ipv6=1 ######## Options mémoire # Cette option a remplacé CONFIG_DEBUG_RODATA dans le noyau (>=4.11) # qui était une dépendance de CONFIG_DEBUG_KERNEL CONFIG_STRICT_KERNEL_RWX=y # CONFIG_ARCH_OPTIONAL_KERNEL_RWX et CONFIG_ARCH_HAS_STRICT_KERNEL_RWX sont # des dépendances de CONFIG_STRICT_KERNEL_RWX CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y # Vérifie et rapporte les permissions de mapping mémoire dangereuses , par # exemple , lorsque les pages noyau sont en écriture et sont exécutables. # Cette option n'est pas disponible sur l'ensemble des architectures # matérielles (x86 >=4.4, arm64 >=4.10, etc.). CONFIG_DEBUG_WX=y # Désactive le système de fichiers utilisé uniquement dans le cadre de # débogage. Protéger ce système de fichiers nécessite un travail # supplémentaire. CONFIG_DEBUG_FS=n # A partir de la version 4.18 du noyau , ces options ajoutent # -fstack -protector -strong à la compilation afin de renforcer le stack canary , # il est nécessaire d'avoir une version de GCC au moins égale à 4.9. # Avant la version 4.18 du noyau linux , il faut utiliser les options # CONFIG_CC_STACKPROTECTOR et CONFIG_CC_STACKPROTECTOR_STRONG CONFIG_STACKPROTECTOR=y CONFIG_STACKPROTECTOR_STRONG=y # Interdit l'accès direct à la mémoire physique. # En cas de besoin et uniquement dans ce cas , il est possible d'activer un # accès strict à la mémoire , limitant ainsi son accès , avec les options # CONFIG_STRICT_DEVMEM=y et CONFIG_IO_STRICT_DEVMEM=y #CONFIG_DEVMEM is not set # Détecte la corruption de la pile pendant l'appel à l'ordonnanceur CONFIG_SCHED_STACK_END_CHECK=y # Impose une vérification des limites du mapping mémoire du processus au # moment des copies de données. CONFIG_HARDENED_USERCOPY=y # Interdit de revenir à une vérification du mapping auprès de l'allocateur si # l'option précédente a échoué (<=5.15) #CONFIG_HARDENED_USERCOPY_FALLBACK is not set # Ajout de pages de garde entre les piles noyau. Cela protège contre les effets # de bord des débordements de pile (cette option n'est pas supportée sur toutes # les architectures). CONFIG_VMAP_STACK=y # Vérifications exhaustives sur les compteurs de référence du noyau (<=5.4) CONFIG_REFCOUNT_FULL=y # Vérifie les actions de recopie mémoire qui pourraient provoquer une corruption # de structure dans les fonctions noyau str*() et mem*(). Cette vérification est # effectuée à la compilation et à l'exécution. CONFIG_FORTIFY_SOURCE=y # Désactive l'usage dangereux de l'ACPI , pouvant entrainer une écriture directe # en mémoire physique. #CONFIG_ACPI_CUSTOM_METHOD is not set # Interdit tout accès direct à la mémoire du noyau à partir du userspace (<=5.12) #CONFIG_DEVKMEM is not set # Interdit la fourniture de la disposition de l'image noyau #CONFIG_PROC_KCORE is not set # Désactive la rétrocompatibilité VDSO , qui rend impossible l'usage de l'ASLR #CONFIG_COMPAT_VDSO is not set # Empèche les utilisateurs non privilégiés de récupérer des adresses noyau # avec dmesg(8) CONFIG_SECURITY_DMESG_RESTRICT=y # Active les retpoline qui sont nécessaires pour se protéger de Spectre v2 # GCC >= 7.3.0 est requis. CONFIG_RETPOLINE=y # Désactive la table vsyscall. Elle n'est plus requise par la libc et est une # source potentielle de ROP gadgets. CONFIG_LEGACY_VSYSCALL_NONE=y CONFIG_LEGACY_VSYSCALL_EMULATE=n CONFIG_LEGACY_VSYSCALL_XONLY=n CONFIG_X86_VSYSCALL_EMULATION=n ########les options de compilation pour les structures de données du noyau # Vérifie les structures de gestion des autorisations. CONFIG_DEBUG_CREDENTIALS=y # Vérifie les structures de notification. CONFIG_DEBUG_NOTIFIERS=y # Vérifie les listes noyau. CONFIG_DEBUG_LIST=y # Vérifie les tables de Scatter -Gather du noyau. CONFIG_DEBUG_SG=y # Génère un appel à BUG() en cas de détection de corruption. CONFIG_BUG_ON_DATA_CORRUPTION=y #########options d’allocution mémoire # Positionne les informations de chaînage des blocs libres de l'allocateur de # manière aléatoire. CONFIG_SLAB_FREELIST_RANDOM=y # CONFI_SLAB est une dépendance de CONFIG_SLAB_FREELIST_RANDOM CONFIG_SLUB=y # Protège les métadonnées de l'allocateur en intégrité. CONFIG_SLAB_FREELIST_HARDENED=y # A partir de la version 4.13 du noyau , cette option désactive le merge des # caches SLAB CONFIG_SLAB_MERGE_DEFAULT=n # Active la vérification des structures de l'allocateur mémoire et réinitialise # à zéro les zones allouées à leur libération (nécessite l'activation de # l'option de configuration de la mémoire page_poison=on ajoutée à la liste des # paramètres du noyau lors du démarrage). Il est préférable d'utiliser # l'option de configuration slub_debug de la mémoire ajoutée à la liste des # paramètres du noyau lors du démarrage car elle permet une gestion plus fine # du slub debug. CONFIG_SLUB_DEBUG=y # Nettoie les pages mémoire au moment de leur libération. CONFIG_PAGE_POISONING=y # Nettoyage en profondeur désactivé. Cette option a un coût important; # cependant si l'impact en performance est compatible avec le besoin # opérationnel de l'équipement il est recommandé de l'activer (<=5.10) CONFIG_PAGE_POISONING_NO_SANITY=y # Le nettoyage des pages mémoire est effectué avec une réécriture de zéros en # lieu et place des données (<=5.10) CONFIG_PAGE_POISONING_ZERO=y # Désactive la rétrocompatibilité avec brk() qui rend impossible une # implémentation de brk() avec l'ASLR. #CONFIG_COMPAT_BRK is not set ################options de compilation pour la gestion du noyau CONFIG_MODULES=y # Cette option a remplacé CONFIG_DEBUG_SET_MODULE_RONX dans le noyau (>=4.11) CONFIG_STRICT_MODULE_RWX=y # Les modules doivent être signés. Attention , les modules ne doivent pas être # strippés après signature. CONFIG_MODULE_SIG=y # Empèche le chargement des modules non signés ou signés avec une clé qui ne # nous appartient pas. CONFIG_MODULE_SIG_FORCE=y # Activer CONFIG_MODULE_SIG_ALL permet de signer tous les modules # automatiquement pendant l'étape "make modules_install", sans cette option # les modules doivent être signés manuellement en utilisant le script # scripts/sign -file. L'option CONFIG_MODULE_SIG_ALL dépend de CONFIG_MODULE_SIG # et CONFIG_MODULE_SIG_FORCE , elles doivent donc être activées. CONFIG_MODULE_SIG_ALL=y # La signature des modules utilise SHA512 comme fonction de hash CONFIG_MODULE_SIG_SHA512=y CONFIG_MODULE_SIG_HASH ="sha512" # Indique le chemin vers le fichier contenant à la fois la clé privée et son # certificat X.509 au format PEM utilisé pour la signature des modules , # relatif à la racine du noyau. CONFIG_MODULE_SIG_KEY ="certs/signing_key.pem" ##############les évènements anormaux # Émet un rapport sur les conditions d'appel à la macro noyau BUG() # et tue le processus à l'origine de l'appel. Ne pas positionner cette variable # peut passer sous silence un certain nombre d'erreurs critiques. CONFIG_BUG=y # Arrête le système en cas d'erreur critique pour couper court à tout comportement # erroné. CONFIG_PANIC_ON_OOPS=y # Empêche le redémarrage de la machine suite à un panic ce qui coupe court à # toute tentative d'attaque par force brute. Ceci a évidemment un impact fort # sur des serveurs en production. CONFIG_PANIC_TIMEOUT=-1 ##########Primitives de sécurité du noyau # Active la possibilité de filtrer les appels système faits par une # application. CONFIG_SECCOMP=y # Active la possibilité d'utiliser des script BPF (Berkeley Packet Filter). CONFIG_SECCOMP_FILTER=y # Active les primitives de sécurité du noyau Linux , nécessaire pour les LSM. CONFIG_SECURITY=y # Active Yama , qui permet de limiter simplement l'usage de l'appel système # ptrace(). Une fois les modules de sécurité utilisés par le système # sélectionné , il convient de désactiver le support des autres modules de # sécurité dans le noyau afin de réduire la surface d'attaque. CONFIG_SECURITY_YAMA=y # Assure que les structures noyau associées aux LSM sont toujours mappées en # lecture seule après le démarrage du système. Dans le cas où SELinux est # utilisé , il faut s'assurer que CONFIG_SECURITY_SELINUX_DISABLE is not set , # pour que cette option soit disponible. Il n'est alors plus possible de # désactiver un LSM une fois le noyau démarré. Il est en revanche encore # possible de le faire en modifiant la ligne de commande du noyau. Pour le # noyau 4.18 les LSM présents sont: AppArmor , LoadPin , SELinux , Smack , TOMOYO # et Yama. #CONFIG_SECURITY_WRITABLE_HOOKS is not set #########Plugin du compilateur # Active le support des plugins du compilateur (implique l'usage de GCC). CONFIG_GCC_PLUGINS=y # Amplifie la génération d'entropie au démarrage de l'équipement pour ceux # ayant des sources d'entropie inappropriées CONFIG_GCC_PLUGIN_LATENT_ENTROPY=y # Nettoie le contenu de la pile au moment de l'appel système exit. CONFIG_GCC_PLUGIN_STACKLEAK=y # Impose l'initialisation des structures en mémoire pour éviter la fuite de # données par superposition avec une ancienne structure. CONFIG_GCC_PLUGIN_STRUCTLEAK=y # Globalisation de l'option précédente au cas du passage de structure par # référence entre fonction si celles -ci ont des champs non initialisés. CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL=y # Construit un plan mémoire aléatoire pour les structures système du noyau. # Cette option a un impact fort sur les performances. L'option # CONFIG_GCC_PLUGIN_RANDSTRUCT_PERFORMANCE=y est à utiliser en substitution si # cet impact n'est pas acceptable. CONFIG_GCC_PLUGIN_RANDSTRUCT=y ########Options de compilation pour la pile réseau # Désactive le plan IPv6 #CONFIG_IPV6 option set. # Permet de prévenir les attaques de type SYN flood. CONFIG_SYN_COOKIES=y ########Compilation pour les comportement du noyau # Interdit l'exécution d'une nouvelle image noyau à chaud. #CONFIG_KEXEC is not set # Interdit le passage en mode hibernation , qui permet de substituer l'image # noyau à son insu. #CONFIG_HIBERNATION is not set # Désactive le support de format binaire arbitraire. #CONFIG_BINFMT_MISC is not set # Impose l'utilisation des ptys modernes (devpts) dont on peut contrôler le # nombre et l'usage. #CONFIG_LEGACY_PTYS is not set # Si le support des modules n'est pas absolument nécessaire celui -ci doit être # désactivé. #CONFIG_MODULES is not set ######Compilation spécifique 32 bits # Active le support des extensions d'adresse physique , ce qui est un prérequis # pour le support du bit de permission NX dans la table des pages qui permet de # marquer certaines pages comme non exécutables. CONFIG_HIGHMEM64G=y CONFIG_X86_PAE=y # Interdit l'utilisation d'adresses mémoire en dessous d'une certaine valeur # (contre -mesure contre les null pointer dereference). CONFIG_DEFAULT_MMAP_MIN_ADDR =65536 # Rend non prédictible l'adresse de base du noyau. Cette option complexifie la # tâche d'un attaquant. CONFIG_RANDOMIZE_BASE=y ######## Compilation spécifique 64 bits # Activate le mode complet 64 bits. CONFIG_X86_64=y # Interdit l'utilisation d'adresses mémoire en dessous d'une certaine valeur # (contre -mesure contre les null pointer dereference). CONFIG_DEFAULT_MMAP_MIN_ADDR =65536 # Rend non prédictible l'adresse de base du noyau , cette option complexifie # la tâche d'un attaquant. CONFIG_RANDOMIZE_BASE=y # Rend non prédictible l'adresse à laquelle les composants du noyau sont # exposés dans l'espace d'adressage des processus. CONFIG_RANDOMIZE_MEMORY=y # Contre -mesure à l'attaque Meltdown. CONFIG_PAGE_TABLE_ISOLATION=y # Désactive la rétro -compatibilité 32 bits , ce qui permet de réduire la # surface d'attaque mais empêche d'exécuter des binaires 32 bits. #CONFIG_IA32_EMULATION is not set # Interdit la surcharge par processus de la Local Descriptor Table # (mécanisme lié à l'usage de la segmentation). #CONFIG_MODIFY_LDT_SYSCALL is not set ########## Compilation ARM 32 bits # Interdit l'utilisation d'adresses mémoire en dessous d'une certaine valeur # (contre -mesure contre les null pointer dereference). CONFIG_DEFAULT_MMAP_MIN_ADDR =32768 # Maximise la taille de la mémoire virtuelle des processus (et de l'ASLR # afférent). CONFIG_VMSPLIT_3G=y # Interdit les mappings mémoire RWX. CONFIG_STRICT_MEMORY_RWX=y # Interdit les accès par le noyau à la mémoire utilisateur (mécanisme # équivalent sur ARM à SMAP sur x86_64). CONFIG_CPU_SW_DOMAIN_PAN=y # Cette option de compatibilité avec l'ancienne ABI ARM est dangereuse et # ouvre la voie à diverses attaques. #CONFIG_OABI_COMPAT is unset ######### Compilation ARM 64 bits # (contre -mesure contre les null pointer dereference). CONFIG_DEFAULT_MMAP_MIN_ADDR =32768 # Rend non prédictible l'adresse de base du noyau , cette option complexifie # la tâche d'un attaquant. L'entropie nécessaire à la génération de l'aléa # doit être fournie par l'UEFI ou, à défaut , par le chargeur de démarrage. CONFIG_RANDOMIZE_BASE=y # Interdit les accès par le noyau à la mémoire utilisateur (mécanisme # équivalent sur ARM à SMAP sur 86_64). CONFIG_ARM64_SW_TTBR0_PAN=y # Contre mesure à l'attaque Meltdown. CONFIG_UNMAP_KERNEL_AT_EL0=y