🐧Linux
Fondamentaux
hostname
whoami
id
ifconfig
uname -a
uname -m
#chercher des exploits sur la version
searchsploit -w distrib
searchsploit -w kernel_version
#mots de passe stockéqs
cat /etc/passwd
#Tables ARP
arp -a
#config réseau
/sbin/ifconfig -a; cat /etc/network/interfaces; cat /etc/sysconfig/network; cat /etc/resolv.conf
#Variables d'environnement
cat /etc/profile; cat /etc/bashrc; cat ~/.bash_profile; cat ~/.bashrc; cat ~/.bash_logout; env; set
#historiques
history; cat ~/.bash_history; cat ~/.nano_history; cat ~/.atftp_history; cat ~/.mysql_history; cat ~/.php_history
#Chercher des fichiers de conf modifiables
find /etc/ -writable -type f 2>/dev/null
#Cherches les fichiers avec permissions SUID et GUID
find / -perm -g=s -o -perm -4000 ! -type l -maxdepth 6 -exec ls -ld {} \; 2>/dev/null
find / -perm -1000 -type d 2>/dev/null
find / -perm -g=s -type f 2>/dev/null
#Vérifier que l'OS accorde bien les priv par défauts à tous les utilisateurs authentifiés.
#UMASK doit avoir pour valeur 077 est ne doit pas être commenté.
#Si ce n'est pas le cas, un utilisateur pourrait accèder à des fichiers qui ne lui appartiennent pas.
grep -i "umask" /etc/login.defs
#Vérifier si le mot de passe est bien chiffré.
#Si le mot de passe de root ne commence pas par "password_pbkdf2", il s'agit d'une mauvaise config
grep -i password /boot/grub/grub.cfg
#Vérifier que l'OS ne détient pas d'UID's doublons pour les utilisateurs interactifs.
awk -F ":" 'list[$3]++{print $1, $3}' /etc/passwd
#Vérifier que le groupe "sudo" ne contienne que des utilisateurs légitimes
grep sudo /etc/group
#Vérifier qu'il y a bien un timeout d'activé pour déconnecter les sessions inactives.
grep -E "\bTMOUT=[0-9]+" /etc/bash.bashrc /etc/profile.d/*
#Vérifier si le package vlock est installé
dpkg -l | grep vlock
#Vérifier que l'OS force la durée de vie minimum d'un mot de passe à 24h.
#Le cas contraire peut permettre à un utilisateur de changer de mot de passe autant de fois qu'il veut.
#Ce qui peut leur permettre de contourner la politique de mot de passe et repasser à leur ancien mot de passe.
grep -i ^pass_min_days /etc/login.defs
#Vérifier si l'execution de programme est activé
#Ubuntu
dpkg -l | grep apparmor
systemctl is-active apparmor.service
réponse attendue: active
systemctl is-enabled apparmor.service
réponse attendue: enable
#RedHat, CentOS
sestatus
#Vérifier si le firewall est correctement configuré
ss -l46ut
ufw status
#Vérifier si les disques sont chiffrés
more /etc/crypttab
#Vérifier l'implémentation d'ASLR.
sysctl kernel.randomize_va_space
réponse attendue: kernel.randomize_va_space = 2
cat /proc/sys/kernel/randomize_va_space
réponse attendue: 2
#Vérifier la présence du package SSH
sudo dpkg -l | grep openssh
#Vérifier si le service sshd est actif et chargé
systemctl status sshd.service | egrep -i "(active|loaded)"
#Vérifier si X11Forwarding est activé dans les parametres SSH
grep -ir x11forwarding /etc/ssh/sshd_config* | grep -v "^#"
résponse attendue: X11Forwarding no
#Vérifier si des connexions inattendues ou automatiques au SSH sont possibles.
egrep -r '(Permit(.*?)(Passwords|Environment))' /etc/ssh/sshd_config
réponses attendues:
PermitEmptyPasswords no
PermitUserEnvironment no
#Vérifier le chiffrement SSH
grep -r 'Ciphers' /etc/ssh/sshd_config*
résponse attendue: Ciphers aes256-ctr,aes192-ctr ou aes128-ctr
grep -ir macs /etc/ssh/sshd_config*
réponse attendue: MACs hmac-sha2-512 ou hmac-sha2-256
#Vérifier si le timeout de session SSH est en dessous de 600 soit 10 minutes
sudo grep -ir clientalive /etc/ssh/sshd_config*
réponse attendue:
ClientAliveInterval 600
ClientAliveCountMax 1
#Vérifiez que les répertoires de bibliothèque à l échelle du système "/lib", "/lib64" et "/usr/lib" appartiennent au groupe root.
find /lib /usr/lib /lib64 ! -group root -type d -exec stat -c "%n %G" '{}' \;
#Vérifier si le null password est autorisé
grep nullok /etc/pam.d/common-password
#Vérifier si il y a des mdp vides dans /etc/shadow
awk -F: '!$2 {print $1}' /etc/shadow
#Vérifier la politique de rotation de mot de passe des utilisateurs
chage -l <username> | grep expires
#Vérifier que la réutilisation de mot de passe ne peut pas se faire avant aux moins 5 générations
grep -i remember /etc/pam.d/common-password
#Vérifier la politique de mots de passe
#Vérifier que la lib pwquality est installée
dpkg -l libpam-pwquality
#Vérifier que l'usage du package est bien activé
grep -i enforcing /etc/security/pwquality.conf
cat /etc/pam.d/common-password | grep requisite | grep pam_pwquality
réponse attendue: password requisite pam_pwquality.so retry=3
grep -i "lcredit" /etc/security/pwquality.conf
réponse attendue: lcredit=-1
grep -i "dcredit" /etc/security/pwquality.conf
réponse attendue: dcredit=-1
grep -i "ucredit" /etc/security/pwquality.conf
réponse attendue: credit=-1
grep -i "ocredit" /etc/security/pwquality.conf
réponse attendue: credit=-1
grep -i "difok" /etc/security/pwquality.conf
réponse attendue: difok=8
grep -i minlen /etc/security/pwquality.conf
réponse attendue: minlen=15
#Vérifier si la lib "cracklib" permettant d'empêcher l'usage de mots du dictionnaire dans les mdp est installée
grep dictcheck /etc/security/pwquality.conf
réponse attendue: dictcheck=1
#Vérifier que les logs system ne sont accessibles qu'aux utilisteurs du groupe "adm"
sudo stat -c "%n %G" /var/log/syslog
réponse attendue: /var/log/syslog adm
#Vérifier que l'accès aux fichiers de /var/log soit au mode 750 ou moins permissif
stat -c "%n %a" /var/log
#Vérifiez qu'il y ai un délai d'au moins 4 secondes entre l'invite de connexion et l'authentication failed
grep pam_faildelay /etc/pam.d/common-auth
#Vérifier que le dump du kernel soit désactivé
systemctl is-active kdump.service
#Vérifier que la connexion directe au compte root soit désactivé
passwd -S root
#Vérifier qu'il n'est pas possible de reboot le syteme avec Ctrl-Alt-Del
grep logout /etc/dconf/db/local.d/*
réponse attendue: logout=''Python sudoers
Escaping shells
Prise d'information de l'environnement
rbash:
rksh:
rzsh:
Ishell:
Techniques basiques
Path variable
Binary symlink
Capabilities
SUID
/usr/bin/cp
/usr/bin/doas
/usr/bin/find
/usr/bin/micro
/usr/bin/mawk
LD_Preload
NFS Root Squash
Shared Libraries
Services
MySQL
Docker
Cron
Overwrite du fichier
Overwrite du chemin
LinPEAS
LinuxSmartEnumeration
Lynis
Eviltree
Ressource
Mis à jour