Sécurité - GNU/Linux et logiciels libres

Mes autres pages "sécurité"

Infos

Malwares et exploits

Actualité

Blogs

Apache

Authentification

Emails sécurisés

Failles critiques

20160114 - Vulnérabilité au niveau du noyau Linux

CVE-2016-4484 : vulnérabilité au niveau de Cryptsetup (shell-scripts qui gèrent les partitions encryptées au format LUKS) - article des chercheurs, dracut serait également vulnérable, article fr, article angl
CVE-2016-0728 : cette vulnérabilité - à patcher - existerait depuis 2012, et impacterait les distribs GNU/Linux (à partir de la version 3.8 du noyau Linux) et 66% des appareils sous Android.

201501 - GHOST (glibc)

Infos : découverte de la faille et explications, article

Buffer overflow dans la fonction __nss_hostname_digits_dots() de la librairie GNU glibc, fonction appelée par les fonctions de la famille gethostbyname(). Cette faille affecte les distributions GNU/Linux utilisant glibc-2.2 à glibc-2.17.

Mesures à prendre

  • Un patch est sorti en 2013 => installer glibc 2.18 ou ultérieure.

201411 - Failles SSLv3 (OpenSSL) - POODLE, etc.

Articles : en français ici, , et ...

Infos et versions d'OpenSSL patchées

Mesures à prendre

201409 - Shellshock (shell Bash)

Article

201404 - Heartbleed (OpenSSL)

Articles : angl

Infos et versions patchées

Outils

sslh - permet d'avoir plusieurs services (SSH, HTTPS, etc.) sur le port 443

Outils logiciels de sécurité

Audit : vérifier son propre ordinateur comme si on était un intrus : vérifier le réseau, les ports, les services, les processus, les fichiers et le noyau Linux ; et supprimer ce qui n'est pas nécessaire (services, etc.).

Ensuite, utiliser des outils d'audit

Anti-virus & contrôle des emails

  • Doc Ubuntu
  • ClamAV - (wikipédia fr | angl).
    • Clamtk : interface graphique pour ClamAV.
    • Désinfection d'un PC équipé de Windows : démarrer sur un LiveCD GNU/Linux, exécuter Clam et effectuer un test du disque dur.
  • ClamWin - wikipedia (Windows) -- performant en recherche de virus dans les fichiers et emails mais pas de protection temps réel
  • Comodo antivirus pour Linux

Firewall

Isolation

namespace : pam_namespace (RHEL 5, 6, etc.), SELinux sandbox (RHEL 6, etc.), SystemD (Fedora 17).

Container et cgroups

chroot

IDS (Intrusion Detection Software) et IPS (Intrusion Prevention Software)

  • Snort (IDS & IPS)
  • Prelude : Security Information Management (SIM) universel
    • interfaces à Prelude : Piwi, Prewikka
  • Recherche dans les logs d'activité suspecte
    • Sagan
  • FAM (File Alteration Monitor / pister les fichiers modifiés), FIM (File Integrity Monitoring)
  • Détection de rootkit

Sécurité multi-niveaux

Renforcer la sécurité au niveau authentification

  • Fail2ban : analyse les fichiers de log, et - en ajoutant des règles au pare-feu - bannit les adresses IP des ordinateurs qui échouent un certain nombre de fois au niveau authentification.

Renforcer la sécurité au sein du s.e. GNU/Linux

Sécuriser le boot

Sécurité au niveau mémoire

Sécuriser le noyau Linux

KernelHardening

/etc/sysctl.d   (Ubuntu)

  • 10-kernel-hardening.conf
  • après modif, exécuter service procps start (ou : invoke-rc.d procps start)

sysctl.conf

Renforcement de la sécurité au niveau des privilèges et des applications

Comparaison AppArmor-SELinux

Sécurité au niveau des exécutables

  • Capabilities - au lieu de se voir attribuer tous les privilèges (par le set-user-ID-root), un exécutable peut se voir attribuer des privilèges spécifiques (le noyau Linux 3.2 en a 36)
  • ExecutableBit
    • A partir de la version 10.10, Ubuntu n'autorise plus d'exécuter des programmes Windows dans Wine (ce n'était pas le cas jusqu'en Ubuntu 10.04).

Sécuriser l'ordinateur

Avec des mots de passe robustes

Outils

Sécuriser

Sécuriser ses mots de passe avec un logiciel (Infos fr Ubuntu)

Sécuriser ses données au niveau disque, ou au niveau partition/volume

Sécuriser ses données au niveau partition/volume, ou au niveau fichier

Sécuriser l'effacement de données (fichier, partition, disque dur)

Sécuriser les fichiers ramenés d'Internet

Shell & terminal sécurisé

Mosh (Mobile shell)

Terminal interactif, qui peut remplacer un terminal SSH.
Freeware pour GNU/Linux, BSD, macOS, Solaris, Android, Chrome, et iOS.

Shellinabox (Web-based SSH)

Installable sur les distribs Debian, RHEL, et dérivées. Utilisable avec nginx.
Tuto install, config, et utilisation

SSH

Authentification par login et password ou certificat.

  • Clé et certificat
  • Connexion sécurisée
    • ssh une_adresse_IP
  • Debug
    • ssh -v -2 une_adresse_IP
  • Port forwarding (permet de s'adresser à machine_distante:port_distant au travers du port local)
    • ssh -L port_local:machine_distante:port_distant
    • Ce tunnel peut être également réalisé par un logiciel tiers, Putty, etc.
  • Protection
    • Dévalider le login SSH des utilisateurs, ou de root (en ajoutant "PermitRootLogin no" dans /etc/ssh/ssh_config ou dans /etc/ssh/sshd_config)
    • Le programme python denyhosts permet de blacklister automatiquement les adresses IP qui effectuent une attaque brute SSH (tentative de se logguer par essais successifs de mdp) en ajoutant ces adresses IP dans le fichier /etc/hosts.deny
  • Transfert sécurisé : sftp (SSH File Transfer Protocol), scp
    • ex : sftp -P num_du_port  login@url.com, sftp -o Port=num_du_port  login:mdp@url.com, etc.

OpenSSL

OpenSSL est une librairie, utilisée par les logiciels serveurs (Apache, etc.)

Liens

Quelques commandes

  • $ openssl version -a ; lsof | egrep "libssl|crypto"   (version d'OpenSSL, et des libs utilisées)
  • $ for i in $(lsof | awk '/openssl/ { print $1 }' | sort | uniq) ; do chkconfig --list | grep $i | awk '{ print $1 }' ; done
  • $ netstat -atulp | grep https  (pour voir port(s) à l'écoute)
  • $ lsof -iTCP:https ; lsof -i TCP:443
Test de connexion
  • $ openssl version ; openssl s_client -connect le_hostname:port -tls1   (ou ssl3, ou rien, etc.)

Protocoles TLS et SSL

TLS : à utiliser, la version 1.2 est à préférer, car c'est la version la plus récente et la plus sécurisée
Guide TLS (serveur et client)

SSL : ne plus l'utiliser.

VPN

WireGuard : multi-plate-formes

Quelques commandes

CPU et BIOS - vérification de la fonctionnalité NX

  • # /usr/bin/check-bios-nx --verbose
    • retourne 0 si CPU et BIOS ok
    • retourne 1 si CPU ok mais NX désactivé au niveau BIOS.
    • NX (No-eXecute) permet d'interdire l'exécution de code dans certaines zones mémoire.

GNU/Linux

  • $ sudo
  • $ id un_utilisateur
  • $ groups un_utilisateur
  • $ getent passwd
  • $ getent group ; getent group un_utilisateur
  • Vérif. des groupes dont fait partie un utilisateur
    • # for i in `groups un_utilisateur | awk -F: '{print $2}'` ; do getent group | grep "^$i" ; done
    • $ getent initgroups un_utilisateur | tr -s ' ' | cut -d ' ' -f2- | xargs getent group   (Ubuntu)

Config GNU/Linux

/etc/nsswitch.conf
/etc/default/nss

Root, su, sudo, gksudo

Passer root ou exécuter une commande avec les droits root (pour administrer le s.e. il est nécessaire d'être administrateur).

Commandes su, gksudo et sudo

Le compte root est verrouillé par défaut. Pour le déverrouiller (et pour pouvoir utiliser la "recovery console" du menu grub) : sudo passwd root

Alternatives au déverrouillage du compte root
  • su : permet de changer d'utilisateur ou de passer root (utiliser sudo est préférable)
    • doc Ubuntu :: su | root
    • pour pouvoir devenir root avec su, il faut avoir défini un mot de passe pour root ($ sudo passwd root)
    • utiliser le signe - pour devenir root avec son environnement (PATH, etc.) :
      • $ su -
    • exécuter une commande en tant que root
      • $ su -c commande
        • $ su -c nautilus
        • $ su -c "fdisk -l"
        • $ su utilisateur –c commande
  • gksudo : permet d'exécuter une application en tant que root (le mot de passe est demandé dans une fenêtre)
  • sudo : permet d'exécuter une application en tant que root ou autre utilisateur
    • Config : se fait par la commande visudo, qui édite /etc/sudoers.
    • Doc
    • Exemples
      • $ sudo fdisk -l
      • $ sudo nautilus
      • $ sudo –u utilisateur commande
    • Si plusieurs commandes sont à exécuter, deux solutions pour éviter de taper sudo devant chaque commande :
      • $ sudo -s
      • $ sudo -i
      • $ sudo bash
    • Attention
      • Utiliser : "ssh -t le_hostname sudo la_commande"   (car, sans l'option -t, le mot de passe passe en clair dans le réseau)

Pour utiliser nautilus avec les droits root, 2 solutions :

  • installer nautilus-gksu, ce qui créera une nouvelle entrée "Ouvrir en tant qu'administrateur" dans le menu contextuel.
  • ou créer le shell-script nautilus-root suivant dans "~/.gnome2/nautilus-scripts" et lui donner les droits d'exécution, ensuite click-droit dans toute fenêtre nautilus et exécuter ce script
    • #!/bin/bash
      # nautilus-root --- ouvre un nautilus en root.
      gksudo -u root -k -m "Exécuter un nautilus en root" "nautilus --no-desktop $NAUTILUS_SCRIPT_CURRENT_URI"

Pb de connexion à distance ?

=> vérifier :

  • par les commandes
    • $ netstat -anp
    • $ iptables -L -v
  • le fichier
    • /etc/hosts.deny
  • si ça ne vient pas de SELinux

Parano, vie privée

Analyser les communications des services par tcpdump

Empêcher certaines communications par iptables

Arrêter les services (démons) inutiles et empêcher leur démarrage automatique

Certains services sont démarrés par les scripts du dossier init.d

Vérif
  • # for i in `ls -1 /etc/init.d`; do service $i status ; done
  • # service slapd status
Pour les désactiver :
  • # chkconfig --del le_service
  • ou, par le GUI : System Settings > Server settings > Services
  • netstat -ntulp   (vérification)
Autre moyen, par ex, pour OpenLDAP
  1. $ sudo invoke-rc.d slapd stop
  2. $ sudo update-rc.d -f slapd remove  (enlève les liens /etc/rcx.d/xxxslapd vers /etc/init.d/slapd)

D'autres sont démarrés à la demande par xinetd

Pour les désactiver :
  1. sous /etc/xinetd.d, configurer "disable = yes" dans le fichier de config du service
  2. # /etc/rc.d/init.d/xinetd reload
  3. netstat -ntulp   (vérification)

Ports

Configuration réseau

IPv6
  • /etc/sysctl.d/10-ipv6-privacy.conf   (Ubuntu)
  • après modif, exécuter service procps start (ou : invoke-rc.d procps start)
Activer le "Reverse Path Filtering" (Filtrage de Chemin inverse) par ce petit script-shell, vu ici :
  • #/bin/bash
    for i in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 2 > $i done

Se protéger du spoofing

  • /etc/sysctl.d/10-network-security.conf
    • net.ipv4.conf.default.rp_filter=1   (vérification de l'adresse source)
      net.ipv4.conf.all.rp_filter=1

Se protéger des attaques par inondation SYN (SYN-flood, TCP-SYN)

Se protéger des dénis de service

Assurer un accès à distance (via ssh) quel que soit l'état du trafic

Vie privée, sécurité - configuration

Chercher dans la fenêtre de recherche de ce site-ci : "vie privée" (ou privacy)

Distributions GNU/Linux - sécuriser

Recommandations de l'ANSSI (gouv.fr) concernant la sécurité des machines sous GNU/Linux (PDF de fév. 2019)

Arch

Debian, doc fr Debian

Fedora 22, etc.

Red Hat
SUSE

Ubuntu

Vic
Page modifiée le 13 avril 2023

Page d'accueil du site