Renforcement du système d'exploitation Linux

Wespten 2022-07-24 01:49:01 阅读数:779

renforcementdusystexploitationlinux

Comment renforcer autant que possibleLinuxSécurité et confidentialité de?

Toutes les commandes énumérées ci - dessous nécessiterontrootPrivilèges.Par“$”Le mot au début du symbole indique une variable,Cela peut varier d'un terminal à l'autre.

Un.、Choisissez le bonLinuxDistribution

Choisissez un bonLinuxIl y a beaucoup de facteurs dans la distribution.

  • Évitez de distribuer des paquets gelés,Parce qu'ils sont généralement en retard dans les mises à jour de sécurité.

  • Non utilisé etSystemdDistribution du mécanisme.SystemdContient beaucoup de surfaces d'attaque inutiles;Il essaie de faire plus que nécessaire,Et au - delà de ce que le système d'initialisation devrait faire.

  • UtilisermuslPar défautCBibliothèque.MuslConcentrez - vous sur la minimisation,Il en résulte une très petite surface d'attaque,Et les autresCBibliothèque(Par exempleglibc)Trop complexe,Facile à exploiter.Par exemple,AvecmuslTrès peu de trous dans,glibcPlus d'une centaine de vulnérabilités ont été divulguées au public.Même si la divulgation seuleCVELes statistiques elles - mêmes sont souvent inexactes,Mais parfois, cela peut être utilisé pour indiquer un problème excessif.MuslIl y a aussi de bonnes mesures d'atténuation des vulnérabilités,En particulier son nouveau distributeur de mémoire amélioré.

  • Il est préférable d'utiliser par défautLibreSSLAu lieu deOpenSSLDistribution de.OpenSSLContient un grand nombre de surfaces d'attaque totalement inutiles,Et suivre de mauvaises pratiques de sécurité.Par exemple,Ça resteOS / 2EtVMSSoutenir ces anciens systèmes d'exploitation qui ont des décennies d'histoire.Ces pratiques de sécurité odieuses ont conduit à desHeartbleedVulnérabilité.LibreSSL- Oui.OpenBSDDe l'équipeOpenSSLBranches, Il utilise d'excellentes pratiques de programmation et élimine de nombreuses surfaces d'attaque .InLibreSSL Au cours de la première année d'existence , Ça soulage beaucoup de trous , Il s'agit notamment de vulnérabilités très graves. .

La meilleure version utilisée comme base pour renforcer le système d'exploitation est Gentoo Linux, Parce qu'il vous permet de configurer le système avec précision , Pour obtenir les résultats souhaités ,Ce serait très utile, En particulier, il est fait référence à notre utilisation de drapeaux de compilation plus sûrs dans les chapitres suivants .

Mais,Parce queGentoo Un énorme défaut de disponibilité , Ce n'est peut - être pas facile pour beaucoup de gens .Dans ce cas,,Void LinuxDeMusl La construction est un bon compromis .

2.、Noyau

Le noyau est le noyau du système d'exploitation, Malheureusement, il est facile d'attaquer .CommeBrad Spengler Comme je l'ai dit , Peut être considéré comme le plus grand du système , Les plus vulnérables setuid Binaire racine .Donc,, Il est très important de renforcer autant que possible le noyau .

Stable vs LTSNoyau

Linux Le noyau est publié sous deux formes principales : Stabilité et soutien à long terme (LTS). La version stable est une version plus récente ,EtLTS La version de sortie est une version stable plus ancienne , Soutenu depuis longtemps . Le choix de l'une ou l'autre des distributions ci - dessus a de nombreuses conséquences .

Linux Le noyau n'est pas utilisé CVE Vulnérabilité à la sécurité de l'identité . Cela signifie que la plupart des correctifs de vulnérabilité de sécurité ne peuvent pas être rétroportés à LTSNoyau. Mais la version stable contient toutes les corrections de sécurité effectuées jusqu'à présent .

Mais, Avec ces correctifs , Un noyau stable contiendra plus de nouvelles fonctionnalités , Cela augmente considérablement la surface d'attaque du noyau , Et introduit un grand nombre de nouvelles erreurs .Au contraire.,LTS La surface d'attaque du noyau est plus petite , Parce que ces fonctions ne sont pas constamment ajoutées .

En outre, Le noyau stable comprend également des améliorations mises à jour ,Pour atténuerLTS Certaines utilisations que le noyau n'a pas . Voici quelques exemples de ces fonctions: Lockdown LSMEtSTACKLEAK GCCPlug - in.

En résumé, En choisissant stable ou LTS Compromis requis pour le noyau .LTS Le noyau a moins de puissance , Et toutes les corrections d'erreurs publiques n'ont pas été rétroportées à ce moment - là , Mais en général, il a moins de surface d'attaque , Et il y a moins de chances que des erreurs inconnues soient introduites .

Le noyau stable a plus de puissance , Et inclut toutes les corrections d'erreurs connues , Mais il a aussi une plus grande surface d'attaque et une plus grande chance d'introduire plus d'erreurs inconnues .Enfin, Il est préférable d'utiliser des LTSBranches(Par exemple:4.19Noyau).

sysctl

sysctl Est un outil qui permet à l'utilisateur de configurer certains paramètres du noyau et d'activer diverses fonctions de sécurité ou de désactiver les fonctions dangereuses pour réduire la surface d'attaque . Pour modifier temporairement les paramètres ,Vous pouvez exécuter:

sysctl -w $tunable = $value

Pour changer en permanence sysctls, Vous pouvez changer sysctlsAjouter à/etc/sysctl.confOu/etc/sysctl.dDocuments correspondants dans,Selon votreLinuxDistribution.

Voici quelques suggestions que vous devriez modifier sysctlParamètres.

kernel self-protection:

kernel.kptr_restrict=2

Le pointeur du noyau pointe vers un emplacement spécifique dans la mémoire du noyau . Ceux - ci peuvent être très utiles pour exploiter le noyau , Mais par défaut, le pointeur du noyau n'est pas caché ,Par exemple,En lisant/proc/kallsyms Vous pouvez facilement les trouver . Ce réglage est conçu pour réduire la fuite du pointeur du noyau .En plus,Vous pouvez définirkernel.kptr_restrict = 1 Pour ne jamais CAP_SYSLOG Masquer le pointeur du noyau dans le processus de fonctionnalité .

kernel.dmesg_restrict=1

dmesg Est le journal du noyau , Il expose beaucoup d'informations utiles sur le débogage du noyau , Mais ça fuit souvent des informations sensibles , Par exemple, le pointeur du noyau . Modifier ce qui précède sysctl Le réglage limite le journal du noyau à CAP_SYSLOGFonction.

kernel.printk=3 3 3 3

Bien quedmesg_restrictValeur de, Le journal du noyau sera toujours affiché dans la console pendant le démarrage . Les logiciels malveillants qui peuvent enregistrer l'écran pendant le démarrage peuvent abuser de ce malware pour obtenir des privilèges plus élevés . Cette option empêche la divulgation de ces informations . Il doit être utilisé en combinaison avec certains des paramètres de démarrage décrits ci - dessous pour être pleinement efficace .

kernel.unprivileged_bpf_disabled=1
net.core.bpf_jit_harden=2

eBPF Exposer une grande surface d'attaque , Il faut donc limiter . Ces systèmes eBPFLimité àCAP_BPFFonction(In5.8 Sur les versions précédentes du noyau CAP_SYS_ADMIN),Et activerJITTechnologie améliorée, Par exemple, liaison constante .

dev.tty.ldisc_autoload=0

Ça va charger TTY La règle de ligne est limitée à CAP_SYS_MODULEFonction, Pour empêcher un attaquant non privilégié d'utiliser TIOCSETD ioctl Charger les règles de ligne vulnérables ,Et queTIOCSETD ioctl Déjà abusé dans de nombreuses exploits .

vm.unprivileged_userfaultfd=0

serfaultfd() Les appels système sont souvent abusés pour exploiter “Après utilisation(use-after-free)”Défauts.Donc,,Lesysctl Pour utiliser ceci syscallLimité àCAP_SYS_PTRACEFonction.

kernel.kexec_load_disabled=1

kexecC'est un appel système, Pour démarrer un autre noyau au moment de l'exécution . Cette fonctionnalité peut être utilisée à mauvais escient pour charger un noyau malveillant et obtenir n'importe quelle capacité d'exécution de code en mode noyau ,C'est pourquoisysctl Les paramètres seront désactivés .

kernel.sysrq=4

SysRq La clé expose de nombreuses fonctions de débogage potentiellement dangereuses à un utilisateur non privilégié . Contrairement aux hypothèses habituelles ,SysRq Il ne s'agit pas seulement d'attaques physiques , Et il peut être déclenché à distance .Lesysctl La valeur de permet à l'utilisateur d'utiliser uniquement SAKLa clé, C'est pour un accès sécurisé rootC'est indispensable..Ou, Vous pouvez simplement définir la valeur à 0Pour désactiver complètementSysRq.

kernel.unprivileged_userns_clone=0

L'espace de noms d'utilisateur est une fonctionnalité dans le noyau , Conçu pour améliorer le bac à sable et le rendre accessible aux utilisateurs non privilégiés ,Mais, Cette fonctionnalité expose d'importantes surfaces d'attaque du noyau , Pour une mise à jour des privilèges ,C'est pourquoisysctl Limiter l'utilisation de l'espace de noms d'utilisateur à CAP_SYS_ADMINFonction. Pour les bacs à sable sans privilèges , Il est recommandé d'utiliser un setuidBinaires, Afin de minimiser les possibilités d'escalade des privilèges . Ce sujet sera discuté plus en détail dans la section sur les bacs à sable .

Votre attention, s'il vous plaît.,Bien quesysctl Seulement dans certains Linux Existe dans la distribution , Parce qu'il a besoin d'un correctif du noyau . Si votre noyau ne contient pas ce correctif ,Puis vous pouvez définiruser.max_user_namespaces = 0 Pour désactiver complètement l'espace de noms d'utilisateur (Y compris:rootUtilisateurs).

kernel.unprivileged_userns_clone=0

Les événements d'utilisation de l'énergie augmentent considérablement la surface d'attaque du noyau , Et a conduit à un grand nombre de vulnérabilités .Ici.sysctl Les paramètres limitent toute utilisation des événements de performance à CAP_PERFMONFonction(5.8 La version précédente du noyau était CAP_SYS_ADMIN).

Votre attention, s'il vous plaît.,Ici.sysctl La configuration nécessite des correctifs du noyau dans certaines distributions .Sinon, Ce réglage est équivalent à kernel.perf_event_paranoid = 2, Il ne limite qu'un sous - ensemble de cette fonctionnalité .

Réseau:

net.ipv4.tcp_syncookies=1

Cela aide à prévenirSYNInondations, Cette attaque est une forme d'attaque par déni de service ,Dans une telle attaque, L'attaquant envoie beaucoup de faux SYNDemande, Pour tenter de consommer suffisamment de ressources pour que le système ne réponde pas au trafic légitime .

net.ipv4.tcp_rfc1337=1

Ceci est fait en jetant la prise dans l'état d'attente RST Paquets pour empêcher time-waitStatut.

net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.default.rp_filter=1

Ceux - ci permettent la validation des sources , Pour vérifier les paquets reçus de toutes les interfaces réseau de l'ordinateur .

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.ipv6.conf.all.accept_redirects=0
net.ipv6.conf.default.accept_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0

Ces paramètres sont désactivés ICMPRedirection, Pour prévenir les attaques d'intermédiaires et minimiser les fuites d'information .

net.ipv4.icmp_echo_ignore_all=1

Ce paramètre permet à votre système d'ignorer tous les ICMPDemande,Pour éviterSmurfAttaque, Rendre plus difficile l'énumération des appareils sur le réseau , Et empêcher le passage ICMP L'horodatage identifie l'empreinte de l'horloge .

net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0
net.ipv6.conf.all.accept_source_route=0
net.ipv6.conf.default.accept_source_route=0

Le routage source est un mécanisme qui permet aux utilisateurs de rediriger le trafic réseau . Comme cela peut être utilisé pour effectuer des attaques intermédiaires ,Dans l'attaque de l'intermédiaire, Rediriger le trafic à des fins malveillantes , Par conséquent, le réglage ci - dessus désactivera cette fonction .

net.ipv6.conf.all.accept_ra=0
net.ipv6.conf.default.accept_ra=0

MalicieuseIPv6 Les annonces de routage peuvent provoquer des attaques intermédiaires , Il doit donc être désactivé .

net.ipv4.tcp_sack=0
net.ipv4.tcp_dsack=0
net.ipv4.tcp_fack=0

DésactiverTCP SACK.ACK Souvent utilisé , Et dans de nombreux cas, ce n'est pas nécessaire , Donc si vous n'en avez pas besoin , Il doit être désactivé .

Espace utilisateur:

kernel.yama.ptrace_scope=2

ptraceC'est un appel système, Il permet au programme de déboguer 、 Modifier et vérifier un autre processus en cours , Cela permet aux attaquants de modifier facilement la mémoire d'autres programmes en cours d'exécution .Le réglage vaptrace L'utilisation est limitée à CAP_SYS_PTRACEProcessus fonctionnel.Ou,Oui.sysctlSet to3Pour désactiver complètementptrace.

vm.mmap_rnd_bits=32
vm.mmap_rnd_compat_bits=16

ASLR Est une mesure commune d'atténuation des vulnérabilités , Il permet de randomiser l'emplacement des parties critiques du processus en mémoire . Cela pourrait rendre plus difficile l'exploitation de diverses vulnérabilités , Parce qu'ils ont d'abord besoin de fuites d'information . Les paramètres ci - dessus ont été ajoutés pour mmap ASLR Nombre de bits d'entropie , Ce qui améliore son efficacité .

Cessysctls La valeur de doit être basée sur CPU Configuration de l'architecture . Les valeurs ci - dessus correspondent à x86Compatible avec, Mais d'autres architectures peuvent varier .

fs.protected_symlinks=1
fs.protected_hardlinks=1

Seulement si en dehors du Répertoire collant qui peut être écrit globalement , .Lorsque le propriétaire du lien symbolique et du suiveur correspond ou que le propriétaire du Répertoire correspond au propriétaire du lien symbolique , Les liens symboliques ne sont autorisés que . Cela empêche également la lecture du fichier source / Création de liens durs par les utilisateurs qui écrivent l'accès . Les deux empêchent beaucoup de choses courantes TOCTOUVulnérabilité(time-of-check-to-time-of-use).

fs.protected_fifos=2
fs.protected_regular=2

Ceux - ci bloquent les environnements qui pourraient être contrôlés par l'attaquant (Par exemple, Global writable Directory )Créer un fichier dans, Cela rend les attaques de spoofing de données plus difficiles .

Paramètres de démarrage

Les paramètres de démarrage utilisent le chargeur de démarrage au démarrage (bootloader) Passer les paramètres au noyau .Similaire àsysctl, Certains paramètres peuvent être utilisés pour améliorer la sécurité . Les chargeurs de démarrage diffèrent généralement dans la façon dont les paramètres de démarrage sont définis . Voici quelques exemples , Mais vous devriez étudier des choses spécifiques bootloader Pour modifier les paramètres .

Si vous utilisezGRUBEn tant que Bootstrapper,Veuillez Modifier/etc /default/grub Et ajouter des paramètres à GRUB_CMDLINE_LINUX_DEFAULT=line.

Si vous utilisezSyslinux,Veuillez Modifier/boot/syslinux/syslinux.cfgEt les ajouter àAPPENDEn ligne.

Si vous utilisezsystemd-boot, Veuillez modifier votre entrée de chargeur ,Et l'attacher àlinuxFin de la ligne.

Les paramètres suivants sont recommandés pour améliorer la sécurité .

Kernel self-protection:

slab_nomerge

Ceci désactiveraslabFusionner, Cela permettra d'éviter de surcharger les objets dans le cache fusionné et de les rendre plus difficiles à influencer slab Mise en page du cache , Cela rend l'utilisation du tas beaucoup plus difficile .

slub_debug=FZ

Ceux - ci permettent des contrôles de santé (F) Et re - partitionner (Z). Les contrôles d'intégrité ajoutent une variété de contrôles , Pour prévenir certains slab Dommages en fonctionnement . Le redépartitionnement se produit slab Ajouter des zones supplémentaires autour ,Pour détecterslab Quand est - il dépassé par sa taille réelle , Cela aide à détecter les déversements .

init_on_alloc=1 init_on_free=1

Cela permet de réinitialiser la mémoire pendant l'allocation et le temps libre , .Cela peut aider à atténuer les vulnérabilités utilisées après utilisation et à éliminer les informations sensibles de la mémoire . Si votre version du noyau est inférieure à 5.3, Ces options n'existent pas . Mais au - dessus slub_debug Ajouter après l'option “ P”,Pour obtenirslub_debug=FZPEt ajouterpage_poison=1. Parce qu'ils sont en fait une fonction de débogage , Juste un peu de sécurité , Par conséquent, ils fournissent une forme plus faible d'effacement de mémoire lorsqu'ils sont libérés .

page_alloc.shuffle=1

Cette option randomise la liste inactive de l'allocateur de page , Cela améliore la sécurité en réduisant la prévisibilité de l'allocation des pages , Et cela améliore les performances .

pti=on

Ceci permet l'isolement de la table de page du noyau , Pour atténuer l'effondrement et prévenir certains KASLRContournement.

vsyscall=none

Ceci désactiveravsyscall, Parce qu'ils sont obsolètes et ont été vDSORemplacer.vsyscall Aussi sur une adresse fixe en mémoire ,Pour en faireROP Cible potentielle de l'attaque .

debugfs=off

Ceci désactiveradebugfs, Il expose beaucoup d'informations sensibles sur le noyau .

oops=panic

Parfois, certaines vulnérabilités du noyau conduisent à ce qu'on appelle “oops”. Ce paramètre soulève le noyau pour de tels événements panic, Pour empêcher ces attaques .Mais, Parfois, un mauvais pilote peut causer un fonctionnement inoffensif , Cela peut causer un crash du système , Cela signifie que ce paramètre de démarrage ne peut être utilisé que sur certains matériels .

module.sig_enforce=1

Cela ne permet de charger que les modules du noyau qui ont été signés avec une clé valide , Rendre le chargement du module noyau malveillant plus difficile .

Cela empêche le chargement de tous les modules du noyau hors arbre (Y compris:DKMSModule), Sauf si vous l'avez signé ,Cela signifie des choses commeVirtualBoxOuNvidia Les modules tels que les pilotes peuvent ne pas être disponibles , Mais selon vos paramètres, ce n'est peut - être pas important .

lockdown=confidentiality

Verrouillage du noyau LSM De nombreuses façons d'éliminer l'abus de code d'espace utilisateur pour passer aux privilèges du noyau et extraire des informations sensibles . Afin d'établir des limites de sécurité claires entre l'espace Utilisateur et le noyau ,Ici.LSMEst nécessaire. Les options ci - dessus sont confidentialityMode( Les options les plus strictes ) Activer cette fonction dans .Cela signifiemodule.sig_enforce=1.

mce=0

Cela donnera lieu à une vérification interne ECC Erreur non disponible en mémoire panic, Et ces erreurs peuvent être exploitées .Pour aucunECCSystème de mémoire,C'est inutile..

quiet loglevel=0

Ces paramètres empêchent la fuite d'informations pendant le démarrage , Et doit être compatible avec kernel.printk sysctlUtilisation combinée.

CPUAtténuation:

Il est préférable d'activer CPUTous lesCPUMesures d'atténuation, Pour vous assurer que vous n'êtes pas affecté par une vulnérabilité connue . Voici une liste de toutes les mesures d'atténuation intégrées qui sont activées :

spectre_v2=on spec_store_bypass_disable=on tsx=off tsx_async_abort=full,nosmt mds=full,nosmt l1tf=full,force nosmt=force kvm.nx_huge_pages=force

Vous devez étudier ce qui affecte le système CPUVulnérabilité, Et sélectionnez les mesures d'atténuation ci - dessus en conséquence .N'oublie pas., Vous devrez installer des mises à jour de Microcode , Pour être totalement à l'abri de ces vulnérabilités . Mais toutes ces actions peuvent entraîner une dégradation significative des performances .

Résultats:

Si toutes les recommandations ci - dessus sont suivies ( Ne comprend pas les CPUMesures d'atténuation), Il y aura :

slab_nomerge slub_debug=FZ init_on_alloc=1 init_on_free=1 page_alloc.shuffle=1 pti=on vsyscall=none debugfs=off oops=panic module.sig_enforce=1 lockdown=confidentiality mce=0 quiet loglevel=0

SiGRUB Utilisé comme chargeur de démarrage , Vous devrez peut - être reconstruire GRUB Fichiers de configuration pour appliquer ces fichiers .

hidepid

proc C'est un pseudo - système de fichiers , Il contient des informations sur tous les processus actuellement en cours d'exécution sur le système .Par défaut, Ce programme est accessible à tous les utilisateurs , Cela pourrait permettre à un attaquant d'espionner d'autres processus .

Pour permettre seulement aux utilisateurs de voir leurs propres processus , Sans voir les processus des autres utilisateurs ,Doit être utiliséhidepid=2,gid=proc Options de montage pour le montage /proc.gid=procOui.proc Groupe exclu de cette fonction , Vous pouvez donc ajouter des utilisateurs ou des processus spécifiques à la liste blanche . Une façon d'ajouter ces options est d'éditer /etc/fstabEt ajouter:

proc /proc proc nosuid,nodev,noexec,hidepid=2,gid=proc 0 0

systemd-logind Vous devez encore voir les processus d'autres utilisateurs ,Donc,, Pour permettre à la session utilisateur de systemdFonctionnement normal du système,Doit être créé/etc/systemd/system/systemd-logind.service.d/hidepid.conf Et ajouter:

[Service]
SupplementaryGroups=proc

Réduire la surface d'attaque du noyau

Il est préférable de désactiver toute fonction qui n'est pas absolument nécessaire , Pour minimiser les attaques potentielles du noyau . Ces fonctions ne doivent pas nécessairement être dangereuses , Ils peuvent simplement être supprimés pour réduire le Code Bénin de la surface d'attaque . Ne désactivez pas les choses aléatoires que vous ne comprenez pas . Voici quelques exemples qui pourraient être utiles ,Selon vos paramètres.

Paramètres de démarrage:

Les paramètres de démarrage peuvent généralement être utilisés pour réduire la surface d'attaque , Un de ces exemples est :

ipv6.disable=1

Ceci désactive l'ensemble IPv6Pile, Si vous n'avez pas migré vers cette pile , La pile peut ne pas être nécessaire . Si vous utilisez IPv6, N'utilisez pas ce paramètre de démarrage .

Mettre les modules du noyau sur la liste noire :

Le noyau permet aux utilisateurs non privilégiés de charger automatiquement les modules, ce qui entraîne indirectement le chargement de certains modules . Cela permet à un attaquant de charger automatiquement des modules vulnérables ,Et ensuite l'utiliser. Un exemple est CVE-2017-6074, Où l'attaquant peut démarrer DCCP Connectez - vous pour déclencher DCCP Chargement des modules du noyau , Puis exploiter une vulnérabilité dans ce module du noyau .

Vous pouvez le faire en insérant le fichier /etc/modprobe.d Et la méthode d'inscription des modules du noyau spécifiés sur la liste noire , Ajouter des modules spécifiques du noyau à la liste noire .

InstallLes paramètres indiquentmodprobe Exécuter des commandes spécifiques , Au lieu de charger le module comme d'habitude ./bin/falseOui retour seulement1Ordre de, Cette commande n'effectue pratiquement aucune action . Les deux disent au noyau de fonctionner /bin/false Au lieu de charger le module , Cela empêchera l'attaquant d'utiliser le module . Voici les modules du noyau les plus susceptibles de ne pas être nécessaires :

install dccp /bin/false
install sctp /bin/false
install rds /bin/false
install tipc /bin/false
install n-hdlc /bin/false
install ax25 /bin/false
install netrom /bin/false
install x25 /bin/false
install rose /bin/false
install decnet /bin/false
install econet /bin/false
install af_802154 /bin/false
install ipx /bin/false
install appletalk /bin/false
install psnap /bin/false
install p8023 /bin/false
install p8022 /bin/false
install can /bin/false
install atm /bin/false

En particulier, les protocoles de réseau flous peuvent augmenter considérablement la surface d'attaque à distance . Cette liste noire :

DCCP — Datagram Congestion Control Protocol
SCTP — Stream Control Transmission Protocol
RDS — Reliable Datagram Sockets
TIPC — Transparent Inter-process Communication
HDLC — High-Level Data Link Control
AX25 — Amateur X.25
NetRom
X25
ROSE
DECnet
Econet
af_802154 — IEEE 802.15.4
IPX — Internetwork Packet Exchange
AppleTalk
PSNAP — Subnetwork Access Protocol
p8023 — Novell raw IEEE 802.3
p8022 — IEEE 802.2
CAN — Controller Area Network
ATM
install cramfs /bin/false
install freevxfs /bin/false
install jffs2 /bin/false
install hfs /bin/false
install hfsplus /bin/false
install squashfs /bin/false
install udf /bin/false

Inscription de divers systèmes de fichiers rares sur la liste noire .

install cifs /bin/true
install nfs /bin/true
install nfsv3 /bin/true
install nfsv4 /bin/true
install gfs2 /bin/true

Si vous n'utilisez pas le système de fichiers réseau , Il peut également être inscrit sur la liste noire .

install vivid /bin/false

vivid driver Le pilote n'est utilisé qu'à des fins d'essai , Et c'est la raison pour laquelle les privilèges augmentent la vulnérabilité , Il faut donc le désactiver .

install bluetooth /bin/false
install btusb /bin/false

Désactiver Bluetooth avec l'historique des problèmes de sécurité .

install uvcvideo /bin/false

Ceci désactive la webcam , Pour l'empêcher d'être utilisé pour vous surveiller .

Vous pouvez également mettre le module microphone sur la liste noire , Mais cela peut varier d'un système à l'autre . Pour trouver le nom du module ,S'il vous plaît./proc/asound/modules Trouver et mettre sur la liste noire .Par exemple, Un de ces modules est snd_hda_intel.

Votre attention, s'il vous plaît., Bien que parfois le module noyau du microphone soit le même que celui du Haut - parleur . Cela signifie que la désactivation d'un microphone comme celui - ci peut également désactiver accidentellement n'importe quel Haut - parleur , Bien que les Haut - parleurs puissent aussi devenir des microphones , Donc ce n'est pas nécessairement un résultat négatif .

Il est préférable de retirer physiquement ces appareils , Ou du moins BIOS/UEFI Désactiver . Désactiver les modules du noyau n'est pas toujours aussi efficace .

rfkill:

Peut passerrfkill Inscription des appareils sans fil sur la liste noire , Pour réduire encore la surface d'attaque à distance . Pour mettre tous les appareils sans fil sur la liste noire ,S'il vous plaît.:

rfkill block all

WiFi Il est possible de déverrouiller :

rfkill unblock wifi

En servicesystemdSur le système de,rfkill Reste inchangé dans toutes les sessions ,Mais,En utilisant d'autresinit Sur le système , Vous devrez peut - être créer un init Script pour exécuter ces commandes au démarrage .

Autres fuites du pointeur du noyau

La section précédente a empêché certaines fuites de pointeurs du noyau , Mais il y a d'autres fuites .

Sur le système de fichiers ,/boot L'image du noyau et System.mapDocumentation./usr/srcEt/{,usr/} lib/modules Il y a d'autres informations sensibles du noyau dans le répertoire . Vous devriez limiter les permissions de fichiers pour ces répertoires , Afin qu'elles ne puissent être obtenues que par rootL'utilisateur lit. Vous devriez également supprimer System.mapDocumentation, Parce qu'en plus de la mise en service avancée , Aucun d'eux n'a besoin de .

En outre, Certains démons de journalisation (Par exemplesystemdDejournalctl) Y compris les journaux du noyau , Peut être utilisé pour contourner les dmesg_restrictProtection.Deadm Supprimer un utilisateur d'un groupe est généralement suffisant pour annuler l'accès aux journaux suivants :

gpasswd -d $user adm

Limite ouisysfsVisites

sysfs C'est un pseudo - système de fichiers , Fournit une grande quantité d'informations sur le noyau et le matériel . Il est généralement installé dans /sysAllez..sysfs Cela a entraîné des fuites massives d'information , Surtout si le pointeur du noyau fuit .WhonixDesecurity-misc Le progiciel comprend hide-hardware-infoScript, Ce script limite l'accès à ce répertoire et /proc Quelques scripts dans , Pour tenter de cacher les identificateurs matériels potentiels et d'empêcher les fuites de pointeurs du noyau .

Le script est configurable , Et permet l'inscription de demandes spécifiques sur la liste blanche par groupe . Cette méthode est recommandée , Et l'utiliser au démarrage initExécution du script. Ou comme ça systemdServices.

Pour que les fonctions de base soient utilisées systemdSur le système de, Certains services du système doivent être inscrits sur la liste blanche. . Ceci peut être fait en créant /etc/systemd/system/[email protected]/sysfs.conf Et ajouter ce qui suit pour compléter :​​​​​​​

[Service]
SupplementaryGroups=sysfs

Mais, Ça ne résout pas tous les problèmes . De nombreuses applications peuvent encore être interrompues , Vous devez les inscrire correctement sur la liste blanche .

LinuxRenforcement

Certaines distributions (Par exempleArch Linux) Y compris les paquets améliorés du noyau . Il contient de nombreux correctifs améliorés et une configuration du noyau plus sûre .Si possible, Il est recommandé de l'installer .

Grsecurity

Grsecurity C'est un ensemble de correctifs du noyau , Peut grandement améliorer la sécurité du noyau . Ces correctifs étaient autrefois disponibles gratuitement , Mais il faut l'acheter maintenant. .Si disponible, Il est fortement recommandé de l'obtenir .Grsecurity Offre la plus récente protection du noyau et de l'espace Utilisateur .

Protection du temps d'exécution du noyau

Linux Kernel Runtime Guard(LKRG)C'est un module du noyau, Assure l'intégrité du noyau d'exécution et détecte les vulnérabilités . Il peut tuer toute une catégorie de vulnérabilités du noyau . Mais ce n'est pas un remède parfait ,Parce queLKRG Conçu pour contourner . Il ne s'applique qu'aux logiciels malveillants prêts à l'emploi .Mais, Bien que peu probable ,Mais...LKRG Elle - même pourrait exposer de nouvelles vulnérabilités comme n'importe quel autre module du noyau .

Noyau auto - compilé

Il est recommandé de compiler votre propre noyau , Activez simultanément le moins de modules du noyau possible et le plus de fonctions de sécurité possible , Pour réduire au minimum la surface d'attaque du noyau .

En plus, Appliquer un correctif de renforcement du noyau , Par exemple, comme indiqué ci - dessus linux-hardenedOugrsecurity.

Le noyau compilé par la distribution a également un pointeur de noyau commun /Symbole, C'est très utile pour l'exploitation . Compiler votre propre noyau vous donnera un symbole de noyau unique ,Aveckptr_restrict,dmesg_restrict Et d'autres améliorations pour les fuites de pointeurs du noyau , .Il sera plus difficile pour un attaquant de créer un exploiteur de vulnérabilité qui dépend de la connaissance du pointeur du noyau .

Vous pouvez partir deWhonix Noyau amélioré pour [2] Pour s'inspirer ou l'utiliser .

Trois、 Mesures d'accès obligatoire

Contrôle d'accès obligatoire(MAC) Le système contrôle à grain fin le contenu accessible par le programme . Cela signifie que votre navigateur n'aura pas accès à l'ensemble de votre répertoire d'accueil ou similaire .

Le plus souvent utiliséMAC La mesure est SELinuxEtAppArmor.SELinuxQueAppArmorPlus sûr, Parce que c'est plus fin .Par exemple,Il est basé surinode Au lieu d'être basé sur le chemin , Permettre l'application de restrictions nettement plus strictes , Peut filtrer le noyau ioctlAttendez..Malheureusement,, C'est difficile à utiliser et à apprendre , Certaines personnes peuvent donc préférer AppArmor.

Pour activer dans le noyau AppArmor, Les paramètres de démarrage suivants doivent être définis :

apparmor=1 security=apparmor

Pour activerSELinux, Veuillez définir les paramètres suivants :

selinux=1 security=selinux

N'oublie pas.,Activer seulementMAC Les mesures elles - mêmes n'améliorent pas magiquement la sécurité . Vous devez avoir une politique stricte pour en tirer le meilleur parti .Par exemple,Pour créerAppArmorProfil,S'il vous plaît.:

aa-genprof $path_to_program

Ouverture du programme, Et ensuite commencer à l'utiliser comme d'habitude .AppArmor Les fichiers à accéder seront détectés , Et les ajouter au profil ( Si vous choisissez ).Mais, Cela ne suffit pas à lui seul pour fournir un profil de haute qualité .VoirAppArmor Documentation pour plus de détails .

Si vous voulez aller plus loin, Peut être mis en œuvre par initramfs Pour mettre en place un système complet MACStratégie, Cette politique limite chaque processus d'espace utilisateur individuel , La paire de crochets init Application du système MACStratégie.C'est ça.AndroidUtiliserSELinuxDe la façon dont,EtWhonix Comment utiliser AppArmorDe la façon dont. Il est nécessaire de renforcer un modèle de sécurité solide pour la mise en oeuvre du principe du moindre privilège .

Quatre、Bac à sable

Appliquer un bac à sable

Sandbox vous permet d'exécuter des programmes dans un environnement isolé , L'environnement a un accès limité ou aucun accès au reste du système . Vous pouvez les utiliser pour sécuriser votre application ou exécuter des programmes non fiables .

Recommandations et recommandationsAppArmorOuSELinux Utilisé ensemble dans un compte utilisateur distinct Bubblewrap Programme de bac à sable . Vous pouvez également envisager d'utiliser gVisor, Il a l'avantage de fournir son propre noyau pour chaque invité .

N'importe laquelle de ces méthodes peut être utilisée pour créer un bac à sable puissant , Et la surface d'attaque exposée est minimale . Si vous ne voulez pas créer votre propre bac à sable , Veuillez envisager d'utiliser WhonixDesandbox-app-launcher.Vous ne devriez pas utiliserFirejail[4].

Par exemple:DockerEtLXC Des solutions de conteneurs comme celle - ci sont souvent trompeuses sous la forme de bacs à sable . Ils sont trop lâches , Impossible de soutenir largement une variété d'applications , Ils ne peuvent donc pas être considérés comme des bacs à sable d'application puissants .

Évacuation fréquente des bacs à sable

  • PulseAudio:PulseAudio Est un serveur sonore commun , Mais la question de l'isolement ou du bac à sable n'a pas été prise en compte au moment de la rédaction , Cela en fait une fuite récurrente de bac à sable .Pour éviter cela,, Il est recommandé de bloquer les paires de bacs à sable PulseAudioVisites, Ou le désinstaller complètement du système .

  • D-Bus:D-BusC'est un ordinateur de bureau.Linux La forme la plus populaire de communication inter - processus , Mais c'est aussi une autre façon courante pour les bacs à sable de s'échapper , Parce qu'il permet une libre interaction avec les services . Un exemple de ces vulnérabilités est Firejail. Vous devriez empêcher les paires du bac à sable D-BusVisites,Ou parMAC Médiation selon des règles à grain fin .

  • GUIisolement:N'importe quoiXorg Toutes les fenêtres ont accès à une autre fenêtre . Cela permet des enregistrements de clavier triviaux ou des captures d'écran , On peut même enregistrer des choses comme root Un mot de passe ou quelque chose comme ça . Vous pouvez utiliser des X11Serveur(Par exempleXpraOuXephyrEtbubblewrap)Oui.Xorg Windows sandboxing .Par défaut,Wayland Isoler les fenêtres les unes des autres , Ce sera une comparaison XorgUn meilleur choix,Bien queWayland C'est peut - être mieux que XorgGénéralement disponible, Parce qu'il a été développé plus tôt .

  • ptrace:Comme indiqué précédemment,ptraceC'est un appel système, Peut être abusé pour détruire le processus qui fonctionne à l'extérieur du bac à sable .Pour éviter cela,Vous pouvez passer parsysctl Activer le noyau YAMA ptraceRestrictions,On peut aussiseccomp Dans le filtre ptrace syscallListe noire.

  • TIOCSTI:TIOCSTIC'est unioctl, Il permet d'injecter des commandes terminales , Et fournit un mécanisme simple pour l'attaquant , Peut être déplacé latéralement entre d'autres processus dans la même session utilisateur .Peut être réalisé enseccompDans le filtreioctl Inscription sur une liste noire ou utilisation bubblewrapDe--new-session Paramètres pour atténuer cette attaque .

  • SystemdBac à sable:Bien que l'utilisation desystemd, Mais certains systèmes peuvent ne pas pouvoir changer . Ces personnes ont au moins accès au service Sandbox , Ils n'ont donc accès qu'au contenu nécessaire .

C'est un bac à sable systemd Exemples de services :

[Service]
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
ProtectSystem=strict
ProtectHome=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true
ProtectKernelLogs=true
ProtectHostname=true
ProtectClock=true
ProtectProc=invisible
ProcSubset=pid
PrivateTmp=true
PrivateUsers=yes
PrivateDevices=true
MemoryDenyWriteExecute=true
NoNewPrivileges=true
LockPersonality=true
RestrictRealtime=true
RestrictSUIDSGID=true
RestrictAddressFamilies=AF_INET
RestrictNamespaces=yes
SystemCallFilter=write read openat close brk fstat lseek mmap mprotect munmap rt_sigaction rt_sigprocmask ioctl nanosleep select access execve getuid arch_prctl set_tid_address set_robust_list prlimit64 pread64 getrandom
SystemCallArchitectures=native
UMask=0077
IPAddressDeny=any
AppArmorProfile=/etc/apparmor.d/usr.bin.example

​​​​​​​ Description de toutes les options :

CapabilityBoundingSet=— Specifies the capabilitiesthe process is given.
ProtectHome=true— Makes all home directories inaccessible.
ProtectKernelTunables=true— Mounts kernel tunables such as those modified throughsysctlas read-only.
ProtectKernelModules=true— Denies module loading and unloading.
ProtectControlGroups=true— Mounts all control group hierarchies as read-only.
ProtectKernelLogs=true— Prevents accessing the kernel logs.
ProtectHostname=true— Prevents changes to the system hostname.
ProtectClock— Prevents changes to the system clock.
ProtectProc=invisible— Hides all outside processes.
ProcSubset=pid— Permits access to only the pid subset of/proc.
PrivateTmp=true— Mounts an empty tmpfs over/tmpand/var/tmp, therefore hiding their previous contents.
PrivateUsers=true— Sets up an empty user namespace to hide other user accounts on the system.
PrivateDevices=true— Creates a new/devmount with minimal devies present.
MemoryDenyWriteExecute=true— Enforces a memory W^X policy
NoNewPrivileges=true— Prevents escalating privileges.
LockPersonality=true— Locks down thepersonality()syscall to prevent switching execution domains.
RestrictRealtime=true— Prevents attempts to enable realtime scheduling.
RestrictSUIDSGID=true— Prevents executing setuid or setgid binaries.
RestrictAddressFamilies=AF_INET— Restricts the usable socket address families to IPv4 only (AF_INET).
RestrictNamespaces=true— Prevents creating any new namespaces.
SystemCallFilter=...— Restricts the allowed syscalls to the absolute minimum. If you aren't willing to maintain your own custom seccomp filter, then systemd provides many [predefined system call sets](https://www.freedesktop.org/software/systemd/man/systemd.exec.html#System Call Filtering) that you can [email protected] be suitable for many use cases.
SystemCallArchitectures=native— Prevents executing syscalls from other CPU architectures.
UMask=0077— Sets the umaskto a more restrictive value.
IPAddressDeny=any— Blocks all incoming and outgoing traffic to/from any IP address. SetIPAddressAllow=to configure a whitelist. Alternatively, setup a network namespace withPrivateNetwork=true.
AppArmorProfile=...— Runs the process under the specified AppArmor profile.

Vous ne pouvez pas simplement copier cet exemple de configuration dans votre configuration , Les exigences varient d'un service à l'autre , Et le bac à sable doit être affiné pour chaque service . Pour en savoir plus sur toutes les options que vous pouvez définir ,Liresystemd.execPage de manuel.

Si le système que vous utilisez n'est pas systemdMais...init,Alors on peut utiliserbubblewrap Copier facilement toutes ces options .

gVisor

Un bac à sable normal partage intrinsèquement le même noyau que l'hôte.Vous faites confiance à un noyau que nous avons évalué comme dangereux,Ces procédures peuvent être correctement limitées.Parce que toute la surface d'attaque du noyau hôte est complètement exposée,Ainsi, l'utilitaire du noyau dans Sandbox peut contourner n'importe quelle restriction.Des efforts ont été déployés pour limiter l'utilisation deseccompLa surface d'attaque de,Mais pas assez pour résoudre complètement ce problème.

GVisorEst la solution à ce problème.Il fournit son propre noyau pour chaque application,Le noyau a été ré - implémenté dans un langage de sécurité mémoireLinuxLa plupart des appels système du noyau,Cela permet une isolation nettement plus forte.

Machine virtuelle

Même si ce n'est pas traditionnel“Sandbox”,Mais les machines virtuelles séparent les processus en virtualisant de nouveaux systèmes,Et donc une isolation très forte.KVMC'est le module du noyau,Il permet au noyau d'agir en tant qu'administrateur,EtQEMUEst d'utiliserKVMSimulateur pour.Virt-managerEtGNOME BoxsSont bons et faciles à utiliserGUI,Pour la gestionKVM / QEMUMachine virtuelle.Non recommandéVirtualboxIl y a beaucoup de raisons.

Cinq、 Renforcer l'allocateur de mémoire

hardened_malloc C'est un distributeur de mémoire durci , Fournit une protection substantielle contre les vulnérabilités de corruption de mémoire tas . Il est largement basé sur OpenBSDDemallocConception, Mais il y a beaucoup d'améliorations .

Peut passerLD_PRELOAD Les variables d'environnement sont utilisées pour chaque application hardened_malloc.Par exemple, Supposons que la Bibliothèque que vous compilez soit située à /usr/lib/libhardened_malloc.so,Peut être exécuté:

LD_PRELOAD="/usr/lib/libhardened_malloc.so" $program

Précharge global de la Bibliothèque , Il peut également être utilisé à l'échelle du système , C'est la méthode recommandée pour l'utiliser. .À cette fin,,Veuillez Modifier/etc/ld.so.preloadEt insérer:

/usr/lib/libhardened_malloc.so

Bien que la plupart des applications fonctionnent correctement ,Mais...hardened_malloc Certaines applications peuvent être corrompues . Les options suivantes sont recommandées pour la compilation hardened_malloc Pour minimiser les dommages :

CONFIG_SLAB_QUARANTINE_RANDOM_LENGTH=0 CONFIG_SLAB_QUARANTINE_QUEUE_LENGTH=0 CONFIG_GUARD_SLABS_INTERVAL=8

Vous devriez également utilisersysctlDéfinir ce qui suit,Pour s'adapterhardened_malloc Un grand nombre de pages protégées créées :

vm.max_map_count=524240

WhonixSi c'est moins que çaDebian La distribution de hardened_mallocPaquets.

Six、 Renforcer le drapeau de compilation

Il y a beaucoup d'avantages à compiler vos propres programmes , Parce qu'il vous permet d'optimiser la sécurité du programme .Mais, Il est facile de faire exactement le contraire et de réduire la sécurité , Si vous n'êtes pas sûr de ce que vous faites ,Veuillez sauter cette section. Dans une distribution basée sur la source (Par exempleGentoo)Allez., Ce sera le plus simple , Mais on peut aussi le faire dans d'autres distributions .

Certaines options de compilation peuvent être utilisées pour ajouter d'autres mesures d'atténuation de l'exploitation , Pour éliminer les vulnérabilités communes dans toute la catégorie . Vous avez peut - être entendu parler de la protection générale , Par exemple, un exécutable indépendant de l'emplacement , Stack smash Protector ,Lier maintenant, Lire seulement repositionnement et FORTIFY_SOURCE, Mais cette section ne sera pas présentée , Parce qu'ils sont largement utilisés .Au contraire., Il discutera des mesures modernes d'atténuation de l'exploitation des vulnérabilités, comme l'intégrité du flux de contrôle et la pile d'ombre .

Cette section porte sur l'utilisation principale de COuC ++ Programmes natifs écrits .Vous devez utiliserClangCompilateur,Parce que ces fonctions sontGCCNon disponible sur.N'oublie pas., Comme ces mesures d'atténuation n'ont pas été largement utilisées , Par conséquent, certaines applications peuvent ne pas fonctionner après les avoir activées .

Contrôle de l'intégrité du flux (CFI) Est un moyen d'atténuer l'exploitation de la vulnérabilité , Conçu pour empêcher, par exemple ROPOuJOP Ce genre d'attaque de réutilisation de code . Grâce à des mesures d'atténuation plus largement adoptées (Par exempleNX) Rendre obsolètes les technologies d'exploitation obsolètes , L'utilisation de ces technologies exploite donc une grande partie des vulnérabilités .Clang Support frontal fine grain CFI, Cela signifie qu'il peut efficacement atténuer JOPAttaque.ClangDeCFI Ça n'atténue pas ROP; Vous devez également utiliser un mécanisme distinct enregistré ci - dessous .Pour activer cette fonction, Les drapeaux de compilation suivants doivent être appliqués :-flto -fvisibility=hidden -fsanitize=cfi

Shadow Stack protège l'adresse de retour du programme en copiant le programme dans une autre pile cachée . Ensuite, comparez les adresses de retour dans la pile principale et la pile d'ombre , Voir si les deux sont différents .Si c'est le cas, Indique une attaque ,Le programme sera interrompu,Ça soulageROPAttaque.ClangAvec ce qu'on appelleShadowCallStackLa fonction de,Vous pouvez le faire,Mais,Seulement siARM64Disponible en haut.Pour activer cette fonction, Les drapeaux de compilation suivants doivent être appliqués :-fsanitize=shadow-call-stack

SiShadowCallStackPas une option, Vous pouvez choisir d'utiliser SafeStack.Mais,Malheureusement,, Cette fonctionnalité comporte de nombreuses vulnérabilités , Donc l'effet n'est pas très bon . Si vous souhaitez toujours activer cette fonction , Les drapeaux de compilation suivants doivent être appliqués :-fsanitize=safe-stack

Une des vulnérabilités de corruption de mémoire les plus courantes est la mémoire non initialisée .Clang Il y a une option pour initialiser automatiquement les variables en utilisant zéro ou un mode spécifique . Il est recommandé d'initialiser la variable à zéro , Parce que l'utilisation d'autres modèles est mieux adaptée à la détection des erreurs que l'atténuation de la vulnérabilité .Pour activer cette fonction, Les drapeaux de compilation suivants doivent être appliqués :-ftrivial-auto-var-init=zero -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang Mais l'existence de cette option fait actuellement l'objet d'un débat .

Sept、Langage de sécurité de la mémoire

Les programmes écrits dans un langage de sécurité mémoire sont automatiquement protégés , Être à l'abri de toutes sortes de failles de sécurité , Ces vulnérabilités de sécurité incluent un débordement de tampon ,Variables non initialisées, Utilisation après - vente, etc. .MicrosoftEtGoogle Les chercheurs en sécurité de , .La plupart des vulnérabilités identifiées sont des problèmes de sécurité de la mémoire . Voici des exemples d'un tel langage de sécurité de la mémoire: Rust,SwiftEtJava, Parmi les exemples de langues dangereuses pour la mémoire, mentionnons CEtC ++.Si possible, Remplacer autant de programmes que possible par des solutions de rechange à la sécurité de la mémoire .

Huit、RootComptes

rootVous pouvez faire n'importe quoi, Et avoir accès à l'ensemble de votre système .Donc,, Il doit être verrouillé autant que possible , Pour empêcher l'attaquant d'obtenir facilement rootAccès de l'utilisateur.

/etc/securetty

/etc/securetty La désignation du fichier vous permet de root Où se connecter en tant qu'utilisateur . Ce fichier doit être laissé en blanc , Pour que personne ne puisse le faire depuis le terminal .

Restrictionssu

su Vous permet de changer d'utilisateur du terminal .Par défaut, Il essaie de rootConnexion en tant qu'utilisateur.Pour mettresu Utilisation limitée à wheelDans le Groupe,Veuillez Modifier/etc/pam.d/suEt/etc/pam.d/su-lEt ajouter:

auth required pam_wheel.so use_uid

Vous devriezwheel Il y a le moins d'utilisateurs possible dans le Groupe .

Verrouillé.rootComptes

Pour verrouiller root Compte pour empêcher quiconque de rootConnexion d'identité,S'il vous plaît.:

passwd -l root

Avant d'effectuer cette opération, Assurez - vous d'avoir une autre méthode pour obtenir la racine (Par exemple,De l'activitéUSB Démarrer et changer au système de fichiers chroot), Pour ne pas vous enfermer accidentellement hors du système .

Refuser de passerSSHDistantrootDébarquement

Pour empêcher quelqu'un de passer SSHParrootConnexion d'identité,Veuillez Modifier/etc/ssh/sshd_configEt ajouter:

PermitRootLogin no

Augmenter le nombre de tours de hachage

Vous pouvez ajoutershadow Nombre de tours de hachage utilisés , Pour casser votre mot de passe en forçant l'attaquant à calculer plus de hachage , Pour améliorer la sécurité des mots de passe de hachage .Par défaut,shadowUtiliser5000 Tour suivant , Mais vous pouvez l'augmenter à n'importe quel nombre . Même si plus de tours sont configurés , Plus la connexion est lente .Édition/etc/pam.d/passwd Et ajouter l'option round .

password required pam_unix.so sha512 shadow nullok rounds=65536

Ça rendshadowMise en œuvre65536 Tour de hachage secondaire .

Après l'application de ce paramètre , Les mots de passe ne sont pas automatiquement re - cryptés , Vous devez donc réinitialiser votre mot de passe en utilisant les méthodes suivantes :

passwd $username

RestrictionsXorg rootAccès à

Par défaut, Certaines distributions sont rootExécution en tant qu'utilisateurXorg,C'est un problème,Parce queXorg Contient beaucoup de code ancien et complexe , Cela ajoute une grande surface d'attaque , Et les rendre plus susceptibles d'avoir accès à root Exploiteur de privilèges . Pour l'empêcher d'agir comme rootExécution par l'utilisateur,Veuillez Modifier/etc/X11/Xwrapper.configEt ajouter:

needs_root_rights = no

Accès sécuriséroot

Les logiciels malveillants peuvent utiliser plusieurs méthodes pour renifler rootMot de passe pour le compte.Donc,, La façon traditionnelle d'accéder au compte racine n'est pas sûre , Il vaut mieux ne pas visiter la racine du tout , Mais ce n'est pas faisable . Cette section décrit en détail la méthode la plus sûre pour accéder au compte racine . Après l'installation du système d'exploitation , Ces instructions doivent être appliquées immédiatement , Pour s'assurer que le logiciel ne contient pas de logiciels malveillants .

Vous ne pouvez jamais accéder à root,Parce queroot Probablement volé . Vous ne pouvez pas non plus vous connecter directement au compte racine .En faisant ce qui suit,Créer un“Administrateur”Comptes utilisateurs, Ce compte n'est utilisé que pour accéder à rootUtilisateurs, Ne peut pas être utilisé pour accéder à d'autres utilisateurs :

useradd admin

Exécutez et définissez un mot de passe très fort :

passwd admin

N'autorisez ce compte qu'à utiliser votre mécanisme de promotion des droits préféré .Par exemple,Si vous utilisezsudo, Ajouter en exécutant la commande suivante sudoersAnomalie:

visudo -f /etc/sudoers.d/admin-account

Puis entrez:

admin ALL=(ALL) ALL

Assurez - vous qu'aucun autre compte n'est accessible sudo( Ou votre mécanisme préféré ).

Maintenant, Pour vous connecter à ce compte , Redémarrez d'abord. -Par exemple, Cela empêche les gestionnaires de fenêtres corrompus d'effectuer des spoofings de connexion . Lorsque l'invite de connexion est fournie , Activez la clé de sécurité en appuyant sur la combinaison de touches suivante sur le clavier :

Alt + SysRq + k

Cela tuera toutes les applications de la console virtuelle actuelle , Pour surmonter l'attaque de spoofing de connexion .Maintenant, Vous pouvez vous connecter en toute sécurité à votre compte Administrateur ,Et utiliserrootTâches exécutées par l'utilisateur.Une fois terminé, Déconnecter le compte Administrateur , Puis connectez - vous à un compte utilisateur non privilégié .

Neuf、Pare - feu

Les pare - feu contrôlent le trafic réseau entrant et sortant , Et peut être utilisé pour bloquer ou permettre certains types de trafic .Sauf pour des raisons particulières, Sinon, tout le trafic entrant doit toujours être bloqué . Il est recommandé de mettre en place des iptablesOunftablesPare - feu. Les murs de feu doivent être adaptés à votre système , Et il n'y a pas de règles pour tous les pare - feu . Il est recommandé de vous familiariser avec la création de règles de pare - feu .Arch Wiki Et les pages de manuel sont de bonnes ressources .

C'est fondamental.iptablesExemple de configuration, Cette configuration interdit tout trafic réseau entrant :

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:TCP - [0:0]
:UDP - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
COMMIT

Mais, Vous ne devriez pas essayer d'utiliser cet exemple sur un système réel . Il ne s'applique qu'à certains systèmes de bureau .

Dix、Identification

Pour protéger la vie privée,Il est préférable de réduire au minimum la quantité d'information qui peut être retracée à vous.

Nom d'hôte et d'utilisateur

N'ajoutez pas de contenu identifié de façon unique au nom d'hôte ou d'utilisateur.Gardez - les comme noms communs,Par exemple“host”Et“user”,Afin qu'ils ne puissent pas vous identifier.

Timezones / Locales / Keymaps

Si possible,Votre fuseau horaire doit être réglé à“ UTC”,Définissez les paramètres locaux et la cartographie du clavier à“ US”.

MachinesID

Une machine unique IDEst stocké dans/var/lib/dbus/machine-id (systemd Le système est sauvegardé dans /etc/machine-id) Ceux - ci doivent être édités en tant que noms communs ,Par exempleWhonix ID.

b08dfa6083e7567a1921a715000001fb

MACTromperie d'adresse

MACL'adresse est assignée au Contrôleur d'interface réseau(NIC)Identifiant unique pour.Chaque fois que vous vous connectez au réseau(WIFIOu Ethernet)Alors votreMACAdresse exposée.Cela permet aux gens de l'utiliser pour vous suivre et vous identifier de façon unique sur le réseau local.

Mais vous ne devriez pas randomiser complètement MACAdresse. Avec un hasard total MAC L'adresse est évidente , Et peut avoir un effet négatif sur votre comportement de se démarquer .

MACAdresseOUI(Identificateur unique de l'Organisation) Identification partielle du fabricant du chipset .C'est exact.MAC La randomisation de cette partie de l'adresse peut vous donner quelque chose que vous n'avez jamais utilisé auparavant OUI, Jamais utilisé depuis des décennies OUI Ou très rare dans votre région OUI, Pour vous démarquer , Il est évident que vous trichez MACAdresse.

MAC La fin de l'adresse identifie votre appareil spécifique , Et peut être utilisé pour suivre votre appareil .Seulement pourMAC La randomisation de cette partie de l'adresse vous empêche d'être suivi , En même temps MAC L'adresse semble fiable .

Pour tromper ces adresses , Veuillez d'abord exécuter la commande suivante pour trouver votre nom d'interface réseau :

ip a

Et puis...,InstallationmacchangerEt la mise en œuvre:

macchanger -e $network_interface

Pour assigner au hasard à chaque démarrage MACAdresse, Vous devriez créer un script d'initialisation pour votre système d'initialisation spécifique .C'estsystemdUn exemple de:

[Unit]
Description=macchanger on eth0
Wants=network-pre.target
Before=network-pre.target
BindsTo=sys-subsystem-net-devices-eth0.device
After=sys-subsystem-net-devices-eth0.device
[Service]
ExecStart=/usr/bin/macchanger -e eth0
Type=oneshot
[Install]
WantedBy=multi-user.target

L'exemple ci - dessus triche au démarrage eth0InterfaceMACAdresse.Oui.eth0 Remplacer par votre interface réseau .

Attaque temporelle

Presque tous les systèmes ont des horaires différents . Ceci peut être utilisé pour les attaques d'empreintes digitales biaisées par l'horloge , La différence de quelques millisecondes est suffisante pour permettre à l'utilisateur d'être identifié par l'exposition .

ICMPHorodatage:

ICMP L'horodatage fuit l'heure du système dans la réponse à la requête . La façon la plus simple d'arrêter ces attaques est d'utiliser un pare - feu pour bloquer les connexions entrantes , Ou faire ignorer le noyau ICMPDemande.

TCPHorodatage:

TCP L'horodatage peut également révéler l'heure du système . Le noyau tente de résoudre ce problème en utilisant un décalage aléatoire pour chaque connexion , Mais ça ne suffit pas. . Il faut donc désactiver TCPHorodatage,Peut être réalisé en utilisantsysctl Définissez ce qui suit pour compléter :

net.ipv4.tcp_timestamps=0

TCPInitialisation du numéro de séquence:

TCPNuméro de série initial(ISN) C'est une autre façon de fuir le temps du système .Pour atténuer cette situation,Vous devez installertirdadModule noyau, Le module génère des connexions aléatoires ISN.

Synchronisation du temps:

La synchronisation du temps est essentielle pour l'anonymat et la sécurité . Une horloge système incorrecte peut vous exposer à une attaque d'empreintes digitales biaisées par l'horloge , Ou peut être utilisé pour vous fournir des HTTPSCertificat, Pour contourner l'expiration ou la révocation du certificat .

La méthode la plus populaire de synchronisation du temps NTPC'est dangereux., Parce qu'il n'est pas chiffré et non authentifié , Ainsi, un attaquant peut facilement intercepter et modifier la demande .NTPEt avecNTP Le format TIMESTAMP fuit l'heure du système local , Ce format peut être utilisé pour la reconnaissance des empreintes digitales décalées par l'horloge ,Comme indiqué précédemment.

Donc,, Vous devriez désinstaller tout NTP Client et désactiver systemd-timesyncd(Si vous utilisez). Vous pouvez vous connecter en toute sécurité (HTTPS Ou de préférence TorionServices) Connectez - vous à un site Web de confiance ,Au lieu deNTP,Et deHTTP Extraire l'heure actuelle de l'en - tête . Les outils à cette fin sont sdwdate Ou mon propre outil de synchronisation du temps sécurisé .

Empreintes digitales

.Il est possible d'identifier les empreintes digitales d'une personne en tapant une clé sur le clavier . Vous pouvez taper la vitesse , Pause entre deux touches , L'identification dactyloscopique est effectuée de façon unique, comme le moment exact où chaque clé est pressée et libérée. .Peut être utiliséKeyTrac Test en ligne .

KloakEst un outil, Conçu pour surmonter cette méthode de suivi en confondant l'intervalle de temps entre les touches et les événements de libération .Quand la clé est pressée, Il introduit des retards aléatoires , Ensuite, l'application sélectionne .

Onze、Permissions de fichiers

Par défaut, Les permissions pour les fichiers sont très lâches . Vous devriez rechercher des fichiers et des répertoires mal autorisés dans tout le système , Et les limiter .Par exemple,Dans des domaines tels queDebian Dans certaines distributions comme ,UtilisateursHome Le répertoire est lisible à l'échelle mondiale .

Ceci peut être limité en faisant ce qui suit: :

chmod 700 /home/$user

D'autres exemples sont /boot,/usr /srcEt/ {,usr /} lib/modules Ils contiennent des images du noyau ,System.map Et divers autres documents , Tous ces fichiers peuvent révéler des informations sensibles sur le noyau .

chmod 700 /boot /usr/src /lib/modules /usr/lib/modules

Sur la baseDebianDans la distribution de,Doit être utilisédpkg-statoverride Conserver la licence de fichier .Sinon, Ils seront écrasés lors de la mise à jour .

WhonixDeSUID DisablerEtPermission Hardener Les étapes décrites dans cette section s'appliquent automatiquement .

setuid / setgid

Setuid / SUID Permet à l'utilisateur d'exécuter des binaires en utilisant les privilèges du propriétaire du binaire . Ceci est généralement utilisé pour permettre aux utilisateurs non privilégiés d'utiliser root Certaines fonctions réservées à l'utilisateur .Donc,,BeaucoupSUID Les binaires ont tous un historique privilégié de mise à jour des vulnérabilités de sécurité .Setgid / SGIDSimilaire, Mais pour les groupes et non pour les utilisateurs .À utilisersetuidOusetgid Bitfind tous les binaires du système ,S'il vous plaît.:

find / -type f \( -perm -4000 -o -perm -2000 \)

Et puis, Vous devriez supprimer tous les programmes inutiles qui ne sont pas utilisés setuid / setgidBits, Ou le remplacer par une fonction .SupprimersetuidBits,S'il vous plaît.:

chmod u-s $path_to_program

SupprimersetgidBits,Mise en œuvre:

chmod g-s $path_to_program

Pour ajouter une fonctionnalité à un fichier ,S'il vous plaît.:

setcap $capability+ep $path_to_program

Ou, Pour supprimer les fonctions inutiles ,S'il vous plaît.:

setcap -r $path_to_program

umask

umask Définir les permissions de fichier par défaut pour les fichiers nouvellement créés .Par défautumask- Oui.0022, Ce n'est pas très sûr , Parce qu'il donne à chaque utilisateur du système l'accès en lecture aux fichiers nouvellement créés . Pour que personne d'autre que le propriétaire ne puisse lire le nouveau fichier ,Veuillez Modifier/etc/profileEt ajouter:

umask 0077

Douze、Core dump

Core dump contient un temps spécifique ( C'est généralement quand le programme s'écrase ) Mémoire enregistrée pour ce programme . Ils peuvent contenir des informations sensibles , Par exemple, mot de passe et clé de chiffrement , Il doit donc être désactivé .

Il y a trois façons principales de les désactiver :sysctl,systemdEtulimit.

sysctl

Adoptionsysctl Définir les paramètres suivants :

kernel.core_pattern=|/bin/false

systemd

Création/etc/systemd/coredump.conf.d/disable.confAjouter ce qui suit::​​​​​​​

[Coredump]
Storage=none

ulimit

Édition/etc/security/limits.confAjouter ce qui suit::

* hard core 0

setuidProcessus

Même après ces réglages , Un processus exécuté avec des privilèges élevés peut encore vider sa mémoire .

Pour les empêcher de le faire ,Par ici, s'il vous plaît.sysctlDéfinir ce qui suit:

fs.suid_dumpable=0

XIII.、Swap

Similaire à core dump , Échanger ou Pager pour copier une partie de la mémoire sur le disque , Il peut contenir des informations sensibles . Le noyau doit être configuré pour n'échanger que si nécessaire ,CorrespondantsysctlParamètres:

vm.swappiness=1

XIV.、PAM

PAM Est le cadre d'authentification de l'utilisateur . C'est le mécanisme que vous utilisez pour vous connecter . Vous pouvez le rendre plus sûr en exigeant un mot de passe fort ou en forçant l'authentification différée après une tentative de connexion échouée .

Pour forcer un mot de passe fort ,Peut être utilisépam_pwquality. Il applique une politique configurable pour les mots de passe .Par exemple, Si vous voulez que le mot de passe contienne au moins 16Caractères(Minimum), Avec l'ancien mot de passe (difok)Au moins6Différents caractères,Au moins3Nombre(dcredit),Au moins2Lettres majuscules(ucredit),Au moins2 Petites lettres de caractères (lcredit)Et au moins3Autres caractères(ocredit),Et modifier/etc/pam.d/passwdEt ajouter:​​​​​​​

password required pam_pwquality.so retry=2 minlen=16 difok=6 dcredit=-3 ucredit=-2 lcredit=-2 ocredit=-3 enforce_for_root
password required pam_unix.so use_authtok sha512 shadow

Pour appliquer la validation différée ,Peut être utilisépam_faildelay. Pour ajouter au moins 4 Un délai de quelques secondes pour arrêter les tentatives de craquage violent ,Veuillez Modifier/etc/pam.d/system-loginEt ajouter:

auth optional pam_faildelay.so delay=4000000

4000000 - Oui.4Secondes(En microsecondes).

Quinze.、MicrocodeMise à jour

Microcode Mise à jour critique pour la réparation CPUVulnérabilité(Par exemple:MeltdownEtSpectreAttendez.)Essentiel. La plupart des distributions incluent ces distributions dans leur dépôt logiciel ,Par exempleArch LinuxEtDebian.

16.、IPv6 Extension de la confidentialité

IPv6L'adresse provient de l'ordinateurMACAdresse générée,Pour que votreIPv6L'adresse est unique,Et se lier directement à l'ordinateur.L'extension de confidentialité génère unIPv6Adresse,Pour atténuer cette forme de suivi.Votre attention, s'il vous plaît.,Si vous l'allumezMACMécanisme de spoofing d'adresse ou désactivéIPv6,Ces étapes ne sont pas nécessaires.

Pour activer ces fonctions ,Par ici, s'il vous plaît.sysctl Définir les paramètres suivants :​​​​​​​

net.ipv6.conf.all.use_tempaddr=2
net.ipv6.conf.default.use_tempaddr=2

NetworkManager

PourNetworkManager Activer les extensions de confidentialité ,Veuillez Modifier/etc/NetworkManager/NetworkManager.confEt ajouter:​​​​​​​

[connection]
ipv6.ip6-privacy=2

systemd-networkd

Poursystemd-networkd Activer les extensions de confidentialité ,Veuillez créer/etc/systemd/network/ipv6-privacy.confEt ajouter:

[Network]
IPv6PrivacyExtensions=kernel

XVII.、 Options de partition et de montage

Le système de fichiers doit être divisé en plusieurs partitions , Pour le contrôle à grain fin de ses permissions . .Vous pouvez ajouter différentes options d'installation pour limiter ce qui peut être fait :​​​​​​​

nodev -  Interdire l'utilisation de l'équipement
nosuid - InterdictionsetuidOusetgidBits
noexec -  Interdire l'exécution de tout binaire 

Ces options d'installation doivent être disponibles à /etc/fstab Dans la mesure du possible . Si vous ne pouvez pas utiliser une partition séparée , Veuillez créer un montage de liaison . Plus sûr /etc/fstabExemple de:​​​​​​​

/        /          ext4    defaults                              1 1
/home    /home      ext4    defaults,nosuid,noexec,nodev          1 2
/tmp     /tmp       ext4    defaults,bind,nosuid,noexec,nodev     1 2
/var     /var       ext4    defaults,bind,nosuid                  1 2
/boot    /boot      ext4    defaults,nosuid,noexec,nodev          1 2

Votre attention, s'il vous plaît.,Peut passershell Contournement du script noexec.

Dix - huit.、Entropie

L'entropie reflète essentiellement le degré aléatoire de collecte de l'information du système d'exploitation. , Pour quelque chose comme le cryptage .Donc,, De préférence en installant un autre générateur de nombres aléatoires (Par exemple:havegedEtjitterentropy) Recueillir le plus d'entropie possible auprès de diverses sources .

Pour fairejitterentropyFonctionnement correct, Doit être créé par /usr/lib/modules-load.d/jitterentropy.conf Et ajouter ce qui suit pour charger le module noyau le plus tôt possible :

jitterentropy_rng

RDRAND

RDRAN Est de fournir un nombre aléatoire CPUDirectives.Si disponible, Le noyau l'utilise automatiquement comme source d'entropie . Mais comme c'est exclusif et CPUUne partie de lui - même, Il n'a donc pas été possible d'examiner et de vérifier sa sécurité . Vous ne pouvez même pas inverser le Code .LeRNG J'ai déjà été victime d'une vulnérabilité , Certains pourraient être des attaques de porte dérobée . Vous ne pouvez pas faire confiance à cette fonctionnalité en définissant les paramètres de démarrage suivants :

random.trust_cpu=off

XIX.、Parroot Fichier d'édition d'identité

Il n'est pas recommandé deroot En tant qu'utilisateur, lancez l'éditeur de texte normal . La plupart des éditeurs de texte peuvent faire plus que simplement éditer des fichiers texte , Et peut être utilisé .Par exemple,ParrootOuverture de l'identitéviEt entrez:sh.Maintenant, Vous avez un root shell, Un attaquant peut facilement profiter de shell.

La solution est d'utilisersudoedit. Ceci copie le fichier à un emplacement temporaire , Ouvrez l'éditeur de texte en tant qu'utilisateur normal , Modifier le fichier temporaire et root écraser le fichier original en tant qu'utilisateur .Voilà., L'éditeur réel n'aurait pas rootExécution de l'identité.À utilisersudoedit,Mise en œuvre:

sudoedit $path_to_file

Par défaut,Il utilisevi,Mais ça peut passerEDITOROuSUDO_EDITOR Variables d'environnement pour changer l'éditeur par défaut .Par exemple,À utilisernano,S'il vous plaît.:

EDITOR=nano sudoedit $path_to_file

Ça pourrait être dans/etc/environment Définir cette variable d'environnement globalement dans .

Vingt.、 Améliorations de sécurité pour une distribution spécifique

HTTP Gestionnaire de paquets miroir

Par défaut,Linux Les distributions utilisent généralement HTTPOuHTTPEtHTTPS Un mélange de miroirs pour télécharger des paquets à partir de son dépôt logiciel . Les gens pensent que c'est bien , Parce que le gestionnaire de paquets vérifie la signature du paquet avant l'installation .Mais,Historiquement,, Il y a déjà beaucoup d'endroits pour contourner cette méthode . Vous devez configurer le gestionnaire de paquets à partir de HTTPS Le miroir est spécialement téléchargé pour la défense en profondeur .

APT seccomp-bpf

Du gestionnaire de paquetsDebian BusterDepuis,APTOptionnel pris en chargeseccomp-bpfFiltration. Cela limite l'exécution autorisée APTAppel système pour, Cela pourrait sérieusement limiter les tentatives d'un attaquant d'exploiter APT La capacité d'endommager le système en cas de vulnérabilité .Pour activer cette fonction,Veuillez créer/etc/apt/apt.conf.d/40sandboxEt ajouter:

APT::Sandbox::Seccomp "true";

Vingt et un.、Sécurité physique

Le chiffrement complet assure le chiffrement de toutes les données sur le lecteur , Et ne sera pas lu par un attaquant physique . La plupart des distributions prennent en charge l'activation du chiffrement pendant l'installation , Assurez - vous qu'un mot de passe fort est défini .Vous pouvez également utiliserdm-crypt Chiffrer manuellement le lecteur .

Votre attention, s'il vous plaît., Le cryptage complet n'inclut pas /boot, Cela permet encore de modifier le noyau 、 Chargeur de démarrage et autres fichiers clés . Pour éviter toute altération , Vous devez également mettre en œuvre un démarrage validé .

BIOS / UEFIRenforcement

Si vous utilisez encore l'ancienne version BIOS, Devrait migrer vers UEFI, Pour profiter des nouvelles fonctions de sécurité .La plupartBIOSOuUEFI Toutes les implémentations prennent en charge le réglage du mot de passe . Il est préférable de l'activer et de définir un mot de passe très fort . Bien que cette protection soit très faible , Parce que réinitialiser le mot de passe est facile . Il est généralement stocké dans une mémoire volatile , Par conséquent, l'attaquant n'a besoin que de la capacité de décharger CMOS Batterie quelques secondes , Ou ils peuvent utiliser des Jumpers sur certaines cartes mères pour les réinitialiser .

Vous devriez également désactiver tous les périphériques inutilisés et les options de démarrage ,Par exempleUSBGuide, Pour réduire la surface d'attaque .

Ne l'ignorez pas.BIOSOuUEFIMise à jour de, Assurez - vous qu'il est mis à jour . Il est aussi important que les mises à jour régulières du système d'exploitation .

En outre,Voir《NSA Guide de sécurité du matériel et du firmware pour [12]》

BootloaderMot de passe

Le chargeur de démarrage s'exécute au début du processus de démarrage , Et est responsable du chargement du système d'exploitation . Il est très important de le protéger ,Sinon, Il pourrait être altéré .Par exemple, Un attaquant local peut utiliser init=/bin/bash Facile à obtenir en tant que paramètre du noyau root shell, Cette commande indique au noyau d'exécuter /bin/bashAu lieu deinitSystème. Vous pouvez empêcher cela en définissant un mot de passe pour le chargeur de démarrage . Il ne suffit pas de définir le mot de passe du Bootstrapper pour le protéger complètement . Vous devez également configurer le démarrage vérifié comme suit .

Grub:

PourGRUBDéfinir le mot de passe,S'il vous plaît.:

grub-mkpasswd-pbkdf2

Saisissez votre mot de passe, Ce mot de passe va générer une chaîne .Ça ressemblerait à“ grub.pbkdf2.sha512.10000.C4009... “ .Création/etc/grub.d/40_passwordEt ajouter:​​​​​​​

set superusers="$username"
password_pbkdf2 $username $password

Avecgrub-mkpasswd-pbkdf2 Substitution de chaînes générée “ $ password”.“ $ username” Sera utilisé pour être autorisé à utiliser GRUBLigne de commande, Modifier les éléments du menu et les superutilisateurs qui exécutent n'importe quel élément du menu .Pour la plupart des gens,C'est juste...“root”.

Reconstruire votre profil ,GRUB Sera maintenant protégé par mot de passe .

Pour limiter l'édition des paramètres de démarrage et l'accès à GRUBConsole, Vous permet encore de démarrer ,Veuillez Modifier /boot/grub/grub.cfgEt dans “menuentry '$OSName' ”Ajouter à côté“ --unrestricted”Paramètres.

menuentry 'Arch Linux' --unrestricted

Vous devrez reconstruire le profil à nouveau pour appliquer ce changement .

Syslinux:

Syslinux Vous pouvez définir le mot de passe principal ou le mot de passe du menu . Le mot de passe principal est nécessaire pour démarrer n'importe quelle entrée , Pour démarrer une entrée spécifique, seul le mot de passe du menu est nécessaire .

PourSyslinuxDéfinir le mot de passe principal,Veuillez Modifier/boot/syslinux/syslinux.cfgEt ajouter:

MENU MASTER PASSWD $password

Pour définir le mot de passe du menu ,Veuillez Modifier/boot/syslinux/syslinux.cfg, Et dans l'étiquette avec l'article que vous voulez protéger par mot de passe ,Ajouter:

MENU PASSWD $password

Oui.“$password” Remplacer par le mot de passe que vous souhaitez définir .

Ces mots de passe peuvent être en texte simple ,Peut également être utiliséMD5,SHA-1,SHA-256OuSHA-512Hacher. Il est recommandé d'utiliser d'abord un algorithme de hachage fort (Par exempleSHA-256OuSHA-512) Hacher le mot de passe , .Pour éviter de les stocker en texte clair .

systemd-boot:

systemd-boot Avec des options pour empêcher l'édition des paramètres du noyau au démarrage .Inloader.confDans le document,Ajouter:

editor no

systemd-boot .La protection des mots de passe de l'éditeur de paramètres du noyau n'est pas officiellement prise en charge ,Mais vous pouvez utilisersystemd-boot-passwordPour réaliser.

Vérifier le démarrage

Les bootstraps validés sont validés par mot de passe pour assurer l'intégrité de la chaîne de bootstraps et du système de base . Ceci peut être utilisé pour s'assurer qu'un attaquant physique ne peut pas modifier le logiciel sur l'appareil .

Sans un démarrage validé , Une fois l'accès physique obtenu , Toutes les précautions ci - dessus peuvent être facilement contournées . Le guidage éprouvé n'est pas seulement pour la sécurité physique, comme beaucoup le pensent . Il peut également être utilisé pour empêcher la persistance de logiciels malveillants à distance —— Si l'attaquant parvient à détruire l'ensemble du système et obtient des privilèges élevés , Le démarrage validé restaurera ses modifications après le redémarrage , Et s'assurer qu'ils ne durent pas .

Les implémentations de démarrage les plus courantes qui ont été validées sont UEFIGuide de sécurité, Mais ce n'est pas une mise en œuvre complète en soi , Parce qu'il ne valide que le chargeur de démarrage et le noyau , Cela signifie qu'il est possible de :

SeulementUEFI Il n'y a pas de racine de confiance immuable pour un démarrage sûr , Ainsi, un attaquant physique peut encore rafraîchir le firmware de l'appareil .Pour atténuer cette situation,Veuillez utiliser en combinaisonUEFI Démarrage sûr et Intel Boot GuardOuAMD Secure Boot.

Attaquant distant( Ou un attaquant physique qui n'utilise pas le chiffrement ) Toute autre partie privilégiée du système d'exploitation peut être simplement modifiée .Par exemple, S'ils ont le privilège de modifier le noyau , Alors ils peuvent aussi changer /sbin/init Pour obtenir les mêmes résultats efficacement .Donc,, Vérifier uniquement le noyau et le chargeur de démarrage n'aura aucun effet sur les attaquants distants .Pour atténuer cette situation,Vous devez utiliserdm-verity Vérifier le système d'exploitation de base , Malgré la tradition Linux Mise en page de la distribution , C'est très difficile et maladroit .

En général, C'est dur dans la tradition. Linux Implémenter une implémentation de démarrage fiable et éprouvée sur .

USBs

USB L'appareil fournit une surface d'attaque importante pour les attaques physiques .Par exempleBadUSBEtStuxnet Est un exemple de ce genre d'attaque . Les meilleures pratiques interdisent toutes les nouvelles connexions USB Et n'inscrire que les appareils de confiance sur la liste blanche ,USBGuardC'est très utile..

Vous pouvez égalementnousb Utilisé comme paramètre de démarrage du noyau , Pour désactiver tout dans le noyau USBSoutien.C'est bon.sysctlParamètreskernel.deny_new_usb=1

DMAAttaque

Accès direct à la mémoire(DMA) L'attaque implique un accès complet à toute la mémoire du système en insérant certains appareils physiques . Ceci peut être fait en contrôlant la zone mémoire accessible par l'appareil IOMMU Ou ajouter des modules du noyau particulièrement vulnérables à la liste noire pour atténuer .

Pour activerIOMMU, Veuillez définir les paramètres de démarrage du noyau suivants :

intel_iommu=on amd_iommu=on

Vous n'avez besoin que de CPU Le fabricant active cette option , Mais il n'y a aucun problème à activer les deux options en même temps .

efi=disable_early_pci_dma

En désactivant tous les PCI Sur le pont busmasterBits, Cette option corrige ce qui précède IOMMUVulnérabilité dans[13].

En outre,ThunderboltEtFireWire Généralement vulnérable DMAAttaque. Pour les désactiver , Veuillez mettre ces modules du noyau sur la liste noire :

install firewire-core /bin/false
install thunderbolt /bin/false

Attaque à froid

Quand l'attaquant efface RAM Lors de l'analyse des données dans , Il y aura une attaque de démarrage à froid .Utiliser moderneRAMHeure, Les attaques à froid ne sont pas très pratiques ,Parce queRAM Généralement effacé en quelques secondes ou minutes , À moins qu'il ne soit mis dans le liquide de refroidissement ( Comme l'azote liquide ou le congélateur )Moyenne. .L'attaquant doit mettre RAM Retirer la tige et l'exposer à l'azote liquide , Et assurez - vous que l'utilisateur ne remarque pas .

Si une attaque à froid fait partie du modèle de menace , Protégez votre ordinateur quelques minutes après l'arrêt , Pour vous assurer que personne n'a accès à votre RAMLa clé de mémoire.Vous pouvez égalementRAM La barre est soudée au tableau principal , Pour le rendre plus difficile à coincer . Si vous utilisez un ordinateur portable , Veuillez retirer la batterie. , Ensuite, l'électricité est fournie directement par le câble de charge . Débranchez le câble après l'arrêt ,Pour s'assurer queRAM Perte totale de puissance inaccessible .

Dans la section paramètres de démarrage de l'auto - protection du noyau , L'option mémoire zéro au ralenti écrasera les données sensibles en mémoire avec zéro .En outre, Un distributeur de mémoire amélioré est disponible via CONFIG_ZERO_ON_FREE L'option de configuration efface les données sensibles de la mémoire tas de l'espace Utilisateur .Malgré tout, Certaines données peuvent encore être conservées en mémoire .

En outre, Le noyau moderne comprend également des mesures d'atténuation des attaques de Réinitialisation , Cette commande commande commande au firmware d'effacer les données à l'arrêt , Bien que cela nécessite le support du firmware .

Assurez - vous que l'ordinateur est éteint normalement , Afin que les mesures d'atténuation ci - dessus puissent commencer .

Si aucun des éléments ci - dessus ne s'applique à votre modèle de menace , Peut être mis en œuvre Tails Processus d'effacement de mémoire pour , Ce processus effacera la plus grande partie de la mémoire ( À l'exception de la mémoire vidéo ), Et s'est avéré efficace .

Vingt - deux.、Meilleures pratiques

Une fois que le système a été renforcé autant que possible , Les bonnes pratiques en matière de protection de la vie privée et de sécurité devraient être respectées :

Désactiver ou supprimer ce qui n'est pas nécessaire pour minimiser la surface d'attaque .

Tenir à jour.ConfigurationcronMission ouinit Script pour mettre à jour le système tous les jours .

Ne divulguez aucune information sur vous ou votre système , Peu importe sa petitesse .

Suivez les conseils habituels en matière de sécurité et de protection des renseignements personnels [14]

Malgré le renforcement , Mais vous devez vous rappeler Linux Toujours un système d'exploitation défectueux , Aucune amélioration ne peut le réparer complètement .

Vingt - trois.、Autres lignes directrices

Vous devriez faire autant de recherches que possible , Sans compter sur une seule source d'information . L'un des plus grands problèmes de sécurité est l'utilisateur . Voici des liens vers d'autres guides que je trouve utiles :

  • https://wiki.archlinux.org/index.php/Security

  • https://www.whonix.org/wiki/Documentation

  • https://apps.nsa.gov/iaarchive/library/ia-guidance/security-configuration/operating-systems/guide-to-the-secure-configuration-of-red-hat-enterprise.cfm

  • https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings

  • https://github.com/a13xp0p0v/kconfig-hardened-check/

Vingt - quatre.、Terminologie

Vous devrez peut - être reconstruire GRUBConfiguration, Pour appliquer certaines modifications apportées au chargeur de démarrage . Entre les différentes distributions , Les étapes de cette opération peuvent parfois varier .Par exemple,Dans des domaines tels queArch LinuxDans une distribution comme celle - ci, Le Profil doit être régénéré en exécutant la commande suivante :

grub-mkconfig -o $path_to_grub_config

“$path_to_grub_config” Selon la façon dont vous configurez le système .C'est généralement/boot/grub/grub.cfgOu/boot/EFI/grub/grub.cfg, Mais avant d'exécuter cette commande , Assurez - vous d'être correct .

En plus,InDebianOuUbuntuEt sur la distribution, Vous devez exécuter la commande suivante :

update-grub

Vingt - cinq.、Oui.Force

InLinuxDans le noyau,“ rootPrivilèges” Divisé en différentes capacités (capabilities). Ceci est utile dans l'application du principe du moindre privilège —— Vous ne pouvez leur accorder qu'un sous - ensemble spécifique , Au lieu d'accorder le processus en général rootPrivilèges.Par exemple, Si le programme n'a besoin que de définir l'heure du système ,Il suffit deCAP_SYS_TIMEAu lieu derootToutes les capacités. Cela limiterait les dommages possibles ,Mais, Vous devez encore accorder les pouvoirs avec prudence ,Parce que de toute façon, Bon nombre de ces capacités peuvent être utilisées à mauvais escient pour obtenir l'intégralité rootPrivilèges.

Liens connexes:

  1. https://github.com/Whonix/security-misc/blob/master/lib/systemd/system/hide-hardware-info.service

  2. https://www.whonix.org/wiki/Hardened-kernel

  3. https://gitlab.com/apparmor/apparmor/-/wikis/Documentation

  4. https://madaidans-insecurities.github.io/linux.html#firejail

  5. https://www.freedesktop.org/software/systemd/man/systemd.exec.html

  6. https://www.whonix.org/wiki/KVM#Why_Use_KVM_Over_VirtualBox.3F

  7. https://www.whonix.org/wiki/Hardened_Malloc

  8. https://lists.llvm.org/pipermail/cfe-dev/2020-April/065221.html

  9. https://wiki.archlinux.org/index.php/Iptables

  10. https://linux.die.net/man/8/iptables

  11. https://chromium.googlesource.com/chromiumos/docs/+/master/security/noexec_shell_scripts.md

  12. https://github.com/nsacyber/Hardware-and-Firmware-Security-Guidance

  13. https://mjg59.dreamwidth.org/54433.html

  14. https://madaidans-insecurities.github.io/security-privacy-advice.html

Copyright:Cet article est[Wespten]Établi,Veuillez apporter le lien original pour réimprimer,remercier。 https://fra.fheadline.com/2022/205/202207240142560815.html