Hardening

grsecurity

PaX

PaX est un ensemble de patchs pour renforcer le noyau en protégeant le système des dépassements de pile et de buffers. Il y a trois types de fonctionnalités :

  • Judicious enforcement of non-executable memory : cette fonction permet de sécuriser les processus contre l’exécution de codes arbitraires depuis la mémoire.
  • Address Space Layout Randomization (ASLR) : ajoute de l’aléatoire dans le mapping de la mémoire.
  • Miscellaneous hardening on stack- and memory handling : ajoute quelques fonctionnalités de renforcement de la sécurité.
Nom Option Description
PAGEEXEC P Le kernel va protéger les pages de mémoire non exécutable à l’aide d’instruction CPU
SEGMEXEC S Comme PAGEEXEC sauf que cette fonctionnalité utilisation les outils de segmentation du CPU (disponible uniquement sur x86)
EMUTRAMP E Permet d’émuler les trampolines (morceaux de code générés à la volé) pour les processus qui en ont besoin (comme les compilateurs JIT)
MPROTECT M Cette option empêche l’ajout de nouvelles pages exécutables dans un processus tournant
RANDMMAP R Ajoute de l’aléa dans l’attribution des adresses mémoires allouées par les requêtes mmap()
RANDUSTACK R Ajoute de l’aléa dans les adresses de la pile userland d’une tâche. Toutes les tâches ont une pile userland créée lors d’un execve(). Cette pile est indispensable puisqu’elle permet de passer les arguments et l’environnement au programme qui est exécuté

Les options présentés ci-dessus sont activables ou désactivables en fonction d’un binaire pour des raisons de compatibilité. Ces modifications se font à l’aide des commandes paxctl et paxctl-ng. Les options des processus en cours d’exécution sont visibles grâce à la commande pspax.

La commande paxtest blackhat permet de vérifier le bon fonctionnement de PaX.

Protection du système de fichier

Permet de limiter l’accès à /proc, la fonction chroot et le link des fichiers.

Idées supplémentaires

  1. Créer un compte admin et lui donner des droits restreint (appat)

  2. Chechker la conformité des packages rpmavec rpm -K, si elle ne renvoie pas OK, c’est que le pacquet a été altéré

  3. Configurer yum pour activer la vérification automatique de la signature GPG de chaque package installé

    /etc/yum.conf : gpgcheck=1

  4. Créer un password pour GRUB

  5. Désactiver le démarrage interactif de la machine (ce mode permet de démarrer un à un les service)

    /etc/sysconfig/init -> PROMPT=no

  6. Forcer l’utilisation de mot de passe fort avec le module pam_cracklib.so

  7. Bloquer compte inactif : /etc/pam.d/login -> auth required pam_lastlog.so inactive=10

  8. Désactiver connection directement avec le compte root via SSH

    /etc/ssh/sshd_config -> PermitRootLogin no

  9. Déconnecter automatiquement les comptes inactif (après un connection sur un autre compte par exemple)

    placer dans /etc/profile/profile.d un script contenant ceci :

     if [ "$EUID" = "0" ] || [ "$USER" = "root" ] ; then
         #Limite pour user root
         TMOUT=900
     else
         #Limite pour les autres
         TMOUT=3600
     fi
     #Place la variable TMOUT en read-only
     readonly TMOUT
     export TMOUT
    

    Et pour la session SSh modifier la variable CientAliveInterval dans le fichier /etc/ssh/ssh_config

  10. Eteindre certains services et les désactiver au boot

  11. Placer un script d’update dans la crontab

  12. dans /etc/profile/profile.d, ajouter un script contenant :

    umask 027

  13. Modification conf ssh :

    PermitRootLogin no PasswordAuthentification no

  14. Mettre un test en crontab de la dernière date de mise à jour via yum

Liens