GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Un guide ultime pour sécuriser l'hôte Ubuntu

Ubuntu est qualifié de système d'exploitation hautement sécurisé disponible, mais il présente des défauts dans son installation par défaut, comme tous les autres systèmes d'exploitation. Pour supprimer ces faiblesses, le spécialiste de la sécurité informatique a publié des directives pour lutter contre les portes dérobées/faiblesses de votre système et vous protéger de certains des exploits courants d'Ubuntu. Dans ce guide, nous examinerons quelques paramètres de sécurité importants que chaque administrateur système souhaite appliquer sur son serveur.

1. Renforcer les paramètres de démarrage

Pour empêcher les utilisateurs non root de modifier le fichier de configuration du chargeur de démarrage qui est /boot/grub/grub.cfg, définissez les propriétaires et les groupes de ce fichier sur root. Exécutez la commande suivante pour changer la propriété en root.

# chown root:root /boot/grub/grub.cfg

Pour empêcher les utilisateurs non root de lire les paramètres de démarrage, définissez l'autorisation pour le fichier du chargeur de démarrage sur lecture et écriture uniquement. Exécutez la commande suivante pour atteindre ce benchmark.

# chmod og-rwx /boot/grub/grub.cfg

Définissez également un mot de passe pour le chargeur de démarrage, de sorte que tout utilisateur non autorisé essayant de redémarrer le système doive fournir un mot de passe pour passer à l'étape suivante. Cela garantit qu'un utilisateur non autorisé ne pourra pas modifier le paramètre de démarrage, comme désactiver SELinux ou modifier la partition de démarrage. Exécutez la commande suivante pour créer un mot de passe de chargeur de démarrage.

# grub-mkpasswd-pbkdf2

Créez maintenant un nouveau fichier nommé /etc/grub.d/00_header et ajoutez les lignes suivantes.

set superusers=""
password_pbkdf2

Supprimez l'option --unrestricted dans le paramètre CLASS du fichier /etc/grub.d/10_linux . Cela garantit une exigence de mot de passe obligatoire pour passer à l'étape suivante, c'est-à-dire la modification des paramètres de démarrage.

Mettre à jour le grub

# update-grub

2. Système de fichiers sécurisé

Créez des partitions basées sur différentes catégories telles que les données des utilisateurs dans la partition /home, les fichiers d'échange dans la partition /swap, les fichiers temporaires dans la partition /tmp, les fichiers de configuration système dans la partition /etc, les fichiers de périphérique dans la partition /dev, etc. ainsi que des options de montage flexibles basées sur l'utilisation prévue des données.

2.1 Créer une partition pour /tmp

La première raison de créer une partition séparée pour /tmp est qu'il y a des risques d'épuisement des ressources puisque le répertoire /tmp est accessible en écriture par tout le monde. Créer une partition séparée pour /temp permet également de définir l'option noexec la marquant comme inutile pour un utilisateur non autorisé d'exécuter du code et de créer un lien physique vers le programme setuid du système.

2.2 Définir l'option nodev pour /tmp

Définissez l'option nodev pour la partition /tmp pour empêcher les utilisateurs de créer un fichier de périphérique bloc/caractère. Modifiez le fichier /etc/fstab et ajoutez la ligne suivante.

# mount -o remount,nodev /tmp

2.3 Définir l'option nosuid pour /tmp

Pour empêcher les utilisateurs de créer des fichiers d'ID utilisateur définis dans le système de fichiers /tmp, ajoutez la ligne suivante dans /etc/fstab puisque /tmp file-system est utilisé pour le stockage de fichiers temporaires.

# mount -o remount,nosuid /tmp

2.4 Définir l'option noexec pour /tmp

Pour empêcher les utilisateurs d'exécuter des fichiers binaires exécutables, définissez l'option noexec pour la partition /tmp. Ajoutez la ligne suivante dans /etc/fstab pour bloquer l'exécution des binaires exécutables.

# mount -o remount,noexec /tmp

2.5 Créer une partition séparée pour /var

Les démons systèmes et autres services stockent temporairement des données dynamiques dans /var avec certains répertoires pouvant être accessibles en écriture par tout le monde. Par conséquent, il y a des chances d'épuisement des ressources dans /var. Pour éviter l'épuisement des ressources dans /var, créez une partition séparée pour /var dans la nouvelle installation et pour le système précédemment installé, utilisez LVM pour créer une nouvelle partition.

2.6 Lier /var/tmp à /tmp

Le montage contraignant de /var/tmp sur /tmp permettra à /var/tmp d'être protégé de la même manière que /tmp est protégé. Cela empêchera également /var d'épuiser la mémoire dans /var/tmp avec des fichiers temporaires. Exécutez la commande suivante pour lier /tmp et /var/tmp

# sudo mount --bind /tmp /var/tmp

Pour le rendre permanent, ajoutez la ligne suivante dans /etc/fstab

# /tmp /var/tmp none bind 0 0

2.7 Créer une partition séparée pour /var/log

Pour protéger les données d'audit sensibles et la protection contre l'épuisement des ressources, créez une partition distincte pour /var/log dans la nouvelle installation et pour le système précédemment installé, utilisez LVM pour créer une nouvelle partition.

2.8 Créer une partition séparée pour /var/log/audit

Le démon d'audit stocke les données du journal dans le répertoire /var/log/audit. Pour vous protéger contre l'épuisement des ressources car le journal d'audit peut atteindre une taille importante et également pour protéger les données d'audit sensibles, créez une partition distincte pour /var/log/audit dans la nouvelle installation et pour le système précédemment installé, utilisez LVM pour créer une nouvelle partition.

2.9 Créer une partition séparée pour /home

Les données des utilisateurs sont stockées dans le répertoire /home. Il est possible de restreindre le type de fichiers pouvant être stockés dans /home. Pour ce faire, créez une partition séparée pour /home dans la nouvelle installation et pour le système précédemment installé, utilisez LVM pour créer une nouvelle partition. Également une partition séparée pour /home protège contre l'épuisement des ressources.

2.10 Définir nodev pour /home

Pour éviter que le répertoire /home ne soit utilisé pour définir un caractère et bloquer un périphérique spécial, définissez l'option nodev afin que les utilisateurs ne puissent pas créer ces types de fichiers. Modifiez le fichier /etc/fstab et ajoutez-y les lignes suivantes.

# mount -o remount, nodev /home

2.11 Définir nodev pour les supports amovibles

Un utilisateur peut tromper les contrôles de sécurité en utilisant un caractère et bloquer un périphérique spécial à partir d'un support amovible pour accéder à des fichiers de périphérique sensibles tels que /dev/kmem. Modifiez le fichier /etc/fstab et ajoutez-y les lignes suivantes.

# mount -o remount, nodev { removable device like floppy or cdrom or USB stick etc. }

2.12 Définir noexec sur un support amovible

Pour empêcher l'exécution de programmes à partir d'un support amovible afin qu'aucun programme malveillant ne puisse être placé dans le système, ajoutez les lignes suivantes dans /etc/fstab

# mount -o remount,noexec { removable device like floppy or cdrom or USB stick etc. }

2.13 Ajouter nosuid au support amovible

Pour empêcher que le support amovible soit utilisé comme setuid/setgid, ce qui permet aux utilisateurs non root de placer des programmes privilégiés dans le système. Modifiez /etc/fstab et ajoutez-y les lignes suivantes

# mount -o remount,nosuid { removable device like floppy or cdrom or USB stick etc. }

2.14 Ajouter l'option nodev pour la partition /run/shm

Pour empêcher les utilisateurs de créer des fichiers de périphérique spéciaux dans les partitions /run/shm, ajoutez la ligne suivante dans /etc/fstab. Cela garantit que les utilisateurs ne pourront pas créer d'appareils dans /run/shm

# mount -o remount,nodev /run/shm

2.15 Ajouter l'option nosuid à la partition /run/shm

Pour empêcher que /run/shm soit utilisé comme setuid/setgid, cela permet aux utilisateurs non root de placer des programmes privilégiés dans le système. Les utilisateurs peuvent exécuter le programme avec leurs propres uid et gid. Modifiez /etc/fstab et ajoutez-y les lignes suivantes

# mount -o remount,nosuid /run/shm

2.16 Ajouter noexec à la partition /run/shm

Pour empêcher l'utilisation de la partition /run/shm pour l'exécution de programmes, ajoutez les lignes suivantes dans /etc/fstab

# mount -o remount, noexec /run/shm

2.17 Définir le sticky bit sur les répertoires inscriptibles du monde

Pour empêcher les utilisateurs de supprimer ou de renommer des fichiers de ce répertoire qui ne leur appartiennent pas, activez le sticky bit.

# chmod +t /tmp
or
# chmod 1777 /tmp

3. Supprimer les anciens systèmes

N'installez/n'utilisez pas les services et utilitaires hérités suivants car il existe des vulnérabilités dans ces systèmes/utilitaires. Ce sont - NIS , serveur/client RSH , serveur/client de conversation , Telenet, TFTP, XINETD, Chargen, Daytime, echo, jeter, temps

4. Ignorer les services à usage spécial

N'installez/n'utilisez pas les services suivants car ces services présentent des vulnérabilités. Ceux-ci sont-
Système X Window, serveur d'impression Avahi Server, serveur DHCP, LDAP, NFS et RPC, serveur DNS, FTP, Samba, SNMP, Rsync, BIOSDEVNAME. Peu des services ci-dessus sont en effet nécessaires pour le fonctionnement quotidien comme le serveur DNS. Dans cette situation, il est conseillé d'installer ces serveurs dans un hôte séparé qui ne contient aucune donnée sensible.

5. Configuration réseau et pare-feu

5.1 Désactiver le transfert IP

Pour éviter que le serveur ne soit utilisé pour transférer des paquets, c'est-à-dire pour agir comme un routeur, définissez le paramètre net.ipv4.ip_forward sur 0 dans /etc/sysctl.conf

net.ipv4.ip_forward = 0

Maintenant, rechargez la configuration sysctl

# sudo sysctl -p

5.2 Désactiver la redirection sendpacket

Un utilisateur non autorisé peut utiliser un hôte compromis en envoyant des paquets de redirection ICMP vers un autre périphérique de routage pour corrompre le routage. Pour désactiver la redirection des paquets, définissez les paramètres net.ipv4.conf.all.send_redirects et net.ipv4.conf.default.send_redirects sur 0 dans /etc/sysctl.conf

# net.ipv4.conf.all.send_redirects = 0

# net.ipv4.conf.default.send_redirects =0

Maintenant, rechargez la configuration sysctl

# sudo sysctl -p

5.3 Désactiver l'acceptation des paquets de la route source

À l'aide de paquets routés par la source, un utilisateur peut accéder à l'adresse privée du système puisque la route peut être spécifiée.
Définissez les paramètres net.ipv4.conf.all.accept_source_route et net.ipv4.conf.default.accept_source_route sur 0 dans /etc/sysctl.conf

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

Maintenant, rechargez la configuration sysctl

# sudo sysctl -p

5.4 Désactiver l'acceptation de la redirection ICMP

Un utilisateur peut modifier la table de routage pour envoyer des paquets vers des réseaux incorrects à l'aide d'une fausse redirection ICMP, permettant ainsi aux paquets d'être capturés. Pour désactiver l'acceptation de redirection ICMP, définissez les paramètres net.ipv4.conf.all.accept_redirects et net.ipv4.conf.default.accept_redirects sur 0 dans /etc/sysctl.conf

# net.ipv4.conf.all.accept_redirects = 0
# net.ipv4.conf.default.accept_redirects parameters = 0

Maintenant, rechargez la configuration sysctl

# sudo sysctl -p

5.5 Désactiver l'acceptation de la redirection ICMP sécurisée

Les redirections ICMP sécurisées et les redirections ICMP sont presque identiques, la seule différence étant que la source des paquets de redirections ICMP sécurisées est une passerelle. Si la passerelle source est compromise, un utilisateur peut mettre à jour la table de routage à l'aide de redirections ICMP sécurisées.
Définissez les paramètres net.ipv4.conf.all.secure_redirects et net.ipv4.conf.default.secure_redirects sur 0 dans /etc/sysctl.conf pour désactiver l'acceptation de redirection ICMP sécurisée.

net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.default.secure_redirects=0

Maintenant, rechargez la configuration sysctl

# sudo sysctl -p

5.6 Consigner les paquets suspects

Un administrateur peut diagnostiquer le système lorsqu'un attaquant envoie des paquets usurpés.

Définissez les paramètres net.ipv4.conf.all.log_martians et net.ipv4.conf.default.log_martians sur 1 dans /etc/sysctl.conf pour éviter cela.

# net.ipv4.conf.all.log_martians=1

# net.ipv4.conf.default.log_martians=1

Maintenant, rechargez la configuration sysctl

# sudo sysctl -p

5.7 Activer Ignorer la demande de diffusion

Pour empêcher l'attaque smurf dans un réseau, définissez net.ipv4.icmp_echo_ignore_broadcasts sur 1, ce qui permettra au système d'ignorer toutes les demandes d'écho et d'horodatage ICMP aux adresses de diffusion et de multidiffusion. Définissez le paramètre net.ipv4.icmp_echo_ignore_broadcasts sur 1 dans /etc/sysctl.conf

# net.ipv4.icmp_echo_ignore_broadcasts=1

Maintenant, rechargez la configuration sysctl

# sudo sysctl -p

5.8 Activer la protection contre les messages d'erreur erronés

Pour empêcher l'attaquant d'envoyer des réponses qui violent la RFC-1122 dans une tentative d'insérer des fichiers journaux système avec des messages d'erreur inutiles. Définissez le paramètre net.ipv4.icmp_ignore_bogus_error_responses sur 1 dans /etc/sysctl.conf pour bloquer les fausses réponses d'erreur.

# net.ipv4.icmp_ignore_bogus_error_responses=1

Maintenant, rechargez la configuration sysctl

# sudo sysctl -p

5.9 Activer la validation de la route source recommandée par RFC

En utilisant le filtrage de chemin inverse, le noyau peut déterminer si le paquet est valide, sinon il abandonnera le paquet.
Définissez les paramètres net.ipv4.conf.all.rp_filter et net.ipv4.conf.default.rp_filter sur 1 dans /etc/sysctl.conf

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

Maintenant, rechargez la configuration sysctl

# sudo sysctl -p

5.10 Activer les cookies TCP SYN

Un attaquant peut lancer une attaque DOS dans le serveur en inondant les paquets SYN sans initialiser la poignée de main à trois voies. Pour éviter cela, définissez le paramètre net.ipv4.tcp_syncookies sur 1 dans /etc/sysctl.conf

# net.ipv4.tcp_syncookies=1

Maintenant, rechargez la configuration sysctl

# sudo sysctl -p

5.10 Désactiver l'annonce du routeur IPv6

Activez le serveur pour qu'il n'accepte pas les annonces de routeur, car cela peut entraîner le routage du trafic vers des systèmes compromis.
Définissez les paramètres net.ipv6.conf.all.accept_ra et net.ipv6.conf.default.accept_ra sur 0 dans /etc/sysctl.conf

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

Maintenant, rechargez la configuration sysctl

# sudo sysctl -p

5.12 ​​Désactiver l'acceptation de la redirection IPv6

Activez le serveur pour qu'il n'accepte pas les annonces de routeur, car cela peut entraîner le routage du trafic vers des systèmes compromis. Il est recommandé de définir des routes matérielles dans le système pour protéger le système des mauvaises routes.

Définissez les paramètres net.ipv6.conf.all.accept_redirects et net.ipv6.conf.default.accept_redirects sur 0 dans /etc/sysctl.conf

# net.ipv6.conf.all.accept_redirects=0
# net.ipv6.conf.default.accept_redirects=0

Maintenant, rechargez la configuration sysctl

# sudo sysctl -p

5.13 Désactiver IPv6

Pour réduire la probabilité d'attaque dans le système, désactivez IPv6
Editez le fichier /etc/sysctl.conf et ajoutez les lignes suivantes :

# net.ipv6.conf.all.disable_ipv6=1
# net.ipv6.conf.default.disable_ipv6=1
# net.ipv6.conf.lo.disable_ipv6=1

Maintenant, rechargez la configuration sysctl

# sudo sysctl -p

5.14 Installer les wrappers TCP

Utilisez des wrappers TCP pour tous les services prenant en charge les wrappers TCP.

Installer tcpd :

# apt-get install tcpd

5.15 Créer /etc/hosts.allow

Pour vous assurer que seuls les systèmes autorisés peuvent se connecter au serveur, utilisez /etc/hosts.allow
Modifiez /etc/hosts.allow et ajoutez ce qui suit

"ALL: <net>/<mask>, <net>/<mask>, …"
e.g <net> = 192.168.10.100 , <mask> = 255.255.255.0

5.16 Vérifiez les autorisations sur /etc/hosts.allow

Il est important de protéger /etc/hosts.allow des accès en écriture non autorisés. Exécutez la commande suivante pour trouver l'autorisation de /etc/hosts.allow

# ls -l /etc/hosts.allow

-rw-r--r-- 1 racine racine 2055 15 février 11:30 /etc/hosts.allow

Si l'autorisation est incorrecte, utilisez la commande suivante pour la corriger

#chmod 644 /etc/hosts.allow

5.17 Créer /etc/host à refuser

Refuser l'accès au serveur en utilisant /etc/hosts.deny . Le fichier /etc/hosts.deny est configuré pour refuser

tous les hôtes qui ne sont pas mentionnés dans /etc/hosts.allow. Créez le fichier /etc/hosts.deny

echo "TOUS :TOUS">> /etc/hosts.deny

5.18 Vérifier les autorisations sur /etc/hosts.deny

Il est important de protéger /etc/hosts.deny des accès en écriture non autorisés. Exécutez la commande suivante pour trouver l'autorisation de /etc/hosts.deny

# ls -l /etc/hosts.deny
-rw-r--r-- 1 root root 2055 Feb 15 11:30 /etc/hosts.deny

5.19 Assurez-vous que le pare-feu est actif

Pour limiter la communication entrante et sortante de la boîte à une adresse IP et un port spécifiques, utilisez un pare-feu. Ubuntu fournit un pare-feu non compliqué (UFW) pour configurer facilement la configuration du pare-feu.
Installer UFW

# sudo apt-get install ufw

Activer ufw :

# sudo ufw enable

Exemple:
Autoriser les services SSH et http.

# sudo ufw allow TCP/80
# sudo ufw allow TCP/22
# sudo ufw reload

6. Journalisation et audit

En utilisant un cadre d'audit puissant, le système peut suivre de nombreux types d'événements pour surveiller et auditer le système.
Installez auditd à l'aide de la commande suivante

sudo apt-get install auditd audispd-plugins

Si nécessaire, créez des liens de démarrage appropriés pour auditd dans /etc/rc*.d en exécutant la commande suivante à partir de chacun des répertoires concernés :

# ln -s /etc/init.d/auditd S37auditd

Des liens de démarrage doivent être créés pour les niveaux d'exécution

6.1 Configurer la taille de stockage du journal d'audit

La taille du fichier journal d'audit doit être choisie avec soin afin qu'elle n'affecte pas le système et qu'aucune donnée d'audit ne soit perdue.
Définissez le paramètre max_log_file dans /etc/audit/auditd.conf

max_log_file = <MB>

6.2 Désactiver le système lorsque le journal d'audit est plein

Le démon auditd peut être configuré pour arrêter le système lorsque les journaux d'audit sont pleins. Effectuez les opérations suivantes pour déterminer si auditd est configuré pour avertir l'administrateur et arrêter le système lorsque les journaux d'audit sont pleins.

space_left_action = email
action_mail_acct = root
admin_space_left_action = halt

6.3 Conserver toutes les informations d'audit

Dans les contextes de haute sécurité, les avantages du maintien d'un long historique d'audit dépassent le coût de stockage de l'historique d'audit. Ajoutez la ligne suivante au fichier /etc/audit/auditd.conf.

max_log_file_action = keep_logs

6.4 Enregistrer les événements qui modifient les informations de date et d'heure

Pour surveiller les changements inhabituels de la date et/ou de l'heure du système qui indiquent une activité non autorisée sur le système.
Pour les systèmes 64 bits, ajoutez les lignes suivantes au fichier /etc/audit/audit.rules.

-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time-change
-a always,exit -F arch=b32 -S adjtimex -S settimeofday -S stime -k time-change
-a always,exit -F arch=b64 -S clock_settime -k time-change
-a always,exit -F arch=b32 -S clock_settime -k time-change -w /etc/localtime -p wa -k time-change

# Exécutez la commande suivante pour redémarrer auditd

# sudo service auditd restart

Pour les systèmes 32 bits, ajoutez les lignes suivantes au fichier /etc/audit/audit.rules.

-a always,exit -F arch=b32 -S adjtimex -S settimeofday -S stime -k time-change
-a always,exit -F arch=b32 -S clock_settime -k time-change -w /etc/localtime -p wa -k time-change

# Exécutez la commande suivante pour redémarrer auditd

# sudo service auditd restart

6.6 Enregistrer les événements qui modifient les informations de l'utilisateur/du groupe

Des modifications inattendues apportées à /etc/group, /etc/passwd, /etc/gshadow, /etc/shadow, /etc/security/opasswd indiquent clairement qu'un utilisateur non autorisé tente de cacher ses activités ou de compromettre des comptes supplémentaires.
Ajoutez les lignes suivantes au fichier /etc/audit/audit.rules.

-w /etc/group -p wa -k identity
-w /etc/passwd -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/security/opasswd -p wa -k identity

# Exécutez la commande suivante pour redémarrer auditd

# sudo service auditd restart

6.7 Enregistrer les événements qui modifient l'environnement réseau du système

Pour empêcher les modifications non autorisées de l'hôte et du nom de domaine d'un système de casser les paramètres de sécurité définis en fonction de ces noms, ajoutez les lignes suivantes dans /etc/audit/audit.rules
Pour les systèmes 64 bits, ajoutez les lignes suivantes au fichier /etc/audit/audit.rules.

-a exit,always -F arch=b64 -S sethostname -S setdomainname -k system-locale
-a exit,always -F arch=b32 -S sethostname -S setdomainname -k system-locale
-w /etc/issue -p wa -k system-locale -w /etc/issue.net -p wa -k system-locale
-w /etc/hosts -p wa -k system-locale -w /etc/network -p wa -k system-locale

# Exécutez la commande suivante pour redémarrer auditd

# sudo service auditd restart

Pour les systèmes 32 bits, ajoutez les lignes suivantes au fichier /etc/audit/audit.rules.

-a exit,always -F arch=b32 -S sethostname -S setdomainname -k system-locale
-w /etc/issue -p wa -k system-locale -w /etc/issue.net -p wa -k system-locale
-w /etc/hosts -p wa -k system-locale -w /etc/network -p wa -k system-locale

# Exécutez la commande suivante pour redémarrer auditd

# sudo service auditd restart

6.8 Enregistrer les événements qui modifient les contrôles d'accès obligatoires du système

Toute modification des fichiers dans /etc/selinux indique qu'un utilisateur non autorisé tente de modifier les contrôles d'accès et de modifier les contextes de sécurité pour accéder au système.
Ajoutez les lignes suivantes à /etc/audit/audit.rules

-w /etc/selinux/ -p wa -k MAC-policy

# Exécutez la commande suivante pour redémarrer auditd

# sudo service auditd restart

6.9 Collecter les événements de connexion et de déconnexion

Pour surveiller les informations relatives aux attaques de connexion/déconnexion/brute force, ajoutez les lignes suivantes au fichier /etc/audit/audit.rules.

-w /var/log/faillog -p wa -k logins
-w /var/log/lastlog -p wa -k logins
-w /var/log/tallylog -p wa -k logins

# Exécutez la commande suivante pour redémarrer auditd

# sudo service auditd restart

6.10 Collecter les informations d'ouverture de session

Surveiller les événements d'initiation de session. Un administrateur système peut surveiller les connexions se produisant à des heures inhabituelles, ce qui pourrait indiquer une activité non autorisée.
Ajoutez les lignes suivantes au fichier /etc/audit/audit.rules.

-w /var/run/utmp -p wa -k session
-w /var/log/wtmp -p wa -k session
-w /var/log/btmp -p wa -k session

# Exécutez la commande suivante pour redémarrer auditd

# sudo service auditd restart

6.11 Collecter les événements de modification d'autorisation de contrôle d'accès discrétionnaire

Trouvez les changements dans les attributs de fichier qui sont une indication de l'activité de l'intrus.
Pour les systèmes 64 bits, ajoutez les lignes suivantes au fichier /etc/audit/audit.rules.

-a always,exit -F arch=b64 -S chmod -S fchmod -S fchmodat -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chmod -S fchmod -S fchmodat -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b64 -S chown -S fchown -S fchownat -S lchown -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chown -S fchown -S fchownat -S lchown -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b64 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=500 -F auid!=4294967295 -k perm_mod

# Exécutez la commande suivante pour redémarrer auditd

# redémarrage de l'audit du service sudo

Pour les systèmes 32 bits, ajoutez les lignes suivantes au fichier /etc/audit/audit.rules.

-a always,exit -F arch=b32 -S chmod -S fchmod -S fchmodat -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chown -S fchown -S fchownat -S lchown -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=500 -F auid!=4294967295 -k perm_mod

# Exécutez la commande suivante pour redémarrer auditd

# sudo service auditd restart

6.12 Collecter les tentatives d'accès non autorisées infructueuses aux fichiers

Trouvez les tentatives infructueuses d'ouverture, de création ou de troncature de fichiers pour obtenir un accès non autorisé au système.
Pour les systèmes 64 bits, ajoutez les lignes suivantes au fichier /etc/audit/audit.rules.

-a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=500 -F auid!=4294967295 -k access

# Exécutez la commande suivante pour redémarrer auditd

# sudo service auditd restart

Pour les systèmes 32 bits, ajoutez les lignes suivantes au fichier /etc/audit/audit.rules.

-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=500 -F auid!=4294967295 -k access

# Exécutez la commande suivante pour redémarrer auditd

# sudo service auditd restart

6.13 Collecter l'utilisation des commandes privilégiées

Découvrez s'il existe des utilisations de commandes privilégiées par des utilisateurs non privilégiés pour accéder au système. Exécutez d'abord la commande suivante, puis ajoutez la sortie de la commande suivante au fichier /etc/audit/audit.rules

# find PART -xdev \( -perm -4000 -o -perm -2000 \) -type f | awk '{print \ "-a always,exit -F path=" $1 " -F perm=x -F auid>=500 -F auid!=4294967295 \ -k privileged" }'

6.14 Collecter les montages de système de fichiers ayant échoué

Pour suivre le montage des systèmes de fichiers par un utilisateur non privilégié, ajoutez les règles suivantes dans le fichier /etc/audit/audit.rules
Pour les systèmes 64 bits, ajoutez les lignes suivantes au fichier /etc/audit/audit.rules.

-a always,exit -F arch=b64 -S mount -F auid>=500 -F auid!=4294967295 -k mounts
-a always,exit -F arch=b32 -S mount -F auid>=500 -F auid!=4294967295 -k mounts

# Exécutez la commande suivante pour redémarrer auditd

# sudo service auditd restart

Pour les systèmes 32 bits, ajoutez les lignes suivantes au fichier /etc/audit/audit.rules.

-a always,exit -F arch=b32 -S mount -F auid>=500 -F auid!=4294967295 -k mounts

# Exécutez la commande suivante pour redémarrer auditd

# sudo service auditd restart

6.15 Collecter les événements de suppression de fichiers par utilisateur

Pour savoir si une suppression de fichiers et d'attributs de fichier associés à des fichiers protégés est en cours, ajoutez les règles suivantes.
Pour les systèmes 64 bits, ajoutez ce qui suit au fichier /etc/audit/audit.rules.

-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete
-a always,exit -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete

Exécutez la commande suivante pour redémarrer auditd

# sudo service auditd restart

Pour les systèmes 32 bits, ajoutez ce qui suit au fichier /etc/audit/audit.rules.

-a always,exit -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete

# Exécutez la commande suivante pour redémarrer auditd

# sudo service auditd restart

6.16 Collecter les modifications apportées à l'étendue de l'administration système

Des modifications dans le fichier /etc/sudoers peuvent indiquer qu'une modification non autorisée a été apportée à la portée de l'activité de l'administrateur système.

Ajoutez les lignes suivantes au fichier /etc/audit/audit.rules.

-w /etc/sudoers -p wa -k scope

# Exécutez la commande suivante pour redémarrer auditd

# sudo service auditd restart

6.17 Collecter les actions de l'administrateur système (sudolog)

Pour empêcher les utilisateurs non autorisés d'utiliser la commande privilégiée, vérifiez si des modifications ont lieu dans /var/log/sudo.log.
Ajoutez les lignes suivantes au fichier /etc/audit/audit.rules.

-w /var/log/sudo.log -p wa -k actions

Redémarrez auditd

# sudo service auditd restart

6.18 Chargement et déchargement du module de collecte du noyau

Pour savoir si un utilisateur non autorisé utilise insmod, rmmod et modprobe et compromet ainsi la sécurité du système, ajoutez les lignes suivantes au fichier /etc/audit/audit.rules.

-w /sbin/insmod -p x -k modules
-w /sbin/rmmod -p x -k modules
-w /sbin/modprobe -p x -k modules

Pour les systèmes 32 bits, ajoutez

-a always,exit -F arch=b32 -S init_module -S delete_module -k modules

Pour les systèmes 64 bits, ajoutez

-a always,exit -F arch=b64 -S init_module -S delete_module -k modules

Redémarrez auditd

# sudo service auditd restart

6.19 Rendre la configuration d'audit immuable

Pour empêcher les utilisateurs non autorisés d'apporter des modifications au système d'audit afin de masquer leur activité malveillante, puis de rétablir les règles d'audit, ajoutez les lignes suivantes au

fichier /etc/audit/audit.rules.

-e 2

Il doit s'agir de la dernière ligne du fichier /etc/audit/audit.rules
Redémarrez auditd

# sudo service auditd restart

7. Accès au système, authentification et autorisation

7.1 Définir le propriétaire et l'autorisation de l'utilisateur/du groupe sur cron

Exécutez les commandes suivantes pour restreindre l'accès en lecture/écriture et recherche à l'utilisateur et aux groupes root, empêchant les utilisateurs normaux d'accéder à ces fichiers/répertoires.

# chown root:root /etc/crontab
# chmod og-rwx /etc/crontab
# chown root:root /etc/cron.hourly
# chmod og-rwx /etc/cron.hourly
# chown root:root /etc/cron.daily
# chmod og-rwx /etc/cron.daily
# chown root:root /etc/cron.weekly
# chmod og-rwx /etc/cron.weekly
# chown root:root /etc/cron.monthly
# chmod og-rwx /etc/cron.monthly
# chown root:root /etc/cron.d
# chmod og-rwx /etc/cron.d

7.2 Configurer PAM

PAM (Pluggable Authentication Modules) est un service qui implémente des modules d'authentification modulaires sur les systèmes UNIX. PAM doit être soigneusement configuré pour sécuriser l'authentification du système.

7.2.1 Définir les paramètres d'exigence de création de mot de passe à l'aide de pam_cracklib

Le module pam_cracklib vérifie la force des mots de passe. Il effectue des vérifications telles que s'assurer qu'un mot de passe n'est pas un mot du dictionnaire, qu'il a une certaine longueur, qu'il contient un mélange de caractères (par exemple, alphabétique, numérique, autre) et plus encore.
Définissez les paramètres pam_cracklib.so comme suit dans /etc/pam.d/common-password

password required pam_cracklib.so retry=3 minlen=14 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1

7.2.2 Définir le verrouillage pour les tentatives de mot de passe infructueuses

Verrouillage des utilisateurs après des tentatives de connexion consécutives infructueuses pour empêcher les attaques par mot de passe par force brute contre vos systèmes.
Modifiez le fichier /etc/pam.d/login et ajoutez la ligne auth ci-dessous :

auth required pam_tally2.so onerr=fail audit silent deny=5 unlock_time=900

7.2.3 Limiter la réutilisation du mot de passe

Forcer les utilisateurs à ne pas réutiliser leurs 5 derniers mots de passe rend moins probable qu'un attaquant puisse deviner le mot de passe. Définissez le paramètre pam_unix.so Remember sur 5 dans /etc/pam.d/common-password

password sufficient pam_unix.so remember=5

8. Configurer SSH

Modifiez le fichier /etc/ssh/sshd_config pour définir le paramètre suivant comme suit afin de le sécuriser.

Protocol 2
LogLevel INFO
X11Forwarding no
MaxAuthTries 4
IgnoreRhosts yes
HostbasedAuthentication no
PermitRootLogin no
PermitEmptyPasswords no
PermitUserEnvironment no
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
ClientAliveInterval 300
ClientAliveCountMax 0
AllowUsers <userlist>
AllowGroups <grouplist>
DenyUsers <userlist>
DenyGroups <grouplist>
Banner <your bannerfile>

9. Restrict Access to the su Command

Use sudo instead of su as it provides a better logging out and audit mechanism. The another motivation for using sudo is to restrict the uses of su. Uncomment the pam_wheel.so line in /etc/pam.d/su, so that su command will be available to users in the wheel group to execute su.

# grep pam_wheel.so /etc/pam.d/su
auth required pam_wheel.so use_uid
# grep wheel /etc/group
wheel:x:10:root, <user list>.....

10. User Accounts and Environment

10.1 Set Password Expiration Days

Reduce the maximum age of a password.

Set the PASS_MAX_DAYS parameter to 120 in /etc/login.defs

PASS_MAX_DAYS 60

Modify active user parameters to match:

# chage --maxdays 120 <user>

10.2 Set Password Change Minimum Number of Days

To prevent the user from changing their password until a minimum no of days have passed since the user changed the password. Set the PASS_MIN_DAYS parameter to 7 in /etc/login.defs

PASS_MIN_DAYS 7

Modify active user parameters to match:
# chage --mindays 7

10.3 Set Password Expiring Warning Days

The administrator can notify the users about the expiry of their password using ASS_WARN_AGE parameter in /etc/login.defs.

Set the PASS_WARN_AGE parameter to 7 in /etc/login.defs

PASS_WARN_AGE  7

Modify active user parameters to match

# chage --warndays 7 <user>

11. System Accounts

11.1 Disable System Accounts

To prevent the system account from being used to get an interactive shell, append “/usr/sbin/nologin” at the end of each system accounts in /etc/passwd

11.2 Set Default

umask for Users
Set umask of 022 will make files readable by every user on the system.
Edit the /etc/login.defs file and add the following line

UMASK 022

11.3 Lock Inactive User Accounts

To make the system more secure, execute the following command to lock the inactive accounts.

# useradd -D -f 35

11.4 Remove OS Information from Login Warning Banners

To prevent the OS and patch level information from login banners, edit the /etc/motd, /etc/issue and /etc/issue.net files and remove any lines containing \m, \r, \s or \v.

12. Verify System File Permissions

12.1 Verify Permissions on /etc/passwd, /etc/shadow, /etc/group

These file needs to be protected from unauthorized changes by non-privileged users as well as needs to be readable as this information is used by non-privileged programs.
Execute the following commands to correct the permissions for these files

# chmod 644 /etc/passwd
# chmod o-rwx,g-rw /etc/shadow
# chmod 644 /etc/group

12.2 Verify User/Group Ownership on /etc/passwd, /etc/shadow, /etc/group

These file needs to be protected from unauthorized changes by non-privileged users as well as needs to be readable as this information is used by non-privileged programs.
Execute the following commands to correct the ownership for these files

# chown root:root /etc/passwd
# chown root:shadow /etc/shadow
# chown root:root /etc/group

13. Check for rootkits

There are few tools available through which you can check for rootkit in the server. The two popular rootkit hunters are RKHunte and CHKRootKit, use anyone of them periodically to check for rootkit in the system

Install chkrootkit

# sudo apt-get install chkrootkit

To run chkrootkit, execute the following command in the terminal

# chkrootkit

14. PSAD IDS/IPS

To detect the intrusion in your network, you can use toos like snort or cipherdyne's psad. The later has the capability of intrusion detection and log analysis with iptables. PSAD is a lightweight system daemons that analyze the iptables log message to detect scans and other spurious traffic.

Install PSAD

#sudo apt-get install psad

Now configure psad to detect scans, Intrusion Detection and Intrusion Prevention

15. Prevent IP Spoofing

Add following lines in /etc/host.conf to prevent IP spoofing

order bind,hosts
nospoof on

16. Enabling automatic security updates

It is highly recommended to enable automatic security updates and patches to keep the system secure. You will be notified every time you logged in to the system using SSH about security updates and patches. In Ubuntu Desktop, to enable automatic security updates, click on "System" select "Administration" and then "Software Sources" menu. Now select the "Internet Updates" and enable "Check for updates automatically" specifying daily". If Ubuntu issues a new security release then you will be notified via the "Update Manager" icon in the system tray. You can use unattended-upgrades which can handle automatic installation of security upgrades in Ubuntu system. Running sudo unattended-upgrade will install all the security package available for upgrade.

Install this package if it isn't already installed using

# sudo apt-get install unattended-upgrades

To enable it type

# sudo dpkg-reconfigure unattended-upgrades

and select "yes".

17. Harden PHP

Edit the php.ini file /etc/php5/apache2/php.ini and add uncomment/add following lines.

safe_mode = On

safe_mode_gid = On

disable_functions = hp_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace, tmpfile, link, ignore_user_abord, shell_exec, dl, set_time_limit, exec,

system, highlight_file, source, show_source, fpaththru, virtual, posix_ctermid, posix_getcwd, posix_getegid, posix_geteuid, posix_getgid, posix_getgrgid,

posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, posix, _getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit,

posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times,

posix_ttyname, posix_uname, proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, phpinfo

register_globals = Off

expose_php = Off

display_errors = Off

track_errors = Off

html_errors = Off

magic_quotes_gpc = Off

mail.add_x_header = Off

session.name = NEWSESSID

allow_url_fopen = Off

allow_url_include = Off

session.save_path = A secured location in the server

18. Harden Apache

Edit Apache2 configuration security file /etc/apache2/conf-available/security.conf and add the following-

ServerTokens Prod

ServerSignature Off

TraceEnable Off

Header unset ETag

FileETag None

The web application firewall ModSecurity is effective way to protect web server so that it's much less vulnerable to probes/scans and attacks. First install mod_security using following command.

# sudo apt-get install libapache2-mod-security2

# mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

Edit /etc/modsecurity/modsecurity.conf

Activate the rules by editing the SecRuleEngine option and set to On and modify your server signature

SecRuleEngine On

SecServerSignature FreeOSHTTP

Now edit the following to increase the request limit to 16 MB

SecRequestBodyLimit 16384000

SecRequestBodyInMemoryLimit 16384000

Download and install the latest OWASP ModSecurity Core Rule Set from their website.

# wget https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/master.zip

# unzip master.zip

# cp -r owasp-modsecurity-crs-master/* /etc/modsecurity/

# mv /etc/modsecurity/modsecurity_crs_10_setup.conf.example /etc/modsecurity/modsecurity_crs_10_setup.conf

# ls /etc/modsecurity/base_rules | xargs -I {} ln -s /etc/modsecurity/base_rules/{} /etc/modsecurity/activated_rules/{}

# ls /etc/modsecurity/optional_rules | xargs -I {} ln -s /etc/modsecurity/optional_rules/{} /etc/modsecurity/activated_rules/{}

Now add the following line in /etc/apache2/mods-available/mod-security.conf

Include "/etc/modsecurity/activated_rules/*.conf"

Check if the modules has been loaded-

# sudo a2enmod headers

# sudo a2enmod mod-security

Now restart Apache2

# service apache2 restart

Apart from ModSecurity, install modevasive to protect your server from DDOS (Denial of Service) attacks

Once you've hardened the system, run some vulnerability scans and penetration tests against it in order to check that it's actually rock solid as you're now expecting it. However attack on your server can happen, it is up-to you to scan the log files regularly to find out any breaches have been occurred. You can use log analyzer tool like ELK stack to drill through servers log files quickly. If you find evidences of breaches then quickly disconnect your server from the internet and take remedial measures.


Ubuntu
  1. Comment Linux gère-t-il plusieurs séparateurs de chemins consécutifs (/home////nom d'utilisateur///fichier) ?

  2. Debian – Déplacer /var, /home vers une partition séparée ?

  3. Comment systemd-tmpfiles nettoie /tmp/ ou /var/tmp (remplacement de tmpwatch) dans CentOS / RHEL 7

  4. Quand dois-je utiliser /dev/shm/ et quand dois-je utiliser /tmp/?

  5. Pourquoi mettre des choses autres que /home sur une partition séparée ?

Guide Ubuntu 20.04

Guide Ubuntu 22.04

Guide d'installation du bureau Ubuntu 15.10

Comment libérer de l'espace dans la partition /boot sur Ubuntu Linux ?

Comment remonter une partition différente en tant que /home ?

Installer le serveur FOG sur le serveur Ubuntu - Guide ultime